| // This worker reports back the final state of FetchEvent.handled (RESOLVED or |
| // REJECTED) to the test. |
| |
| self.addEventListener('message', function(event) { |
| self.port = event.data.port; |
| }); |
| |
| self.addEventListener('fetch', function(event) { |
| try { |
| event.handled.then(() => { |
| self.port.postMessage('RESOLVED'); |
| }, () => { |
| self.port.postMessage('REJECTED'); |
| }); |
| } catch (e) { |
| self.port.postMessage('FAILED'); |
| return; |
| } |
| |
| const search = new URL(event.request.url).search; |
| switch (search) { |
| case '?respondWith-not-called': |
| break; |
| case '?respondWith-not-called-and-event-canceled': |
| event.preventDefault(); |
| break; |
| case '?respondWith-called-and-promise-resolved': |
| event.respondWith(Promise.resolve(new Response('body'))); |
| break; |
| case '?respondWith-called-and-promise-resolved-to-invalid-response': |
| event.respondWith(Promise.resolve('invalid response')); |
| break; |
| case '?respondWith-called-and-promise-rejected': |
| event.respondWith(Promise.reject(new Error('respondWith rejected'))); |
| break; |
| } |
| }); |