blob: 29324a36e9d4a62f54d72212183a4afa46455180 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Background Fetch Id to use when its value is not significant.
const kBackgroundFetchId = 'bg-fetch-id';
const kBackgroundFetchResource = [ '/background_fetch/types_of_cheese.txt' ];
const kIcon = [
{
src: '/notifications/icon.png',
sizes: '100x100',
type: 'image/png'
}
];
function RegisterServiceWorker() {
navigator.serviceWorker.register('sw.js').then(() => {
sendResultToTest('ok - service worker registered');
}).catch(sendErrorToTest);
}
// Starts a Background Fetch request for a single to-be-downloaded file.
function StartSingleFileDownload() {
navigator.serviceWorker.ready.then(swRegistration => {
const options = {
icons: kIcon,
title: 'Single-file Background Fetch'
};
return swRegistration.backgroundFetch.fetch(
kBackgroundFetchId, kBackgroundFetchResource, options);
}).then(bgFetchRegistration => {
sendResultToTest('ok');
}).catch(sendErrorToTest);
}
// Starts a Background Fetch request for a single to-be-downloaded file, with
// downloadTotal greater than the actual size.
function StartSingleFileDownloadWithBiggerThanActualDownloadTotal() {
navigator.serviceWorker.ready.then(swRegistration => {
const options = {
icons: kIcon,
title: 'Single-file Background Fetch with downloadTotal too high',
downloadTotal: 1000,
};
return swRegistration.backgroundFetch.fetch(
kBackgroundFetchId, kBackgroundFetchResource, options);
}).then(bgFetchRegistration => {
sendResultToTest('ok');
}).catch(sendErrorToTest);
}
// Starts a Background Fetch request for a single to-be-downloaded file, with
// downloadTotal smaller than the actual size.
function StartSingleFileDownloadWithSmallerThanActualDownloadTotal() {
navigator.serviceWorker.ready.then(swRegistration => {
const options = {
icons: kIcon,
title: 'Single-file Background Fetch with downloadTotal too low',
downloadTotal: 80,
};
return swRegistration.backgroundFetch.fetch(
kBackgroundFetchId, kBackgroundFetchResource, options);
}).then(bgFetchRegistration => {
sendResultToTest('ok');
}).catch(sendErrorToTest);
}
// Starts a Background Fetch request for a single to-be-downloaded file, with
// downloadTotal equal to the actual size (in bytes).
function StartSingleFileDownloadWithCorrectDownloadTotal() {
navigator.serviceWorker.ready.then(swRegistration => {
const options = {
icons: kIcon,
title: 'Single-file Background Fetch with accurate downloadTotal',
downloadTotal: 82,
};
return swRegistration.backgroundFetch.fetch(
kBackgroundFetchId, kBackgroundFetchResource, options);
}).then(bgFetchRegistration => {
sendResultToTest('ok');
}).catch(sendErrorToTest);
}
// Listens for a postMessage from sw.js and sends the result to the test.
navigator.serviceWorker.addEventListener('message', event => {
const expectedResponses = [
'backgroundfetchsuccess',
'backgroundfetchfail',
'permissionerror',
'ok',
];
if (expectedResponses.includes(event.data))
sendResultToTest(event.data);
else
sendErrorToTest(Error('Unexpected message received: ' + event.data));
});
// Starts a Backgound Fetch that should succeed.
function RunFetchTillCompletion() {
const resources = [
'/background_fetch/types_of_cheese.txt?idx=1',
'/background_fetch/types_of_cheese.txt?idx=2',
];
navigator.serviceWorker.ready.then(swRegistration => {
return swRegistration.backgroundFetch.fetch(
kBackgroundFetchId, resources);
}).catch(sendErrorToTest);
}
// Starts a Background Fetch that should fail due to a missing resource.
function RunFetchTillCompletionWithMissingResource() {
const resources = [
'/background_fetch/types_of_cheese.txt',
'/background_fetch/missing_cat.txt',
];
navigator.serviceWorker.ready.then(swRegistration => {
return swRegistration.backgroundFetch.fetch(
kBackgroundFetchId, resources);
}).catch(sendErrorToTest);
}
// Starts a Background Fetch that should fail due to a missing resource.
function RunFetchAnExpectAnException() {
const resources = [
'/background_fetch/types_of_cheese.txt',
'/background_fetch/missing_cat.txt',
];
navigator.serviceWorker.ready.then(swRegistration => {
return swRegistration.backgroundFetch.fetch(kBackgroundFetchId, resources);
}).then(sendErrorToTest)
.catch(e => sendResultToTest(e.message));
}
// Starts a Background Fetch with an upload that should succeed.
function RunFetchTillCompletionWithUpload() {
const request = new Request('/background_fetch/upload',
{method: 'POST', body: 'upload!'});
navigator.serviceWorker.ready.then(swRegistration => {
return swRegistration.backgroundFetch.fetch(
kBackgroundFetchId, request);
}).catch(sendErrorToTest);
}
function StartFetchFromServiceWorker() {
navigator.serviceWorker.ready.then(reg => reg.active.postMessage('fetch'));
}
function StartFetchFromServiceWorkerNoWait() {
navigator.serviceWorker.ready.then(
reg => reg.active.postMessage('fetchnowait'));
}
function StartFetchFromIframe() {
const iframe = document.createElement('iframe');
iframe.src = '/background_fetch/background_fetch_iframe.html';
document.body.appendChild(iframe);
}
function StartFetchFromIframeNoWait() {
const iframe = document.createElement('iframe');
iframe.src = '/background_fetch/background_fetch_iframe_nowait.html';
document.body.appendChild(iframe);
}