summaryrefslogtreecommitdiffstats
path: root/content/browser/loader
diff options
context:
space:
mode:
authordavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-15 20:49:59 +0000
committerdavidben@chromium.org <davidben@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-08-15 20:51:41 +0000
commitcba246463b2bda73877fc53da6d7eff97448d93d (patch)
treec8a77dfaff426ea06667b3714e4af2d9ed3b7d94 /content/browser/loader
parent7d0a0cac7c1233e6beeaf7ca8092f89f81e950ef (diff)
downloadchromium_src-cba246463b2bda73877fc53da6d7eff97448d93d.zip
chromium_src-cba246463b2bda73877fc53da6d7eff97448d93d.tar.gz
chromium_src-cba246463b2bda73877fc53da6d7eff97448d93d.tar.bz2
Plumb redirect info out of net, through content, and into child processes.
This saves the logic in PluginURLFetcher and WebURLLoader that has to replicate the method-munging, referrer-munging, and first-party-URL-munging logic that is already done in net/. BUG=384609 Review URL: https://codereview.chromium.org/398903002 Cr-Commit-Position: refs/heads/master@{#290005} git-svn-id: svn://svn.chromium.org/chrome/trunk/src@290005 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/browser/loader')
-rw-r--r--content/browser/loader/async_resource_handler.cc13
-rw-r--r--content/browser/loader/async_resource_handler.h2
-rw-r--r--content/browser/loader/certificate_resource_handler.cc9
-rw-r--r--content/browser/loader/certificate_resource_handler.h4
-rw-r--r--content/browser/loader/cross_site_resource_handler.cc9
-rw-r--r--content/browser/loader/cross_site_resource_handler.h2
-rw-r--r--content/browser/loader/detachable_resource_handler.cc10
-rw-r--r--content/browser/loader/detachable_resource_handler.h2
-rw-r--r--content/browser/loader/layered_resource_handler.cc9
-rw-r--r--content/browser/loader/layered_resource_handler.h2
-rw-r--r--content/browser/loader/resource_dispatcher_host_impl.cc16
-rw-r--r--content/browser/loader/resource_handler.h3
-rw-r--r--content/browser/loader/resource_loader.cc13
-rw-r--r--content/browser/loader/resource_loader.h2
-rw-r--r--content/browser/loader/resource_loader_unittest.cc2
-rw-r--r--content/browser/loader/stream_resource_handler.cc7
-rw-r--r--content/browser/loader/stream_resource_handler.h2
-rw-r--r--content/browser/loader/sync_resource_handler.cc10
-rw-r--r--content/browser/loader/sync_resource_handler.h2
-rw-r--r--content/browser/loader/throttling_resource_handler.cc19
-rw-r--r--content/browser/loader/throttling_resource_handler.h4
21 files changed, 82 insertions, 60 deletions
diff --git a/content/browser/loader/async_resource_handler.cc b/content/browser/loader/async_resource_handler.cc
index 4038771..87d82ca 100644
--- a/content/browser/loader/async_resource_handler.cc
+++ b/content/browser/loader/async_resource_handler.cc
@@ -29,6 +29,7 @@
#include "net/base/load_flags.h"
#include "net/base/net_log.h"
#include "net/base/net_util.h"
+#include "net/url_request/redirect_info.h"
using base::TimeTicks;
@@ -134,9 +135,10 @@ bool AsyncResourceHandler::OnUploadProgress(uint64 position,
new ResourceMsg_UploadProgress(GetRequestID(), position, size));
}
-bool AsyncResourceHandler::OnRequestRedirected(const GURL& new_url,
- ResourceResponse* response,
- bool* defer) {
+bool AsyncResourceHandler::OnRequestRedirected(
+ const net::RedirectInfo& redirect_info,
+ ResourceResponse* response,
+ bool* defer) {
const ResourceRequestInfoImpl* info = GetRequestInfo();
if (!info->filter())
return false;
@@ -146,7 +148,7 @@ bool AsyncResourceHandler::OnRequestRedirected(const GURL& new_url,
if (rdh_->delegate()) {
rdh_->delegate()->OnRequestRedirected(
- new_url, request(), info->GetContext(), response);
+ redirect_info.new_url, request(), info->GetContext(), response);
}
DevToolsNetLogObserver::PopulateResponseInfo(request(), response);
@@ -159,8 +161,7 @@ bool AsyncResourceHandler::OnRequestRedirected(const GURL& new_url,
// and hopefully those will eventually all be owned by the browser. It's
// possible this is still needed while renderer-owned ones exist.
return info->filter()->Send(new ResourceMsg_ReceivedRedirect(
- GetRequestID(), new_url, request()->first_party_for_cookies(),
- response->head));
+ GetRequestID(), redirect_info, response->head));
}
bool AsyncResourceHandler::OnResponseStarted(ResourceResponse* response,
diff --git a/content/browser/loader/async_resource_handler.h b/content/browser/loader/async_resource_handler.h
index b082119..6842b19 100644
--- a/content/browser/loader/async_resource_handler.h
+++ b/content/browser/loader/async_resource_handler.h
@@ -36,7 +36,7 @@ class AsyncResourceHandler : public ResourceHandler,
// ResourceHandler implementation:
virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
- virtual bool OnRequestRedirected(const GURL& new_url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) OVERRIDE;
virtual bool OnResponseStarted(ResourceResponse* response,
diff --git a/content/browser/loader/certificate_resource_handler.cc b/content/browser/loader/certificate_resource_handler.cc
index 9b3a607..eb1976b 100644
--- a/content/browser/loader/certificate_resource_handler.cc
+++ b/content/browser/loader/certificate_resource_handler.cc
@@ -12,6 +12,7 @@
#include "net/base/mime_sniffer.h"
#include "net/base/mime_util.h"
#include "net/http/http_response_headers.h"
+#include "net/url_request/redirect_info.h"
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_status.h"
@@ -34,10 +35,10 @@ bool CertificateResourceHandler::OnUploadProgress(uint64 position,
return true;
}
-bool CertificateResourceHandler::OnRequestRedirected(const GURL& url,
- ResourceResponse* resp,
- bool* defer) {
- url_ = url;
+bool CertificateResourceHandler::OnRequestRedirected(
+ const net::RedirectInfo& redirect_info,
+ ResourceResponse* resp,
+ bool* defer) {
return true;
}
diff --git a/content/browser/loader/certificate_resource_handler.h b/content/browser/loader/certificate_resource_handler.h
index 9c67860..b91e495 100644
--- a/content/browser/loader/certificate_resource_handler.h
+++ b/content/browser/loader/certificate_resource_handler.h
@@ -14,7 +14,6 @@
#include "base/memory/scoped_ptr.h"
#include "content/browser/loader/resource_handler.h"
#include "net/base/mime_util.h"
-#include "url/gurl.h"
namespace net {
class IOBuffer;
@@ -37,7 +36,7 @@ class CertificateResourceHandler : public ResourceHandler {
virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
// Not needed, as this event handler ought to be the final resource.
- virtual bool OnRequestRedirected(const GURL& url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* resp,
bool* defer) OVERRIDE;
@@ -73,7 +72,6 @@ class CertificateResourceHandler : public ResourceHandler {
void AssembleResource();
- GURL url_;
size_t content_length_;
ContentVector buffer_;
scoped_refptr<net::IOBuffer> read_buffer_;
diff --git a/content/browser/loader/cross_site_resource_handler.cc b/content/browser/loader/cross_site_resource_handler.cc
index 486f6f9..6efe97d 100644
--- a/content/browser/loader/cross_site_resource_handler.cc
+++ b/content/browser/loader/cross_site_resource_handler.cc
@@ -128,17 +128,12 @@ CrossSiteResourceHandler::~CrossSiteResourceHandler() {
}
bool CrossSiteResourceHandler::OnRequestRedirected(
- const GURL& new_url,
+ const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) {
- // Top-level requests change their cookie first-party URL on redirects, while
- // subframes retain the parent's value.
- if (GetRequestInfo()->GetResourceType() == RESOURCE_TYPE_MAIN_FRAME)
- request()->set_first_party_for_cookies(new_url);
-
// We should not have started the transition before being redirected.
DCHECK(!in_cross_site_transition_);
- return next_handler_->OnRequestRedirected(new_url, response, defer);
+ return next_handler_->OnRequestRedirected(redirect_info, response, defer);
}
bool CrossSiteResourceHandler::OnResponseStarted(
diff --git a/content/browser/loader/cross_site_resource_handler.h b/content/browser/loader/cross_site_resource_handler.h
index edbd151..ef29d90 100644
--- a/content/browser/loader/cross_site_resource_handler.h
+++ b/content/browser/loader/cross_site_resource_handler.h
@@ -31,7 +31,7 @@ class CrossSiteResourceHandler : public LayeredResourceHandler {
virtual ~CrossSiteResourceHandler();
// ResourceHandler implementation:
- virtual bool OnRequestRedirected(const GURL& new_url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) OVERRIDE;
virtual bool OnResponseStarted(ResourceResponse* response,
diff --git a/content/browser/loader/detachable_resource_handler.cc b/content/browser/loader/detachable_resource_handler.cc
index b8ef55d..1fe9f06 100644
--- a/content/browser/loader/detachable_resource_handler.cc
+++ b/content/browser/loader/detachable_resource_handler.cc
@@ -89,15 +89,17 @@ bool DetachableResourceHandler::OnUploadProgress(uint64 position, uint64 size) {
return next_handler_->OnUploadProgress(position, size);
}
-bool DetachableResourceHandler::OnRequestRedirected(const GURL& url,
- ResourceResponse* response,
- bool* defer) {
+bool DetachableResourceHandler::OnRequestRedirected(
+ const net::RedirectInfo& redirect_info,
+ ResourceResponse* response,
+ bool* defer) {
DCHECK(!is_deferred_);
if (!next_handler_)
return true;
- bool ret = next_handler_->OnRequestRedirected(url, response, &is_deferred_);
+ bool ret = next_handler_->OnRequestRedirected(
+ redirect_info, response, &is_deferred_);
*defer = is_deferred_;
return ret;
}
diff --git a/content/browser/loader/detachable_resource_handler.h b/content/browser/loader/detachable_resource_handler.h
index 9a68570..60181ad 100644
--- a/content/browser/loader/detachable_resource_handler.h
+++ b/content/browser/loader/detachable_resource_handler.h
@@ -49,7 +49,7 @@ class DetachableResourceHandler : public ResourceHandler,
// ResourceHandler implementation:
virtual void SetController(ResourceController* controller) OVERRIDE;
virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
- virtual bool OnRequestRedirected(const GURL& url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) OVERRIDE;
virtual bool OnResponseStarted(ResourceResponse* response,
diff --git a/content/browser/loader/layered_resource_handler.cc b/content/browser/loader/layered_resource_handler.cc
index 1c65820..fa15b0d 100644
--- a/content/browser/loader/layered_resource_handler.cc
+++ b/content/browser/loader/layered_resource_handler.cc
@@ -35,11 +35,12 @@ bool LayeredResourceHandler::OnUploadProgress(uint64 position,
return next_handler_->OnUploadProgress(position, size);
}
-bool LayeredResourceHandler::OnRequestRedirected(const GURL& url,
- ResourceResponse* response,
- bool* defer) {
+bool LayeredResourceHandler::OnRequestRedirected(
+ const net::RedirectInfo& redirect_info,
+ ResourceResponse* response,
+ bool* defer) {
DCHECK(next_handler_.get());
- return next_handler_->OnRequestRedirected(url, response, defer);
+ return next_handler_->OnRequestRedirected(redirect_info, response, defer);
}
bool LayeredResourceHandler::OnResponseStarted(ResourceResponse* response,
diff --git a/content/browser/loader/layered_resource_handler.h b/content/browser/loader/layered_resource_handler.h
index dc6de23..3a092c3 100644
--- a/content/browser/loader/layered_resource_handler.h
+++ b/content/browser/loader/layered_resource_handler.h
@@ -26,7 +26,7 @@ class CONTENT_EXPORT LayeredResourceHandler : public ResourceHandler {
// ResourceHandler implementation:
virtual void SetController(ResourceController* controller) OVERRIDE;
virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
- virtual bool OnRequestRedirected(const GURL& url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) OVERRIDE;
virtual bool OnResponseStarted(ResourceResponse* response,
diff --git a/content/browser/loader/resource_dispatcher_host_impl.cc b/content/browser/loader/resource_dispatcher_host_impl.cc
index 3b66397..f63b7cf 100644
--- a/content/browser/loader/resource_dispatcher_host_impl.cc
+++ b/content/browser/loader/resource_dispatcher_host_impl.cc
@@ -517,6 +517,15 @@ DownloadInterruptReason ResourceDispatcherHostImpl::BeginDownload(
}
request->SetLoadFlags(request->load_flags() | extra_load_flags);
+ // We treat a download as a main frame load, and thus update the policy URL on
+ // redirects.
+ //
+ // TODO(davidben): Is this correct? If this came from a
+ // ViewHostMsg_DownloadUrl in a frame, should it have first-party URL set
+ // appropriately?
+ request->set_first_party_url_policy(
+ net::URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT);
+
// Check if the renderer is permitted to request the requested URL.
if (!ChildProcessSecurityPolicyImpl::GetInstance()->
CanRequestURL(child_id, url)) {
@@ -1034,6 +1043,13 @@ void ResourceDispatcherHostImpl::BeginRequest(
new_request->set_first_party_for_cookies(
request_data.first_party_for_cookies);
+ // If the request is a MAIN_FRAME request, the first-party URL gets updated on
+ // redirects.
+ if (request_data.resource_type == RESOURCE_TYPE_MAIN_FRAME) {
+ new_request->set_first_party_url_policy(
+ net::URLRequest::UPDATE_FIRST_PARTY_URL_ON_REDIRECT);
+ }
+
const Referrer referrer(request_data.referrer, request_data.referrer_policy);
SetReferrerForRequest(new_request.get(), referrer);
diff --git a/content/browser/loader/resource_handler.h b/content/browser/loader/resource_handler.h
index a9d8a38..306a672 100644
--- a/content/browser/loader/resource_handler.h
+++ b/content/browser/loader/resource_handler.h
@@ -25,6 +25,7 @@ namespace net {
class IOBuffer;
class URLRequest;
class URLRequestStatus;
+struct RedirectInfo;
} // namespace net
namespace content {
@@ -51,7 +52,7 @@ class CONTENT_EXPORT ResourceHandler
// false. Set |*defer| to true to defer the redirect. The redirect may be
// followed later on via ResourceDispatcherHost::FollowDeferredRedirect. If
// the handler returns false, then the request is cancelled.
- virtual bool OnRequestRedirected(const GURL& url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) = 0;
diff --git a/content/browser/loader/resource_loader.cc b/content/browser/loader/resource_loader.cc
index f8a70d1..a0713eb 100644
--- a/content/browser/loader/resource_loader.cc
+++ b/content/browser/loader/resource_loader.cc
@@ -30,6 +30,7 @@
#include "net/base/load_flags.h"
#include "net/http/http_response_headers.h"
#include "net/ssl/client_cert_store.h"
+#include "net/url_request/redirect_info.h"
#include "net/url_request/url_request_status.h"
using base::TimeDelta;
@@ -199,7 +200,7 @@ void ResourceLoader::OnUploadProgressACK() {
}
void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused,
- const GURL& new_url,
+ const net::RedirectInfo& redirect_info,
bool* defer) {
DCHECK_EQ(request_.get(), unused);
@@ -210,18 +211,18 @@ void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused,
if (info->GetProcessType() != PROCESS_TYPE_PLUGIN &&
!ChildProcessSecurityPolicyImpl::GetInstance()->
- CanRequestURL(info->GetChildID(), new_url)) {
+ CanRequestURL(info->GetChildID(), redirect_info.new_url)) {
VLOG(1) << "Denied unauthorized request for "
- << new_url.possibly_invalid_spec();
+ << redirect_info.new_url.possibly_invalid_spec();
// Tell the renderer that this request was disallowed.
Cancel();
return;
}
- delegate_->DidReceiveRedirect(this, new_url);
+ delegate_->DidReceiveRedirect(this, redirect_info.new_url);
- if (delegate_->HandleExternalProtocol(this, new_url)) {
+ if (delegate_->HandleExternalProtocol(this, redirect_info.new_url)) {
// The request is complete so we can remove it.
CancelAndIgnore();
return;
@@ -230,7 +231,7 @@ void ResourceLoader::OnReceivedRedirect(net::URLRequest* unused,
scoped_refptr<ResourceResponse> response(new ResourceResponse());
PopulateResourceResponse(info, request_.get(), response.get());
- if (!handler_->OnRequestRedirected(new_url, response.get(), defer)) {
+ if (!handler_->OnRequestRedirected(redirect_info, response.get(), defer)) {
Cancel();
} else if (*defer) {
deferred_stage_ = DEFERRED_REDIRECT; // Follow redirect when resumed.
diff --git a/content/browser/loader/resource_loader.h b/content/browser/loader/resource_loader.h
index d06f58c..21f800e 100644
--- a/content/browser/loader/resource_loader.h
+++ b/content/browser/loader/resource_loader.h
@@ -57,7 +57,7 @@ class CONTENT_EXPORT ResourceLoader : public net::URLRequest::Delegate,
// net::URLRequest::Delegate implementation:
virtual void OnReceivedRedirect(net::URLRequest* request,
- const GURL& new_url,
+ const net::RedirectInfo& redirect_info,
bool* defer) OVERRIDE;
virtual void OnAuthRequired(net::URLRequest* request,
net::AuthChallengeInfo* info) OVERRIDE;
diff --git a/content/browser/loader/resource_loader_unittest.cc b/content/browser/loader/resource_loader_unittest.cc
index 047e404..1e489e8 100644
--- a/content/browser/loader/resource_loader_unittest.cc
+++ b/content/browser/loader/resource_loader_unittest.cc
@@ -132,7 +132,7 @@ class ResourceHandlerStub : public ResourceHandler {
return true;
}
- virtual bool OnRequestRedirected(const GURL& url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) OVERRIDE {
NOTREACHED();
diff --git a/content/browser/loader/stream_resource_handler.cc b/content/browser/loader/stream_resource_handler.cc
index 46713fc..0a2d6e8 100644
--- a/content/browser/loader/stream_resource_handler.cc
+++ b/content/browser/loader/stream_resource_handler.cc
@@ -36,9 +36,10 @@ bool StreamResourceHandler::OnUploadProgress(uint64 position,
return true;
}
-bool StreamResourceHandler::OnRequestRedirected(const GURL& url,
- ResourceResponse* resp,
- bool* defer) {
+bool StreamResourceHandler::OnRequestRedirected(
+ const net::RedirectInfo& redirect_info,
+ ResourceResponse* resp,
+ bool* defer) {
return true;
}
diff --git a/content/browser/loader/stream_resource_handler.h b/content/browser/loader/stream_resource_handler.h
index 3b8bc21..75a987d 100644
--- a/content/browser/loader/stream_resource_handler.h
+++ b/content/browser/loader/stream_resource_handler.h
@@ -34,7 +34,7 @@ class StreamResourceHandler : public StreamWriteObserver,
virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
// Not needed, as this event handler ought to be the final resource.
- virtual bool OnRequestRedirected(const GURL& url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* resp,
bool* defer) OVERRIDE;
diff --git a/content/browser/loader/sync_resource_handler.cc b/content/browser/loader/sync_resource_handler.cc
index 090b939..1da8887 100644
--- a/content/browser/loader/sync_resource_handler.cc
+++ b/content/browser/loader/sync_resource_handler.cc
@@ -14,6 +14,7 @@
#include "content/public/browser/resource_request_info.h"
#include "net/base/io_buffer.h"
#include "net/http/http_response_headers.h"
+#include "net/url_request/redirect_info.h"
namespace content {
@@ -45,23 +46,24 @@ bool SyncResourceHandler::OnUploadProgress(uint64 position, uint64 size) {
}
bool SyncResourceHandler::OnRequestRedirected(
- const GURL& new_url,
+ const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) {
if (rdh_->delegate()) {
rdh_->delegate()->OnRequestRedirected(
- new_url, request(), GetRequestInfo()->GetContext(), response);
+ redirect_info.new_url, request(), GetRequestInfo()->GetContext(),
+ response);
}
DevToolsNetLogObserver::PopulateResponseInfo(request(), response);
// TODO(darin): It would be much better if this could live in WebCore, but
// doing so requires API changes at all levels. Similar code exists in
// WebCore/platform/network/cf/ResourceHandleCFNet.cpp :-(
- if (new_url.GetOrigin() != result_.final_url.GetOrigin()) {
+ if (redirect_info.new_url.GetOrigin() != result_.final_url.GetOrigin()) {
LOG(ERROR) << "Cross origin redirect denied";
return false;
}
- result_.final_url = new_url;
+ result_.final_url = redirect_info.new_url;
total_transfer_size_ += request()->GetTotalReceivedBytes();
return true;
diff --git a/content/browser/loader/sync_resource_handler.h b/content/browser/loader/sync_resource_handler.h
index 693b48f..bc26e4b 100644
--- a/content/browser/loader/sync_resource_handler.h
+++ b/content/browser/loader/sync_resource_handler.h
@@ -34,7 +34,7 @@ class SyncResourceHandler : public ResourceHandler {
virtual ~SyncResourceHandler();
virtual bool OnUploadProgress(uint64 position, uint64 size) OVERRIDE;
- virtual bool OnRequestRedirected(const GURL& new_url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) OVERRIDE;
virtual bool OnResponseStarted(ResourceResponse* response,
diff --git a/content/browser/loader/throttling_resource_handler.cc b/content/browser/loader/throttling_resource_handler.cc
index 9b1df54..1f17d33 100644
--- a/content/browser/loader/throttling_resource_handler.cc
+++ b/content/browser/loader/throttling_resource_handler.cc
@@ -31,22 +31,23 @@ ThrottlingResourceHandler::ThrottlingResourceHandler(
ThrottlingResourceHandler::~ThrottlingResourceHandler() {
}
-bool ThrottlingResourceHandler::OnRequestRedirected(const GURL& new_url,
- ResourceResponse* response,
- bool* defer) {
+bool ThrottlingResourceHandler::OnRequestRedirected(
+ const net::RedirectInfo& redirect_info,
+ ResourceResponse* response,
+ bool* defer) {
DCHECK(!cancelled_by_resource_throttle_);
*defer = false;
while (next_index_ < throttles_.size()) {
int index = next_index_;
- throttles_[index]->WillRedirectRequest(new_url, defer);
+ throttles_[index]->WillRedirectRequest(redirect_info.new_url, defer);
next_index_++;
if (cancelled_by_resource_throttle_)
return false;
if (*defer) {
OnRequestDefered(index);
deferred_stage_ = DEFERRED_REDIRECT;
- deferred_url_ = new_url;
+ deferred_redirect_ = redirect_info;
deferred_response_ = response;
return true; // Do not cancel.
}
@@ -54,7 +55,7 @@ bool ThrottlingResourceHandler::OnRequestRedirected(const GURL& new_url,
next_index_ = 0; // Reset for next time.
- return next_handler_->OnRequestRedirected(new_url, response, defer);
+ return next_handler_->OnRequestRedirected(redirect_info, response, defer);
}
bool ThrottlingResourceHandler::OnWillStart(const GURL& url, bool* defer) {
@@ -199,13 +200,13 @@ void ThrottlingResourceHandler::ResumeNetworkStart() {
void ThrottlingResourceHandler::ResumeRedirect() {
DCHECK(!cancelled_by_resource_throttle_);
- GURL new_url = deferred_url_;
- deferred_url_ = GURL();
+ net::RedirectInfo redirect_info = deferred_redirect_;
+ deferred_redirect_ = net::RedirectInfo();
scoped_refptr<ResourceResponse> response;
deferred_response_.swap(response);
bool defer = false;
- if (!OnRequestRedirected(new_url, response.get(), &defer)) {
+ if (!OnRequestRedirected(redirect_info, response.get(), &defer)) {
controller()->Cancel();
} else if (!defer) {
controller()->Resume();
diff --git a/content/browser/loader/throttling_resource_handler.h b/content/browser/loader/throttling_resource_handler.h
index fd284db..4e1b814 100644
--- a/content/browser/loader/throttling_resource_handler.h
+++ b/content/browser/loader/throttling_resource_handler.h
@@ -9,6 +9,7 @@
#include "base/memory/scoped_vector.h"
#include "content/browser/loader/layered_resource_handler.h"
#include "content/public/browser/resource_controller.h"
+#include "net/url_request/redirect_info.h"
#include "url/gurl.h"
namespace net {
@@ -31,7 +32,7 @@ class ThrottlingResourceHandler : public LayeredResourceHandler,
virtual ~ThrottlingResourceHandler();
// LayeredResourceHandler overrides:
- virtual bool OnRequestRedirected(const GURL& url,
+ virtual bool OnRequestRedirected(const net::RedirectInfo& redirect_info,
ResourceResponse* response,
bool* defer) OVERRIDE;
virtual bool OnResponseStarted(ResourceResponse* response,
@@ -68,6 +69,7 @@ class ThrottlingResourceHandler : public LayeredResourceHandler,
size_t next_index_;
GURL deferred_url_;
+ net::RedirectInfo deferred_redirect_;
scoped_refptr<ResourceResponse> deferred_response_;
bool cancelled_by_resource_throttle_;