summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html')
-rw-r--r--testing/web-platform/tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html94
1 files changed, 94 insertions, 0 deletions
diff --git a/testing/web-platform/tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html b/testing/web-platform/tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html
new file mode 100644
index 0000000000..e4f6001eda
--- /dev/null
+++ b/testing/web-platform/tests/webaudio/the-audio-api/the-audiocontext-interface/audiocontext-not-fully-active.html
@@ -0,0 +1,94 @@
+<!doctype html>
+<title>Test AudioContext construction when document is not fully active</title>
+<script src=/resources/testharness.js></script>
+<script src=/resources/testharnessreport.js></script>
+<script src="/common/get-host-info.sub.js"></script>
+<body></body>
+<script>
+const dir = location.pathname.replace(/\/[^\/]*$/, '/');
+const helper = dir + 'resources/not-fully-active-helper.sub.html?childsrc=';
+const remote_helper = get_host_info().HTTP_NOTSAMESITE_ORIGIN + helper;
+const blank_url = get_host_info().ORIGIN + '/common/blank.html';
+
+const load_content = (frame, src) => {
+ if (src == undefined) {
+ frame.srcdoc = '<html></html>';
+ } else {
+ frame.src = src;
+ }
+ return new Promise(resolve => frame.onload = () => resolve(frame));
+};
+const append_iframe = (src) => {
+ const frame = document.createElement('iframe');
+ document.body.appendChild(frame);
+ return load_content(frame, src);
+};
+const remote_op = (win, op) => {
+ win.postMessage(op, '*');
+ return new Promise(resolve => window.onmessage = e => {
+ if (e.data == 'DONE ' + op) resolve();
+ });
+};
+const test_constructor_throws = async (win, deactivate) => {
+ const {AudioContext, DOMException} = win;
+ await deactivate();
+ assert_throws_dom("InvalidStateError", DOMException,
+ () => new AudioContext());
+};
+
+promise_test(async () => {
+ const frame = await append_iframe();
+ return test_constructor_throws(frame.contentWindow, () => frame.remove());
+}, "removed frame");
+promise_test(async () => {
+ const frame = await append_iframe();
+ return test_constructor_throws(frame.contentWindow,
+ () => load_content(frame));
+}, "navigated frame");
+promise_test(async () => {
+ const frame = await append_iframe(helper + blank_url);
+ const inner = frame.contentWindow.frames[0];
+ return test_constructor_throws(inner, () => frame.remove());
+}, "frame in removed frame");
+promise_test(async () => {
+ const frame = await append_iframe(helper + blank_url);
+ const inner = frame.contentWindow.frames[0];
+ return test_constructor_throws(inner, () => load_content(frame));
+}, "frame in navigated frame");
+promise_test(async () => {
+ const frame = await append_iframe(remote_helper + blank_url);
+ const inner = frame.contentWindow.frames[0];
+ return test_constructor_throws(inner, () => frame.remove());
+}, "frame in removed remote-site frame");
+promise_test(async () => {
+ const frame = await append_iframe(remote_helper + blank_url);
+ const inner = frame.contentWindow.frames[0];
+ return test_constructor_throws(inner, () => load_content(frame));
+}, "frame in navigated remote-site frame");
+promise_test(async () => {
+ const outer = (await append_iframe(remote_helper + blank_url)).contentWindow;
+ const inner = outer.frames[0];
+ return test_constructor_throws(inner,
+ () => remote_op(outer, 'REMOVE FRAME'));
+}, "removed frame in remote-site frame");
+promise_test(async () => {
+ const outer = (await append_iframe(remote_helper + blank_url)).contentWindow;
+ const inner = outer.frames[0];
+ return test_constructor_throws(inner,
+ () => remote_op(outer, 'NAVIGATE FRAME'));
+}, "navigated frame in remote-site frame");
+promise_test(async () => {
+ const url = remote_helper + helper + blank_url;
+ const outer = (await append_iframe(url)).contentWindow;
+ const inner = outer.frames[0].frames[0];
+ return test_constructor_throws(inner,
+ () => remote_op(outer, 'REMOVE FRAME'));
+}, "frame in removed remote-site frame in remote-site frame");
+promise_test(async () => {
+ const url = remote_helper + helper + blank_url;
+ const outer = (await append_iframe(url)).contentWindow;
+ const inner = outer.frames[0].frames[0];
+ return test_constructor_throws(inner,
+ () => remote_op(outer, 'NAVIGATE FRAME'));
+}, "frame in navigated remote-site frame in remote-site frame");
+</script>