webdriver: Fix "element in view" by correctly computing resolved PointerEvents style (#38383)

Testing: `element_click/interactability.py`. For some other tests in
headed window, even tho the target is in view it falsely claim not in
view previously.

---------

Signed-off-by: Euclid Ye <euclid.ye@huawei.com>
This commit is contained in:
Euclid Ye 2025-08-01 15:08:28 +08:00 committed by GitHub
parent 929fd0aa3c
commit 372e5eae59
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 29 additions and 10 deletions

View file

@ -1898,7 +1898,17 @@ pub(crate) fn handle_element_click(
/// <https://w3c.github.io/webdriver/#dfn-in-view>
fn is_element_in_view(element: &Element, document: &Document, can_gc: CanGc) -> bool {
element.enabled_state() &&
use style::computed_values::pointer_events::T as PointerEvents;
// https://w3c.github.io/webdriver/#dfn-pointer-events-are-not-disabled
// An element is said to have pointer events disabled
// if the resolved value of its "pointer-events" style property is "none".
let pointer_events_enabled = element
.style(can_gc)
.is_none_or(|style| style.get_inherited_ui().pointer_events != PointerEvents::None);
// An element is in view if it is a member of its own pointer-interactable paint tree,
// given the pretense that its pointer events are not disabled.
pointer_events_enabled &&
get_element_pointer_interactable_paint_tree(element, document, can_gc)
.contains(&DomRoot::from_ref(element))
}