tor-browser

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

test_useractivation_scrollbar.html (3978B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4 <title>User activation test: consume transient flag</title>
      5 <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6 <script src="/tests/SimpleTest/EventUtils.js"></script>
      7 <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
      8 </head>
      9 <body>
     10 <textarea style="height: 100px; resize: none">
     11 &nbsp
     12 &nbsp
     13 &nbsp
     14 &nbsp
     15 &nbsp
     16 &nbsp
     17 &nbsp
     18 &nbsp
     19 &nbsp
     20 &nbsp
     21 &nbsp
     22 &nbsp
     23 &nbsp
     24 </textarea>
     25 <div id="target" style="height: 100px; width: 200px; overflow: scroll">
     26 &nbsp<br>
     27 &nbsp<br>
     28 &nbsp<br>
     29 &nbsp<br>
     30 &nbsp<br>
     31 &nbsp<br>
     32 &nbsp<br>
     33 &nbsp<br>
     34 &nbsp<br>
     35 &nbsp<br>
     36 &nbsp<br>
     37 &nbsp<br>
     38 &nbsp<br>
     39 </div>
     40 <div style="height: 2000px; width: 500px; background-color: green;"></div>
     41 <script>
     42 
     43 // Open a new window to ensure scrollbar is always visible.
     44 if (!opener) {
     45  add_task(async function init() {
     46    // Turn on the prefs that force overlay scrollbars to always be visible.
     47    await SpecialPowers.pushPrefEnv({
     48      set: [["layout.testing.overlay-scrollbars.always-visible", true]],
     49    });
     50  });
     51 
     52  async function testOnNewWindow(aPrefValue) {
     53    await SpecialPowers.pushPrefEnv({
     54      set: [["dom.user_activation.ignore_scrollbars", aPrefValue]],
     55    });
     56 
     57    let win = window.open(location);
     58    // wait for message
     59    await new Promise((aResolve) => {
     60      window.addEventListener("message", function listener(event) {
     61        if ("done" == event.data) {
     62          window.removeEventListener("message", listener);
     63          aResolve();
     64        }
     65      });
     66    });
     67    win.close();
     68  }
     69 
     70  add_task(async function test_pref_on() {
     71    await testOnNewWindow(true);
     72  });
     73 
     74  add_task(async function test_pref_off() {
     75    await testOnNewWindow(false);
     76  });
     77 } else {
     78  SimpleTest.waitForFocus(async function() {
     79    function waitForEvent(aTarget, aEvent) {
     80      return new Promise((aResolve) => {
     81        aTarget.addEventListener(aEvent, function listener() {
     82          aResolve();
     83        }, { once: true });
     84      });
     85    }
     86 
     87    let ignoreScrollbars = SpecialPowers.getBoolPref("dom.user_activation.ignore_scrollbars");
     88 
     89    SpecialPowers.wrap(document).clearUserGestureActivation();
     90    let textarea = document.querySelector("textarea");
     91    var rect = textarea.getBoundingClientRect();
     92 
     93    // click scrollbar of textarea
     94    let promise = waitForEvent(textarea, "scroll");
     95    synthesizeMouse(textarea, rect.width - 5, rect.height / 2, {});
     96    await promise;
     97 
     98    opener.is(SpecialPowers.wrap(document).hasBeenUserGestureActivated,
     99              !ignoreScrollbars, "check has-been-user-activated");
    100    opener.is(SpecialPowers.wrap(document).hasValidTransientUserGestureActivation,
    101              !ignoreScrollbars, "check has-valid-transient-user-activation");
    102 
    103    SpecialPowers.wrap(document).clearUserGestureActivation();
    104    let div = document.querySelector("div[id=target]");
    105    rect = div.getBoundingClientRect();
    106 
    107    // click scrollbar of div
    108    promise = waitForEvent(div, "scroll");
    109    synthesizeMouse(div, rect.width - 5, rect.height / 2, {});
    110    await promise;
    111 
    112    opener.is(SpecialPowers.wrap(document).hasBeenUserGestureActivated,
    113              !ignoreScrollbars, "check has-been-user-activated");
    114    opener.is(SpecialPowers.wrap(document).hasValidTransientUserGestureActivation,
    115              !ignoreScrollbars, "check has-valid-transient-user-activation");
    116 
    117    SpecialPowers.wrap(document).clearUserGestureActivation();
    118    let body = document.querySelector("body");
    119 
    120    // click scrollbar of page
    121    promise = waitForEvent(document, "scroll");
    122    synthesizeMouse(body, innerWidth - 10, innerHeight / 2, {});
    123    await promise;
    124 
    125    opener.is(SpecialPowers.wrap(document).hasBeenUserGestureActivated,
    126              !ignoreScrollbars, "check has-been-user-activated");
    127    opener.is(SpecialPowers.wrap(document).hasValidTransientUserGestureActivation,
    128              !ignoreScrollbars, "check has-valid-transient-user-activation");
    129 
    130    opener.postMessage("done", "*");
    131  }, window);
    132 }
    133 
    134 </script>
    135 </body>