Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / third_party / WebKit / LayoutTests / http / tests / serviceworker / resources / fetch-rewrite-worker.js
blobf9693a649f6bd2926dca3f8f0fca3214a3550ad8
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;
15 function get_request_init(params) {
16   var init = {};
17   if (params['method']) {
18     init['method'] = params['method'];
19   }
20   if (params['mode']) {
21     init['mode'] = params['mode'];
22   }
23   if (params['credentials']) {
24     init['credentials'] = params['credentials'];
25   }
26   if (params['redirect-mode']) {
27     init['redirect'] = params['redirect-mode'];
28   }
29   return init;
32 self.addEventListener('fetch', function(event) {
33     var params = get_query_params(event.request.url);
34     var init = get_request_init(params);
35     var url = params['url'];
36     if (params['ignore']) {
37       return;
38     }
39     if (params['reject']) {
40       event.respondWith(new Promise(function(resolve, reject) {
41           reject();
42         }));
43       return;
44     }
45     if (params['resolve-null']) {
46       event.respondWith(new Promise(function(resolve) {
47           resolve(null);
48         }));
49       return;
50     }
51     if (params['generate-png']) {
52       var binary = atob(
53           'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAA' +
54           'RnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAAhSURBVDhPY3wro/Kf' +
55           'gQLABKXJBqMGjBoAAqMGDLwBDAwAEsoCTFWunmQAAAAASUVORK5CYII=');
56       var array = new Uint8Array(binary.length);
57       for(var i = 0; i < binary.length; i++) {
58         array[i] = binary.charCodeAt(i)
59       };
60       event.respondWith(new Response(new Blob([array], {type: 'image/png'})));
61       return;
62     }
63     event.respondWith(new Promise(function(resolve, reject) {
64         var request = event.request;
65         if (url) {
66           request = new Request(url, init);
67         }
68         fetch(request).then(resolve, reject);
69       }));
70   });