Index: webkit/glue/weburlloader_impl.cc |
diff --git a/webkit/glue/weburlloader_impl.cc b/webkit/glue/weburlloader_impl.cc |
index 9e7c3eb3570e4ee295e2059e42ff5803974b905a..e4e1e236fbe49c7f2f430355279016fa56e240de 100644 |
--- a/webkit/glue/weburlloader_impl.cc |
+++ b/webkit/glue/weburlloader_impl.cc |
@@ -33,6 +33,7 @@ |
#include "webkit/glue/resource_loader_bridge.h" |
#include "webkit/glue/webkit_glue.h" |
#include "webkit/glue/webkitplatformsupport_impl.h" |
+#include "webkit/glue/weburlrequest_extradata_impl.h" |
using base::Time; |
using base::TimeDelta; |
@@ -40,6 +41,7 @@ using WebKit::WebData; |
using WebKit::WebHTTPBody; |
using WebKit::WebHTTPHeaderVisitor; |
using WebKit::WebHTTPLoadInfo; |
+using WebKit::WebReferrerPolicy; |
using WebKit::WebSecurityPolicy; |
using WebKit::WebString; |
using WebKit::WebURL; |
@@ -295,6 +297,7 @@ class WebURLLoaderImpl::Context : public base::RefCounted<Context>, |
WebURLLoaderImpl* loader_; |
WebURLRequest request_; |
WebURLLoaderClient* client_; |
+ WebReferrerPolicy referrer_policy_; |
scoped_ptr<ResourceLoaderBridge> bridge_; |
scoped_ptr<FtpDirectoryListingResponseDelegate> ftp_listing_delegate_; |
scoped_ptr<MultipartResponseDelegate> multipart_delegate_; |
@@ -303,7 +306,8 @@ class WebURLLoaderImpl::Context : public base::RefCounted<Context>, |
WebURLLoaderImpl::Context::Context(WebURLLoaderImpl* loader) |
: loader_(loader), |
- client_(NULL) { |
+ client_(NULL), |
+ referrer_policy_(WebKit::WebReferrerPolicyDefault) { |
} |
void WebURLLoaderImpl::Context::Cancel() { |
@@ -418,6 +422,11 @@ void WebURLLoaderImpl::Context::Start( |
request_info.extra_data = request.extraData(); |
bridge_.reset(platform->CreateResourceLoader(request_info)); |
+ if (request.extraData()) { |
+ referrer_policy_ = static_cast<WebURLRequestExtraDataImpl*>( |
+ request.extraData())->referrer_policy(); |
+ } |
+ |
if (!request.httpBody().isNull()) { |
// GET and HEAD requests shouldn't have http bodies. |
DCHECK(method != "GET" && method != "HEAD"); |
@@ -492,8 +501,11 @@ bool WebURLLoaderImpl::Context::OnReceivedRedirect( |
new_request.setDownloadToFile(request_.downloadToFile()); |
WebString referrer_string = WebString::fromUTF8("Referer"); |
- WebString referrer = request_.httpHeaderField(referrer_string); |
- if (!WebSecurityPolicy::shouldHideReferrer(new_url, referrer)) |
+ WebString referrer = WebSecurityPolicy::generateReferrerHeader( |
+ referrer_policy_, |
+ new_url, |
+ request_.httpHeaderField(referrer_string)); |
+ if (!referrer.isEmpty()) |
new_request.setHTTPHeaderField(referrer_string, referrer); |
if (response.httpStatusCode() == 307) |