mirror of
https://github.com/servo/servo.git
synced 2025-06-25 09:34:32 +01:00
64 lines
2.5 KiB
JavaScript
64 lines
2.5 KiB
JavaScript
// META: script=/service-workers/service-worker/resources/test-helpers.sub.js
|
|
// META: script=resources/utils.js
|
|
'use strict';
|
|
|
|
// Covers basic functionality provided by BackgroundFetchManager.fetch().
|
|
// Specifically, when `fetch` contains request uploads.
|
|
// https://wicg.github.io/background-fetch/#background-fetch-manager-fetch
|
|
|
|
backgroundFetchTest(async (test, backgroundFetch) => {
|
|
const uploadData = 'Background Fetch!';
|
|
const request =
|
|
new Request('resources/upload.py', {method: 'POST', body: uploadData});
|
|
|
|
const registration = await backgroundFetch.fetch(uniqueId(), request);
|
|
assert_equals(registration.uploadTotal, uploadData.length);
|
|
|
|
const {type, eventRegistration, results} = await getMessageFromServiceWorker();
|
|
assert_equals(type, 'backgroundfetchsuccess');
|
|
assert_equals(results.length, 1);
|
|
assert_equals(eventRegistration.result, 'success');
|
|
assert_equals(eventRegistration.failureReason, '');
|
|
assert_equals(eventRegistration.uploaded, uploadData.length);
|
|
assert_equals(results[0].text, uploadData);
|
|
}, 'Fetch with an upload should work');
|
|
|
|
backgroundFetchTest(async (test, backgroundFetch) => {
|
|
const uploadData = 'Background Fetch!';
|
|
const uploadRequest =
|
|
new Request('resources/upload.py', {method: 'POST', body: uploadData});
|
|
|
|
const registration = await backgroundFetch.fetch(
|
|
uniqueId(),
|
|
[uploadRequest, '/common/slow.py']);
|
|
|
|
const uploaded = await new Promise(resolve => {
|
|
registration.onprogress = event => {
|
|
if (event.target.downloaded === 0)
|
|
return;
|
|
// If a progress event with downloaded bytes was received, then
|
|
// everything was uploaded.
|
|
resolve(event.target.uploaded);
|
|
};
|
|
});
|
|
|
|
assert_equals(uploaded, uploadData.length);
|
|
}, 'Progress event includes uploaded bytes');
|
|
|
|
backgroundFetchTest(async (test, backgroundFetch) => {
|
|
const uploadRequest1 =
|
|
new Request('resources/upload.py', {method: 'POST', body: 'upload1'});
|
|
const uploadRequest2 =
|
|
new Request('resources/upload.py', {method: 'POST', body: 'upload2'});
|
|
|
|
await backgroundFetch.fetch(uniqueId(), [uploadRequest1, uploadRequest2]);
|
|
|
|
const {type, eventRegistration, results} = await getMessageFromServiceWorker();
|
|
assert_equals(type, 'backgroundfetchsuccess');
|
|
assert_equals(results.length, 2);
|
|
assert_equals(eventRegistration.result, 'success');
|
|
assert_equals(eventRegistration.failureReason, '');
|
|
|
|
assert_array_equals([results[0].text, results[1].text].sort(),
|
|
['upload1', 'upload2']);
|
|
}, 'Duplicate upload requests work and can be distinguished.');
|