tor-browser

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

test_bug784410.html (2877B)


      1 <!DOCTYPE HTML>
      2 <html>
      3 <head>
      4  <title>Test bug 784410</title>
      5  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      6  <script src="/tests/SimpleTest/EventUtils.js"></script>
      7  <script src="/tests/SimpleTest/paint_listener.js"></script>
      8  <script src="/tests/gfx/layers/apz/test/mochitest/apz_test_utils.js"></script>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     10 </head>
     11 <body>
     12 <p id="display"></p>
     13 <div id="outer" style="overflow:auto; height:200px; border:2px dotted black; transform: translateY(1px)" onscroll="doneScroll()">
     14  <div id="d" style="overflow:auto; height:102px;" onscroll="doneScroll()">
     15    <div id="inner" style="height:100.1px; border:1px solid black; background:yellow;">Hello</div>
     16  </div>
     17  <div style="height:500px;"></div>
     18 </div>
     19 <pre id="test">
     20 <script class="testbody" type="text/javascript">
     21 var sel = window.getSelection();
     22 var outer = document.getElementById("outer");
     23 var d = document.getElementById("d");
     24 var inner = document.getElementById("inner");
     25 var smoothScrollPref = "general.smoothScroll";
     26 
     27 function innerScrollOffset() {
     28  return inner.getBoundingClientRect().top - d.getBoundingClientRect().top;
     29 }
     30 var innerStartScrollOffset = innerScrollOffset();
     31 
     32 var step = 0;
     33 var wheelAndPaintDone = false;
     34 async function doneScroll() {
     35  ++step;
     36  switch (step) {
     37  case 1:
     38    is(innerScrollOffset(), innerStartScrollOffset, "Inner element should not have scrolled down");
     39    ok(outer.scrollTop > 0, "Outer element should have scrolled down");
     40 
     41    outer.scrollTop = 0;
     42    break;
     43  case 2:
     44    // wait until APZ is ready to handle the wheel event, then send it
     45    await promiseApzFlushedRepaints();
     46    // Wait for paints to flush, so APZ is notified of the new scroll offset.
     47    sendWheelAndPaint(inner, 4, 4,
     48      { deltaMode: WheelEvent.DOM_DELTA_LINE, deltaY: 1 },
     49      function() {
     50          wheelAndPaintDone = true;
     51          doneTest();
     52      });
     53    break;
     54  case 3:
     55    is(innerScrollOffset(), innerStartScrollOffset, "Inner element should not have scrolled down");
     56    ok(outer.scrollTop > 0, "Outer element should have scrolled down");
     57    
     58    doneTest();
     59    break;
     60  }
     61 }
     62 
     63 function doneTest() {
     64  // wait until wheelAndPaintDone has invoked its callback before we end the
     65  // test, otherwise we might get calls to advanceTimeAndRefresh after we
     66  // restore normal refresh, and that will screw up the next test.
     67  if (wheelAndPaintDone && step == 3) {
     68    SpecialPowers.DOMWindowUtils.restoreNormalRefresh();
     69    SimpleTest.finish();
     70  }
     71 }
     72 
     73 function test() {
     74  sel.collapse(inner.firstChild, 2);
     75  synthesizeKey("KEY_PageDown");
     76 }
     77 
     78 SimpleTest.waitForExplicitFinish();
     79 SimpleTest.waitForFocus(function() {
     80  SpecialPowers.pushPrefEnv({"set":[[smoothScrollPref, false],
     81                                    ["test.events.async.enabled", true]]}, test);
     82 });
     83 </script>
     84 </pre>
     85 </body>
     86 </html>