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

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

Issue 935663004: Add checkbox for reporting invalid TLS/SSL cert chains (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: revert accidental deletion (fixes failing CaptivePortal tests) Created 5 years, 9 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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_error_handler.h" 5 #include "chrome/browser/ssl/ssl_error_handler.h"
6 6
7 #include "base/callback_helpers.h" 7 #include "base/callback_helpers.h"
8 #include "base/metrics/field_trial.h" 8 #include "base/metrics/field_trial.h"
9 #include "base/metrics/histogram.h" 9 #include "base/metrics/histogram.h"
10 #include "base/time/time.h" 10 #include "base/time/time.h"
11 #include "chrome/browser/profiles/profile.h" 11 #include "chrome/browser/profiles/profile.h"
12 #include "chrome/browser/safe_browsing/ui_manager.h"
12 #include "chrome/browser/ssl/ssl_blocking_page.h" 13 #include "chrome/browser/ssl/ssl_blocking_page.h"
13 #include "content/public/browser/notification_service.h" 14 #include "content/public/browser/notification_service.h"
14 #include "content/public/browser/notification_source.h" 15 #include "content/public/browser/notification_source.h"
15 #include "content/public/browser/web_contents.h" 16 #include "content/public/browser/web_contents.h"
16 17
17 #if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 18 #if defined(ENABLE_CAPTIVE_PORTAL_DETECTION)
18 #include "chrome/browser/captive_portal/captive_portal_service.h" 19 #include "chrome/browser/captive_portal/captive_portal_service.h"
19 #include "chrome/browser/captive_portal/captive_portal_service_factory.h" 20 #include "chrome/browser/captive_portal/captive_portal_service_factory.h"
20 #include "chrome/browser/captive_portal/captive_portal_tab_helper.h" 21 #include "chrome/browser/captive_portal/captive_portal_tab_helper.h"
21 #include "chrome/browser/ssl/captive_portal_blocking_page.h" 22 #include "chrome/browser/ssl/captive_portal_blocking_page.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
82 } // namespace 83 } // namespace
83 84
84 DEFINE_WEB_CONTENTS_USER_DATA_KEY(SSLErrorHandler); 85 DEFINE_WEB_CONTENTS_USER_DATA_KEY(SSLErrorHandler);
85 86
86 void SSLErrorHandler::HandleSSLError( 87 void SSLErrorHandler::HandleSSLError(
87 content::WebContents* web_contents, 88 content::WebContents* web_contents,
88 int cert_error, 89 int cert_error,
89 const net::SSLInfo& ssl_info, 90 const net::SSLInfo& ssl_info,
90 const GURL& request_url, 91 const GURL& request_url,
91 int options_mask, 92 int options_mask,
93 SafeBrowsingUIManager* safe_browsing_ui_manager,
92 const base::Callback<void(bool)>& callback) { 94 const base::Callback<void(bool)>& callback) {
93 #if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 95 #if defined(ENABLE_CAPTIVE_PORTAL_DETECTION)
94 CaptivePortalTabHelper* captive_portal_tab_helper = 96 CaptivePortalTabHelper* captive_portal_tab_helper =
95 CaptivePortalTabHelper::FromWebContents(web_contents); 97 CaptivePortalTabHelper::FromWebContents(web_contents);
96 if (captive_portal_tab_helper) { 98 if (captive_portal_tab_helper) {
97 captive_portal_tab_helper->OnSSLCertError(ssl_info); 99 captive_portal_tab_helper->OnSSLCertError(ssl_info);
98 } 100 }
99 #endif 101 #endif
100 DCHECK(!FromWebContents(web_contents)); 102 DCHECK(!FromWebContents(web_contents));
101 web_contents->SetUserData(UserDataKey(), 103 web_contents->SetUserData(
102 new SSLErrorHandler(web_contents, cert_error, 104 UserDataKey(),
103 ssl_info, request_url, 105 new SSLErrorHandler(web_contents, cert_error, ssl_info, request_url,
104 options_mask, callback)); 106 options_mask, safe_browsing_ui_manager, callback));
105 107
106 SSLErrorHandler* error_handler = 108 SSLErrorHandler* error_handler =
107 SSLErrorHandler::FromWebContents(web_contents); 109 SSLErrorHandler::FromWebContents(web_contents);
108 error_handler->StartHandlingError(); 110 error_handler->StartHandlingError();
109 } 111 }
110 112
111 // static 113 // static
112 void SSLErrorHandler::SetInterstitialDelayTypeForTest( 114 void SSLErrorHandler::SetInterstitialDelayTypeForTest(
113 SSLErrorHandler::InterstitialDelayType delay) { 115 SSLErrorHandler::InterstitialDelayType delay) {
114 g_interstitial_delay_type = delay; 116 g_interstitial_delay_type = delay;
115 } 117 }
116 118
117 // static 119 // static
118 void SSLErrorHandler::SetInterstitialTimerStartedCallbackForTest( 120 void SSLErrorHandler::SetInterstitialTimerStartedCallbackForTest(
119 TimerStartedCallback* callback) { 121 TimerStartedCallback* callback) {
120 DCHECK(!callback || !callback->is_null()); 122 DCHECK(!callback || !callback->is_null());
121 g_timer_started_callback = callback; 123 g_timer_started_callback = callback;
122 } 124 }
123 125
124 SSLErrorHandler::SSLErrorHandler(content::WebContents* web_contents, 126 SSLErrorHandler::SSLErrorHandler(
125 int cert_error, 127 content::WebContents* web_contents,
126 const net::SSLInfo& ssl_info, 128 int cert_error,
127 const GURL& request_url, 129 const net::SSLInfo& ssl_info,
128 int options_mask, 130 const GURL& request_url,
129 const base::Callback<void(bool)>& callback) 131 int options_mask,
132 SafeBrowsingUIManager* safe_browsing_ui_manager,
133 const base::Callback<void(bool)>& callback)
130 : content::WebContentsObserver(web_contents), 134 : content::WebContentsObserver(web_contents),
131 web_contents_(web_contents), 135 web_contents_(web_contents),
132 cert_error_(cert_error), 136 cert_error_(cert_error),
133 ssl_info_(ssl_info), 137 ssl_info_(ssl_info),
134 request_url_(request_url), 138 request_url_(request_url),
135 options_mask_(options_mask), 139 options_mask_(options_mask),
136 callback_(callback) { 140 callback_(callback),
141 safe_browsing_ui_manager_(safe_browsing_ui_manager) {
137 #if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 142 #if defined(ENABLE_CAPTIVE_PORTAL_DETECTION)
138 Profile* profile = Profile::FromBrowserContext( 143 Profile* profile = Profile::FromBrowserContext(
139 web_contents->GetBrowserContext()); 144 web_contents->GetBrowserContext());
140 registrar_.Add(this, 145 registrar_.Add(this,
141 chrome::NOTIFICATION_CAPTIVE_PORTAL_CHECK_RESULT, 146 chrome::NOTIFICATION_CAPTIVE_PORTAL_CHECK_RESULT,
142 content::Source<Profile>(profile)); 147 content::Source<Profile>(profile));
143 #endif 148 #endif
144 } 149 }
145 150
146 SSLErrorHandler::~SSLErrorHandler() { 151 SSLErrorHandler::~SSLErrorHandler() {
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
196 #endif 201 #endif
197 } 202 }
198 203
199 void SSLErrorHandler::ShowSSLInterstitial() { 204 void SSLErrorHandler::ShowSSLInterstitial() {
200 // Show SSL blocking page. The interstitial owns the blocking page. 205 // Show SSL blocking page. The interstitial owns the blocking page.
201 RecordUMA(SSLBlockingPage::IsOptionsOverridable(options_mask_) ? 206 RecordUMA(SSLBlockingPage::IsOptionsOverridable(options_mask_) ?
202 SHOW_SSL_INTERSTITIAL_OVERRIDABLE : 207 SHOW_SSL_INTERSTITIAL_OVERRIDABLE :
203 SHOW_SSL_INTERSTITIAL_NONOVERRIDABLE); 208 SHOW_SSL_INTERSTITIAL_NONOVERRIDABLE);
204 (new SSLBlockingPage(web_contents_, cert_error_, ssl_info_, request_url_, 209 (new SSLBlockingPage(web_contents_, cert_error_, ssl_info_, request_url_,
205 options_mask_, base::Time::NowFromSystemTime(), 210 options_mask_, base::Time::NowFromSystemTime(),
206 callback_))->Show(); 211 safe_browsing_ui_manager_, callback_))->Show();
207 // Once an interstitial is displayed, no need to keep the handler around. 212 // Once an interstitial is displayed, no need to keep the handler around.
208 // This is the equivalent of "delete this". 213 // This is the equivalent of "delete this".
209 web_contents_->RemoveUserData(UserDataKey()); 214 web_contents_->RemoveUserData(UserDataKey());
210 } 215 }
211 216
212 void SSLErrorHandler::Observe( 217 void SSLErrorHandler::Observe(
213 int type, 218 int type,
214 const content::NotificationSource& source, 219 const content::NotificationSource& source,
215 const content::NotificationDetails& details) { 220 const content::NotificationDetails& details) {
216 #if defined(ENABLE_CAPTIVE_PORTAL_DETECTION) 221 #if defined(ENABLE_CAPTIVE_PORTAL_DETECTION)
(...skipping 15 matching lines...) Expand all
232 void SSLErrorHandler::DidStartNavigationToPendingEntry( 237 void SSLErrorHandler::DidStartNavigationToPendingEntry(
233 const GURL& url, 238 const GURL& url,
234 content::NavigationController::ReloadType reload_type) { 239 content::NavigationController::ReloadType reload_type) {
235 // Need to explicity deny the certificate via the callback, otherwise memory 240 // Need to explicity deny the certificate via the callback, otherwise memory
236 // is leaked. 241 // is leaked.
237 if (!callback_.is_null()) { 242 if (!callback_.is_null()) {
238 base::ResetAndReturn(&callback_).Run(false); 243 base::ResetAndReturn(&callback_).Run(false);
239 } 244 }
240 web_contents_->RemoveUserData(UserDataKey()); 245 web_contents_->RemoveUserData(UserDataKey());
241 } 246 }
OLDNEW
« no previous file with comments | « chrome/browser/ssl/ssl_error_handler.h ('k') | chrome/browser/ssl/ssl_error_handler_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698