Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(343)

Unified Diff: components/safe_browsing/base_safe_browsing_blocking_page.h

Issue 2623733002: Componentize SafeBrowsingBlockingPage for WebView use (Closed)
Patch Set: Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: components/safe_browsing/base_safe_browsing_blocking_page.h
diff --git a/components/safe_browsing/base_safe_browsing_blocking_page.h b/components/safe_browsing/base_safe_browsing_blocking_page.h
new file mode 100644
index 0000000000000000000000000000000000000000..a94655a6f5b5593fc87f35727dafe1b9f0de959a
--- /dev/null
+++ b/components/safe_browsing/base_safe_browsing_blocking_page.h
@@ -0,0 +1,137 @@
+// 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.
+//
+// Base class for managing the SafeBrowsing interstitial pages.
+#ifndef COMPONENTS_SAFE_BROWSING_BASE_SAFE_BROWSING_BLOCKING_PAGE_H_
+#define COMPONENTS_SAFE_BROWSING_BASE_SAFE_BROWSING_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 {
+
+class BaseSafeBrowsingBlockingPage
+ : public security_interstitials::SecurityInterstitialPage {
+ public:
+ typedef security_interstitials::UnsafeResource UnsafeResource;
+ typedef security_interstitials::SafeBrowsingErrorUI SafeBrowsingErrorUI;
+ typedef std::vector<UnsafeResource> UnsafeResourceList;
+ typedef std::map<content::WebContents*, UnsafeResourceList> UnsafeResourceMap;
+
+ ~BaseSafeBrowsingBlockingPage() override;
+
+ // Creates a blocking page. Use ShowBlockingPage if you don't need to access
+ // the blocking page directly.
+ static BaseSafeBrowsingBlockingPage* CreateBlockingPage(
+ BaseSafeBrowsingUIManager* ui_manager,
+ content::WebContents* web_contents,
+ const GURL& main_frame_url,
+ const UnsafeResource& unsafe_resource);
+
+ // Shows a blocking page warning the user about phishing/malware for a
+ // specific resource.
+ // You can call this method several times, if an interstitial is already
+ // showing, the new one will be queued and displayed if the user decides
+ // to proceed on the currently showing interstitial.
+ static void ShowBlockingPage(BaseSafeBrowsingUIManager* 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 method:
+ void OnProceed() override;
+ void OnDontProceed() override;
+ void CommandReceived(const std::string& command) override;
+
+ protected:
+ // Don't instantiate this class directly, use ShowBlockingPage instead.
+ BaseSafeBrowsingBlockingPage(
+ BaseSafeBrowsingUIManager* ui_manager,
+ content::WebContents* web_contents,
+ const GURL& main_frame_url,
+ const UnsafeResourceList& unsafe_resources,
+ std::unique_ptr<
+ security_interstitials::SecurityInterstitialControllerClient>
+ controller_client,
+ 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. Overrided by SafeBrowsingBlockingPage class.
+ virtual void FinishThreatDetails(int64_t delay_ms,
+ 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);
+
+ static SafeBrowsingErrorUI::SBInterstitialReason GetInterstitialReason(
+ const UnsafeResourceList& unsafe_resources);
+
+ // For reporting back user actions.
+ BaseSafeBrowsingUIManager* ui_manager_;
+
+ // For displaying safe browsing interstitial.
+ std::unique_ptr<SafeBrowsingErrorUI> sb_error_ui_;
+
+ // The URL of the main frame that caused the warning.
+ GURL main_frame_url_;
+
+ // The index of a navigation entry that should be removed when DontProceed()
+ // is invoked, -1 if not entry should be removed.
Nate Fischer 2017/01/10 01:21:29 nit: might read better as "-1 if entry should not
Jialiu Lin 2017/01/10 01:54:29 Done.
+ int navigation_entry_index_to_remove_;
+
+ // The list of unsafe resources this page is warning about.
+ UnsafeResourceList unsafe_resources_;
+
+ 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);
+
+ static const SafeBrowsingErrorUI::SBErrorDisplayOptions
+ CreateDefaultDisplayOptions(const UnsafeResourceList& unsafe_resources);
+
+ DISALLOW_COPY_AND_ASSIGN(BaseSafeBrowsingBlockingPage);
+};
+
+} // namespace safe_browsing
+
+#endif // COMPONENTS_SAFE_BROWSING_BASE_SAFE_BROWSING_BLOCKING_PAGE_H_

Powered by Google App Engine
This is Rietveld 408576698