tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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>