| <!DOCTYPE html> |
| <script src='../../resources/testharness.js'></script> |
| <script src='../../resources/testharnessreport.js'></script> |
| <script src='../../resources/gesture-util.js'></script> |
| |
| <style> |
| body, html { |
| margin: 0; |
| height: 500vh; |
| } |
| div { |
| height: 50px; |
| width: 100%; |
| } |
| |
| .hoverme { |
| background-color: rgb(0, 0, 255); |
| } |
| |
| .hoverme:hover { |
| background-color: rgb(255, 255, 0); |
| } |
| |
| .message { |
| width: 100%; |
| text-align: left; |
| } |
| </style> |
| |
| <div class="message"> |
| First move your mouse cursor to the page, you will see the color under the mouse cursor changed from blue to yellow. <br> |
| Do a smooth JS scroll, you will see the hover update on a text under the mouse cursor when the scrolling finishes. |
| </div> |
| <div class="hoverme">hover over me</div> |
| <div class="hoverme">hover over me</div> |
| <div class="hoverme">hover over me</div> |
| <div class="hoverme">hover over me</div> |
| <div class="hoverme">hover over me</div> |
| |
| <script> |
| const elementHeight = 50; |
| |
| window.onload = async () => { |
| await waitForCompositorCommit(); |
| array = document.getElementsByClassName('hoverme'); |
| |
| promise_test(async () => { |
| let x = array[0].offsetLeft + 10; |
| let y = array[0].offsetTop + 25; |
| // Move cursor to 1st element. |
| await mouseMoveTo(x, y); |
| await waitFor( () => { return array[0].matches(":hover");}, 'wait for move to 1st element'); |
| assert_true(array[0].matches(":hover")); |
| assert_false(array[1].matches(":hover")); |
| |
| // Scroll end up at 4th element. Hover state does not update during scrolling, |
| // only the 4th element has a hover effect. |
| assert_equals(document.scrollingElement.scrollTop, 0); |
| window.scrollTo({top: 150, left: 0, behavior: 'smooth'}); |
| // Wait enough time to see if we fire a fake mouse move event to update the hover state. |
| await waitForAnimationEnd(() => { return document.scrollingElement.scrollTop; }, 300, 60); |
| assert_approx_equals(document.scrollingElement.scrollTop, 3 * elementHeight, 25); |
| assert_false(array[0].matches(":hover")); |
| assert_false(array[1].matches(":hover")); |
| assert_false(array[2].matches(":hover")); |
| assert_true(array[3].matches(":hover")); |
| assert_false(array[4].matches(":hover")); |
| }, 'JS smooth scroll on the page, no hover update during scrolling, but updating hover at the end of scroll.'); |
| } |
| |
| </script> |