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 }