audiocontext-not-fully-active.html (3953B)
1 <!doctype html> 2 <title>Test AudioContext construction when document is not fully active</title> 3 <script src=/resources/testharness.js></script> 4 <script src=/resources/testharnessreport.js></script> 5 <script src="/common/get-host-info.sub.js"></script> 6 <body></body> 7 <script> 8 const dir = location.pathname.replace(/\/[^\/]*$/, '/'); 9 const helper = dir + 'resources/not-fully-active-helper.sub.html?childsrc='; 10 const remote_helper = get_host_info().HTTP_NOTSAMESITE_ORIGIN + helper; 11 const blank_url = get_host_info().ORIGIN + '/common/blank.html'; 12 13 const load_content = (frame, src) => { 14 if (src == undefined) { 15 frame.srcdoc = '<html></html>'; 16 } else { 17 frame.src = src; 18 } 19 return new Promise(resolve => frame.onload = () => resolve(frame)); 20 }; 21 const append_iframe = (src) => { 22 const frame = document.createElement('iframe'); 23 document.body.appendChild(frame); 24 return load_content(frame, src); 25 }; 26 const remote_op = (win, op) => { 27 win.postMessage(op, '*'); 28 return new Promise(resolve => window.onmessage = e => { 29 if (e.data == 'DONE ' + op) resolve(); 30 }); 31 }; 32 const test_constructor_throws = async (win, deactivate) => { 33 const {AudioContext, DOMException} = win; 34 await deactivate(); 35 assert_throws_dom("InvalidStateError", DOMException, 36 () => new AudioContext()); 37 }; 38 39 promise_test(async () => { 40 const frame = await append_iframe(); 41 return test_constructor_throws(frame.contentWindow, () => frame.remove()); 42 }, "removed frame"); 43 promise_test(async () => { 44 const frame = await append_iframe(); 45 return test_constructor_throws(frame.contentWindow, 46 () => load_content(frame)); 47 }, "navigated frame"); 48 promise_test(async () => { 49 const frame = await append_iframe(helper + blank_url); 50 const inner = frame.contentWindow.frames[0]; 51 return test_constructor_throws(inner, () => frame.remove()); 52 }, "frame in removed frame"); 53 promise_test(async () => { 54 const frame = await append_iframe(helper + blank_url); 55 const inner = frame.contentWindow.frames[0]; 56 return test_constructor_throws(inner, () => load_content(frame)); 57 }, "frame in navigated frame"); 58 promise_test(async () => { 59 const frame = await append_iframe(remote_helper + blank_url); 60 const inner = frame.contentWindow.frames[0]; 61 return test_constructor_throws(inner, () => frame.remove()); 62 }, "frame in removed remote-site frame"); 63 promise_test(async () => { 64 const frame = await append_iframe(remote_helper + blank_url); 65 const inner = frame.contentWindow.frames[0]; 66 return test_constructor_throws(inner, () => load_content(frame)); 67 }, "frame in navigated remote-site frame"); 68 promise_test(async () => { 69 const outer = (await append_iframe(remote_helper + blank_url)).contentWindow; 70 const inner = outer.frames[0]; 71 return test_constructor_throws(inner, 72 () => remote_op(outer, 'REMOVE FRAME')); 73 }, "removed frame in remote-site frame"); 74 promise_test(async () => { 75 const outer = (await append_iframe(remote_helper + blank_url)).contentWindow; 76 const inner = outer.frames[0]; 77 return test_constructor_throws(inner, 78 () => remote_op(outer, 'NAVIGATE FRAME')); 79 }, "navigated frame in remote-site frame"); 80 promise_test(async () => { 81 const url = remote_helper + helper + blank_url; 82 const outer = (await append_iframe(url)).contentWindow; 83 const inner = outer.frames[0].frames[0]; 84 return test_constructor_throws(inner, 85 () => remote_op(outer, 'REMOVE FRAME')); 86 }, "frame in removed remote-site frame in remote-site frame"); 87 promise_test(async () => { 88 const url = remote_helper + helper + blank_url; 89 const outer = (await append_iframe(url)).contentWindow; 90 const inner = outer.frames[0].frames[0]; 91 return test_constructor_throws(inner, 92 () => remote_op(outer, 'NAVIGATE FRAME')); 93 }, "frame in navigated remote-site frame in remote-site frame"); 94 </script>