Index: android_webview/browser/aw_safe_browsing_blocking_page.cc |
diff --git a/android_webview/browser/aw_safe_browsing_blocking_page.cc b/android_webview/browser/aw_safe_browsing_blocking_page.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..0e1b40a81ffef90ec56741b6ff9ed02381beede5 |
--- /dev/null |
+++ b/android_webview/browser/aw_safe_browsing_blocking_page.cc |
@@ -0,0 +1,73 @@ |
+// 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. |
+ |
+#include "android_webview/browser/aw_safe_browsing_blocking_page.h" |
+ |
+#include "android_webview/browser/aw_safe_browsing_ui_manager.h" |
+#include "components/security_interstitials/content/security_interstitial_controller_client.h" |
+#include "components/security_interstitials/content/unsafe_resource.h" |
+#include "components/security_interstitials/core/safe_browsing_error_ui.h" |
+#include "content/public/browser/interstitial_page.h" |
+#include "content/public/browser/navigation_entry.h" |
+#include "content/public/browser/web_contents.h" |
+ |
+using content::InterstitialPage; |
+using content::WebContents; |
+using security_interstitials::SafeBrowsingErrorUI; |
+using security_interstitials::SecurityInterstitialControllerClient; |
+ |
+namespace android_webview { |
+ |
+AwSafeBrowsingBlockingPage::AwSafeBrowsingBlockingPage( |
+ AwSafeBrowsingUIManager* ui_manager, |
+ WebContents* web_contents, |
+ const GURL& main_frame_url, |
+ const UnsafeResourceList& unsafe_resources, |
+ std::unique_ptr<SecurityInterstitialControllerClient> controller_client, |
+ const SafeBrowsingErrorUI::SBErrorDisplayOptions& display_options) |
+ : BaseBlockingPage(ui_manager, |
+ web_contents, |
+ main_frame_url, |
+ unsafe_resources, |
+ std::move(controller_client), |
+ display_options) {} |
+ |
+// static |
+void AwSafeBrowsingBlockingPage::ShowBlockingPage( |
+ AwSafeBrowsingUIManager* ui_manager, |
+ const UnsafeResource& unsafe_resource) { |
+ DVLOG(1) << __func__ << " " << unsafe_resource.url.spec(); |
+ WebContents* web_contents = unsafe_resource.web_contents_getter.Run(); |
+ |
+ if (InterstitialPage::GetInterstitialPage(web_contents) && |
+ unsafe_resource.is_subresource) { |
+ // This is an interstitial for a page's resource, let's queue it. |
+ UnsafeResourceMap* unsafe_resource_map = GetUnsafeResourcesMap(); |
+ (*unsafe_resource_map)[web_contents].push_back(unsafe_resource); |
+ } else { |
+ // There is no interstitial currently showing, or we are about to display a |
+ // new one for the main frame. If there is already an interstitial, showing |
+ // the new one will automatically hide the old one. |
+ content::NavigationEntry* entry = |
+ unsafe_resource.GetNavigationEntryForResource(); |
+ const UnsafeResourceList unsafe_resources{unsafe_resource}; |
+ SafeBrowsingErrorUI::SBErrorDisplayOptions display_options = |
+ SafeBrowsingErrorUI::SBErrorDisplayOptions( |
+ IsMainPageLoadBlocked(unsafe_resources), |
+ false, // kSafeBrowsingExtendedReportingOptInAllowed |
+ false, // is_off_the_record |
+ false, // is_extended_reporting |
+ false, // is_scout |
+ false, // kSafeBrowsingProceedAnywayDisabled |
+ true); // is_resource_cancellable |
+ AwSafeBrowsingBlockingPage* blocking_page = new AwSafeBrowsingBlockingPage( |
+ ui_manager, web_contents, entry ? entry->GetURL() : GURL(), |
+ unsafe_resources, |
+ CreateControllerClient(web_contents, unsafe_resources, ui_manager), |
+ display_options); |
+ blocking_page->Show(); |
+ } |
+} |
+ |
+} // namespace android_webview |