tor-browser

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

notify-event-top-level-navigation.https.html (2135B)


      1 <!DOCTYPE html>
      2 <meta name="timeout" content="long">
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="/resources/testdriver.js"></script>
      6 <script src="/resources/testdriver-actions.js"></script>
      7 <script src="/resources/testdriver-vendor.js"></script>
      8 <script src="/common/utils.js"></script>
      9 <script src="/common/dispatcher/dispatcher.js"></script>
     10 <script src="/common/get-host-info.sub.js"></script>
     11 <script src="resources/utils.js"></script>
     12 <title>Test that fenced frame notifyEvent() prevents top-level navigation</title>
     13 
     14 <body>
     15  <script>
     16  promise_test(async (t) => {
     17    const fencedframe = await attachFencedFrameContext(
     18                {generator_api: 'fledge'});
     19    t.add_cleanup(async () => document.body.removeChild(fencedframe.element));
     20 
     21    let notify_result = new Promise((resolve) => {
     22      fencedframe.element.addEventListener('fencedtreeclick', () => {
     23        resolve('notified');
     24      });
     25    });
     26 
     27    await fencedframe.execute(() => {
     28      document.addEventListener('click', (e) => {
     29        window.fence.notifyEvent(e);
     30      });
     31    });
     32 
     33    let actions = new test_driver.Actions();
     34    await actions.pointerMove(10, 10, {origin: fencedframe.element})
     35      .pointerDown()
     36      .pointerUp()
     37      .send();
     38 
     39    await notify_result;
     40 
     41    // Once `notifyEvent` has resolved, user activation has been consumed in the
     42    // fenced frame, so navigating `_unfencedTop` should fail.
     43    let opened_key = token();
     44    await fencedframe.execute((opened) => {
     45      let opened_url = generateURL('embeddee.html', [opened]);
     46      // TODO(averge): Replace this with a pop-up navigation once we require
     47      // user activation for pop-up navigations.
     48      window.open(opened_url, '_unfencedTop');
     49    }, [opened_key]);
     50 
     51    let result = await Promise.race([
     52      nextValueFromServer(opened_key),
     53      new Promise((resolve) => {
     54        t.step_timeout(() => resolve('timeout'), 2000);
     55      })
     56    ]);
     57 
     58    assert_equals(result, 'timeout');
     59  }, "Test that calling notifyEvent() prevents top-level navigation on click.");
     60  </script>
     61 </body>