diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:35:37 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-06-12 05:35:37 +0000 |
commit | a90a5cba08fdf6c0ceb95101c275108a152a3aed (patch) | |
tree | 532507288f3defd7f4dcf1af49698bcb76034855 /dom/media/test/complete_length_worker.js | |
parent | Adding debian version 126.0.1-1. (diff) | |
download | firefox-a90a5cba08fdf6c0ceb95101c275108a152a3aed.tar.xz firefox-a90a5cba08fdf6c0ceb95101c275108a152a3aed.zip |
Merging upstream version 127.0.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'dom/media/test/complete_length_worker.js')
-rw-r--r-- | dom/media/test/complete_length_worker.js | 80 |
1 files changed, 80 insertions, 0 deletions
diff --git a/dom/media/test/complete_length_worker.js b/dom/media/test/complete_length_worker.js new file mode 100644 index 0000000000..ceda63fdd5 --- /dev/null +++ b/dom/media/test/complete_length_worker.js @@ -0,0 +1,80 @@ +"use strict"; + +let client; +function is(got, expected, name) { + client.postMessage({ type: "is", got, expected, name }); +} + +self.onactivate = e => + e.waitUntil( + (async () => { + await self.clients.claim(); + const allClients = await self.clients.matchAll(); + client = allClients[0]; + is(allClients.length, 1, "allClients.length"); + })() + ); + +let expected_start = 0; +let response_data = [ + // One Array element for each response in order: + { + complete_length: "*", + body: "O", + }, + { + complete_length: "3", + body: "g", + }, + { + // Extend length to test that the remainder is fetched. + complete_length: "6", + body: "g", + }, + { + // Reduce length to test that no more is fetched. + complete_length: "4", + body: "S", + }, +]; + +self.onfetch = e => { + if (!e.request.url.endsWith("/media-resource")) { + return; // fall back to network fetch + } + is( + response_data.length >= 1, + true, + `response_data.length (${response_data.length}) > 0` + ); + const { complete_length, body } = response_data.shift(); + const range = e.request.headers.get("Range"); + const match = range.match(/^bytes=(\d+)-/); + is(Array.isArray(match), true, `Array.isArray(match) for ${range}`); + const first = parseInt(match[1]); + is(first, expected_start, "first"); + const last = first + body.length - 1; // inclusive + expected_start = last + 1; + const init = { + status: 206, // Partial Content + headers: { + "Accept-Ranges": "bytes", + "Content-Type": "audio/ogg", + "Content-Range": `bytes ${first}-${last}/${complete_length}`, + "Content-Length": body.length, + }, + }; + e.respondWith(new Response(body, init)); +}; + +self.onmessage = e => { + switch (e.data.type) { + case "got error event": + // Check that all expected requests were received. + is(response_data.length, 0, "missing fetch count"); + client.postMessage({ type: "done" }); + return; + default: + is(e.data.type, "__KNOWN__", "e.data.type"); + } +}; |