Index: chrome/browser/ssl/superfish_blocking_page.cc |
diff --git a/chrome/browser/ssl/superfish_blocking_page.cc b/chrome/browser/ssl/superfish_blocking_page.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..d03dd36e7b48049713690dd6dd51bd9e3b683e47 |
--- /dev/null |
+++ b/chrome/browser/ssl/superfish_blocking_page.cc |
@@ -0,0 +1,81 @@ |
+// 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 "chrome/browser/ssl/superfish_blocking_page.h" |
+ |
+#include "chrome/browser/interstitials/chrome_metrics_helper.h" |
+#include "chrome/common/pref_names.h" |
+#include "components/prefs/pref_service.h" |
+#include "components/security_interstitials/content/security_interstitial_controller_client.h" |
+#include "components/security_interstitials/core/superfish_error_ui.h" |
+#include "content/public/browser/interstitial_page_delegate.h" |
+#include "content/public/browser/web_contents.h" |
+ |
+// static |
+content::InterstitialPageDelegate::TypeID |
+ SuperfishBlockingPage::kTypeForTesting = |
+ &SuperfishBlockingPage::kTypeForTesting; |
+ |
+// static |
+SuperfishBlockingPage* SuperfishBlockingPage::Create( |
+ content::WebContents* web_contents, |
+ int cert_error, |
+ const net::SSLInfo& ssl_info, |
+ const GURL& request_url, |
+ int options_mask, |
+ const base::Time& time_triggered, |
+ std::unique_ptr<SSLCertReporter> ssl_cert_reporter, |
+ const base::Callback<void(content::CertificateRequestResultType)>& |
+ callback) { |
+ Profile* profile = |
+ Profile::FromBrowserContext(web_contents->GetBrowserContext()); |
+ if (profile && |
+ !profile->GetPrefs()->GetBoolean(prefs::kSSLErrorOverrideAllowed)) { |
+ options_mask |= security_interstitials::SSLErrorUI::HARD_OVERRIDE_DISABLED; |
+ } |
+ // Superfish interstitials are not overridable. |
+ options_mask &= ~security_interstitials::SSLErrorUI::SOFT_OVERRIDE_ENABLED; |
meacer
2017/06/22 19:06:19
rant: These flags names are really confusing. HARD
estark
2017/06/22 22:01:05
Agreed. Great interstitial refactor will probably
|
+ |
+ std::unique_ptr<ChromeMetricsHelper> metrics_helper(CreateMetricsHelper( |
+ web_contents, cert_error, request_url, false /* overridable */)); |
+ metrics_helper.get()->StartRecordingCaptivePortalMetrics( |
+ false /* overridable */); |
+ |
+ SuperfishBlockingPage* page = new SuperfishBlockingPage( |
+ web_contents, ssl_info, request_url, options_mask, time_triggered, |
+ std::move(ssl_cert_reporter), false /* overridable */, |
+ std::move(metrics_helper), callback); |
+ page->SetErrorUI(base::MakeUnique<security_interstitials::SuperfishErrorUI>( |
+ request_url, cert_error, ssl_info, options_mask, time_triggered, |
+ page->controller())); |
+ return page; |
+} |
+ |
+content::InterstitialPageDelegate::TypeID |
+SuperfishBlockingPage::GetTypeForTesting() const { |
+ return SuperfishBlockingPage::kTypeForTesting; |
meacer
2017/06/22 19:06:19
It looks like the main reason we have a separate S
estark
2017/06/22 22:01:05
Good idea, thanks. Done.
|
+} |
+ |
+SuperfishBlockingPage::SuperfishBlockingPage( |
+ content::WebContents* web_contents, |
+ const net::SSLInfo& ssl_info, |
+ const GURL& request_url, |
+ int options_mask, |
+ const base::Time& time_triggered, |
+ std::unique_ptr<SSLCertReporter> ssl_cert_reporter, |
+ bool overridable, |
+ std::unique_ptr<ChromeMetricsHelper> metrics_helper, |
+ const base::Callback<void(content::CertificateRequestResultType)>& callback) |
+ : SSLBlockingPage(web_contents, |
+ ssl_info, |
+ request_url, |
+ options_mask, |
+ time_triggered, |
+ std::move(ssl_cert_reporter), |
+ overridable, |
+ std::move(metrics_helper), |
+ callback) { |
+ // Creating an interstitial without showing (e.g. from chrome://interstitials) |
+ // it leaks memory, so don't create it here. |
+} |