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

Side by Side Diff: chrome/browser/ssl/ssl_blocking_page.cc

Issue 2949003003: Implement a skeleton of the Superfish interstitial (Closed)
Patch Set: actually fix excessive output problem Created 3 years, 6 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 unified diff | Download patch
« no previous file with comments | « chrome/browser/ssl/ssl_blocking_page.h ('k') | chrome/browser/ssl/ssl_browser_tests.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ssl/ssl_blocking_page.h" 5 #include "chrome/browser/ssl/ssl_blocking_page.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/bind_helpers.h" 10 #include "base/bind_helpers.h"
11 #include "base/callback_helpers.h" 11 #include "base/callback_helpers.h"
12 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
13 #include "base/metrics/histogram_macros.h" 13 #include "base/metrics/histogram_macros.h"
14 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
15 #include "base/time/time.h" 15 #include "base/time/time.h"
16 #include "chrome/browser/browser_process.h" 16 #include "chrome/browser/browser_process.h"
17 #include "chrome/browser/interstitials/chrome_controller_client.h" 17 #include "chrome/browser/interstitials/chrome_controller_client.h"
18 #include "chrome/browser/interstitials/chrome_metrics_helper.h" 18 #include "chrome/browser/interstitials/chrome_metrics_helper.h"
19 #include "chrome/browser/profiles/profile.h" 19 #include "chrome/browser/profiles/profile.h"
20 #include "chrome/browser/renderer_preferences_util.h" 20 #include "chrome/browser/renderer_preferences_util.h"
21 #include "chrome/browser/ssl/cert_report_helper.h" 21 #include "chrome/browser/ssl/cert_report_helper.h"
22 #include "chrome/browser/ssl/ssl_cert_reporter.h" 22 #include "chrome/browser/ssl/ssl_cert_reporter.h"
23 #include "chrome/common/chrome_switches.h" 23 #include "chrome/common/chrome_switches.h"
24 #include "chrome/common/pref_names.h" 24 #include "chrome/common/pref_names.h"
25 #include "components/prefs/pref_service.h" 25 #include "components/prefs/pref_service.h"
26 #include "components/safe_browsing/common/safe_browsing_prefs.h" 26 #include "components/safe_browsing/common/safe_browsing_prefs.h"
27 #include "components/security_interstitials/core/controller_client.h" 27 #include "components/security_interstitials/core/controller_client.h"
28 #include "components/security_interstitials/core/metrics_helper.h" 28 #include "components/security_interstitials/core/metrics_helper.h"
29 #include "components/security_interstitials/core/ssl_error_ui.h" 29 #include "components/security_interstitials/core/ssl_error_ui.h"
30 #include "components/security_interstitials/core/superfish_error_ui.h"
30 #include "content/public/browser/interstitial_page.h" 31 #include "content/public/browser/interstitial_page.h"
31 #include "content/public/browser/interstitial_page_delegate.h" 32 #include "content/public/browser/interstitial_page_delegate.h"
32 #include "content/public/browser/navigation_entry.h" 33 #include "content/public/browser/navigation_entry.h"
33 #include "content/public/browser/render_process_host.h" 34 #include "content/public/browser/render_process_host.h"
34 #include "content/public/browser/ssl_status.h" 35 #include "content/public/browser/ssl_status.h"
35 #include "content/public/browser/web_contents.h" 36 #include "content/public/browser/web_contents.h"
36 #include "content/public/common/renderer_preferences.h" 37 #include "content/public/common/renderer_preferences.h"
37 #include "net/base/net_errors.h" 38 #include "net/base/net_errors.h"
38 39
39 using base::TimeTicks; 40 using base::TimeTicks;
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
92 event, 93 event,
93 END_OF_SSL_EXPIRATION_AND_DECISION); 94 END_OF_SSL_EXPIRATION_AND_DECISION);
94 } 95 }
95 } 96 }
96 97
97 std::unique_ptr<ChromeMetricsHelper> CreateMetricsHelper( 98 std::unique_ptr<ChromeMetricsHelper> CreateMetricsHelper(
98 content::WebContents* web_contents, 99 content::WebContents* web_contents,
99 int cert_error, 100 int cert_error,
100 const GURL& request_url, 101 const GURL& request_url,
101 bool overridable) { 102 bool overridable) {
102 // Set up the metrics helper for the SSLErrorUI.
103 security_interstitials::MetricsHelper::ReportDetails reporting_info; 103 security_interstitials::MetricsHelper::ReportDetails reporting_info;
104 reporting_info.metric_prefix = 104 reporting_info.metric_prefix =
105 overridable ? "ssl_overridable" : "ssl_nonoverridable"; 105 overridable ? "ssl_overridable" : "ssl_nonoverridable";
106 return base::MakeUnique<ChromeMetricsHelper>( 106 return base::MakeUnique<ChromeMetricsHelper>(
107 web_contents, request_url, reporting_info, 107 web_contents, request_url, reporting_info,
108 GetSamplingEventName(overridable, cert_error)); 108 GetSamplingEventName(overridable, cert_error));
109 } 109 }
110 110
111 } // namespace 111 } // namespace
112 112
113 // static 113 // static
114 InterstitialPageDelegate::TypeID SSLBlockingPage::kTypeForTesting = 114 InterstitialPageDelegate::TypeID SSLBlockingPage::kTypeForTesting =
115 &SSLBlockingPage::kTypeForTesting; 115 &SSLBlockingPage::kTypeForTesting;
116 116
117 // static 117 // static
118 SSLBlockingPage* SSLBlockingPage::Create( 118 SSLBlockingPage* SSLBlockingPage::Create(
119 content::WebContents* web_contents, 119 content::WebContents* web_contents,
120 int cert_error, 120 int cert_error,
121 const net::SSLInfo& ssl_info, 121 const net::SSLInfo& ssl_info,
122 const GURL& request_url, 122 const GURL& request_url,
123 int options_mask, 123 int options_mask,
124 const base::Time& time_triggered, 124 const base::Time& time_triggered,
125 std::unique_ptr<SSLCertReporter> ssl_cert_reporter, 125 std::unique_ptr<SSLCertReporter> ssl_cert_reporter,
126 bool is_superfish,
126 const base::Callback<void(content::CertificateRequestResultType)>& 127 const base::Callback<void(content::CertificateRequestResultType)>&
127 callback) { 128 callback) {
128 // Override prefs for the SSLErrorUI. 129 // Override prefs for the SSLErrorUI.
129 Profile* profile = 130 Profile* profile =
130 Profile::FromBrowserContext(web_contents->GetBrowserContext()); 131 Profile::FromBrowserContext(web_contents->GetBrowserContext());
131 if (profile && 132 if (profile &&
132 !profile->GetPrefs()->GetBoolean(prefs::kSSLErrorOverrideAllowed)) { 133 !profile->GetPrefs()->GetBoolean(prefs::kSSLErrorOverrideAllowed)) {
133 options_mask |= SSLErrorUI::HARD_OVERRIDE_DISABLED; 134 options_mask |= SSLErrorUI::HARD_OVERRIDE_DISABLED;
134 } 135 }
135 bool overridable = IsOverridable( 136 const bool overridable =
136 options_mask, 137 is_superfish
137 Profile::FromBrowserContext(web_contents->GetBrowserContext())); 138 ? false
139 : IsOverridable(options_mask, Profile::FromBrowserContext(
140 web_contents->GetBrowserContext()));
138 if (overridable) 141 if (overridable)
139 options_mask |= SSLErrorUI::SOFT_OVERRIDE_ENABLED; 142 options_mask |= SSLErrorUI::SOFT_OVERRIDE_ENABLED;
140 else 143 else
141 options_mask &= ~SSLErrorUI::SOFT_OVERRIDE_ENABLED; 144 options_mask &= ~SSLErrorUI::SOFT_OVERRIDE_ENABLED;
142 145
143 std::unique_ptr<ChromeMetricsHelper> metrics_helper( 146 std::unique_ptr<ChromeMetricsHelper> metrics_helper(
144 CreateMetricsHelper(web_contents, cert_error, request_url, overridable)); 147 CreateMetricsHelper(web_contents, cert_error, request_url, overridable));
145 metrics_helper.get()->StartRecordingCaptivePortalMetrics(overridable); 148 metrics_helper.get()->StartRecordingCaptivePortalMetrics(overridable);
146 149
147 return new SSLBlockingPage(web_contents, cert_error, ssl_info, request_url, 150 return new SSLBlockingPage(web_contents, cert_error, ssl_info, request_url,
148 options_mask, time_triggered, 151 options_mask, time_triggered,
149 std::move(ssl_cert_reporter), overridable, 152 std::move(ssl_cert_reporter), overridable,
150 std::move(metrics_helper), callback); 153 std::move(metrics_helper), is_superfish, callback);
151 } 154 }
152 155
153 bool SSLBlockingPage::ShouldCreateNewNavigation() const { 156 bool SSLBlockingPage::ShouldCreateNewNavigation() const {
154 return true; 157 return true;
155 } 158 }
156 159
157 InterstitialPageDelegate::TypeID SSLBlockingPage::GetTypeForTesting() const { 160 InterstitialPageDelegate::TypeID SSLBlockingPage::GetTypeForTesting() const {
158 return SSLBlockingPage::kTypeForTesting; 161 return SSLBlockingPage::kTypeForTesting;
159 } 162 }
160 163
(...skipping 18 matching lines...) Expand all
179 SSLBlockingPage::SSLBlockingPage( 182 SSLBlockingPage::SSLBlockingPage(
180 content::WebContents* web_contents, 183 content::WebContents* web_contents,
181 int cert_error, 184 int cert_error,
182 const net::SSLInfo& ssl_info, 185 const net::SSLInfo& ssl_info,
183 const GURL& request_url, 186 const GURL& request_url,
184 int options_mask, 187 int options_mask,
185 const base::Time& time_triggered, 188 const base::Time& time_triggered,
186 std::unique_ptr<SSLCertReporter> ssl_cert_reporter, 189 std::unique_ptr<SSLCertReporter> ssl_cert_reporter,
187 bool overridable, 190 bool overridable,
188 std::unique_ptr<ChromeMetricsHelper> metrics_helper, 191 std::unique_ptr<ChromeMetricsHelper> metrics_helper,
192 bool is_superfish,
189 const base::Callback<void(content::CertificateRequestResultType)>& callback) 193 const base::Callback<void(content::CertificateRequestResultType)>& callback)
190 : SecurityInterstitialPage( 194 : SecurityInterstitialPage(
191 web_contents, 195 web_contents,
192 request_url, 196 request_url,
193 base::MakeUnique<ChromeControllerClient>( 197 base::MakeUnique<ChromeControllerClient>(web_contents,
194 web_contents, std::move(metrics_helper))), 198 std::move(metrics_helper))),
195 callback_(callback), 199 callback_(callback),
196 ssl_info_(ssl_info), 200 ssl_info_(ssl_info),
197 overridable_(overridable), 201 overridable_(overridable),
198 expired_but_previously_allowed_( 202 expired_but_previously_allowed_(
199 (options_mask & SSLErrorUI::EXPIRED_BUT_PREVIOUSLY_ALLOWED) != 0), 203 (options_mask & SSLErrorUI::EXPIRED_BUT_PREVIOUSLY_ALLOWED) != 0),
200 cert_report_helper_(new CertReportHelper( 204 cert_report_helper_(new CertReportHelper(
201 std::move(ssl_cert_reporter), 205 std::move(ssl_cert_reporter),
202 web_contents, 206 web_contents,
203 request_url, 207 request_url,
204 ssl_info, 208 ssl_info,
205 certificate_reporting::ErrorReport::INTERSTITIAL_SSL, 209 is_superfish
210 ? certificate_reporting::ErrorReport::INTERSTITIAL_SUPERFISH
211 : certificate_reporting::ErrorReport::INTERSTITIAL_SSL,
206 overridable_, 212 overridable_,
207 time_triggered, 213 time_triggered,
208 controller()->metrics_helper())), 214 controller()->metrics_helper())),
209 ssl_error_ui_(new SSLErrorUI(request_url, 215 ssl_error_ui_(
210 cert_error, 216 is_superfish
211 ssl_info, 217 ? base::MakeUnique<security_interstitials::SuperfishErrorUI>(
212 options_mask, 218 request_url,
213 time_triggered, 219 cert_error,
214 controller())) { 220 ssl_info,
221 options_mask,
222 time_triggered,
223 controller())
224 : base::MakeUnique<SSLErrorUI>(request_url,
225 cert_error,
226 ssl_info,
227 options_mask,
228 time_triggered,
229 controller())) {
215 // Creating an interstitial without showing (e.g. from chrome://interstitials) 230 // Creating an interstitial without showing (e.g. from chrome://interstitials)
216 // it leaks memory, so don't create it here. 231 // it leaks memory, so don't create it here.
217 } 232 }
218 233
219 void SSLBlockingPage::OverrideEntry(NavigationEntry* entry) { 234 void SSLBlockingPage::OverrideEntry(NavigationEntry* entry) {
220 entry->GetSSL() = content::SSLStatus(ssl_info_); 235 entry->GetSSL() = content::SSLStatus(ssl_info_);
221 } 236 }
222 237
223 void SSLBlockingPage::SetSSLCertReporterForTesting( 238 void SSLBlockingPage::SetSSLCertReporterForTesting(
224 std::unique_ptr<SSLCertReporter> ssl_cert_reporter) { 239 std::unique_ptr<SSLCertReporter> ssl_cert_reporter) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
306 321
307 // static 322 // static
308 bool SSLBlockingPage::IsOverridable(int options_mask, 323 bool SSLBlockingPage::IsOverridable(int options_mask,
309 const Profile* const profile) { 324 const Profile* const profile) {
310 const bool is_overridable = 325 const bool is_overridable =
311 (options_mask & SSLErrorUI::SOFT_OVERRIDE_ENABLED) && 326 (options_mask & SSLErrorUI::SOFT_OVERRIDE_ENABLED) &&
312 !(options_mask & SSLErrorUI::STRICT_ENFORCEMENT) && 327 !(options_mask & SSLErrorUI::STRICT_ENFORCEMENT) &&
313 profile->GetPrefs()->GetBoolean(prefs::kSSLErrorOverrideAllowed); 328 profile->GetPrefs()->GetBoolean(prefs::kSSLErrorOverrideAllowed);
314 return is_overridable; 329 return is_overridable;
315 } 330 }
OLDNEW
« no previous file with comments | « chrome/browser/ssl/ssl_blocking_page.h ('k') | chrome/browser/ssl/ssl_browser_tests.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698