Index: components/safe_browsing/base_blocking_page.h |
diff --git a/components/safe_browsing/base_blocking_page.h b/components/safe_browsing/base_blocking_page.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..8fa238e7bce795aeeab2cd6215bf865f06c3833b |
--- /dev/null |
+++ b/components/safe_browsing/base_blocking_page.h |
@@ -0,0 +1,135 @@ |
+// Copyright 2017 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#ifndef COMPONENTS_SAFE_BROWSING_BASE_BLOCKING_PAGE_H_ |
+#define COMPONENTS_SAFE_BROWSING_BASE_BLOCKING_PAGE_H_ |
+ |
+#include <map> |
+#include <string> |
+#include <vector> |
+ |
+#include "base/macros.h" |
+#include "components/safe_browsing/base_ui_manager.h" |
+#include "components/security_interstitials/content/security_interstitial_page.h" |
+#include "components/security_interstitials/core/safe_browsing_error_ui.h" |
+#include "content/public/browser/interstitial_page_delegate.h" |
+#include "url/gurl.h" |
+ |
+namespace history { |
+class HistoryService; |
+} |
+ |
+namespace safe_browsing { |
+ |
+// Base class for managing the SafeBrowsing interstitial pages. |
+class BaseBlockingPage |
+ : public security_interstitials::SecurityInterstitialPage { |
+ public: |
+ typedef security_interstitials::UnsafeResource UnsafeResource; |
+ typedef security_interstitials::SafeBrowsingErrorUI SafeBrowsingErrorUI; |
+ typedef std::vector<UnsafeResource> UnsafeResourceList; |
+ typedef std::unordered_map<content::WebContents*, UnsafeResourceList> |
+ UnsafeResourceMap; |
+ |
+ ~BaseBlockingPage() override; |
+ |
+ static const SafeBrowsingErrorUI::SBErrorDisplayOptions |
+ CreateDefaultDisplayOptions(const UnsafeResourceList& unsafe_resources); |
+ |
+ // Shows a blocking page warning the user about phishing/malware for a |
+ // specific resource. |
+ // This can be called several times. If an interstitial is already showing |
+ // and the user decides to proceed, it will be discarded and a new one will be |
+ // displayed. |
+ static void ShowBlockingPage(BaseUIManager* ui_manager, |
+ const UnsafeResource& resource); |
+ |
+ // Returns true if the passed |unsafe_resources| is blocking the load of |
+ // the main page. |
+ static bool IsMainPageLoadBlocked(const UnsafeResourceList& unsafe_resources); |
+ |
+ // InterstitialPageDelegate methods: |
+ void OnProceed() override; |
+ void OnDontProceed() override; |
+ void CommandReceived(const std::string& command) override; |
+ |
+ protected: |
+ // Don't instantiate this class directly, use ShowBlockingPage instead. |
+ BaseBlockingPage( |
+ BaseUIManager* ui_manager, |
+ content::WebContents* web_contents, |
+ const GURL& main_frame_url, |
+ const UnsafeResourceList& unsafe_resources, |
+ std::unique_ptr< |
+ security_interstitials::SecurityInterstitialControllerClient> |
+ controller_client, |
+ const SafeBrowsingErrorUI::SBErrorDisplayOptions& display_options); |
+ |
+ // SecurityInterstitialPage methods: |
+ bool ShouldCreateNewNavigation() const override; |
+ void PopulateInterstitialStrings( |
+ base::DictionaryValue* load_time_data) override; |
+ |
+ // Called when the interstitial is going away. Intentionally do nothing in |
+ // this base class. |
+ virtual void FinishThreatDetails(const base::TimeDelta& delay, |
+ bool did_proceed, |
+ int num_visits); |
+ |
+ // A list of SafeBrowsingUIManager::UnsafeResource for a tab that the user |
+ // should be warned about. They are queued when displaying more than one |
+ // interstitial at a time. |
+ static UnsafeResourceMap* GetUnsafeResourcesMap(); |
+ |
+ static std::string GetMetricPrefix( |
+ const UnsafeResourceList& unsafe_resources, |
+ SafeBrowsingErrorUI::SBInterstitialReason interstitial_reason); |
+ |
+ static std::string GetExtraMetricsSuffix( |
+ const UnsafeResourceList& unsafe_resources); |
+ |
+ // Return the most severe interstitial reason from a list of unsafe resources. |
+ // Severity ranking: malware > UwS (harmful) > phishing. |
+ static SafeBrowsingErrorUI::SBInterstitialReason GetInterstitialReason( |
+ const UnsafeResourceList& unsafe_resources); |
+ |
+ BaseUIManager* ui_manager(); |
+ |
+ // The URL of the main frame that caused the warning. |
+ GURL main_frame_url_; |
meacer
2017/01/11 18:59:41
nit: Getters for these protected variables as well
Jialiu Lin
2017/01/11 20:13:29
Done.
|
+ |
+ // The index of a navigation entry that should be removed when DontProceed() |
+ // is invoked, -1 if entry should not be removed. |
+ const int navigation_entry_index_to_remove_; |
+ |
+ // The list of unsafe resources this page is warning about. |
+ UnsafeResourceList unsafe_resources_; |
+ |
+ // For displaying safe browsing interstitial. |
+ std::unique_ptr<SafeBrowsingErrorUI> sb_error_ui_; |
+ |
+ // Indicate whether user has proceeded this blocking page. |
+ bool proceeded_; |
+ |
+ // Which type of Safe Browsing interstitial this is. |
+ SafeBrowsingErrorUI::SBInterstitialReason interstitial_reason_; |
+ |
+ private: |
+ static std::unique_ptr< |
+ security_interstitials::SecurityInterstitialControllerClient> |
+ CreateControllerClient(content::WebContents* web_contents, |
+ const UnsafeResourceList& unsafe_resources, |
+ history::HistoryService* history_service, |
+ const std::string& app_locale, |
+ const GURL& default_safe_page); |
+ |
+ // For reporting back user actions. |
+ BaseUIManager* ui_manager_; |
+ |
+ DISALLOW_COPY_AND_ASSIGN(BaseBlockingPage); |
+}; |
+ |
+} // namespace safe_browsing |
+ |
+#endif // COMPONENTS_SAFE_BROWSING_BASE_BLOCKING_PAGE_H_ |