summaryrefslogtreecommitdiffstats
path: root/dom/worklet/tests/test_audioWorklet_WASM.html
diff options
context:
space:
mode:
Diffstat (limited to 'dom/worklet/tests/test_audioWorklet_WASM.html')
-rw-r--r--dom/worklet/tests/test_audioWorklet_WASM.html85
1 files changed, 85 insertions, 0 deletions
diff --git a/dom/worklet/tests/test_audioWorklet_WASM.html b/dom/worklet/tests/test_audioWorklet_WASM.html
new file mode 100644
index 0000000000..127cc8b924
--- /dev/null
+++ b/dom/worklet/tests/test_audioWorklet_WASM.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML>
+<html>
+<head>
+ <title>Test for AudioWorklet + WASM</title>
+ <script src="/tests/SimpleTest/SimpleTest.js"></script>
+ <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
+ <script type="application/javascript" src="common.js"></script>
+</head>
+<body>
+
+<script type="application/javascript">
+
+function configureTest() {
+ return SpecialPowers.pushPrefEnv(
+ {"set": [["dom.audioworklet.enabled", true],
+ ["dom.worklet.enabled", true],
+ ["dom.postMessage.sharedArrayBuffer.bypassCOOP_COEP.insecure.enabled", true],
+ ["browser.tabs.remote.useCrossOriginOpenerPolicy", true],
+ ["browser.tabs.remote.useCrossOriginEmbedderPolicy", true],
+ ["javascript.options.shared_memory", true],
+ ]});
+}
+
+function create_wasmModule() {
+ return new Promise(resolve => {
+ info("Checking if we can play with WebAssembly...");
+
+ if (!SpecialPowers.Cu.getJSTestingFunctions().wasmIsSupported()) {
+ resolve(null);
+ return;
+ }
+
+ ok(WebAssembly, "WebAssembly object should exist");
+ ok(WebAssembly.compile, "WebAssembly.compile function should exist");
+
+ const wasmTextToBinary = SpecialPowers.unwrap(SpecialPowers.Cu.getJSTestingFunctions().wasmTextToBinary);
+ /*
+ js -e '
+ t = wasmTextToBinary(`
+ (module
+ (func $foo (result i32) (i32.const 42))
+ (export "foo" (func $foo))
+ )
+ `);
+ print(t)
+ '
+ */
+ // eslint-disable-next-line
+ const fooModuleCode = new Uint8Array([0,97,115,109,1,0,0,0,1,5,1,96,0,1,127,3,2,1,0,7,7,1,3,102,111,111,0,0,10,6,1,4,0,65,42,11,0,13,4,110,97,109,101,1,6,1,0,3,102,111,111]);
+
+ WebAssembly.compile(fooModuleCode).then(m => {
+ ok(m instanceof WebAssembly.Module, "The WasmModule has been compiled.");
+ resolve(m);
+ }, () => {
+ ok(false, "The compilation of the wasmModule failed.");
+ resolve(null);
+ });
+ });
+}
+
+function runTestInIframe() {
+ let audioContext = new AudioContext();
+ audioContext.audioWorklet.addModule("worklet_audioWorklet_WASM.js")
+ .then(() => create_wasmModule())
+ .then(wasmModule => {
+ const node = new AudioWorkletNode(audioContext, 'wasm');
+ let msgId = 0;
+ node.port.onmessage = e => {
+ if (msgId++ == 0) {
+ ok(e.data.wasmModule instanceof WebAssembly.Module, "WasmModule received");
+ } else {
+ ok(e.data.sab instanceof SharedArrayBuffer, "SAB received");
+ SimpleTest.finish();
+ }
+ }
+
+ node.port.postMessage({wasmModule});
+ node.port.postMessage({sab: new SharedArrayBuffer(1024)});
+ node.connect(audioContext.destination);
+ });
+}
+</script>
+
+</body>
+</html>