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