| importScripts('/resources/testharness.js'); |
| importScripts('sw-helpers.js'); |
| |
| async function updateUI(event) { |
| let updateParams = []; |
| switch (event.registration.id) { |
| case 'update-once': |
| updateParams = [{title: 'Title1'}]; |
| break; |
| case 'update-twice': |
| updateParams = [{title: 'Title1'}, {title: 'Title2'}]; |
| break; |
| } |
| |
| return Promise.all(updateParams.map(param => event.updateUI(param))) |
| .then(() => 'update success') |
| .catch(e => e.name); |
| } |
| |
| self.addEventListener('backgroundfetchsuccess', event => { |
| if (event.registration.id === 'update-inactive') { |
| // Post an async task before calling updateUI from the inactive event. |
| // Any async behaviour outside `waitUntil` should mark the event as |
| // inactive, and subsequent calls to `updateUI` should fail. |
| new Promise(r => step_timeout(r, 0)) |
| .then(() => event.updateUI({ title: 'New title' })) |
| .catch(e => sendMessageToDocument({ update: e.name })); |
| return; |
| } |
| |
| event.waitUntil(updateUI(event) |
| .then(update => sendMessageToDocument({ update }))); |
| }); |