tor-browser

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

vertical-scroll-wheel-block-manual.tentative.html (4805B)


      1 <!doctype html>
      2 <title>vertical-scroll test for 'mousewheel'</title>
      3 <script src="/resources/testharness.js"></script>
      4 <script src="/resources/testharnessreport.js"></script>
      5 <script src="/feature-policy/experimental-features/resources/common.js"></script>
      6 <script src="/feature-policy/experimental-features/resources/vertical-scroll.js"></script>
      7 <style>
      8 html, body {
      9  height: 100%;
     10  width: 100%;
     11 }
     12 
     13 iframe {
     14  width: 90%;
     15  height: 90%;
     16  margin: 0;
     17  padding: 0;
     18 }
     19 
     20 .spacer {
     21  width: 100%;
     22  height: 100%;
     23  margin: 100%;
     24 }
     25 
     26 </style>
     27 <iframe></iframe>
     28 <br/>
     29 <p>Spacers below to make page scrollable</p>
     30 <br/>
     31 <div class="spacer"></div>
     32 <div class="spacer"></div>
     33 <p> EOF </p>
     34 <script>
     35  "use strict";
     36 
     37  let url = url_base + "vertical-scroll-wheel-block.html";
     38  function iframeElement() {
     39    return document.querySelector("iframe");
     40  }
     41 
     42  // Used as the polling interval when waiting for a specific condition.
     43  let verify_scroll_offset_delay = 5;
     44  let no_scroll_timout = 50;
     45 
     46  function waitUntilSatisfied(testInstance, predicate) {
     47    return new Promise((r) => {
     48      function testPredicate() {
     49        if (predicate()) {
     50          r();
     51        } else {
     52          testInstance.step_timeout(testPredicate, verify_scroll_offset_delay);
     53        }
     54      }
     55      testPredicate();
     56    });
     57  }
     58 
     59  function resetScroll(testInstance) {
     60    window.scrollTo({top: 0, left: 0, behavior: "instant"});
     61    return waitUntilSatisfied(testInstance, () => {
     62      return window.scrollX === 0 && window.scrollY === 0;
     63    });
     64  }
     65 
     66  function waitForMinimumScrollOffset(testInstance, minX, minY) {
     67    return waitUntilSatisfied(testInstance, () => {
     68      return window.scrollX >= minX && window.scrollY >= minY;
     69    });
     70  }
     71 
     72  function waitFor(testInstance, delay) {
     73    let checked_once = false;
     74    return waitUntilSatisfied(testInstance, () => {
     75      if (checked_once)
     76        return true;
     77      checked_once = true;
     78      return false;
     79    });
     80  }
     81 
     82  // Wait for the helper scripts to load.
     83  promise_test(async() => {
     84    if (window.input_api_ready)
     85      return Promise.resolve();
     86    await new Promise((r) => {
     87      window.resolve_on_input_api_ready = r;
     88    });
     89  }, "Make sure input injection API is ready.");
     90 
     91  // Sanity-check: Test API for scrolling along y-axis works as expected.
     92  promise_test(async(testInstance) => {
     93    await resetScroll(testInstance);
     94    await inject_wheel_scroll("down");
     95    await waitForMinimumScrollOffset(testInstance, 0, 1);
     96    assert_greater_than(window.scrollY, 0, "Expected vertical scroll.");
     97  }, "Sanity-check: the page scrolls vertically in response to vertical wheel.");
     98 
     99  // Sanity-check: Test API for scrolling along x-axis works as expected.
    100  promise_test(async(testInstance) => {
    101    await resetScroll(testInstance);
    102    await inject_wheel_scroll("right");
    103    await waitForMinimumScrollOffset(testInstance, 1, 0);
    104    assert_greater_than(window.scrollX, 0, "Expected horizontal scroll.");
    105  }, "Sanity-check: the page scrolls horizontally in response to horizontal wheel.");
    106 
    107  // Test that when 'vertical-scroll' is enabled, vertical scroll can be
    108  // blocked by canceling 'wheel' event.
    109  promise_test(async(testInstance) => {
    110    setFeatureState(iframeElement(), "vertical-scroll", "*");
    111    await loadUrlInIframe(iframeElement(), url);
    112 
    113    await resetScroll(testInstance);
    114    await inject_wheel_scroll("down")
    115    await waitFor(testInstance, no_scroll_timout);
    116    assert_equals(window.scrollY, 0, "Did not expected vertical scroll.");
    117  }, "When 'vertical-scroll' is enabled canceling vertical 'wheel' " +
    118     "blocks vertical scrolling.");
    119 
    120  // Test that when 'vertical-scroll' is disabled, vertical scroll cannot
    121  // be blocked by canceling 'wheel' event.
    122  promise_test(async(testInstance) => {
    123    setFeatureState(iframeElement(), "vertical-scroll", "'none'");
    124    await loadUrlInIframe(iframeElement(), url);
    125 
    126    await resetScroll(testInstance);
    127    await inject_wheel_scroll("down");
    128    await waitForMinimumScrollOffset(testInstance, 0, 1);
    129    assert_greater_than(window.scrollY, 0, "Expected vertical scroll.");
    130  }, "When 'vertical-scroll' is disabled canceling vertical 'wheel' " +
    131     "does not block vertical scrolling.");
    132 
    133  // Test that when 'vertical-scroll' is disabled, horizontal scroll can be
    134  // blocked by canceling 'wheel' event.
    135  promise_test(async(testInstance) => {
    136    setFeatureState(iframeElement(), "vertical-scroll", "'none'");
    137    await loadUrlInIframe(iframeElement(), url);
    138 
    139    await resetScroll(testInstance);
    140    await inject_wheel_scroll("right");
    141    await waitFor(testInstance, no_scroll_timout);
    142    assert_equals(window.scrollX, 0, "Did not expect horizontal scroll.");
    143  }, "When 'vertical-scroll' is disabled canceling horizontal 'wheel' " +
    144     "blocks horizontal scrolling.");
    145 </script>