From 295e019d00a8543ae356cdcb7da2ff9ac0eff72b Mon Sep 17 00:00:00 2001 From: webbeef Date: Tue, 3 Mar 2026 00:27:53 -0800 Subject: [PATCH] script: pointer events: pointerenter, pointerout, pointerleave, pointerover (#42736) Adds support for more pointer events: pointerenter, pointerout, pointerleave, pointerover Also add global event handlers that were missing. Testing: WPT expectations are updated. cc @yezhizhen Signed-off-by: webbeef --- .../script/dom/document_event_handler.rs | 186 ++++++++++++++++-- components/script/dom/eventtarget.rs | 13 +- components/script/dom/macros.rs | 8 + components/script/dom/mouseevent.rs | 62 ++++++ components/script/dom/touch.rs | 38 +++- .../webidls/EventHandler.webidl | 12 ++ ...ary_event_handler_at_ua_shadowdom.html.ini | 3 - ...coalesced_events_attributes.https.html.ini | 14 +- .../idlharness.https.window.js.ini | 120 ----------- ...r-generates-content-under-pointer.html.ini | 4 - .../pointerevent_attributes.html.ini | 10 +- .../pointerevent_attributes.optional.html.ini | 129 +++++++++++- ...erevent_capture_suppressing_mouse.html.ini | 3 - .../pointerevent_on_event_handlers.html.ini | 72 ------- ...vent_pointerenter_does_not_bubble.html.ini | 3 +- ...terevent_pointerleave_descendants.html.ini | 4 - ...vent_pointerleave_does_not_bubble.html.ini | 4 - ...terevent_pointerout_received_once.html.ini | 2 - ...ntercapture_inactive_button_mouse.html.ini | 3 +- ...t_setpointercapture_relatedtarget.html.ini | 3 +- .../predicted_events_attributes.html.ini | 14 +- 21 files changed, 425 insertions(+), 282 deletions(-) delete mode 100644 tests/wpt/meta/pointerevents/pointerevent-boundary-event-target-when-hover-generates-content-under-pointer.html.ini delete mode 100644 tests/wpt/meta/pointerevents/pointerevent_pointerleave_descendants.html.ini delete mode 100644 tests/wpt/meta/pointerevents/pointerevent_pointerleave_does_not_bubble.html.ini delete mode 100644 tests/wpt/meta/pointerevents/pointerevent_pointerout_received_once.html.ini diff --git a/components/script/dom/document_event_handler.rs b/components/script/dom/document_event_handler.rs index 88c88f05390..0a76f93b34d 100644 --- a/components/script/dom/document_event_handler.rs +++ b/components/script/dom/document_event_handler.rs @@ -341,15 +341,24 @@ impl DocumentEventHandler { .get() .and_then(|point| self.window.hit_test_from_point_in_viewport(point)) { - MouseEvent::new_for_platform_motion_event( + let mouse_out_event = MouseEvent::new_for_platform_motion_event( &self.window, FireMouseEventType::Out, &hit_test_result, input_event, can_gc, - ) - .upcast::() - .fire(current_hover_target.upcast(), can_gc); + ); + + // Fire pointerout before mouseout + mouse_out_event + .to_pointer_hover_event("pointerout", can_gc) + .upcast::() + .fire(current_hover_target.upcast(), can_gc); + + mouse_out_event + .upcast::() + .fire(current_hover_target.upcast(), can_gc); + self.handle_mouse_enter_leave_event( DomRoot::from_ref(current_hover_target), None, @@ -413,22 +422,35 @@ impl DocumentEventHandler { targets.push(node); } - // The order for dispatching mouseenter events starts from the topmost + // The order for dispatching mouseenter/pointerenter events starts from the topmost // common ancestor of the event target and the related target. if event_type == FireMouseEventType::Enter { targets = targets.into_iter().rev().collect(); } + let pointer_event_name = match event_type { + FireMouseEventType::Enter => "pointerenter", + FireMouseEventType::Leave => "pointerleave", + _ => unreachable!(), + }; + for target in targets { - MouseEvent::new_for_platform_motion_event( + let mouse_event = MouseEvent::new_for_platform_motion_event( &self.window, event_type, hit_test_result, input_event, can_gc, - ) - .upcast::() - .fire(target.upcast(), can_gc); + ); + + // Fire pointer event before mouse event + mouse_event + .to_pointer_hover_event(pointer_event_name, can_gc) + .upcast::() + .fire(target.upcast(), can_gc); + + // Fire mouse event + mouse_event.upcast::().fire(target.upcast(), can_gc); } } @@ -465,7 +487,7 @@ impl DocumentEventHandler { // Here we know the target has changed, so we must update the state, // dispatch mouseout to the previous one, mouseover to the new one. if target_has_changed { - // Dispatch mouseout and mouseleave to previous target. + // Dispatch pointerout/mouseout and pointerleave/mouseleave to previous target. if let Some(old_target) = self.current_hover_target.get() { let old_target_is_ancestor_of_new_target = old_target .upcast::() @@ -484,15 +506,23 @@ impl DocumentEventHandler { } } - MouseEvent::new_for_platform_motion_event( + let mouse_out_event = MouseEvent::new_for_platform_motion_event( &self.window, FireMouseEventType::Out, &hit_test_result, input_event, can_gc, - ) - .upcast::() - .fire(old_target.upcast(), can_gc); + ); + + // Fire pointerout before mouseout + mouse_out_event + .to_pointer_hover_event("pointerout", can_gc) + .upcast::() + .fire(old_target.upcast(), can_gc); + + mouse_out_event + .upcast::() + .fire(old_target.upcast(), can_gc); if !old_target_is_ancestor_of_new_target { let event_target = DomRoot::from_ref(old_target.upcast::()); @@ -508,7 +538,7 @@ impl DocumentEventHandler { } } - // Dispatch mouseover and mouseenter to new target. + // Dispatch pointerover/mouseover and pointerenter/mouseenter to new target. for element in new_target .upcast::() .inclusive_ancestors(ShadowIncluding::Yes) @@ -517,15 +547,23 @@ impl DocumentEventHandler { element.set_hover_state(true); } - MouseEvent::new_for_platform_motion_event( + let mouse_over_event = MouseEvent::new_for_platform_motion_event( &self.window, FireMouseEventType::Over, &hit_test_result, input_event, can_gc, - ) - .upcast::() - .dispatch(new_target.upcast(), false, can_gc); + ); + + // Fire pointerover before mouseover + mouse_over_event + .to_pointer_hover_event("pointerover", can_gc) + .upcast::() + .dispatch(new_target.upcast(), false, can_gc); + + mouse_over_event + .upcast::() + .dispatch(new_target.upcast(), false, can_gc); let moving_from = self .current_hover_target @@ -986,7 +1024,7 @@ impl DocumentEventHandler { ); // Dispatch pointer event before updating active touch points and before touch event. - let pointer_event_type = match event.event_type { + let pointer_event_name = match event.event_type { TouchEventType::Down => "pointerdown", TouchEventType::Move => "pointermove", TouchEventType::Up => "pointerup", @@ -997,9 +1035,38 @@ impl DocumentEventHandler { let pointer_id = self.get_or_create_pointer_id_for_touch(identifier); let is_primary = self.is_primary_pointer(pointer_id); + // For touch devices (which don't support hover), fire pointerover/pointerenter + // + if matches!(event.event_type, TouchEventType::Down) { + // Fire pointerover + let pointer_over = pointer_touch.to_pointer_event( + window, + "pointerover", + pointer_id, + is_primary, + input_event.active_keyboard_modifiers, + true, // cancelable + Some(hit_test_result.point_in_node), + can_gc, + ); + pointer_over.upcast::().fire(¤t_target, can_gc); + + // Fire pointerenter hierarchically (from topmost ancestor to target) + self.fire_pointer_event_for_touch( + &element, + &pointer_touch, + pointer_id, + "pointerenter", + is_primary, + input_event, + &hit_test_result, + can_gc, + ); + } + let pointer_event = pointer_touch.to_pointer_event( window, - pointer_event_type, + pointer_event_name, pointer_id, is_primary, input_event.active_keyboard_modifiers, @@ -1011,6 +1078,38 @@ impl DocumentEventHandler { .upcast::() .fire(¤t_target, can_gc); + // For touch devices, fire pointerout/pointerleave after pointerup/pointercancel + // + if matches!( + event.event_type, + TouchEventType::Up | TouchEventType::Cancel + ) { + // Fire pointerout + let pointer_out = pointer_touch.to_pointer_event( + window, + "pointerout", + pointer_id, + is_primary, + input_event.active_keyboard_modifiers, + true, // cancelable + Some(hit_test_result.point_in_node), + can_gc, + ); + pointer_out.upcast::().fire(¤t_target, can_gc); + + // Fire pointerleave hierarchically (from target to topmost ancestor) + self.fire_pointer_event_for_touch( + &element, + &pointer_touch, + pointer_id, + "pointerleave", + is_primary, + input_event, + &hit_test_result, + can_gc, + ); + } + let (touch_dispatch_target, changed_touch) = match event.event_type { TouchEventType::Down => { // Add a new touch point @@ -2045,6 +2144,51 @@ impl DocumentEventHandler { .min() .is_some_and(|primary_pointer| *primary_pointer == pointer_id) } + + /// Fire pointerenter events hierarchically from topmost ancestor to target element. + /// Fire pointerleave events hierarchically from target element to topmost ancestor. + /// Used for touch devices that don't support hover. + #[allow(clippy::too_many_arguments)] + fn fire_pointer_event_for_touch( + &self, + target_element: &Element, + touch: &Touch, + pointer_id: i32, + event_name: &str, + is_primary: bool, + input_event: &ConstellationInputEvent, + hit_test_result: &HitTestResult, + can_gc: CanGc, + ) { + // Collect ancestors from target to root + let mut targets: Vec> = vec![]; + let mut current: Option> = Some(DomRoot::from_ref(target_element.upcast())); + while let Some(node) = current { + targets.push(DomRoot::from_ref(&*node)); + current = node.GetParentNode(); + } + + // Reverse to dispatch from topmost ancestor to target + if event_name == "pointerenter" { + targets.reverse(); + } + + for target in targets { + let pointer_event = touch.to_pointer_event( + &self.window, + event_name, + pointer_id, + is_primary, + input_event.active_keyboard_modifiers, + false, + Some(hit_test_result.point_in_node), + can_gc, + ); + pointer_event + .upcast::() + .fire(target.upcast(), can_gc); + } + } } #[derive(PartialEq)] diff --git a/components/script/dom/eventtarget.rs b/components/script/dom/eventtarget.rs index c1868dc60a6..d5ef7f5f8d7 100644 --- a/components/script/dom/eventtarget.rs +++ b/components/script/dom/eventtarget.rs @@ -75,7 +75,7 @@ use crate::script_runtime::CanGc; /// and /// as well as /// specific attributes for elements -static CONTENT_EVENT_HANDLER_NAMES: [&str; 108] = [ +static CONTENT_EVENT_HANDLER_NAMES: [&str; 118] = [ "onabort", "onauxclick", "onbeforeinput", @@ -164,6 +164,17 @@ static CONTENT_EVENT_HANDLER_NAMES: [&str; 108] = [ // https://w3c.github.io/selection-api/#extensions-to-globaleventhandlers-interface "onselectstart", "onselectionchange", + // https://w3c.github.io/pointerevents/#extensions-to-the-globaleventhandlers-interface + "onpointercancel", + "onpointerdown", + "onpointerup", + "onpointermove", + "onpointerout", + "onpointerover", + "onpointerenter", + "onpointerleave", + "ongotpointercapture", + "onlostpointercapture", // https://html.spec.whatwg.org/multipage/#windoweventhandlers "onafterprint", "onbeforeprint", diff --git a/components/script/dom/macros.rs b/components/script/dom/macros.rs index 36638de1e33..bfd6a42bc06 100644 --- a/components/script/dom/macros.rs +++ b/components/script/dom/macros.rs @@ -650,6 +650,14 @@ macro_rules! global_event_handlers( event_handler!(pause, GetOnpause, SetOnpause); event_handler!(play, GetOnplay, SetOnplay); event_handler!(playing, GetOnplaying, SetOnplaying); + event_handler!(pointercancel, GetOnpointercancel, SetOnpointercancel); + event_handler!(pointerdown, GetOnpointerdown, SetOnpointerdown); + event_handler!(pointerenter, GetOnpointerenter, SetOnpointerenter); + event_handler!(pointerleave, GetOnpointerleave, SetOnpointerleave); + event_handler!(pointermove, GetOnpointermove, SetOnpointermove); + event_handler!(pointerout, GetOnpointerout, SetOnpointerout); + event_handler!(pointerover, GetOnpointerover, SetOnpointerover); + event_handler!(pointerup, GetOnpointerup, SetOnpointerup); event_handler!(progress, GetOnprogress, SetOnprogress); event_handler!(ratechange, GetOnratechange, SetOnratechange); event_handler!(reset, GetOnreset, SetOnreset); diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs index 74306e81885..1ac1d45cb42 100644 --- a/components/script/dom/mouseevent.rs +++ b/components/script/dom/mouseevent.rs @@ -372,6 +372,68 @@ impl MouseEvent { can_gc, ) } + + /// Create a PointerEvent for hover events (pointerover, pointerenter, pointerout, pointerleave). + /// + /// For mouse, the pointer ID is always -1, and is_primary is always true. + pub(crate) fn to_pointer_hover_event( + &self, + event_type: &str, + can_gc: CanGc, + ) -> DomRoot { + // Determine bubbles and cancelable based on event type + // pointerover/pointerout bubble and are cancelable + // pointerenter/pointerleave do not bubble and are not cancelable + let (bubbles, cancelable) = match event_type { + "pointerover" | "pointerout" => (EventBubbles::Bubbles, EventCancelable::Cancelable), + "pointerenter" | "pointerleave" => { + (EventBubbles::DoesNotBubble, EventCancelable::NotCancelable) + }, + _ => (EventBubbles::Bubbles, EventCancelable::Cancelable), + }; + + let window = self.global(); + let window = window.as_window(); + + let pointer_event = PointerEvent::new( + window, + DOMString::from(event_type), + bubbles, + cancelable, + self.uievent.GetView().as_deref(), + self.uievent.Detail(), + Point2D::new(self.ScreenX(), self.ScreenY()), + Point2D::new(self.ClientX(), self.ClientY()), + Point2D::new(self.PageX(), self.PageY()), + self.modifiers.get(), + -1, // button: -1 for hover events (no button pressed) + self.Buttons(), + self.GetRelatedTarget().as_deref(), + self.point_in_target.get(), + PointerId::Mouse as i32, // Mouse pointer ID is always -1 + 1, // width + 1, // height + 0.0, // pressure: 0.0 for hover events + 0.0, // tangential_pressure + 0, // tilt_x + 0, // tilt_y + 0, // twist + PI / 2.0, // altitude_angle (perpendicular to surface) + 0.0, // azimuth_angle + DOMString::from("mouse"), + true, // is_primary (mouse is always primary) + vec![], // coalesced_events + vec![], // predicted_events + can_gc, + ); + + // Set trusted to match the source mouse event + pointer_event + .upcast::() + .set_trusted(self.IsTrusted()); + + pointer_event + } } impl MouseEventMethods for MouseEvent { diff --git a/components/script/dom/touch.rs b/components/script/dom/touch.rs index e5c44b51676..7ef79dba29b 100644 --- a/components/script/dom/touch.rs +++ b/components/script/dom/touch.rs @@ -92,15 +92,35 @@ impl Touch { point_in_node: Option>, can_gc: CanGc, ) -> DomRoot { - // Pressure is 0.5 for active touches, 0.0 for up/cancel - let pressure = if event_type == "pointerup" || event_type == "pointercancel" { + // Pressure is 0.5 for active touches, 0.0 for up/cancel/out/leave + // + // TODO: add proper force support. + let pressure = if event_type == "pointerup" || + event_type == "pointercancel" || + event_type == "pointerout" || + event_type == "pointerleave" + { 0.0 } else { 0.5 }; - let button = if event_type == "pointermove" { -1 } else { 0 }; + // + // For pointermove, pointerover, pointerenter, pointerout, pointerleave: button is -1 + // For pointerdown, pointerup, pointercancel: button is 0 (primary button) + let button = if event_type == "pointermove" || + event_type == "pointerover" || + event_type == "pointerenter" || + event_type == "pointerout" || + event_type == "pointerleave" + { + -1 + } else { + 0 + }; + // Buttons: 1 if a button is pressed during the event, 0 otherwise + // For touch: button is pressed during over/enter/down/move, not during up/cancel/out/leave let buttons = if event_type == "pointermove" || event_type == "pointerover" || event_type == "pointerenter" || @@ -111,11 +131,19 @@ impl Touch { 0 }; + // For enter/leave events, they don't bubble and are not cancelable + let (bubbles, cancelable) = match event_type { + "pointerenter" | "pointerleave" => { + (EventBubbles::DoesNotBubble, EventCancelable::NotCancelable) + }, + _ => (EventBubbles::Bubbles, EventCancelable::from(is_cancelable)), + }; + PointerEvent::new( window, DOMString::from(event_type), - EventBubbles::Bubbles, - EventCancelable::from(is_cancelable), + bubbles, + cancelable, Some(window), 0, // detail Point2D::new(*self.ScreenX() as i32, *self.ScreenY() as i32), diff --git a/components/script_bindings/webidls/EventHandler.webidl b/components/script_bindings/webidls/EventHandler.webidl index b49a29fa40f..c31463ca3ce 100644 --- a/components/script_bindings/webidls/EventHandler.webidl +++ b/components/script_bindings/webidls/EventHandler.webidl @@ -148,3 +148,15 @@ interface mixin WindowEventHandlers { attribute EventHandler onunhandledrejection; attribute EventHandler onunload; }; + +// https://w3c.github.io/pointerevents/#extensions-to-the-globaleventhandlers-mixin +partial interface mixin GlobalEventHandlers { + attribute EventHandler onpointerover; + attribute EventHandler onpointerenter; + attribute EventHandler onpointerdown; + attribute EventHandler onpointermove; + attribute EventHandler onpointerup; + attribute EventHandler onpointercancel; + attribute EventHandler onpointerout; + attribute EventHandler onpointerleave; +}; diff --git a/tests/wpt/meta/pointerevents/capturing_boundary_event_handler_at_ua_shadowdom.html.ini b/tests/wpt/meta/pointerevents/capturing_boundary_event_handler_at_ua_shadowdom.html.ini index 55c15ce0570..9aceb5e13fb 100644 --- a/tests/wpt/meta/pointerevents/capturing_boundary_event_handler_at_ua_shadowdom.html.ini +++ b/tests/wpt/meta/pointerevents/capturing_boundary_event_handler_at_ua_shadowdom.html.ini @@ -2,9 +2,6 @@ [Capturing boundary event handler at DIV] expected: FAIL - [Capturing boundary event handler at VIDEO] - expected: FAIL - [Capturing boundary event handler at INPUT] expected: FAIL diff --git a/tests/wpt/meta/pointerevents/coalesced_events_attributes.https.html.ini b/tests/wpt/meta/pointerevents/coalesced_events_attributes.https.html.ini index b5a62d954e8..485e7668aa0 100644 --- a/tests/wpt/meta/pointerevents/coalesced_events_attributes.https.html.ini +++ b/tests/wpt/meta/pointerevents/coalesced_events_attributes.https.html.ini @@ -1,10 +1,7 @@ [coalesced_events_attributes.https.html?touch] - expected: TIMEOUT - [Coalesced list in boundary events] - expected: TIMEOUT - + expected: ERROR [Coalesced list in pointer-capture events] - expected: NOTRUN + expected: TIMEOUT [Coalesced list in pointerdown/move/up events] expected: NOTRUN @@ -14,12 +11,9 @@ [coalesced_events_attributes.https.html?pen] - expected: TIMEOUT - [Coalesced list in boundary events] - expected: TIMEOUT - + expected: ERROR [Coalesced list in pointer-capture events] - expected: NOTRUN + expected: TIMEOUT [Coalesced list in pointerdown/move/up events] expected: NOTRUN diff --git a/tests/wpt/meta/pointerevents/idlharness.https.window.js.ini b/tests/wpt/meta/pointerevents/idlharness.https.window.js.ini index 231146d9f45..088224ff13e 100644 --- a/tests/wpt/meta/pointerevents/idlharness.https.window.js.ini +++ b/tests/wpt/meta/pointerevents/idlharness.https.window.js.ini @@ -5,99 +5,27 @@ [PointerEvent interface: new PointerEvent("type") must inherit property "persistentDeviceId" with the proper type] expected: FAIL - [HTMLElement interface: attribute onpointerover] - expected: FAIL - - [HTMLElement interface: attribute onpointerenter] - expected: FAIL - - [HTMLElement interface: attribute onpointerdown] - expected: FAIL - - [HTMLElement interface: attribute onpointermove] - expected: FAIL - [HTMLElement interface: attribute onpointerrawupdate] expected: FAIL - [HTMLElement interface: attribute onpointerup] - expected: FAIL - - [HTMLElement interface: attribute onpointercancel] - expected: FAIL - - [HTMLElement interface: attribute onpointerout] - expected: FAIL - - [HTMLElement interface: attribute onpointerleave] - expected: FAIL - [HTMLElement interface: attribute ongotpointercapture] expected: FAIL [HTMLElement interface: attribute onlostpointercapture] expected: FAIL - [Window interface: attribute onpointerover] - expected: FAIL - - [Window interface: attribute onpointerenter] - expected: FAIL - - [Window interface: attribute onpointerdown] - expected: FAIL - - [Window interface: attribute onpointermove] - expected: FAIL - [Window interface: attribute onpointerrawupdate] expected: FAIL - [Window interface: attribute onpointerup] - expected: FAIL - - [Window interface: attribute onpointercancel] - expected: FAIL - - [Window interface: attribute onpointerout] - expected: FAIL - - [Window interface: attribute onpointerleave] - expected: FAIL - [Window interface: attribute ongotpointercapture] expected: FAIL [Window interface: attribute onlostpointercapture] expected: FAIL - [Window interface: window must inherit property "onpointerover" with the proper type] - expected: FAIL - - [Window interface: window must inherit property "onpointerenter" with the proper type] - expected: FAIL - - [Window interface: window must inherit property "onpointerdown" with the proper type] - expected: FAIL - - [Window interface: window must inherit property "onpointermove" with the proper type] - expected: FAIL - [Window interface: window must inherit property "onpointerrawupdate" with the proper type] expected: FAIL - [Window interface: window must inherit property "onpointerup" with the proper type] - expected: FAIL - - [Window interface: window must inherit property "onpointercancel" with the proper type] - expected: FAIL - - [Window interface: window must inherit property "onpointerout" with the proper type] - expected: FAIL - - [Window interface: window must inherit property "onpointerleave" with the proper type] - expected: FAIL - [Window interface: window must inherit property "ongotpointercapture" with the proper type] expected: FAIL @@ -110,66 +38,18 @@ [Navigator interface: navigator must inherit property "maxTouchPoints" with the proper type] expected: FAIL - [Document interface: attribute onpointerover] - expected: FAIL - - [Document interface: attribute onpointerenter] - expected: FAIL - - [Document interface: attribute onpointerdown] - expected: FAIL - - [Document interface: attribute onpointermove] - expected: FAIL - [Document interface: attribute onpointerrawupdate] expected: FAIL - [Document interface: attribute onpointerup] - expected: FAIL - - [Document interface: attribute onpointercancel] - expected: FAIL - - [Document interface: attribute onpointerout] - expected: FAIL - - [Document interface: attribute onpointerleave] - expected: FAIL - [Document interface: attribute ongotpointercapture] expected: FAIL [Document interface: attribute onlostpointercapture] expected: FAIL - [Document interface: document must inherit property "onpointerover" with the proper type] - expected: FAIL - - [Document interface: document must inherit property "onpointerenter" with the proper type] - expected: FAIL - - [Document interface: document must inherit property "onpointerdown" with the proper type] - expected: FAIL - - [Document interface: document must inherit property "onpointermove" with the proper type] - expected: FAIL - [Document interface: document must inherit property "onpointerrawupdate" with the proper type] expected: FAIL - [Document interface: document must inherit property "onpointerup" with the proper type] - expected: FAIL - - [Document interface: document must inherit property "onpointercancel" with the proper type] - expected: FAIL - - [Document interface: document must inherit property "onpointerout" with the proper type] - expected: FAIL - - [Document interface: document must inherit property "onpointerleave" with the proper type] - expected: FAIL - [Document interface: document must inherit property "ongotpointercapture" with the proper type] expected: FAIL diff --git a/tests/wpt/meta/pointerevents/pointerevent-boundary-event-target-when-hover-generates-content-under-pointer.html.ini b/tests/wpt/meta/pointerevents/pointerevent-boundary-event-target-when-hover-generates-content-under-pointer.html.ini deleted file mode 100644 index 48baad57071..00000000000 --- a/tests/wpt/meta/pointerevents/pointerevent-boundary-event-target-when-hover-generates-content-under-pointer.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[pointerevent-boundary-event-target-when-hover-generates-content-under-pointer.html] - expected: TIMEOUT - [Generating text content under pointer] - expected: TIMEOUT diff --git a/tests/wpt/meta/pointerevents/pointerevent_attributes.html.ini b/tests/wpt/meta/pointerevents/pointerevent_attributes.html.ini index 26881d5e891..ec3fec7ab48 100644 --- a/tests/wpt/meta/pointerevents/pointerevent_attributes.html.ini +++ b/tests/wpt/meta/pointerevents/pointerevent_attributes.html.ini @@ -23,15 +23,13 @@ [pointerevent_attributes.html?touch] + expected: ERROR [Test pointer events in the main document] expected: FAIL [Test pointer events in an iframe] expected: FAIL - [Main-frame attribute test.] - expected: FAIL - [Inner-frame attribute test.] expected: FAIL @@ -44,9 +42,6 @@ [Test pointer events in an iframe] expected: FAIL - [Main-frame attribute test.] - expected: FAIL - [Inner-frame attribute test.] expected: FAIL @@ -74,9 +69,6 @@ [Test pointer events in an iframe] expected: FAIL - [Main-frame attribute test.] - expected: FAIL - [Inner-frame attribute test.] expected: FAIL diff --git a/tests/wpt/meta/pointerevents/pointerevent_attributes.optional.html.ini b/tests/wpt/meta/pointerevents/pointerevent_attributes.optional.html.ini index 99681a5f8f9..877c1b36bd4 100644 --- a/tests/wpt/meta/pointerevents/pointerevent_attributes.optional.html.ini +++ b/tests/wpt/meta/pointerevents/pointerevent_attributes.optional.html.ini @@ -1,7 +1,4 @@ [pointerevent_attributes.optional.html?touch] - [Main-frame attribute test.] - expected: FAIL - [Inner-frame attribute test.] expected: FAIL @@ -23,11 +20,32 @@ [Main-frame touch pointerup.toElement value is null] expected: PRECONDITION_FAILED + [Main-frame touch pointerover.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerover.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerenter.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerenter.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerout.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerout.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerleave.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerleave.toElement value is null] + expected: PRECONDITION_FAILED + [pointerevent_attributes.optional.html?pen-right] - [Main-frame attribute test.] - expected: FAIL - [Inner-frame attribute test.] expected: FAIL @@ -55,6 +73,30 @@ [Main-frame touch pointerup.toElement value is null] expected: PRECONDITION_FAILED + [Main-frame touch pointerover.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerover.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerenter.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerenter.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerout.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerout.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerleave.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerleave.toElement value is null] + expected: PRECONDITION_FAILED + [pointerevent_attributes.optional.html?mouse-right] [Main-frame attribute test.] @@ -75,11 +117,32 @@ [Main-frame mouse pointerdown.toElement value is null] expected: PRECONDITION_FAILED + [Main-frame mouse pointerover.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerover.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerenter.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerenter.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerout.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerout.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerleave.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerleave.toElement value is null] + expected: PRECONDITION_FAILED + [pointerevent_attributes.optional.html?pen] - [Main-frame attribute test.] - expected: FAIL - [Inner-frame attribute test.] expected: FAIL @@ -113,6 +176,30 @@ [Main-frame touch pointerup.toElement value is null] expected: PRECONDITION_FAILED + [Main-frame touch pointerover.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerover.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerenter.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerenter.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerout.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerout.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerleave.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame touch pointerleave.toElement value is null] + expected: PRECONDITION_FAILED + [pointerevent_attributes.optional.html?mouse] [Main-frame attribute test.] @@ -132,3 +219,27 @@ [Main-frame mouse pointerdown.toElement value is null] expected: PRECONDITION_FAILED + + [Main-frame mouse pointerover.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerover.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerenter.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerenter.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerout.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerout.toElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerleave.fromElement value is null] + expected: PRECONDITION_FAILED + + [Main-frame mouse pointerleave.toElement value is null] + expected: PRECONDITION_FAILED diff --git a/tests/wpt/meta/pointerevents/pointerevent_capture_suppressing_mouse.html.ini b/tests/wpt/meta/pointerevents/pointerevent_capture_suppressing_mouse.html.ini index ab6ad435816..7eefb959dfa 100644 --- a/tests/wpt/meta/pointerevents/pointerevent_capture_suppressing_mouse.html.ini +++ b/tests/wpt/meta/pointerevents/pointerevent_capture_suppressing_mouse.html.ini @@ -1,7 +1,4 @@ [pointerevent_capture_suppressing_mouse.html] expected: ERROR - [Validate pointer events track pointer movement without pointer capture.] - expected: FAIL - [Test pointer capture.] expected: TIMEOUT diff --git a/tests/wpt/meta/pointerevents/pointerevent_on_event_handlers.html.ini b/tests/wpt/meta/pointerevents/pointerevent_on_event_handlers.html.ini index 9ffd71dd6c3..138ec2cb757 100644 --- a/tests/wpt/meta/pointerevents/pointerevent_on_event_handlers.html.ini +++ b/tests/wpt/meta/pointerevents/pointerevent_on_event_handlers.html.ini @@ -1,77 +1,5 @@ [pointerevent_on_event_handlers.html] expected: TIMEOUT - [The default value of onpointerdown is always null] - expected: FAIL - - [The onpointerdown content attribute must be compiled into the onpointerdown property] - expected: FAIL - - [dispatching a pointerdown event must trigger element.onpointerdown] - expected: NOTRUN - - [The default value of onpointerup is always null] - expected: FAIL - - [The onpointerup content attribute must be compiled into the onpointerup property] - expected: FAIL - - [dispatching a pointerup event must trigger element.onpointerup] - expected: NOTRUN - - [The default value of onpointercancel is always null] - expected: FAIL - - [The onpointercancel content attribute must be compiled into the onpointercancel property] - expected: FAIL - - [dispatching a pointercancel event must trigger element.onpointercancel] - expected: NOTRUN - - [The default value of onpointermove is always null] - expected: FAIL - - [The onpointermove content attribute must be compiled into the onpointermove property] - expected: FAIL - - [dispatching a pointermove event must trigger element.onpointermove] - expected: NOTRUN - - [The default value of onpointerover is always null] - expected: FAIL - - [The onpointerover content attribute must be compiled into the onpointerover property] - expected: FAIL - - [dispatching a pointerover event must trigger element.onpointerover] - expected: NOTRUN - - [The default value of onpointerout is always null] - expected: FAIL - - [The onpointerout content attribute must be compiled into the onpointerout property] - expected: FAIL - - [dispatching a pointerout event must trigger element.onpointerout] - expected: NOTRUN - - [The default value of onpointerenter is always null] - expected: FAIL - - [The onpointerenter content attribute must be compiled into the onpointerenter property] - expected: FAIL - - [dispatching a pointerenter event must trigger element.onpointerenter] - expected: NOTRUN - - [The default value of onpointerleave is always null] - expected: FAIL - - [The onpointerleave content attribute must be compiled into the onpointerleave property] - expected: FAIL - - [dispatching a pointerleave event must trigger element.onpointerleave] - expected: NOTRUN - [The default value of ongotpointercapture is always null] expected: FAIL diff --git a/tests/wpt/meta/pointerevents/pointerevent_pointerenter_does_not_bubble.html.ini b/tests/wpt/meta/pointerevents/pointerevent_pointerenter_does_not_bubble.html.ini index d8236ea2dbe..9a03f46ecce 100644 --- a/tests/wpt/meta/pointerevents/pointerevent_pointerenter_does_not_bubble.html.ini +++ b/tests/wpt/meta/pointerevents/pointerevent_pointerenter_does_not_bubble.html.ini @@ -1,4 +1,3 @@ [pointerevent_pointerenter_does_not_bubble.html] - expected: TIMEOUT [pointerEnter event does not bubble] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/meta/pointerevents/pointerevent_pointerleave_descendants.html.ini b/tests/wpt/meta/pointerevents/pointerevent_pointerleave_descendants.html.ini deleted file mode 100644 index a5ed12b6b69..00000000000 --- a/tests/wpt/meta/pointerevents/pointerevent_pointerleave_descendants.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[pointerevent_pointerleave_descendants.html] - expected: TIMEOUT - [pointerleave event received] - expected: NOTRUN diff --git a/tests/wpt/meta/pointerevents/pointerevent_pointerleave_does_not_bubble.html.ini b/tests/wpt/meta/pointerevents/pointerevent_pointerleave_does_not_bubble.html.ini deleted file mode 100644 index 873931b0542..00000000000 --- a/tests/wpt/meta/pointerevents/pointerevent_pointerleave_does_not_bubble.html.ini +++ /dev/null @@ -1,4 +0,0 @@ -[pointerevent_pointerleave_does_not_bubble.html] - expected: TIMEOUT - [pointerLeave event does not bubble] - expected: NOTRUN diff --git a/tests/wpt/meta/pointerevents/pointerevent_pointerout_received_once.html.ini b/tests/wpt/meta/pointerevents/pointerevent_pointerout_received_once.html.ini deleted file mode 100644 index 27c01a58745..00000000000 --- a/tests/wpt/meta/pointerevents/pointerevent_pointerout_received_once.html.ini +++ /dev/null @@ -1,2 +0,0 @@ -[pointerevent_pointerout_received_once.html] - expected: TIMEOUT diff --git a/tests/wpt/meta/pointerevents/pointerevent_setpointercapture_inactive_button_mouse.html.ini b/tests/wpt/meta/pointerevents/pointerevent_setpointercapture_inactive_button_mouse.html.ini index e4fa1adccc8..46477d529b4 100644 --- a/tests/wpt/meta/pointerevents/pointerevent_setpointercapture_inactive_button_mouse.html.ini +++ b/tests/wpt/meta/pointerevents/pointerevent_setpointercapture_inactive_button_mouse.html.ini @@ -1,4 +1,3 @@ [pointerevent_setpointercapture_inactive_button_mouse.html] - expected: TIMEOUT [setPointerCapture + inactive button state] - expected: NOTRUN + expected: FAIL diff --git a/tests/wpt/meta/pointerevents/pointerevent_setpointercapture_relatedtarget.html.ini b/tests/wpt/meta/pointerevents/pointerevent_setpointercapture_relatedtarget.html.ini index 4a488656bd6..ee595e97ece 100644 --- a/tests/wpt/meta/pointerevents/pointerevent_setpointercapture_relatedtarget.html.ini +++ b/tests/wpt/meta/pointerevents/pointerevent_setpointercapture_relatedtarget.html.ini @@ -1,2 +1,3 @@ [pointerevent_setpointercapture_relatedtarget.html] - expected: TIMEOUT + [relatedTarget should not be null even when the capture is set.] + expected: FAIL diff --git a/tests/wpt/meta/pointerevents/predicted_events_attributes.html.ini b/tests/wpt/meta/pointerevents/predicted_events_attributes.html.ini index 741277cbaca..933982380ad 100644 --- a/tests/wpt/meta/pointerevents/predicted_events_attributes.html.ini +++ b/tests/wpt/meta/pointerevents/predicted_events_attributes.html.ini @@ -1,10 +1,7 @@ [predicted_events_attributes.html?pen] - expected: TIMEOUT - [Predicted list in boundary events] - expected: TIMEOUT - + expected: ERROR [Predicted list in pointer-capture events] - expected: NOTRUN + expected: TIMEOUT [Predicted list in pointerdown/move/up events] expected: NOTRUN @@ -29,12 +26,9 @@ [predicted_events_attributes.html?touch] - expected: TIMEOUT - [Predicted list in boundary events] - expected: TIMEOUT - + expected: ERROR [Predicted list in pointer-capture events] - expected: NOTRUN + expected: TIMEOUT [Predicted list in pointerdown/move/up events] expected: NOTRUN