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

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

Issue 9406001: Factor out ResourceDispatcherHost dependent code around SSLManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase for retry Created 8 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 | Annotate | Revision Log
« no previous file with comments | « content/browser/ssl/ssl_error_handler.h ('k') | content/browser/ssl/ssl_manager.h » ('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 "content/browser/ssl/ssl_error_handler.h" 5 #include "content/browser/ssl/ssl_error_handler.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "content/browser/renderer_host/render_view_host_impl.h" 8 #include "content/browser/renderer_host/render_view_host_impl.h"
9 #include "content/browser/renderer_host/resource_dispatcher_host_impl.h"
10 #include "content/browser/ssl/ssl_cert_error_handler.h" 9 #include "content/browser/ssl/ssl_cert_error_handler.h"
11 #include "content/browser/tab_contents/navigation_controller_impl.h" 10 #include "content/browser/tab_contents/navigation_controller_impl.h"
12 #include "content/browser/tab_contents/tab_contents.h" 11 #include "content/browser/tab_contents/tab_contents.h"
13 #include "content/public/browser/browser_thread.h" 12 #include "content/public/browser/browser_thread.h"
14 #include "content/public/browser/resource_request_info.h" 13 #include "content/public/browser/resource_request_info.h"
15 #include "net/base/net_errors.h" 14 #include "net/base/net_errors.h"
16 #include "net/url_request/url_request.h" 15 #include "net/url_request/url_request.h"
17 16
18 using content::BrowserThread; 17 using content::BrowserThread;
19 using content::RenderViewHostImpl; 18 using content::RenderViewHostImpl;
20 using content::ResourceDispatcherHostImpl;
21 using content::ResourceRequestInfo;
22 using content::WebContents; 19 using content::WebContents;
20 using net::SSLInfo;
23 21
24 SSLErrorHandler::SSLErrorHandler(ResourceDispatcherHostImpl* host, 22 SSLErrorHandler::SSLErrorHandler(Delegate* delegate,
25 net::URLRequest* request, 23 const content::GlobalRequestID& id,
26 ResourceType::Type resource_type) 24 ResourceType::Type resource_type,
25 const GURL& url,
26 int render_process_id,
27 int render_view_id)
27 : manager_(NULL), 28 : manager_(NULL),
28 request_id_(0, 0), 29 request_id_(id),
29 resource_dispatcher_host_(host), 30 delegate_(delegate),
30 request_url_(request->url()), 31 render_process_id_(render_process_id),
32 render_view_id_(render_view_id),
33 request_url_(url),
31 resource_type_(resource_type), 34 resource_type_(resource_type),
32 request_has_been_notified_(false) { 35 request_has_been_notified_(false) {
33 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI)); 36 DCHECK(!BrowserThread::CurrentlyOn(BrowserThread::UI));
34 37 DCHECK(delegate);
35 const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request);
36 request_id_.child_id = info->GetChildID();
37 request_id_.request_id = info->GetRequestID();
38
39 if (!info->GetAssociatedRenderView(&render_process_id_, &render_view_id_))
40 NOTREACHED();
41 38
42 // This makes sure we don't disappear on the IO thread until we've given an 39 // This makes sure we don't disappear on the IO thread until we've given an
43 // answer to the net::URLRequest. 40 // answer to the net::URLRequest.
44 // 41 //
45 // Release in CompleteCancelRequest, CompleteContinueRequest, or 42 // Release in CompleteCancelRequest, CompleteContinueRequest, or
46 // CompleteTakeNoAction. 43 // CompleteTakeNoAction.
47 AddRef(); 44 AddRef();
48 } 45 }
49 46
50 SSLErrorHandler::~SSLErrorHandler() {} 47 SSLErrorHandler::~SSLErrorHandler() {}
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 void SSLErrorHandler::CompleteCancelRequest(int error) { 123 void SSLErrorHandler::CompleteCancelRequest(int error) {
127 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 124 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
128 125
129 // It is important that we notify the net::URLRequest only once. If we try 126 // It is important that we notify the net::URLRequest only once. If we try
130 // to notify the request twice, it may no longer exist and |this| might have 127 // to notify the request twice, it may no longer exist and |this| might have
131 // already have been deleted. 128 // already have been deleted.
132 DCHECK(!request_has_been_notified_); 129 DCHECK(!request_has_been_notified_);
133 if (request_has_been_notified_) 130 if (request_has_been_notified_)
134 return; 131 return;
135 132
136 net::URLRequest* request = 133 SSLCertErrorHandler* cert_error = AsSSLCertErrorHandler();
137 resource_dispatcher_host_->GetURLRequest(request_id_); 134 const SSLInfo* ssl_info = NULL;
138 if (request && request->is_pending()) { 135 if (cert_error)
139 // The request can be NULL if it was cancelled by the renderer (as the 136 ssl_info = &cert_error->ssl_info();
140 // result of the user navigating to a new page from the location bar). 137 delegate_->CancelSSLRequest(request_id_, error, ssl_info);
141 DVLOG(1) << "CompleteCancelRequest() url: " << request->url().spec();
142 SSLCertErrorHandler* cert_error = AsSSLCertErrorHandler();
143 if (cert_error)
144 request->SimulateSSLError(error, cert_error->ssl_info());
145 else
146 request->SimulateError(error);
147 }
148 request_has_been_notified_ = true; 138 request_has_been_notified_ = true;
149 139
150 // We're done with this object on the IO thread. 140 // We're done with this object on the IO thread.
151 Release(); 141 Release();
152 } 142 }
153 143
154 void SSLErrorHandler::CompleteContinueRequest() { 144 void SSLErrorHandler::CompleteContinueRequest() {
155 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 145 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
156 146
157 // It is important that we notify the net::URLRequest only once. If we try to 147 // It is important that we notify the net::URLRequest only once. If we try to
158 // notify the request twice, it may no longer exist and |this| might have 148 // notify the request twice, it may no longer exist and |this| might have
159 // already have been deleted. 149 // already have been deleted.
160 DCHECK(!request_has_been_notified_); 150 DCHECK(!request_has_been_notified_);
161 if (request_has_been_notified_) 151 if (request_has_been_notified_)
162 return; 152 return;
163 153
164 net::URLRequest* request = 154 delegate_->ContinueSSLRequest(request_id_);
165 resource_dispatcher_host_->GetURLRequest(request_id_);
166 if (request) {
167 // The request can be NULL if it was cancelled by the renderer (as the
168 // result of the user navigating to a new page from the location bar).
169 DVLOG(1) << "CompleteContinueRequest() url: " << request->url().spec();
170 request->ContinueDespiteLastError();
171 }
172 request_has_been_notified_ = true; 155 request_has_been_notified_ = true;
173 156
174 // We're done with this object on the IO thread. 157 // We're done with this object on the IO thread.
175 Release(); 158 Release();
176 } 159 }
177 160
178 void SSLErrorHandler::CompleteTakeNoAction() { 161 void SSLErrorHandler::CompleteTakeNoAction() {
179 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 162 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
180 163
181 // It is important that we notify the net::URLRequest only once. If we try to 164 // It is important that we notify the net::URLRequest only once. If we try to
182 // notify the request twice, it may no longer exist and |this| might have 165 // notify the request twice, it may no longer exist and |this| might have
183 // already have been deleted. 166 // already have been deleted.
184 DCHECK(!request_has_been_notified_); 167 DCHECK(!request_has_been_notified_);
185 if (request_has_been_notified_) 168 if (request_has_been_notified_)
186 return; 169 return;
187 170
188 request_has_been_notified_ = true; 171 request_has_been_notified_ = true;
189 172
190 // We're done with this object on the IO thread. 173 // We're done with this object on the IO thread.
191 Release(); 174 Release();
192 } 175 }
OLDNEW
« no previous file with comments | « content/browser/ssl/ssl_error_handler.h ('k') | content/browser/ssl/ssl_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698