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() {
'request.url should be passed to onfetch event.');
assert_equals(event.data.method, 'GET',
'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,
'User-Agent header should be passed to onfetch event.')
service_worker_unregister_and_done(t, scope);
......
......@@ -16,6 +16,7 @@ onfetch = function(e) {
port.postMessage({
url: e.request.url,
method: e.request.method,
referrer: e.request.referrer,
headers: headers,
headerSize: e.request.headers.size
});
......
......@@ -22,8 +22,8 @@ test(function() {
assert_equals(request.url, URL, 'Request.url should match');
assert_equals(request.method, 'GET', 'Request.method should match');
assert_equals(request.referrer, location.href,
'Request.referrer should match');
assert_equals(request.referrer, 'about:client',
'Request.referrer should be about:client');
assert_true(request.headers instanceof Headers,
'Request.headers should be Headers');
......
......@@ -21,16 +21,6 @@ FetchRequestData* FetchRequestData::create()
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* request = FetchRequestData::create();
......@@ -60,10 +50,7 @@ FetchRequestData* FetchRequestData::createRestrictedCopy(ExecutionContext* conte
request->m_headerList = m_headerList->createCopy();
request->m_blobDataHandle = m_blobDataHandle;
request->m_origin = origin;
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));
request->m_referrer.setClient();
request->m_context = WebURLRequest::RequestContextFetch;
request->m_mode = m_mode;
request->m_credentials = m_credentials;
......
......@@ -30,17 +30,17 @@ public:
class Referrer final {
public:
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 isURL() const { return m_type == URLReferrer; }
void setNone()
void setNoReferrer()
{
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;
}
void setURL(const blink::Referrer& referrer)
......@@ -50,12 +50,12 @@ public:
}
blink::Referrer referrer() const { return m_referrer; }
private:
enum Type { NoneReferrer, ClientReferrer, URLReferrer };
enum Type { NoReferrer, ClientReferrer, URLReferrer };
Type m_type;
blink::Referrer m_referrer;
};
static FetchRequestData* create(ExecutionContext*);
static FetchRequestData* create();
static FetchRequestData* create(const blink::WebServiceWorkerRequest&);
FetchRequestData* createRestrictedCopy(ExecutionContext*, PassRefPtr<SecurityOrigin>) const;
FetchRequestData* createCopy() const;
......@@ -84,8 +84,6 @@ public:
private:
FetchRequestData();
static FetchRequestData* create();
AtomicString m_method;
KURL m_url;
Member<FetchHeaderList> m_headerList;
......
......@@ -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
// 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."
request = request->createRestrictedCopy(context, SecurityOrigin::create(context->url()));
// "6. If |input| is a string, run these substeps:"
......@@ -254,8 +254,12 @@ String Request::url() const
String Request::referrer() const
{
// "The referrer attribute's getter must return the empty string if
// request's referrer is none, and request's referrer, serialized,
// otherwise."
// request's referrer is no referrer, "about:client" if request's referrer
// 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;
}
......
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