Commit b279cb32 authored by horo@chromium.org's avatar horo@chromium.org

[ServiceWorker] Set FetchEvent's request's headers' guard to immutable

The spec of ServiceWorker was changed.
https://github.com/slightlyoff/ServiceWorker/issues/559
https://github.com/slightlyoff/ServiceWorker/commit/fe2cd64e9d84c316fc02b7c29648b0c712402746

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

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

git-svn-id: svn://svn.chromium.org/blink/trunk@185416 bbb929c8-8fbe-4397-9dbb-9b2b20218538
parent 64755741
...@@ -41,7 +41,8 @@ t.step(function() { ...@@ -41,7 +41,8 @@ t.step(function() {
function onMessage(event) { function onMessage(event) {
assert_equals( assert_equals(
event.data.url, event.data.url,
location.href.substring(0, location.href.lastIndexOf('/') + 1) + scope, location.href.substring(0, location.href.lastIndexOf('/') + 1) +
scope,
'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.');
...@@ -49,6 +50,9 @@ t.step(function() { ...@@ -49,6 +50,9 @@ t.step(function() {
'request.referrer should be passed to onfetch event.'); '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.')
assert_equals(event.data.errorNameWhileAppendingHeader, 'TypeError',
'Appending a new header to the request must throw a ' +
'TypeError.')
service_worker_unregister_and_done(t, scope); service_worker_unregister_and_done(t, scope);
} }
}); });
......
...@@ -13,11 +13,18 @@ onfetch = function(e) { ...@@ -13,11 +13,18 @@ onfetch = function(e) {
var key = header[0], value = header[1]; var key = header[0], value = header[1];
headers[key] = value; headers[key] = value;
} }
var errorNameWhileAddingHeader = '';
try {
e.request.headers.append('Test-Header', 'TestValue');
} catch (e) {
errorNameWhileAppendingHeader = e.name;
}
port.postMessage({ port.postMessage({
url: e.request.url, url: e.request.url,
method: e.request.method, method: e.request.method,
referrer: e.request.referrer, referrer: e.request.referrer,
headers: headers, headers: headers,
headerSize: e.request.headers.size headerSize: e.request.headers.size,
errorNameWhileAppendingHeader: errorNameWhileAppendingHeader
}); });
}; };
...@@ -45,6 +45,7 @@ ...@@ -45,6 +45,7 @@
#include "modules/push_messaging/PushEvent.h" #include "modules/push_messaging/PushEvent.h"
#include "modules/serviceworkers/ExtendableEvent.h" #include "modules/serviceworkers/ExtendableEvent.h"
#include "modules/serviceworkers/FetchEvent.h" #include "modules/serviceworkers/FetchEvent.h"
#include "modules/serviceworkers/Headers.h"
#include "modules/serviceworkers/InstallEvent.h" #include "modules/serviceworkers/InstallEvent.h"
#include "modules/serviceworkers/ServiceWorkerGlobalScope.h" #include "modules/serviceworkers/ServiceWorkerGlobalScope.h"
#include "modules/serviceworkers/WaitUntilObserver.h" #include "modules/serviceworkers/WaitUntilObserver.h"
...@@ -87,6 +88,7 @@ void ServiceWorkerGlobalScopeProxy::dispatchFetchEvent(int eventID, const WebSer ...@@ -87,6 +88,7 @@ void ServiceWorkerGlobalScopeProxy::dispatchFetchEvent(int eventID, const WebSer
} }
Request* request = Request::create(m_workerGlobalScope, webRequest); Request* request = Request::create(m_workerGlobalScope, webRequest);
request->headers()->setGuard(Headers::ImmutableGuard);
RefPtrWillBeRawPtr<FetchEvent> fetchEvent(FetchEvent::create(observer, request)); RefPtrWillBeRawPtr<FetchEvent> fetchEvent(FetchEvent::create(observer, request));
fetchEvent->setIsReload(webRequest.isReload()); fetchEvent->setIsReload(webRequest.isReload());
m_workerGlobalScope->dispatchEvent(fetchEvent.release()); m_workerGlobalScope->dispatchEvent(fetchEvent.release());
......
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