blob: a1b6eef1ddce4f153f4528e11eefedd69c928d48 [file] [edit]
// 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';
const bodyText = 'Background Fetch request body';
const encodedBody = () => new TextEncoder().encode(bodyText);
const bodyTests = [
{
name: 'string',
create: () => bodyText,
},
{
name: 'ArrayBuffer',
create: () => encodedBody().buffer,
},
{
name: 'TypedArray',
create: () => encodedBody(),
},
{
name: 'DataView',
create: () => {
const body = encodedBody();
return new DataView(body.buffer, body.byteOffset, body.byteLength);
},
},
{
name: 'Blob',
create: () => new Blob([bodyText]),
},
{
name: 'File',
create: () => new File([bodyText], 'body.txt'),
},
{
name: 'URLSearchParams',
create: () => new URLSearchParams({body: bodyText}),
},
{
name: 'FormData',
create: () => {
const body = new FormData();
body.append('body', bodyText);
return body;
},
},
];
for (const bodyTest of bodyTests) {
backgroundFetchTest(async (test, backgroundFetch) => {
const request = new Request('resources/upload.py', {
method: 'POST',
body: bodyTest.create(),
...bodyTest.requestOptions,
});
const expectedBody = new Uint8Array(await request.clone().arrayBuffer());
const registration =
await backgroundFetch.fetch(uniqueId(), [request, '/common/slow.py']);
test.add_cleanup(() => registration.abort());
const record =
await registration.match('resources/upload.py', {ignoreMethod: true});
assert_not_equals(record, undefined);
assert_equals(record.request.method, 'POST');
assert_array_equals(new Uint8Array(await record.request.arrayBuffer()),
expectedBody);
}, `Match returns the request body for ${bodyTest.name}.`);
}