// Changing the body after it have been passed to Response/Request // should not change the outcome of the consumed body const url = 'http://a'; const method = 'post'; promise_test(async t => { const body = new FormData(); body.set('a', '1'); const res = new Response(body); const req = new Request(url, { method, body }); body.set('a', '2'); assert_true((await res.formData()).get('a') === '1'); assert_true((await req.formData()).get('a') === '1'); }, 'FormData is cloned'); promise_test(async t => { const body = new URLSearchParams({a: '1'}); const res = new Response(body); const req = new Request(url, { method, body }); body.set('a', '2'); assert_true((await res.formData()).get('a') === '1'); assert_true((await req.formData()).get('a') === '1'); }, 'URLSearchParams is cloned'); promise_test(async t => { const body = new Uint8Array([97]); // a const res = new Response(body); const req = new Request(url, { method, body }); body[0] = 98; // b assert_true(await res.text() === 'a'); assert_true(await req.text() === 'a'); }, 'TypedArray is cloned'); promise_test(async t => { const body = new Uint8Array([97]); // a const res = new Response(body.buffer); const req = new Request(url, { method, body: body.buffer }); body[0] = 98; // b assert_true(await res.text() === 'a'); assert_true(await req.text() === 'a'); }, 'ArrayBuffer is cloned'); promise_test(async t => { const body = new Blob(['a']); const res = new Response(body); const req = new Request(url, { method, body }); assert_true(await res.blob() !== body); assert_true(await req.blob() !== body); }, 'Blob is cloned');