tor-browser

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

user-scroll-common.js (2954B)


      1 // Helper functions for scrollsnapchange-on-user-* tests.
      2 
      3 // This performs a touch scroll on |scroller| using the coordinates provided
      4 // in |start_pos| and |end_pos|.
      5 // It is meant for use in scrollsnapchange & scrollsnapchanging tests for triggering snap
      6 // events when touch scrolling from |start_pos| to |end_pos|.
      7 function snap_event_touch_scroll_helper(start_pos, end_pos) {
      8  return new test_driver.Actions()
      9    .addPointer("TestPointer", "touch")
     10    .pointerMove(Math.round(start_pos.x), Math.round(start_pos.y))
     11    .pointerDown()
     12    .addTick()
     13    .pause(200)
     14    .pointerMove(Math.round(end_pos.x), Math.round(end_pos.y))
     15    .addTick()
     16    .pointerUp()
     17    .send();
     18 }
     19 
     20 // This drags the provided |scroller|'s scrollbar  vertically by |drag_amt|.
     21 // Snap event tests should provide a |drag_amt| that would result in a
     22 // the desired snap event being triggered.
     23 const vertical_offset_into_scrollbar = 30;
     24 function snap_event_scrollbar_drag_helper(scroller, scrollbar_width, drag_amt) {
     25  let x, y, bounds;
     26  if (scroller == document.scrollingElement) {
     27    bounds = document.documentElement.getBoundingClientRect();
     28    x = Math.round(window.innerWidth - scrollbar_width / 2);
     29  } else {
     30    bounds = scroller.getBoundingClientRect();
     31    x = Math.round(bounds.right - Math.round(scrollbar_width / 2));
     32  }
     33  y = Math.round(bounds.top + vertical_offset_into_scrollbar);
     34  return new test_driver.Actions()
     35    .addPointer('TestPointer', 'mouse')
     36    .pointerMove(x, y)
     37    .pointerDown()
     38    .pointerMove(x, Math.round(y + drag_amt))
     39    .addTick()
     40    .pointerUp()
     41    .send();
     42 }
     43 
     44 // This tests that snap event of type |event_type| don't fire for a user (wheel)
     45 // scroll that snaps back to the same element. Snap events tests should provide
     46 // a |delta| small enough that no change in |scroller|'s snap targets occurs at
     47 // the end of the scroll.
     48 async function test_no_snap_event(test, scroller, delta, event_type) {
     49  const listening_element = scroller == document.scrollingElement
     50      ? document : scroller;
     51  checkSnapEventSupport(event_type);
     52  await waitForScrollReset(test, scroller);
     53  await waitForCompositorCommit();
     54  let snap_event_promise = waitForSnapEvent(listening_element, event_type);
     55  // Set the scroll destination to just a little off (0, 0) top so we snap
     56  // back to the top box.
     57  await new test_driver.Actions().scroll(0, 0, delta, delta,
     58      { origin: scroller }).send();
     59  let evt = await snap_event_promise;
     60  assert_equals(evt, null, "no snap event since scroller is back to top");
     61  assert_equals(scroller.scrollTop, 0, "scroller snaps back to the top");
     62  assert_equals(scroller.scrollLeft, 0, "scroller snaps back to the left");
     63 }
     64 
     65 async function test_no_scrollsnapchange(t, scroller, delta) {
     66  await test_no_snap_event(t, scroller, delta, "scrollsnapchange");
     67 }
     68 
     69 async function test_no_scrollsnapchanging(t, scroller, delta) {
     70  await test_no_snap_event(t, scroller, delta, "scrollsnapchanging");
     71 }