tor-browser

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

test_input_modify_by_wheel.html (4692B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=1261673
      5 https://bugzilla.mozilla.org/show_bug.cgi?id=1970030
      6 -->
      7 <head>
      8  <meta charset="utf-8">
      9  <title>Test change number and range input value through wheel event</title>
     10  <script src="/tests/SimpleTest/SimpleTest.js"></script>
     11  <script src="/tests/SimpleTest/EventUtils.js"></script>
     12  <script src="/tests/SimpleTest/paint_listener.js"></script>
     13  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
     14 </head>
     15 <body>
     16 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1261673">Mozilla Bug 1261673</a>
     17 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=1970030">Mozilla Bug 1970030</a>
     18 <p id="display"></p>
     19 <div id="content" style="display: none">
     20 </div>
     21 <input id="test_number" type="number" value=5>
     22 <script type="text/javascript">
     23 
     24 SimpleTest.waitForExplicitFinish();
     25 SimpleTest.waitForFocus(runTests);
     26 
     27 function runTests() {
     28  let input = window.document.getElementById("test_number");
     29 
     30  // focus: whether the target input element is focused
     31  // deltaY: deltaY of WheelEvent
     32  // deltaMode: deltaMode of WheelEvent
     33  // valueChanged: expected value changes after input element handled the wheel event
     34  let params = [
     35    {focus: true, deltaY: 1.0, deltaMode: WheelEvent.DOM_DELTA_LINE, valueChanged: -1},
     36    {focus: true, deltaY: -1.0, deltaMode: WheelEvent.DOM_DELTA_LINE, valueChanged: 1},
     37    {focus: true, deltaY: 1.0, deltaMode: WheelEvent.DOM_DELTA_PAGE, valueChanged: -1},
     38    {focus: true, deltaY: -1.0, deltaMode: WheelEvent.DOM_DELTA_PAGE, valueChanged: 1},
     39    {focus: true, deltaY: 1.0, deltaMode: WheelEvent.DOM_DELTA_PIXEL, valueChanged: 0},
     40    {focus: true, deltaY: -1.0, deltaMode: WheelEvent.DOM_DELTA_PIXEL, valueChanged: 0},
     41    {focus: false, deltaY: 1.0, deltaMode: WheelEvent.DOM_DELTA_LINE, valueChanged: 0},
     42    {focus: false, deltaY: -1.0, deltaMode: WheelEvent.DOM_DELTA_LINE, valueChanged: 0}
     43  ];
     44 
     45  let testIdx = 0;
     46 
     47  // The expected value of the number field; used in is() check below.
     48  // Initialized to the value that the field starts out with; subtests will
     49  // modify this if they expect to modify the value.
     50  let expectedValue = parseInt(input.value);
     51 
     52  // Actual/expected number of mutations to the number field's value:
     53  let actualChangeCount = 0;
     54  let expectedChangeCount = 0;
     55 
     56  const prefName = "dom.input.number_and_range_modified_by_mousewheel";
     57  let didFlipPref = false;
     58  let isPrefEnabled = SpecialPowers.getBoolPref(prefName);
     59  is(isPrefEnabled, false,  "Expecting pref to be disabled by default");
     60  input.addEventListener("change", () => {
     61    ++actualChangeCount;
     62  });
     63 
     64  function runNext() {
     65    let p = params[testIdx];
     66    (p.focus) ? input.focus() : input.blur();
     67    if (isPrefEnabled && p.valueChanged != 0) {
     68      expectedChangeCount++;
     69      expectedValue += p.valueChanged;
     70    }
     71 
     72    const wheelEventPromise = new Promise(res => {
     73      input.addEventListener("wheel", e => res(e), { passive: true, once: true });
     74    })
     75 
     76    sendWheelAndPaint(input, 1, 1, { deltaY: p.deltaY, deltaMode: p.deltaMode },
     77                      async () => {
     78      is(parseInt(input.value), expectedValue,
     79         "Handle wheel in number input test-" + testIdx +
     80         " with pref " + (isPrefEnabled ? "en" : "dis") + "abled");
     81 
     82      info(`actualChangeCount ${actualChangeCount}, expectedChangeCount ${expectedChangeCount}`);
     83      is(actualChangeCount, expectedChangeCount,
     84         "UA should fire change event when input's value changed");
     85 
     86      // Need to wrap event to see if it was default prevented by system
     87      const wheelEvent = SpecialPowers.wrap(await wheelEventPromise);
     88 
     89      const shouldScroll = !(isPrefEnabled && p.valueChanged);
     90      if (shouldScroll) {
     91        ok(!wheelEvent.defaultPrevented, "Wheel event should not be default prevented");
     92      } else {
     93        ok(wheelEvent.defaultPrevented, "Wheel event should be default prevented");
     94      }
     95 
     96      if (++testIdx < params.length) {
     97        // More subtests remain; kick off the next one.
     98        runNext();
     99      } else if (!didFlipPref) {
    100        // Reached the end of the subtest list.  Flip the pref
    101        // and restart our iteration over the subtests.
    102        await SpecialPowers.pushPrefEnv({
    103          set: [[prefName, !isPrefEnabled]],
    104        });
    105        isPrefEnabled = !isPrefEnabled;
    106        didFlipPref = true;
    107        testIdx = actualChangeCount = expectedChangeCount = 0;
    108        runNext();
    109      } else {
    110        // Reached the end of the subtest list, for both pref settings.
    111        // We're done!
    112        SimpleTest.finish();
    113      }
    114    });
    115  }
    116  runNext();
    117 }
    118 
    119 </script>
    120 </body>
    121 </html>