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

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

Issue 6025009: Get rid of RenderViewHostDelegate::Resource and dispatch the IPC messages dir... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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_manager.h" 5 #include "chrome/browser/ssl/ssl_manager.h"
6 6
7 #include "app/l10n_util.h" 7 #include "app/l10n_util.h"
8 #include "base/utf_string_conversions.h" 8 #include "base/utf_string_conversions.h"
9 #include "chrome/browser/browser_thread.h" 9 #include "chrome/browser/browser_thread.h"
10 #include "chrome/browser/load_from_memory_cache_details.h" 10 #include "chrome/browser/load_from_memory_cache_details.h"
11 #include "chrome/browser/net/url_request_tracking.h" 11 #include "chrome/browser/net/url_request_tracking.h"
12 #include "chrome/browser/prefs/pref_service.h" 12 #include "chrome/browser/prefs/pref_service.h"
13 #include "chrome/browser/renderer_host/render_view_host.h"
13 #include "chrome/browser/renderer_host/resource_request_details.h" 14 #include "chrome/browser/renderer_host/resource_request_details.h"
15 #include "chrome/browser/renderer_host/resource_dispatcher_host.h"
16 #include "chrome/browser/renderer_host/resource_dispatcher_host_request_info.h"
14 #include "chrome/browser/ssl/ssl_cert_error_handler.h" 17 #include "chrome/browser/ssl/ssl_cert_error_handler.h"
15 #include "chrome/browser/ssl/ssl_policy.h" 18 #include "chrome/browser/ssl/ssl_policy.h"
16 #include "chrome/browser/ssl/ssl_request_info.h" 19 #include "chrome/browser/ssl/ssl_request_info.h"
17 #include "chrome/browser/tab_contents/navigation_controller.h" 20 #include "chrome/browser/tab_contents/navigation_controller.h"
18 #include "chrome/browser/tab_contents/navigation_entry.h" 21 #include "chrome/browser/tab_contents/navigation_entry.h"
19 #include "chrome/browser/tab_contents/provisional_load_details.h" 22 #include "chrome/browser/tab_contents/provisional_load_details.h"
23 #include "chrome/browser/tab_contents/tab_contents.h"
20 #include "chrome/common/notification_service.h" 24 #include "chrome/common/notification_service.h"
21 #include "chrome/common/pref_names.h" 25 #include "chrome/common/pref_names.h"
22 #include "grit/generated_resources.h" 26 #include "grit/generated_resources.h"
23 #include "net/base/cert_status_flags.h" 27 #include "net/base/cert_status_flags.h"
24 28
25 // static 29 // static
26 void SSLManager::OnSSLCertificateError(ResourceDispatcherHost* rdh, 30 void SSLManager::OnSSLCertificateError(ResourceDispatcherHost* rdh,
27 net::URLRequest* request, 31 net::URLRequest* request,
28 int cert_error, 32 int cert_error,
29 net::X509Certificate* cert) { 33 net::X509Certificate* cert) {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
111 SSLManager::SSLManager(NavigationController* controller) 115 SSLManager::SSLManager(NavigationController* controller)
112 : backend_(controller), 116 : backend_(controller),
113 policy_(new SSLPolicy(&backend_)), 117 policy_(new SSLPolicy(&backend_)),
114 controller_(controller) { 118 controller_(controller) {
115 DCHECK(controller_); 119 DCHECK(controller_);
116 120
117 // Subscribe to various notifications. 121 // Subscribe to various notifications.
118 registrar_.Add(this, NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR, 122 registrar_.Add(this, NotificationType::FAIL_PROVISIONAL_LOAD_WITH_ERROR,
119 Source<NavigationController>(controller_)); 123 Source<NavigationController>(controller_));
120 registrar_.Add(this, NotificationType::RESOURCE_RESPONSE_STARTED, 124 registrar_.Add(this, NotificationType::RESOURCE_RESPONSE_STARTED,
121 Source<NavigationController>(controller_)); 125 NotificationService::AllSources());
122 registrar_.Add(this, NotificationType::RESOURCE_RECEIVED_REDIRECT, 126 registrar_.Add(this, NotificationType::RESOURCE_RECEIVED_REDIRECT,
123 Source<NavigationController>(controller_)); 127 NotificationService::AllSources());
124 registrar_.Add(this, NotificationType::LOAD_FROM_MEMORY_CACHE, 128 registrar_.Add(this, NotificationType::LOAD_FROM_MEMORY_CACHE,
125 Source<NavigationController>(controller_)); 129 Source<NavigationController>(controller_));
126 registrar_.Add(this, NotificationType::SSL_INTERNAL_STATE_CHANGED, 130 registrar_.Add(this, NotificationType::SSL_INTERNAL_STATE_CHANGED,
127 NotificationService::AllSources()); 131 NotificationService::AllSources());
128 } 132 }
129 133
130 SSLManager::~SSLManager() { 134 SSLManager::~SSLManager() {
131 } 135 }
132 136
133 void SSLManager::DidCommitProvisionalLoad( 137 void SSLManager::DidCommitProvisionalLoad(
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 break; 201 break;
198 case NotificationType::SSL_INTERNAL_STATE_CHANGED: 202 case NotificationType::SSL_INTERNAL_STATE_CHANGED:
199 DidChangeSSLInternalState(); 203 DidChangeSSLInternalState();
200 break; 204 break;
201 default: 205 default:
202 NOTREACHED() << "The SSLManager received an unexpected notification."; 206 NOTREACHED() << "The SSLManager received an unexpected notification.";
203 } 207 }
204 } 208 }
205 209
206 void SSLManager::DidLoadFromMemoryCache(LoadFromMemoryCacheDetails* details) { 210 void SSLManager::DidLoadFromMemoryCache(LoadFromMemoryCacheDetails* details) {
207 DCHECK(details);
208
209 // Simulate loading this resource through the usual path. 211 // Simulate loading this resource through the usual path.
210 // Note that we specify SUB_RESOURCE as the resource type as WebCore only 212 // Note that we specify SUB_RESOURCE as the resource type as WebCore only
211 // caches sub-resources. 213 // caches sub-resources.
212 // This resource must have been loaded with no filtering because filtered 214 // This resource must have been loaded with no filtering because filtered
213 // resouces aren't cachable. 215 // resouces aren't cachable.
214 scoped_refptr<SSLRequestInfo> info(new SSLRequestInfo( 216 scoped_refptr<SSLRequestInfo> info(new SSLRequestInfo(
215 details->url(), 217 details->url(),
216 ResourceType::SUB_RESOURCE, 218 ResourceType::SUB_RESOURCE,
217 details->frame_origin(), 219 details->frame_origin(),
218 details->main_frame_origin(), 220 details->main_frame_origin(),
219 details->pid(), 221 details->pid(),
220 details->ssl_cert_id(), 222 details->ssl_cert_id(),
221 details->ssl_cert_status())); 223 details->ssl_cert_status()));
222 224
223 // Simulate loading this resource through the usual path. 225 // Simulate loading this resource through the usual path.
224 policy()->OnRequestStarted(info.get()); 226 policy()->OnRequestStarted(info.get());
225 } 227 }
226 228
227 void SSLManager::DidStartResourceResponse(ResourceRequestDetails* details) { 229 void SSLManager::DidStartResourceResponse(ResourceRequestDetails* details) {
228 DCHECK(details); 230 RenderViewHost* rvh = RenderViewHost::FromID(
231 details->render_process_id(), details->render_view_id());
232 if (rvh != controller_->tab_contents()->render_view_host())
233 return;
229 234
230 scoped_refptr<SSLRequestInfo> info(new SSLRequestInfo( 235 scoped_refptr<SSLRequestInfo> info(new SSLRequestInfo(
231 details->url(), 236 details->url(),
232 details->resource_type(), 237 details->resource_type(),
233 details->frame_origin(), 238 details->frame_origin(),
234 details->main_frame_origin(), 239 details->main_frame_origin(),
235 details->origin_child_id(), 240 details->origin_child_id(),
236 details->ssl_cert_id(), 241 details->ssl_cert_id(),
237 details->ssl_cert_status())); 242 details->ssl_cert_status()));
238 243
239 // Notify our policy that we started a resource request. Ideally, the 244 // Notify our policy that we started a resource request. Ideally, the
240 // policy should have the ability to cancel the request, but we can't do 245 // policy should have the ability to cancel the request, but we can't do
241 // that yet. 246 // that yet.
242 policy()->OnRequestStarted(info.get()); 247 policy()->OnRequestStarted(info.get());
243 } 248 }
244 249
245 void SSLManager::DidReceiveResourceRedirect(ResourceRedirectDetails* details) { 250 void SSLManager::DidReceiveResourceRedirect(ResourceRedirectDetails* details) {
251 RenderViewHost* rvh = RenderViewHost::FromID(
252 details->render_process_id(), details->render_view_id());
253 if (rvh != controller_->tab_contents()->render_view_host())
254 return;
255
246 // TODO(abarth): Make sure our redirect behavior is correct. If we ever see a 256 // TODO(abarth): Make sure our redirect behavior is correct. If we ever see a
247 // non-HTTPS resource in the redirect chain, we want to trigger 257 // non-HTTPS resource in the redirect chain, we want to trigger
248 // insecure content, even if the redirect chain goes back to 258 // insecure content, even if the redirect chain goes back to
249 // HTTPS. This is because the network attacker can redirect the 259 // HTTPS. This is because the network attacker can redirect the
250 // HTTP request to https://attacker.com/payload.js. 260 // HTTP request to https://attacker.com/payload.js.
251 } 261 }
252 262
253 void SSLManager::DidChangeSSLInternalState() { 263 void SSLManager::DidChangeSSLInternalState() {
254 UpdateEntry(controller_->GetActiveEntry()); 264 UpdateEntry(controller_->GetActiveEntry());
255 } 265 }
256 266
257 void SSLManager::UpdateEntry(NavigationEntry* entry) { 267 void SSLManager::UpdateEntry(NavigationEntry* entry) {
258 // We don't always have a navigation entry to update, for example in the 268 // We don't always have a navigation entry to update, for example in the
259 // case of the Web Inspector. 269 // case of the Web Inspector.
260 if (!entry) 270 if (!entry)
261 return; 271 return;
262 272
263 NavigationEntry::SSLStatus original_ssl_status = entry->ssl(); // Copy! 273 NavigationEntry::SSLStatus original_ssl_status = entry->ssl(); // Copy!
264 274
265 policy()->UpdateEntry(entry, controller_->tab_contents()); 275 policy()->UpdateEntry(entry, controller_->tab_contents());
266 276
267 if (!entry->ssl().Equals(original_ssl_status)) { 277 if (!entry->ssl().Equals(original_ssl_status)) {
268 NotificationService::current()->Notify( 278 NotificationService::current()->Notify(
269 NotificationType::SSL_VISIBLE_STATE_CHANGED, 279 NotificationType::SSL_VISIBLE_STATE_CHANGED,
270 Source<NavigationController>(controller_), 280 Source<NavigationController>(controller_),
271 NotificationService::NoDetails()); 281 NotificationService::NoDetails());
272 } 282 }
273 } 283 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698