// 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.');