| <!DOCTYPE html> |
| <title>CSS Overflow Test: ::scroll-button and ::scroll-marker pseudo-elements are not present in event path</title> |
| <link rel="help" href="https://drafts.csswg.org/css-overflow-5/#scroll-buttons"> |
| <link rel="help" href="https://drafts.csswg.org/css-overflow-5/#scroll-marker"> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <script src="/resources/testdriver.js"></script> |
| <script src="/resources/testdriver-actions.js"></script> |
| <script src="/resources/testdriver-vendor.js"></script> |
| <style> |
| body { |
| margin: 0; |
| } |
| |
| #scroller { |
| height: 100px; |
| width: 100px; |
| overflow: scroll; |
| scroll-marker-group: before; |
| } |
| |
| #scroller::scroll-marker-group { |
| height: 10px; |
| } |
| |
| #target { |
| height: 100px; |
| width: 200px; |
| } |
| |
| #scroller::scroll-button(right) { |
| content: ""; |
| height: 10px; |
| width: 10px; |
| } |
| |
| #target::scroll-marker { |
| content: ""; |
| height: 10px; |
| width: 10px; |
| display: block; |
| } |
| </style> |
| <div id="scroller"> |
| <div id="target"></div> |
| </div> |
| <script> |
| const scrollButtonHalfHeight = 5; |
| const scrollButtonHalfWidth = 5; |
| const scrollMarkerHalfHeight = 5; |
| const scrollMarkerHalfWidth = 5; |
| const scrollerBottom = scroller.getBoundingClientRect().bottom; |
| |
| let scrollerActualEventPath = null; |
| scroller.addEventListener("click", (e) => { |
| scrollerActualEventPath = e.composedPath(); |
| }); |
| |
| const scrollerExpectedEventPath = [scroller, document.body, document.documentElement, document, window]; |
| promise_test(async t => { |
| // Click on the ::scroll-button pseudo-element. |
| const scrollButtonX = scrollButtonHalfWidth; |
| const scrollButtonY = scrollerBottom + scrollButtonHalfHeight; |
| await new test_driver.Actions() |
| .pointerMove(scrollButtonX, scrollButtonY) |
| .pointerDown() |
| .pointerUp() |
| .send(); |
| assert_array_equals(scrollerActualEventPath, scrollerExpectedEventPath, "::scroll-button pseudo-element should not be in the event path"); |
| }); |
| |
| let targetActualEventPath = null; |
| target.addEventListener("click", (e) => { |
| targetActualEventPath = e.composedPath(); |
| }); |
| |
| const targetExpectedEventPath = [target, scroller, document.body, document.documentElement, document, window]; |
| promise_test(async t => { |
| // Click on the ::scroll-marker pseudo-element. |
| const scrollMarkerX = scrollMarkerHalfWidth; |
| const scrollMarkerY = scrollMarkerHalfHeight; |
| await new test_driver.Actions() |
| .pointerMove(scrollMarkerX, scrollMarkerY) |
| .pointerDown() |
| .pointerUp() |
| .send(); |
| assert_array_equals(targetActualEventPath, targetExpectedEventPath, "::scroll-marker pseudo-element should not be in the event path"); |
| }); |
| </script> |