| // META: script=/common/get-host-info.sub.js | |
| // META: script=/service-workers/service-worker/resources/test-helpers.sub.js | |
| // META: script=resources/utils.js | |
| 'use strict'; | |
| // Covers basic functionality provided by BackgroundFetchRegistration.match(All)?. | |
| // https://wicg.github.io/background-fetch/#dom-backgroundfetchregistration-match | |
| backgroundFetchTest(async (test, backgroundFetch) => { | |
| const registrationId = 'matchexistingrequest'; | |
| const registration = | |
| await backgroundFetch.fetch(registrationId, 'resources/feature-name.txt'); | |
| assert_equals(registration.id, registrationId); | |
| const {type, eventRegistration, results} = await getMessageFromServiceWorker(); | |
| assert_equals('backgroundfetchsuccess', type); | |
| assert_equals(results.length, 1); | |
| assert_equals(eventRegistration.id, registration.id); | |
| assert_equals(eventRegistration.result, 'success'); | |
| assert_equals(eventRegistration.failureReason, ''); | |
| assert_true(results[0].url.includes('resources/feature-name.txt')); | |
| assert_equals(results[0].status, 200); | |
| assert_equals(results[0].text, 'Background Fetch'); | |
| }, 'Matching to a single request should work'); | |
| backgroundFetchTest(async (test, backgroundFetch) => { | |
| const registrationId = 'matchmissingrequest'; | |
| const registration = | |
| await backgroundFetch.fetch(registrationId, 'resources/feature-name.txt'); | |
| assert_equals(registration.id, registrationId); | |
| const {type, eventRegistration, results} = await getMessageFromServiceWorker(); | |
| assert_equals('backgroundfetchsuccess', type); | |
| assert_equals(results.length, 0); | |
| assert_equals(eventRegistration.id, registration.id); | |
| assert_equals(eventRegistration.result, 'success'); | |
| assert_equals(eventRegistration.failureReason, ''); | |
| }, 'Matching to a non-existing request should work'); | |
| backgroundFetchTest(async (test, backgroundFetch) => { | |
| const registrationId = 'matchexistingrequesttwice'; | |
| const registration = | |
| await backgroundFetch.fetch(registrationId, 'resources/feature-name.txt'); | |
| assert_equals(registration.id, registrationId); | |
| const {type, eventRegistration, results} = await getMessageFromServiceWorker(); | |
| assert_equals('backgroundfetchsuccess', type); | |
| assert_equals(results.length, 2); | |
| assert_equals(eventRegistration.id, registration.id); | |
| assert_equals(eventRegistration.result, 'success'); | |
| assert_equals(eventRegistration.failureReason, ''); | |
| assert_true(results[0].url.includes('resources/feature-name.txt')); | |
| assert_equals(results[0].status, 200); | |
| assert_equals(results[0].text, 'Background Fetch'); | |
| assert_true(results[1].url.includes('resources/feature-name.txt')); | |
| assert_equals(results[1].status, 200); | |
| assert_equals(results[1].text, 'Background Fetch'); | |
| }, 'Matching multiple times on the same request works as expected.'); | |
| backgroundFetchTest(async (test, backgroundFetch) => { | |
| const registration = await backgroundFetch.fetch( | |
| uniqueId(), ['resources/feature-name.txt', '/common/slow.py']); | |
| const record = await registration.match('resources/feature-name.txt'); | |
| const response = await record.responseReady; | |
| assert_true(response.url.includes('resources/feature-name.txt')); | |
| const completedResponseText = await response.text(); | |
| assert_equals(completedResponseText, 'Background Fetch'); | |
| }, 'Access to active fetches is supported.'); | |
| backgroundFetchTest(async (test, backgroundFetch) => { | |
| const registration = await backgroundFetch.fetch( | |
| uniqueId(), [ | |
| 'resources/feature-name.txt', | |
| 'resources/feature-name.txt', | |
| 'resources/feature-name.txt?id=3', | |
| new Request('resources/feature-name.txt', {method: 'PUT'}), | |
| '/common/slow.py', | |
| ]); | |
| let matchedRecords = null; | |
| // We should match all the duplicates. | |
| matchedRecords = await registration.matchAll('resources/feature-name.txt'); | |
| assert_equals(matchedRecords.length, 2); | |
| // We should match the request with the query param as well. | |
| matchedRecords = await registration.matchAll('resources/feature-name.txt', {ignoreSearch: true}); | |
| assert_equals(matchedRecords.length, 3); | |
| // We should match the PUT request as well. | |
| matchedRecords = await registration.matchAll('resources/feature-name.txt', {ignoreMethod: true}); | |
| assert_equals(matchedRecords.length, 3); | |
| // We should match all requests. | |
| matchedRecords = await registration.matchAll('resources/feature-name.txt', {ignoreSearch: true, ignoreMethod: true}); | |
| assert_equals(matchedRecords.length, 4); | |
| }, 'Match with query options.'); |