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