Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(93)

Unified Diff: LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js

Issue 399543002: [ServiceWorker] Make fetch() method better conformance with the spec. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: update m_forceDoNotAllowStoredCredentials in DocumentThreadableLoader Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js
diff --git a/LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js b/LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js
new file mode 100644
index 0000000000000000000000000000000000000000..7d47e366324f707bbe1c6944ce132f3124ba950c
--- /dev/null
+++ b/LayoutTests/http/tests/serviceworker/resources/fetch-access-control-worker.js
@@ -0,0 +1,113 @@
+self.onmessage = function(e) {
+ var message = e.data;
+ if ('port' in message) {
+ port = message.port;
yhirano 2014/07/23 05:17:13 Please declare |port|.
horo 2014/07/23 09:05:52 Done.
+ }
+};
+
+var baseFrameHtml =
+ '<script>' +
+ 'function onMessage(event) {' +
+ ' var script = document.createElement(\'script\');' +
+ ' script.src = event.data.url;' +
+ ' script.addEventListener(' +
+ ' \'error\',' +
+ ' function() {report({jsonpResult:\'error\'})});' +
+ ' document.body.appendChild(script);' +
+ '}' +
+ 'function report(data) {' +
+ ' window.parent.postMessage(' +
+ ' data,' +
+ ' \'http://127.0.0.1:8000/serviceworker/fetch-access-control.html\');' +
+ '}' +
+ 'function onload() {' +
+ ' window.addEventListener(\'message\', onMessage, false);' +
+ '}' +
+ 'window.addEventListener(\'load\', onload);' +
+ '</script>';
+
+function handleFrame(event) {
+ event.respondWith(new Response(new Blob([baseFrameHtml])));
+}
+
+function getQueryParams(url) {
+ var search = (new URL(url)).search;
+ if (!search) {
+ return {};
+ }
+ var ret = {};
+ var params = search.substring(1).split('&');
+ params.forEach(function(param) {
+ var element = param.split('=');
+ ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]);
+ });
+ return ret;
+}
+
+function getRequestInit(params) {
+ var init = {};
+ if (params['method']) {
+ init['method'] = params['method'];
+ }
+ if (params['mode']) {
+ init['mode'] = params['mode'];
+ }
+ if (params['credentials']) {
+ init['credentials'] = params['credentials'];
+ }
+ if (params['headers'] == 'CUSTOM') {
yhirano 2014/07/23 05:17:13 Please use '===' instead of '=='.
horo 2014/07/23 09:05:52 Done.
+ init['headers'] = {"X-ServiceWorker-Test": "test"};
+ } else if (params['headers'] == '{}') {
+ init['headers'] = {};
+ }
+ return init;
+}
+
+function headersToArray(headers) {
+ var ret = [];
+ headers.forEach(function(value, key) {
+ ret.push([key, value]);
+ });
+ return ret;
+}
+
+self.addEventListener('fetch', function(event) {
+ var originalURL = event.request.url;
+ if (originalURL == 'http://127.0.0.1:8000/serviceworker/resources/fetch-access-control-iframe.html') {
+ handleFrame(event);
+ } else {
+ var params = getQueryParams(originalURL);
+ var init = getRequestInit(params);
+ var url = params['url'];
+ if (params['ignore']) {
+ return;
+ }
+ event.respondWith(new Promise(function(resolve, reject) {
+ try {
+ var request = event.request;
+ if (url) {
+ request = new Request(url, init);
+ } else if (!params['noChange']) {
+ request = new Request(request, init);
+ }
+ fetch(request).then(function(res){
yhirano 2014/07/23 05:17:13 space before '{'
horo 2014/07/23 09:05:52 Done.
+ // Send the result to fetch-access-control.html.
+ port.postMessage({fetchResult: 'resolved',
+ hasBody: !!res.body,
+ headers: headersToArray(res.headers),
+ type: res.type,
+ originalURL: originalURL});
+ resolve(res);
+ }).catch(function(e){
yhirano 2014/07/23 05:17:13 space before '{'
horo 2014/07/23 09:05:52 Done.
+ // Send the result to fetch-access-control.html.
+ port.postMessage({fetchResult: 'rejected'});
+ reject();
+ });
+ } catch (e) {
+ // Send the result to fetch-access-control.html.
+ port.postMessage({fetchResult: 'error'});
+ reject();
+ }
+ }));
+ }
+});

Powered by Google App Engine
This is Rietveld 408576698