diff --git a/content/browser/service_worker/service_worker_browsertest.cc b/content/browser/service_worker/service_worker_browsertest.cc index ef49893734253..a91d8a1d999f5 100644 --- a/content/browser/service_worker/service_worker_browsertest.cc +++ b/content/browser/service_worker/service_worker_browsertest.cc @@ -25,6 +25,7 @@ #include "content/public/browser/storage_partition.h" #include "content/public/browser/web_contents.h" #include "content/public/common/content_switches.h" +#include "content/public/common/referrer.h" #include "content/public/test/browser_test_utils.h" #include "content/public/test/content_browser_test.h" #include "content/public/test/content_browser_test_utils.h" @@ -547,7 +548,7 @@ class ServiceWorkerVersionBrowserTest : public ServiceWorkerBrowserTest { embedded_test_server()->GetURL("/service_worker/empty.html"), "GET", ServiceWorkerHeaderMap(), - GURL(""), + Referrer(), false); version_->SetStatus(ServiceWorkerVersion::ACTIVATED); version_->DispatchFetchEvent( diff --git a/content/browser/service_worker/service_worker_cache.cc b/content/browser/service_worker/service_worker_cache.cc index 3011356f4f17f..1348af0aaf6db 100644 --- a/content/browser/service_worker/service_worker_cache.cc +++ b/content/browser/service_worker/service_worker_cache.cc @@ -13,6 +13,7 @@ #include "base/strings/string_util.h" #include "content/browser/service_worker/service_worker_cache.pb.h" #include "content/public/browser/browser_thread.h" +#include "content/public/common/referrer.h" #include "net/base/io_buffer.h" #include "net/base/net_errors.h" #include "net/disk_cache/disk_cache.h" @@ -1096,7 +1097,7 @@ void ServiceWorkerCache::KeysDidReadMetadata( ServiceWorkerFetchRequest(GURL(entry->GetKey()), metadata->request().method(), ServiceWorkerHeaderMap(), - GURL(), + Referrer(), false)); ServiceWorkerHeaderMap& req_headers = diff --git a/content/browser/service_worker/service_worker_cache_unittest.cc b/content/browser/service_worker/service_worker_cache_unittest.cc index e7dbb07ef8c97..910dbd5d0a4ce 100644 --- a/content/browser/service_worker/service_worker_cache_unittest.cc +++ b/content/browser/service_worker/service_worker_cache_unittest.cc @@ -13,6 +13,7 @@ #include "content/browser/quota/mock_quota_manager_proxy.h" #include "content/common/service_worker/service_worker_types.h" #include "content/public/browser/browser_thread.h" +#include "content/public/common/referrer.h" #include "content/public/test/test_browser_context.h" #include "content/public/test/test_browser_thread_bundle.h" #include "net/url_request/url_request_context.h" @@ -214,13 +215,14 @@ class ServiceWorkerCacheTest : public testing::Test { ServiceWorkerHeaderMap headers; headers.insert(std::make_pair("a", "a")); headers.insert(std::make_pair("b", "b")); - body_request_ = ServiceWorkerFetchRequest( - GURL("http://example.com/body.html"), "GET", headers, GURL(), false); + body_request_ = + ServiceWorkerFetchRequest(GURL("http://example.com/body.html"), "GET", + headers, Referrer(), false); no_body_request_ = ServiceWorkerFetchRequest(GURL("http://example.com/no_body.html"), "GET", headers, - GURL(), + Referrer(), false); std::string expected_response; @@ -719,7 +721,7 @@ TEST_F(ServiceWorkerCacheTest, CaselessServiceWorkerFetchRequestHeaders) { ServiceWorkerFetchRequest request(GURL("http://www.example.com"), "GET", ServiceWorkerHeaderMap(), - GURL(), + Referrer(), false); request.headers["content-type"] = "foo"; request.headers["Content-Type"] = "bar"; diff --git a/content/browser/service_worker/service_worker_url_request_job.cc b/content/browser/service_worker/service_worker_url_request_job.cc index b2d836b947d3d..78cdfd182c831 100644 --- a/content/browser/service_worker/service_worker_url_request_job.cc +++ b/content/browser/service_worker/service_worker_url_request_job.cc @@ -24,6 +24,7 @@ #include "content/public/browser/blob_handle.h" #include "content/public/browser/resource_request_info.h" #include "content/public/browser/service_worker_context.h" +#include "content/public/common/referrer.h" #include "net/base/net_errors.h" #include "net/http/http_request_headers.h" #include "net/http/http_response_headers.h" @@ -394,12 +395,19 @@ ServiceWorkerURLRequestJob::CreateFetchRequest() { } request->blob_uuid = blob_uuid; request->blob_size = blob_size; - request->referrer = GURL(request_->referrer()); request->credentials_mode = credentials_mode_; const ResourceRequestInfo* info = ResourceRequestInfo::ForRequest(request_); if (info) { request->is_reload = ui::PageTransitionCoreTypeIs( info->GetPageTransition(), ui::PAGE_TRANSITION_RELOAD); + request->referrer = + Referrer(GURL(request_->referrer()), info->GetReferrerPolicy()); + } else { + CHECK( + request_->referrer_policy() == + net::URLRequest::CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE); + request->referrer = + Referrer(GURL(request_->referrer()), blink::WebReferrerPolicyDefault); } return request.Pass(); } diff --git a/content/common/service_worker/service_worker_types.cc b/content/common/service_worker/service_worker_types.cc index 137290b49da68..b36ed3a030f76 100644 --- a/content/common/service_worker/service_worker_types.cc +++ b/content/common/service_worker/service_worker_types.cc @@ -19,7 +19,7 @@ ServiceWorkerFetchRequest::ServiceWorkerFetchRequest( const GURL& url, const std::string& method, const ServiceWorkerHeaderMap& headers, - const GURL& referrer, + const Referrer& referrer, bool is_reload) : mode(FETCH_REQUEST_MODE_NO_CORS), request_context_type(REQUEST_CONTEXT_TYPE_UNSPECIFIED), diff --git a/content/common/service_worker/service_worker_types.h b/content/common/service_worker/service_worker_types.h index 2921680c3a213..4b03147ac797f 100644 --- a/content/common/service_worker/service_worker_types.h +++ b/content/common/service_worker/service_worker_types.h @@ -11,6 +11,7 @@ #include "base/basictypes.h" #include "base/strings/string_util.h" #include "content/common/content_export.h" +#include "content/public/common/referrer.h" #include "content/public/common/request_context_frame_type.h" #include "content/public/common/request_context_type.h" #include "third_party/WebKit/public/platform/WebServiceWorkerResponseType.h" @@ -80,7 +81,7 @@ struct CONTENT_EXPORT ServiceWorkerFetchRequest { ServiceWorkerFetchRequest(const GURL& url, const std::string& method, const ServiceWorkerHeaderMap& headers, - const GURL& referrer, + const Referrer& referrer, bool is_reload); ~ServiceWorkerFetchRequest(); @@ -92,7 +93,7 @@ struct CONTENT_EXPORT ServiceWorkerFetchRequest { ServiceWorkerHeaderMap headers; std::string blob_uuid; uint64 blob_size; - GURL referrer; + Referrer referrer; FetchCredentialsMode credentials_mode; bool is_reload; }; diff --git a/content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc b/content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc index e88c69f3e7bd6..423de5a1740f7 100644 --- a/content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc +++ b/content/renderer/service_worker/service_worker_cache_storage_dispatcher.cc @@ -12,6 +12,7 @@ #include "base/metrics/histogram_macros.h" #include "base/strings/utf_string_conversions.h" #include "content/common/service_worker/service_worker_messages.h" +#include "content/public/common/referrer.h" #include "content/public/renderer/render_thread.h" #include "content/renderer/service_worker/service_worker_script_context.h" #include "third_party/WebKit/public/platform/WebHTTPHeaderVisitor.h" @@ -52,10 +53,10 @@ ServiceWorkerFetchRequest FetchRequestFromWebRequest( ServiceWorkerHeaderMap headers; web_request.visitHTTPHeaderFields(MakeHeaderVisitor(&headers).get()); - return ServiceWorkerFetchRequest(web_request.url(), - base::UTF16ToASCII(web_request.method()), - headers, web_request.referrerUrl(), - web_request.isReload()); + return ServiceWorkerFetchRequest( + web_request.url(), base::UTF16ToASCII(web_request.method()), headers, + Referrer(web_request.referrerUrl(), web_request.referrerPolicy()), + web_request.isReload()); } void PopulateWebRequestFromFetchRequest( @@ -69,8 +70,8 @@ void PopulateWebRequestFromFetchRequest( web_request->setHeader(base::ASCIIToUTF16(i->first), base::ASCIIToUTF16(i->second)); } - web_request->setReferrer(base::ASCIIToUTF16(request.referrer.spec()), - blink::WebReferrerPolicy::WebReferrerPolicyNever); + web_request->setReferrer(base::ASCIIToUTF16(request.referrer.url.spec()), + request.referrer.policy); web_request->setIsReload(request.is_reload); } diff --git a/content/renderer/service_worker/service_worker_script_context.cc b/content/renderer/service_worker/service_worker_script_context.cc index 15d32a2fe2f81..65cd934eab785 100644 --- a/content/renderer/service_worker/service_worker_script_context.cc +++ b/content/renderer/service_worker/service_worker_script_context.cc @@ -12,6 +12,7 @@ #include "content/child/webmessageportchannel_impl.h" #include "content/common/message_port_messages.h" #include "content/common/service_worker/service_worker_messages.h" +#include "content/public/common/referrer.h" #include "content/renderer/service_worker/embedded_worker_context_client.h" #include "ipc/ipc_message.h" #include "third_party/WebKit/public/platform/WebCrossOriginServiceWorkerClient.h" @@ -284,8 +285,9 @@ void ServiceWorkerScriptContext::OnFetchEvent( webRequest.setBlob(blink::WebString::fromUTF8(request.blob_uuid), request.blob_size); } - webRequest.setReferrer(blink::WebString::fromUTF8(request.referrer.spec()), - blink::WebReferrerPolicyDefault); + webRequest.setReferrer( + blink::WebString::fromUTF8(request.referrer.url.spec()), + request.referrer.policy); webRequest.setMode(GetBlinkFetchRequestMode(request.mode)); webRequest.setCredentialsMode( GetBlinkFetchCredentialsMode(request.credentials_mode));