blob: de238058481bcf712e5da24625d12afd3f7287d2 [file] [log] [blame]
async function setUp(dp) {
// Grant permission to register Background Sync events.
await dp.Browser.grantPermissions({
origin: location.origin,
permissions: ['backgroundSync'],
});
await dp.BackgroundService.startObserving({service: 'backgroundFetch'});
dp.BackgroundService.setRecording({shouldRecord: true, service: 'backgroundFetch'});
await dp.BackgroundService.onceRecordingStateChanged();
await dp.BackgroundService.startObserving({service: 'backgroundSync'});
dp.BackgroundService.setRecording({shouldRecord: true, service: 'backgroundSync'});
await dp.BackgroundService.onceRecordingStateChanged();
}
async function tearDown(dp) {
dp.BackgroundService.setRecording({shouldRecord: false, service: 'backgroundFetch'});
await dp.BackgroundService.onceRecordingStateChanged();
dp.BackgroundService.setRecording({shouldRecord: false, service: 'backgroundSync'});
await dp.BackgroundService.onceRecordingStateChanged();
}
async function waitForEvents(dp, numEvents) {
const events = [];
for (let i = 0; i < numEvents; i++)
events.push(await dp.BackgroundService.onceBackgroundServiceEventReceived());
return events.map(event => event.params.backgroundServiceEvent).map(event => {
// Remove the `serviceWorkerRegistrationId` property since it can change.
delete event.serviceWorkerRegistrationId;
// Sort the metadata.
event.eventMetadata = event.eventMetadata.sort(
(m1, m2) => JSON.stringify(m1) < JSON.stringify(m2) ? -1 : 1);
return event;
});
}
(async function(testRunner) {
var {page, session, dp} = await testRunner.startURL(
'resources/background-services.html',
`Tests that the expected events are received.`);
await session.evaluateAsync('installSW()');
await setUp(dp);
testRunner.log('Background Fetch Success:');
session.evaluate(`sw.backgroundFetch.fetch('my-fetch-success', 'background-fetch.txt')`);
testRunner.log(await waitForEvents(dp, 5));
testRunner.log('Background Fetch Failure:');
session.evaluate(`sw.backgroundFetch.fetch('my-fetch-failure', '/missing/')`);
testRunner.log(await waitForEvents(dp, 5));
testRunner.log('Background Sync Success:');
session.evaluate(`sw.sync.register('background-sync-resolve')`);
testRunner.log(await waitForEvents(dp, 3));
testRunner.log('Background Sync Failure:');
session.evaluate(`sw.sync.register('background-sync-reject')`);
testRunner.log(await waitForEvents(dp, 3));
await tearDown(dp);
testRunner.completeTest();
});