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

Side by Side Diff: content/browser/loader/resource_loader.cc

Issue 398903002: Plumb redirect info out of net, through content, and into child processes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: darin comments Created 6 years, 4 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) 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/loader/resource_loader.h" 5 #include "content/browser/loader/resource_loader.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "base/message_loop/message_loop.h" 8 #include "base/message_loop/message_loop.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"
(...skipping 12 matching lines...) Expand all
23 #include "content/public/browser/resource_dispatcher_host_login_delegate.h" 23 #include "content/public/browser/resource_dispatcher_host_login_delegate.h"
24 #include "content/public/browser/signed_certificate_timestamp_store.h" 24 #include "content/public/browser/signed_certificate_timestamp_store.h"
25 #include "content/public/common/content_client.h" 25 #include "content/public/common/content_client.h"
26 #include "content/public/common/content_switches.h" 26 #include "content/public/common/content_switches.h"
27 #include "content/public/common/process_type.h" 27 #include "content/public/common/process_type.h"
28 #include "content/public/common/resource_response.h" 28 #include "content/public/common/resource_response.h"
29 #include "net/base/io_buffer.h" 29 #include "net/base/io_buffer.h"
30 #include "net/base/load_flags.h" 30 #include "net/base/load_flags.h"
31 #include "net/http/http_response_headers.h" 31 #include "net/http/http_response_headers.h"
32 #include "net/ssl/client_cert_store.h" 32 #include "net/ssl/client_cert_store.h"
33 #include "net/url_request/redirect_info.h"
33 #include "net/url_request/url_request_status.h" 34 #include "net/url_request/url_request_status.h"
34 35
35 using base::TimeDelta; 36 using base::TimeDelta;
36 using base::TimeTicks; 37 using base::TimeTicks;
37 38
38 namespace content { 39 namespace content {
39 namespace { 40 namespace {
40 41
41 void PopulateResourceResponse(ResourceRequestInfoImpl* info, 42 void PopulateResourceResponse(ResourceRequestInfoImpl* info,
42 net::URLRequest* request, 43 net::URLRequest* request,
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after
192 193
193 void ResourceLoader::ClearSSLClientAuthHandler() { 194 void ResourceLoader::ClearSSLClientAuthHandler() {
194 ssl_client_auth_handler_ = NULL; 195 ssl_client_auth_handler_ = NULL;
195 } 196 }
196 197
197 void ResourceLoader::OnUploadProgressACK() { 198 void ResourceLoader::OnUploadProgressACK() {
198 waiting_for_upload_progress_ack_ = false; 199 waiting_for_upload_progress_ack_ = false;
199 } 200 }
200 201
201 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, 202 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused,
202 const GURL& new_url, 203 const net::RedirectInfo& redirect_info,
203 bool* defer) { 204 bool* defer) {
204 DCHECK_EQ(request_.get(), unused); 205 DCHECK_EQ(request_.get(), unused);
205 206
206 VLOG(1) << "OnReceivedRedirect: " << request_->url().spec(); 207 VLOG(1) << "OnReceivedRedirect: " << request_->url().spec();
207 DCHECK(request_->status().is_success()); 208 DCHECK(request_->status().is_success());
208 209
209 ResourceRequestInfoImpl* info = GetRequestInfo(); 210 ResourceRequestInfoImpl* info = GetRequestInfo();
210 211
211 if (info->GetProcessType() != PROCESS_TYPE_PLUGIN && 212 if (info->GetProcessType() != PROCESS_TYPE_PLUGIN &&
212 !ChildProcessSecurityPolicyImpl::GetInstance()-> 213 !ChildProcessSecurityPolicyImpl::GetInstance()->
213 CanRequestURL(info->GetChildID(), new_url)) { 214 CanRequestURL(info->GetChildID(), redirect_info.new_url)) {
214 VLOG(1) << "Denied unauthorized request for " 215 VLOG(1) << "Denied unauthorized request for "
215 << new_url.possibly_invalid_spec(); 216 << redirect_info.new_url.possibly_invalid_spec();
216 217
217 // Tell the renderer that this request was disallowed. 218 // Tell the renderer that this request was disallowed.
218 Cancel(); 219 Cancel();
219 return; 220 return;
220 } 221 }
221 222
222 delegate_->DidReceiveRedirect(this, new_url); 223 delegate_->DidReceiveRedirect(this, redirect_info.new_url);
223 224
224 if (delegate_->HandleExternalProtocol(this, new_url)) { 225 if (delegate_->HandleExternalProtocol(this, redirect_info.new_url)) {
225 // The request is complete so we can remove it. 226 // The request is complete so we can remove it.
226 CancelAndIgnore(); 227 CancelAndIgnore();
227 return; 228 return;
228 } 229 }
229 230
230 scoped_refptr<ResourceResponse> response(new ResourceResponse()); 231 scoped_refptr<ResourceResponse> response(new ResourceResponse());
231 PopulateResourceResponse(info, request_.get(), response.get()); 232 PopulateResourceResponse(info, request_.get(), response.get());
232 233
233 if (!handler_->OnRequestRedirected(new_url, response.get(), defer)) { 234 if (!handler_->OnRequestRedirected(redirect_info, response.get(), defer)) {
234 Cancel(); 235 Cancel();
235 } else if (*defer) { 236 } else if (*defer) {
236 deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed. 237 deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed.
237 } 238 }
238 } 239 }
239 240
240 void ResourceLoader::OnAuthRequired(net::URLRequest* unused, 241 void ResourceLoader::OnAuthRequired(net::URLRequest* unused,
241 net::AuthChallengeInfo* auth_info) { 242 net::AuthChallengeInfo* auth_info) {
242 DCHECK_EQ(request_.get(), unused); 243 DCHECK_EQ(request_.get(), unused);
243 244
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
703 case net::URLRequestStatus::FAILED: 704 case net::URLRequestStatus::FAILED:
704 status = STATUS_UNDEFINED; 705 status = STATUS_UNDEFINED;
705 break; 706 break;
706 } 707 }
707 708
708 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); 709 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX);
709 } 710 }
710 } 711 }
711 712
712 } // namespace content 713 } // namespace content
OLDNEW
« no previous file with comments | « content/browser/loader/resource_loader.h ('k') | content/browser/loader/resource_loader_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698