48 lines
1.7 KiB
JavaScript
48 lines
1.7 KiB
JavaScript
// 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}.`);
|