Commit 211597c9 authored by horo@chromium.org's avatar horo@chromium.org

[ServiceWorker] Serialize request.referrer to "about:client" when it's client.

The spec of Fetch has been changed.
https://github.com/whatwg/fetch/commit/30c35ec10994d0005f45879778424e8fc7272bde

This change also renames "none" in "no referrer".
https://github.com/whatwg/fetch/commit/0576c5aaf0c21545001beb73aae9d8b585c6ece5

BUG=N/A
TEST=http/tests/serviceworker

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

git-svn-id: svn://svn.chromium.org/blink/trunk@185282 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 5b513b0c
...@@ -45,6 +45,8 @@ t.step(function() { ...@@ -45,6 +45,8 @@ t.step(function() {
'request.url should be passed to onfetch event.'); 'request.url should be passed to onfetch event.');
assert_equals(event.data.method, 'GET', assert_equals(event.data.method, 'GET',
'request.method should be passed to onfetch event.'); 'request.method should be passed to onfetch event.');
assert_equals(event.data.referrer, location.href,
'request.referrer should be passed to onfetch event.');
assert_equals(event.data.headers['user-agent'], navigator.userAgent, assert_equals(event.data.headers['user-agent'], navigator.userAgent,
'User-Agent header should be passed to onfetch event.') 'User-Agent header should be passed to onfetch event.')
service_worker_unregister_and_done(t, scope); service_worker_unregister_and_done(t, scope);
......
...@@ -16,6 +16,7 @@ onfetch = function(e) { ...@@ -16,6 +16,7 @@ onfetch = function(e) {
port.postMessage({ port.postMessage({
url: e.request.url, url: e.request.url,
method: e.request.method, method: e.request.method,
referrer: e.request.referrer,
headers: headers, headers: headers,
headerSize: e.request.headers.size headerSize: e.request.headers.size
}); });
......
...@@ -22,8 +22,8 @@ test(function() { ...@@ -22,8 +22,8 @@ test(function() {
assert_equals(request.url, URL, 'Request.url should match'); assert_equals(request.url, URL, 'Request.url should match');
assert_equals(request.method, 'GET', 'Request.method should match'); assert_equals(request.method, 'GET', 'Request.method should match');
assert_equals(request.referrer, location.href, assert_equals(request.referrer, 'about:client',
'Request.referrer should match'); 'Request.referrer should be about:client');
assert_true(request.headers instanceof Headers, assert_true(request.headers instanceof Headers,
'Request.headers should be Headers'); 'Request.headers should be Headers');
......
...@@ -21,16 +21,6 @@ FetchRequestData* FetchRequestData::create() ...@@ -21,16 +21,6 @@ FetchRequestData* FetchRequestData::create()
return new FetchRequestData(); return new FetchRequestData();
} }
FetchRequestData* FetchRequestData::create(ExecutionContext* context)
{
FetchRequestData* request = FetchRequestData::create();
if (context->isDocument())
request->m_referrer.setClient(blink::Referrer(context->url().strippedForUseAsReferrer(), toDocument(context)->referrerPolicy()));
else
request->m_referrer.setClient(blink::Referrer(context->url().strippedForUseAsReferrer(), ReferrerPolicyDefault));
return request;
}
FetchRequestData* FetchRequestData::create(const WebServiceWorkerRequest& webRequest) FetchRequestData* FetchRequestData::create(const WebServiceWorkerRequest& webRequest)
{ {
FetchRequestData* request = FetchRequestData::create(); FetchRequestData* request = FetchRequestData::create();
...@@ -60,10 +50,7 @@ FetchRequestData* FetchRequestData::createRestrictedCopy(ExecutionContext* conte ...@@ -60,10 +50,7 @@ FetchRequestData* FetchRequestData::createRestrictedCopy(ExecutionContext* conte
request->m_headerList = m_headerList->createCopy(); request->m_headerList = m_headerList->createCopy();
request->m_blobDataHandle = m_blobDataHandle; request->m_blobDataHandle = m_blobDataHandle;
request->m_origin = origin; request->m_origin = origin;
if (context->isDocument()) request->m_referrer.setClient();
request->m_referrer.setClient(blink::Referrer(context->url().strippedForUseAsReferrer(), toDocument(context)->referrerPolicy()));
else
request->m_referrer.setClient(blink::Referrer(context->url().strippedForUseAsReferrer(), ReferrerPolicyDefault));
request->m_context = WebURLRequest::RequestContextFetch; request->m_context = WebURLRequest::RequestContextFetch;
request->m_mode = m_mode; request->m_mode = m_mode;
request->m_credentials = m_credentials; request->m_credentials = m_credentials;
......
...@@ -30,17 +30,17 @@ public: ...@@ -30,17 +30,17 @@ public:
class Referrer final { class Referrer final {
public: public:
Referrer() : m_type(ClientReferrer) { } Referrer() : m_type(ClientReferrer) { }
bool isNone() const { return m_type == NoneReferrer; } bool isNoReferrer() const { return m_type == NoReferrer; }
bool isClient() const { return m_type == ClientReferrer; } bool isClient() const { return m_type == ClientReferrer; }
bool isURL() const { return m_type == URLReferrer; } bool isURL() const { return m_type == URLReferrer; }
void setNone() void setNoReferrer()
{ {
m_referrer = blink::Referrer(); m_referrer = blink::Referrer();
m_type = NoneReferrer; m_type = NoReferrer;
} }
void setClient(const blink::Referrer& referrer) void setClient()
{ {
m_referrer = referrer; m_referrer = blink::Referrer();
m_type = ClientReferrer; m_type = ClientReferrer;
} }
void setURL(const blink::Referrer& referrer) void setURL(const blink::Referrer& referrer)
...@@ -50,12 +50,12 @@ public: ...@@ -50,12 +50,12 @@ public:
} }
blink::Referrer referrer() const { return m_referrer; } blink::Referrer referrer() const { return m_referrer; }
private: private:
enum Type { NoneReferrer, ClientReferrer, URLReferrer }; enum Type { NoReferrer, ClientReferrer, URLReferrer };
Type m_type; Type m_type;
blink::Referrer m_referrer; blink::Referrer m_referrer;
}; };
static FetchRequestData* create(ExecutionContext*); static FetchRequestData* create();
static FetchRequestData* create(const blink::WebServiceWorkerRequest&); static FetchRequestData* create(const blink::WebServiceWorkerRequest&);
FetchRequestData* createRestrictedCopy(ExecutionContext*, PassRefPtr<SecurityOrigin>) const; FetchRequestData* createRestrictedCopy(ExecutionContext*, PassRefPtr<SecurityOrigin>) const;
FetchRequestData* createCopy() const; FetchRequestData* createCopy() const;
...@@ -84,8 +84,6 @@ public: ...@@ -84,8 +84,6 @@ public:
private: private:
FetchRequestData(); FetchRequestData();
static FetchRequestData* create();
AtomicString m_method; AtomicString m_method;
KURL m_url; KURL m_url;
Member<FetchHeaderList> m_headerList; Member<FetchHeaderList> m_headerList;
......
...@@ -142,7 +142,7 @@ Request* Request::create(ExecutionContext* context, const String& input, const D ...@@ -142,7 +142,7 @@ Request* Request::create(ExecutionContext* context, const String& input, const D
{ {
// "2. Let |request| be |input|'s associated request, if |input| is a // "2. Let |request| be |input|'s associated request, if |input| is a
// Request object, and a new request otherwise." // Request object, and a new request otherwise."
FetchRequestData* request(FetchRequestData::create(context)); FetchRequestData* request(FetchRequestData::create());
// "3. Set |request| to a restricted copy of itself." // "3. Set |request| to a restricted copy of itself."
request = request->createRestrictedCopy(context, SecurityOrigin::create(context->url())); request = request->createRestrictedCopy(context, SecurityOrigin::create(context->url()));
// "6. If |input| is a string, run these substeps:" // "6. If |input| is a string, run these substeps:"
...@@ -254,8 +254,12 @@ String Request::url() const ...@@ -254,8 +254,12 @@ String Request::url() const
String Request::referrer() const String Request::referrer() const
{ {
// "The referrer attribute's getter must return the empty string if // "The referrer attribute's getter must return the empty string if
// request's referrer is none, and request's referrer, serialized, // request's referrer is no referrer, "about:client" if request's referrer
// otherwise." // is client and request's referrer, serialized, otherwise."
if (m_request->referrer().isNoReferrer())
return String();
if (m_request->referrer().isClient())
return String("about:client");
return m_request->referrer().referrer().referrer; return m_request->referrer().referrer().referrer;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment