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

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: mmenke comments Created 6 years, 5 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 11 matching lines...) Expand all
22 #include "content/public/browser/resource_dispatcher_host_login_delegate.h" 22 #include "content/public/browser/resource_dispatcher_host_login_delegate.h"
23 #include "content/public/browser/signed_certificate_timestamp_store.h" 23 #include "content/public/browser/signed_certificate_timestamp_store.h"
24 #include "content/public/common/content_client.h" 24 #include "content/public/common/content_client.h"
25 #include "content/public/common/content_switches.h" 25 #include "content/public/common/content_switches.h"
26 #include "content/public/common/process_type.h" 26 #include "content/public/common/process_type.h"
27 #include "content/public/common/resource_response.h" 27 #include "content/public/common/resource_response.h"
28 #include "net/base/io_buffer.h" 28 #include "net/base/io_buffer.h"
29 #include "net/base/load_flags.h" 29 #include "net/base/load_flags.h"
30 #include "net/http/http_response_headers.h" 30 #include "net/http/http_response_headers.h"
31 #include "net/ssl/client_cert_store.h" 31 #include "net/ssl/client_cert_store.h"
32 #include "net/url_request/redirect_info.h"
32 #include "net/url_request/url_request_status.h" 33 #include "net/url_request/url_request_status.h"
33 34
34 using base::TimeDelta; 35 using base::TimeDelta;
35 using base::TimeTicks; 36 using base::TimeTicks;
36 37
37 namespace content { 38 namespace content {
38 namespace { 39 namespace {
39 40
40 void PopulateResourceResponse(net::URLRequest* request, 41 void PopulateResourceResponse(net::URLRequest* request,
41 ResourceResponse* response) { 42 ResourceResponse* response) {
(...skipping 143 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 186
186 void ResourceLoader::ClearSSLClientAuthHandler() { 187 void ResourceLoader::ClearSSLClientAuthHandler() {
187 ssl_client_auth_handler_ = NULL; 188 ssl_client_auth_handler_ = NULL;
188 } 189 }
189 190
190 void ResourceLoader::OnUploadProgressACK() { 191 void ResourceLoader::OnUploadProgressACK() {
191 waiting_for_upload_progress_ack_ = false; 192 waiting_for_upload_progress_ack_ = false;
192 } 193 }
193 194
194 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused, 195 void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused,
195 const GURL& new_url, 196 const net::RedirectInfo& redirect_info,
196 bool* defer) { 197 bool* defer) {
197 DCHECK_EQ(request_.get(), unused); 198 DCHECK_EQ(request_.get(), unused);
198 199
199 VLOG(1) << "OnReceivedRedirect: " << request_->url().spec(); 200 VLOG(1) << "OnReceivedRedirect: " << request_->url().spec();
200 DCHECK(request_->status().is_success()); 201 DCHECK(request_->status().is_success());
201 202
202 ResourceRequestInfoImpl* info = GetRequestInfo(); 203 ResourceRequestInfoImpl* info = GetRequestInfo();
203 204
204 if (info->GetProcessType() != PROCESS_TYPE_PLUGIN && 205 if (info->GetProcessType() != PROCESS_TYPE_PLUGIN &&
205 !ChildProcessSecurityPolicyImpl::GetInstance()-> 206 !ChildProcessSecurityPolicyImpl::GetInstance()->
206 CanRequestURL(info->GetChildID(), new_url)) { 207 CanRequestURL(info->GetChildID(), redirect_info.new_url)) {
207 VLOG(1) << "Denied unauthorized request for " 208 VLOG(1) << "Denied unauthorized request for "
208 << new_url.possibly_invalid_spec(); 209 << redirect_info.new_url.possibly_invalid_spec();
209 210
210 // Tell the renderer that this request was disallowed. 211 // Tell the renderer that this request was disallowed.
211 Cancel(); 212 Cancel();
212 return; 213 return;
213 } 214 }
214 215
215 delegate_->DidReceiveRedirect(this, new_url); 216 delegate_->DidReceiveRedirect(this, redirect_info.new_url);
216 217
217 if (delegate_->HandleExternalProtocol(this, new_url)) { 218 if (delegate_->HandleExternalProtocol(this, redirect_info.new_url)) {
218 // The request is complete so we can remove it. 219 // The request is complete so we can remove it.
219 CancelAndIgnore(); 220 CancelAndIgnore();
220 return; 221 return;
221 } 222 }
222 223
223 scoped_refptr<ResourceResponse> response(new ResourceResponse()); 224 scoped_refptr<ResourceResponse> response(new ResourceResponse());
224 PopulateResourceResponse(request_.get(), response.get()); 225 PopulateResourceResponse(request_.get(), response.get());
225 226
226 if (!handler_->OnRequestRedirected(new_url, response.get(), defer)) { 227 if (!handler_->OnRequestRedirected(redirect_info, response.get(), defer)) {
227 Cancel(); 228 Cancel();
228 } else if (*defer) { 229 } else if (*defer) {
229 deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed. 230 deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed.
230 } 231 }
231 } 232 }
232 233
233 void ResourceLoader::OnAuthRequired(net::URLRequest* unused, 234 void ResourceLoader::OnAuthRequired(net::URLRequest* unused,
234 net::AuthChallengeInfo* auth_info) { 235 net::AuthChallengeInfo* auth_info) {
235 DCHECK_EQ(request_.get(), unused); 236 DCHECK_EQ(request_.get(), unused);
236 237
(...skipping 459 matching lines...) Expand 10 before | Expand all | Expand 10 after
696 case net::URLRequestStatus::FAILED: 697 case net::URLRequestStatus::FAILED:
697 status = STATUS_UNDEFINED; 698 status = STATUS_UNDEFINED;
698 break; 699 break;
699 } 700 }
700 701
701 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX); 702 UMA_HISTOGRAM_ENUMERATION("Net.Prefetch.Pattern", status, STATUS_MAX);
702 } 703 }
703 } 704 }
704 705
705 } // namespace content 706 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698