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

Side by Side Diff: third_party/WebKit/LayoutTests/imported/wpt/service-workers/service-worker/resources/fetch-rewrite-worker.js

Issue 2415873002: Import w3c tests for the service workers (Closed)
Patch Set: Rebase Created 4 years, 2 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 unified diff | Download patch
OLDNEW
(Empty)
1 function get_query_params(url) {
2 var search = (new URL(url)).search;
3 if (!search) {
4 return {};
5 }
6 var ret = {};
7 var params = search.substring(1).split('&');
8 params.forEach(function(param) {
9 var element = param.split('=');
10 ret[decodeURIComponent(element[0])] = decodeURIComponent(element[1]);
11 });
12 return ret;
13 }
14
15 function get_request_init(base, params) {
16 var init = {};
17 init['method'] = params['method'] || base['method'];
18 init['mode'] = params['mode'] || base['mode'];
19 if (init['mode'] == 'navigate') {
20 init['mode'] = 'same-origin';
21 }
22 init['credentials'] = params['credentials'] || base['credentials'];
23 init['redirect'] = params['redirect-mode'] || base['redirect'];
24 return init;
25 }
26
27 self.addEventListener('fetch', function(event) {
28 var params = get_query_params(event.request.url);
29 var init = get_request_init(event.request, params);
30 var url = params['url'];
31 if (params['ignore']) {
32 return;
33 }
34 if (params['throw']) {
35 throw new Error('boom');
36 }
37 if (params['reject']) {
38 event.respondWith(new Promise(function(resolve, reject) {
39 reject();
40 }));
41 return;
42 }
43 if (params['resolve-null']) {
44 event.respondWith(new Promise(function(resolve) {
45 resolve(null);
46 }));
47 return;
48 }
49 if (params['generate-png']) {
50 var binary = atob(
51 'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAA' +
52 'RnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAhSURBVDhPY3wro/Kf' +
53 'gQLABKXJBqMGjBoAAqMGDLwBDAwAEsoCTFWunmQAAAAASUVORK5CYII=');
54 var array = new Uint8Array(binary.length);
55 for(var i = 0; i < binary.length; i++) {
56 array[i] = binary.charCodeAt(i);
57 };
58 event.respondWith(new Response(new Blob([array], {type: 'image/png'})));
59 return;
60 }
61 if (params['check-ua-header']) {
62 var ua = event.request.headers.get('User-Agent');
63 if (ua) {
64 // We have a user agent!
65 event.respondWith(new Response(new Blob([ua])));
66 } else {
67 // We don't have a user-agent!
68 event.respondWith(new Response(new Blob(["NO_UA"])));
69 }
70 return;
71 }
72 if (params['check-accept-header']) {
73 var accept = event.request.headers.get('Accept');
74 if (accept) {
75 event.respondWith(new Response(accept));
76 } else {
77 event.respondWith(new Response('NO_ACCEPT'));
78 }
79 }
80 event.respondWith(new Promise(function(resolve, reject) {
81 var request = event.request;
82 if (url) {
83 request = new Request(url, init);
84 }
85 fetch(request).then(function(response) {
86 var expectedType = params['expected_type'];
87 if (expectedType && response.type !== expectedType) {
88 // Resolve a JSON object with a failure instead of rejecting
89 // in order to distinguish this from a NetworkError, which
90 // may be expected even if the type is correct.
91 resolve(new Response(JSON.stringify({
92 result: 'failure',
93 detail: 'got ' + response.type + ' Response.type instead of ' +
94 expectedType
95 })));
96 }
97
98 var expectedRedirected = params['expected_redirected'];
99 if (typeof expectedRedirected !== 'undefined') {
100 var expected_redirected = (expectedRedirected === 'true');
101 if(response.redirected !== expected_redirected) {
102 // This is simply determining how to pass an error to the outer
103 // test case(fetch-request-redirect.https.html).
104 var execptedResolves = params['expected_resolves'];
105 if (execptedResolves === 'true') {
106 // Reject a JSON object with a failure since promise is expected
107 // to be resolved.
108 reject(new Response(JSON.stringify({
109 result: 'failure',
110 detail: 'got '+ response.redirected +
111 ' Response.redirected instead of ' +
112 expectedRedirected
113 })));
114 } else {
115 // Resolve a JSON object with a failure since promise is
116 // expected to be rejected.
117 resolve(new Response(JSON.stringify({
118 result: 'failure',
119 detail: 'got '+ response.redirected +
120 ' Response.redirected instead of ' +
121 expectedRedirected
122 })));
123 }
124 }
125 }
126
127 if (params['cache']) {
128 var cacheName = "cached-fetches-" + performance.now() + "-" +
129 event.request.url;
130 var cache;
131 var cachedResponse;
132 return self.caches.open(cacheName).then(function(opened) {
133 cache = opened;
134 return cache.put(request, response);
135 }).then(function() {
136 return cache.match(request);
137 }).then(function(cached) {
138 cachedResponse = cached;
139 return self.caches.delete(cacheName);
140 }).then(function() {
141 resolve(cachedResponse);
142 });
143 } else {
144 resolve(response);
145 }
146 }, reject)
147 }));
148 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698