Source code
Revision control
Copy as Markdown
Other Tools
Test Info:
-
CI results over the last 21 days
- Manifest: dom/media/webcodecs/test/mochitest.toml
<!DOCTYPE HTML>
<html>
<head>
<title>EncodedAudioChunk with ArrayBuffers from another compartment</title>
<script src="/tests/SimpleTest/SimpleTest.js"></script>
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
</head>
<body>
<script>
document.domain = "example.com";
const DATA = [1, 2, 3, 4, 5, 6, 7, 8];
function createBuffer(win) {
const buffer = new win.ArrayBuffer(DATA.length);
new win.Uint8Array(buffer).set(DATA);
return buffer;
}
function checkChunk(chunk, expected, desc) {
is(chunk.byteLength, expected.length, `${desc}: byteLength`);
const out = new Uint8Array(chunk.byteLength);
chunk.copyTo(out);
isDeeply(Array.from(out), expected, `${desc}: data`);
}
function runTests(chunkCtor, bufferWin, desc) {
{
const buffer = createBuffer(bufferWin);
const chunk = new chunkCtor({
type: "key",
timestamp: 0,
data: buffer,
transfer: [buffer],
});
ok(buffer.detached, `${desc}, ArrayBuffer data: buffer is detached`);
checkChunk(chunk, DATA, `${desc}, ArrayBuffer data`);
}
{
const buffer = createBuffer(bufferWin);
const view = new bufferWin.Uint8Array(buffer, 2, 4);
const chunk = new chunkCtor({
type: "key",
timestamp: 0,
data: view,
transfer: [buffer],
});
ok(buffer.detached, `${desc}, ArrayBufferView data: buffer is detached`);
checkChunk(chunk, DATA.slice(2, 6), `${desc}, ArrayBufferView data`);
}
{
const buffer = createBuffer(bufferWin);
const chunk = new chunkCtor({
type: "key",
timestamp: 0,
data: new Uint8Array(DATA),
transfer: [buffer],
});
ok(buffer.detached, `${desc}, transfer only: buffer is detached`);
checkChunk(chunk, DATA, `${desc}, transfer only`);
}
}
add_task(async function test_cross_compartment_transfer() {
const iframe = document.createElement("iframe");
iframe.src =
const loaded = new Promise(resolve => (iframe.onload = resolve));
document.body.appendChild(iframe);
await loaded;
const win = iframe.contentWindow;
ok(
!(createBuffer(win) instanceof ArrayBuffer),
"Buffer should come from the iframe's global"
);
runTests(EncodedAudioChunk, win, "iframe buffer");
runTests(win.EncodedAudioChunk, window, "iframe constructor");
});
</script>
</body>
</html>