tor-browser

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

scrollend-event-not-fired-on-no-scroll.html (3881B)


      1 <!DOCTYPE HTML>
      2 <meta name="viewport" content="width=device-width,initial-scale=1,minimum-scale=1">
      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="scroll_support.js"></script>
      9 <style>
     10  #spacer {
     11    height: 100vh;
     12    width: 100px;
     13    position: relative;
     14  }
     15 
     16  #targetDiv {
     17    width: 200px;
     18    height: 200px;
     19    overflow: scroll;
     20  }
     21 
     22  #innerDiv {
     23    width: 400px;
     24    height: 400px;
     25  }
     26 </style>
     27 
     28 <body style="margin:0">
     29  <div id="targetDiv">
     30    <!-- This test uses button elements as a consistent mechanism for
     31      ensuring that focus is on the correct scrolling element when
     32      scrolling via keys -->
     33    <button id="targetButton">target</button>
     34    <div id="innerDiv"></div>
     35  </div>
     36  <button id="docButton">doc</button>
     37  <div id="spacer"></div>
     38 </body>
     39 
     40 <script>
     41  var target_div = document.getElementById('targetDiv');
     42 
     43  async function resetScrollers(test) {
     44    await waitForScrollReset(test, target_div);
     45    await waitForScrollReset(test, document.scrollingElement);
     46  }
     47 
     48  function getBoundingClientRect(element) {
     49    if (element == document) {
     50      return document.documentElement.getBoundingClientRect();
     51    }
     52    return element.getBoundingClientRect();
     53  }
     54 
     55  async function upwardScroll(scrolling_element, button_element, scroll_type) {
     56    if (scroll_type == "wheel") {
     57      let x = 0;
     58      let y = 0;
     59      let delta_x = 0;
     60      let delta_y = -50;
     61      let actions = new test_driver.Actions()
     62        .scroll(x, y, delta_x, delta_y, {origin: scrolling_element});
     63      await actions.send();
     64    } else if (scroll_type == "keys") {
     65      const num_keydowns = 5;
     66      const arrowUp = '\uE013';
     67      for (let i = 0; i < num_keydowns; i++) {
     68        await test_driver.send_keys(button_element, arrowUp);
     69      }
     70    }
     71  }
     72 
     73  async function testScrollendNotFiredOnNoScroll(test, scrolling_element,
     74                                                 listening_element,
     75                                                 button_element, scroll_type) {
     76    test.add_cleanup(async () => {
     77      await resetScrollers(test);
     78      await waitForCompositorCommit();
     79    });
     80 
     81    assert_greater_than(scrolling_element.scrollHeight,
     82                        scrolling_element.clientHeight);
     83    assert_equals(scrolling_element.scrollTop, 0);
     84 
     85    let scrollend_promise = waitForScrollendEvent(test, listening_element).then(
     86      /* resolve */ test.unreached_func("no scroll, so no scrollend expected"),
     87      /* reject */  () => { /* Did not see scrollend, which is okay. */ }
     88    );
     89    await upwardScroll(scrolling_element, button_element, scroll_type);
     90    await scrollend_promise;
     91  }
     92 
     93  function runTest() {
     94    promise_test(async (t) => {
     95      await testScrollendNotFiredOnNoScroll(t, target_div, target_div,
     96                                            targetButton, "wheel");
     97    }, "No scroll via wheel on div shouldn't fire scrollend.");
     98 
     99    promise_test(async (t) => {
    100      await testScrollendNotFiredOnNoScroll(t, target_div, target_div,
    101                                            targetButton, "keys");
    102    }, "No scroll via keys on div shouldn't fire scrollend.");
    103 
    104    promise_test(async (t) => {
    105      await testScrollendNotFiredOnNoScroll(t, document.scrollingElement,
    106                                            document, docButton, "wheel");
    107    }, "No scroll via wheel on document shouldn't fire scrollend.");
    108 
    109    promise_test(async (t) => {
    110      await testScrollendNotFiredOnNoScroll(t, document.scrollingElement,
    111                                            document, docButton, "keys");
    112    }, "No scroll via keys on document shouldn't fire scrollend.")
    113  }
    114  window.onload = runTest;
    115 </script>