| // META: script=/common/get-host-info.sub.js |
| // META: script=/common/utils.js |
| // META: script=/fetch/fetch-later/resources/fetch-later-helper.js |
| // META: script=/fetch/fetch-later/quota/resources/helper.js |
| 'use strict'; |
| |
| const {HTTPS_ORIGIN} = get_host_info(); |
| |
| // Skips FormData & URLSearchParams, as browser adds extra bytes to them |
| // in addition to the user-provided content. It is difficult to test a |
| // request right at the quota limit. |
| // Skips File & Blob as it's difficult to estimate what additional data are |
| // added into them. |
| const dataType = BeaconDataType.String; |
| |
| // Request headers are counted into total request size. |
| const headers = new Headers({'Content-Type': 'text/plain;charset=UTF-8'}); |
| |
| // Test making a POST request with max possible payload. |
| promise_test(async _ => { |
| const uuid = token(); |
| const requestUrl = generateSetBeaconURL(uuid, {host: HTTPS_ORIGIN}); |
| await expectFetchLater( |
| { |
| activateAfter: 0, |
| method: 'POST', |
| bodySize: getRemainingQuota(QUOTA_PER_ORIGIN, requestUrl, headers), |
| }, |
| { |
| targetUrl: requestUrl, |
| uuid: uuid, |
| }); |
| }, `fetchLater() accepts max payload in a POST request body of ${dataType}.`); |
| |
| // Test making a POST request with max+1 possible payload. |
| test(_ => { |
| const uuid = token(); |
| const requestUrl = generateSetBeaconURL(uuid, {host: HTTPS_ORIGIN}); |
| assert_throws_dom( |
| 'QuotaExceededError', |
| () => fetchLater(requestUrl, { |
| activateAfter: 0, |
| method: 'POST', |
| body: generatePayload( |
| getRemainingQuota(QUOTA_PER_ORIGIN, requestUrl, headers) + 1, |
| dataType), |
| })); |
| }, `fetchLater() rejects max+1 payload in a POST request body of ${dataType}.`); |