Skip to content
This repository has been archived by the owner on Apr 3, 2020. It is now read-only.

Commit

Permalink
Fix referrer policy handling in service workers
Browse files Browse the repository at this point in the history
BUG=450589
[email protected],[email protected]

Review URL: https://codereview.chromium.org/862053002

Cr-Commit-Position: refs/heads/master@{#313072}
(cherry picked from commit 73fc00d)

Review URL: https://codereview.chromium.org/890973002

Cr-Commit-Position: refs/branch-heads/2272@{#162}
Cr-Branched-From: 827a380-refs/heads/master@{#310958}
  • Loading branch information
jeisinger committed Jan 30, 2015
1 parent acdda61 commit 7b1cab7
Show file tree
Hide file tree
Showing 8 changed files with 34 additions and 18 deletions.
3 changes: 2 additions & 1 deletion content/browser/service_worker/service_worker_browsertest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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(
Expand Down
3 changes: 2 additions & 1 deletion content/browser/service_worker/service_worker_cache.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -1096,7 +1097,7 @@ void ServiceWorkerCache::KeysDidReadMetadata(
ServiceWorkerFetchRequest(GURL(entry->GetKey()),
metadata->request().method(),
ServiceWorkerHeaderMap(),
GURL(),
Referrer(),
false));

ServiceWorkerHeaderMap& req_headers =
Expand Down
10 changes: 6 additions & 4 deletions content/browser/service_worker/service_worker_cache_unittest.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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;
Expand Down Expand Up @@ -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";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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();
}
Expand Down
2 changes: 1 addition & 1 deletion content/common/service_worker/service_worker_types.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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),
Expand Down
5 changes: 3 additions & 2 deletions content/common/service_worker/service_worker_types.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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();

Expand All @@ -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;
};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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(
Expand All @@ -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);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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));
Expand Down

0 comments on commit 7b1cab7

Please sign in to comment.