From 35bca991ad4db3fe52ff6dd30bb3f7c567ba26e9 Mon Sep 17 00:00:00 2001 From: Robert Snakard Date: Sun, 24 Feb 2019 21:24:36 +0000 Subject: [PATCH] Implement WheelEvent Interface Note: The WheelEvent interface supports rotation in all 3 spatial dimensions. This implementation only supports two due to limitations in the Glutin compositor. The wheelevent interface is a dom interface that triggers for any attached device that can rotate in one or more spatial dimensions. Traditionally this is the mouse wheel though other devices could be used as well. E.g. the trackball on a trackball mouse. --- components/compositing/compositor.rs | 26 ++- components/compositing/windowing.rs | 5 +- components/script/dom/document.rs | 52 +++++- components/script/dom/mod.rs | 1 + components/script/dom/mouseevent.rs | 2 +- .../script/dom/webidls/WheelEvent.webidl | 33 ++++ components/script/dom/wheelevent.rs | 163 ++++++++++++++++++ components/script/script_thread.rs | 21 ++- components/script_traits/lib.rs | 26 +++ components/servo/lib.rs | 4 + ports/glutin/headed_window.rs | 25 ++- .../Event-subclasses-constructors.html.ini | 15 -- .../Event-timestamp-high-resolution.html.ini | 3 - .../uievents/idlharness.window.js.ini | 114 ------------ tests/wpt/mozilla/meta/MANIFEST.json | 2 +- .../wpt/mozilla/tests/mozilla/interfaces.html | 1 + 16 files changed, 347 insertions(+), 146 deletions(-) create mode 100644 components/script/dom/webidls/WheelEvent.webidl create mode 100644 components/script/dom/wheelevent.rs diff --git a/components/compositing/compositor.rs b/components/compositing/compositor.rs index 7d8bf020e5b..188b444eb50 100644 --- a/components/compositing/compositor.rs +++ b/components/compositing/compositor.rs @@ -26,9 +26,11 @@ use num_traits::FromPrimitive; #[cfg(feature = "gl")] use pixels::PixelFormat; use profile_traits::time::{self as profile_time, profile, ProfilerCategory}; -use script_traits::CompositorEvent::{MouseButtonEvent, MouseMoveEvent, TouchEvent}; +use script_traits::CompositorEvent::{MouseButtonEvent, MouseMoveEvent, TouchEvent, WheelEvent}; use script_traits::{AnimationState, AnimationTickType, ConstellationMsg, LayoutControlMsg}; -use script_traits::{MouseButton, MouseEventType, ScrollState, TouchEventType, TouchId}; +use script_traits::{ + MouseButton, MouseEventType, ScrollState, TouchEventType, TouchId, WheelDelta, +}; use script_traits::{UntrustedNodeAddress, WindowSizeData, WindowSizeType}; use servo_geometry::DeviceIndependentPixel; use std::collections::HashMap; @@ -792,6 +794,22 @@ impl IOCompositor { } } + pub fn send_wheel_event(&mut self, delta: WheelDelta, point: DevicePoint) { + let results = self.hit_test_at_point(point); + if let Some(item) = results.items.first() { + let event = WheelEvent( + delta, + item.point_in_viewport.to_untyped(), + Some(UntrustedNodeAddress(item.tag.0 as *const c_void)), + ); + let pipeline_id = PipelineId::from_webrender(item.pipeline); + let msg = ConstellationMsg::ForwardEvent(pipeline_id, event); + if let Err(e) = self.constellation_chan.send(msg) { + warn!("Sending event to constellation failed ({:?}).", e); + } + } + } + pub fn on_touch_event( &mut self, event_type: TouchEventType, @@ -858,6 +876,10 @@ impl IOCompositor { self.dispatch_mouse_window_event_class(MouseWindowEvent::Click(button, p)); } + pub fn on_wheel_event(&mut self, delta: WheelDelta, p: DevicePoint) { + self.send_wheel_event(delta, p); + } + pub fn on_scroll_event( &mut self, delta: ScrollLocation, diff --git a/components/compositing/windowing.rs b/components/compositing/windowing.rs index 28e1cf1f6eb..d4cc1abb4a5 100644 --- a/components/compositing/windowing.rs +++ b/components/compositing/windowing.rs @@ -10,7 +10,7 @@ use euclid::TypedScale; use gleam::gl; use keyboard_types::KeyboardEvent; use msg::constellation_msg::{PipelineId, TopLevelBrowsingContextId, TraversalDirection}; -use script_traits::{MouseButton, TouchEventType, TouchId}; +use script_traits::{MouseButton, TouchEventType, TouchId, WheelDelta}; use servo_geometry::DeviceIndependentPixel; use servo_url::ServoUrl; use std::fmt::{Debug, Error, Formatter}; @@ -65,6 +65,8 @@ pub enum WindowEvent { MouseWindowMoveEventClass(DevicePoint), /// Touch event: type, identifier, point Touch(TouchEventType, TouchId, DevicePoint), + /// Sent when user moves the mouse wheel. + Wheel(WheelDelta, DevicePoint), /// Sent when the user scrolls. The first point is the delta and the second point is the /// origin. Scroll(ScrollLocation, DeviceIntPoint, TouchEventType), @@ -113,6 +115,7 @@ impl Debug for WindowEvent { WindowEvent::MouseWindowEventClass(..) => write!(f, "Mouse"), WindowEvent::MouseWindowMoveEventClass(..) => write!(f, "MouseMove"), WindowEvent::Touch(..) => write!(f, "Touch"), + WindowEvent::Wheel(..) => write!(f, "Wheel"), WindowEvent::Scroll(..) => write!(f, "Scroll"), WindowEvent::Zoom(..) => write!(f, "Zoom"), WindowEvent::PinchZoom(..) => write!(f, "PinchZoom"), diff --git a/components/script/dom/document.rs b/components/script/dom/document.rs index 3583e7b8842..1122fa52552 100644 --- a/components/script/dom/document.rs +++ b/components/script/dom/document.rs @@ -97,6 +97,7 @@ use crate::dom::treewalker::TreeWalker; use crate::dom::uievent::UIEvent; use crate::dom::virtualmethods::vtable_for; use crate::dom::webglcontextevent::WebGLContextEvent; +use crate::dom::wheelevent::WheelEvent; use crate::dom::window::{ReflowReason, Window}; use crate::dom::windowproxy::WindowProxy; use crate::fetch::FetchCanceller; @@ -135,7 +136,9 @@ use profile_traits::time::{TimerMetadata, TimerMetadataFrameType, TimerMetadataR use ref_slice::ref_slice; use script_layout_interface::message::{Msg, ReflowGoal}; use script_traits::{AnimationState, DocumentActivity, MouseButton, MouseEventType}; -use script_traits::{MsDuration, ScriptMsg, TouchEventType, TouchId, UntrustedNodeAddress}; +use script_traits::{ + MsDuration, ScriptMsg, TouchEventType, TouchId, UntrustedNodeAddress, WheelDelta, +}; use servo_arc::Arc; use servo_atoms::Atom; use servo_config::pref; @@ -1218,6 +1221,53 @@ impl Document { .reflow(ReflowGoal::Full, ReflowReason::MouseEvent); } + #[allow(unsafe_code)] + pub fn handle_wheel_event( + &self, + js_runtime: *mut JSRuntime, + delta: WheelDelta, + client_point: Point2D, + node_address: Option, + ) { + let wheel_event_type_string = "wheel".to_owned(); + debug!("{}: at {:?}", wheel_event_type_string, client_point); + + let el = node_address.and_then(|address| { + let node = unsafe { node::from_untrusted_node_address(js_runtime, address) }; + node.inclusive_ancestors(ShadowIncluding::No) + .filter_map(DomRoot::downcast::) + .next() + }); + + let el = match el { + Some(el) => el, + None => return, + }; + + let node = el.upcast::(); + debug!("{}: on {:?}", wheel_event_type_string, node.debug_str()); + + // https://w3c.github.io/uievents/#event-wheelevents + let event = WheelEvent::new( + &self.window, + DOMString::from(wheel_event_type_string), + EventBubbles::Bubbles, + EventCancelable::Cancelable, + Some(&self.window), + 0i32, + Finite::wrap(delta.x), + Finite::wrap(delta.y), + Finite::wrap(delta.z), + delta.mode as u32, + ); + + let event = event.upcast::(); + event.set_trusted(true); + + let target = node.upcast(); + event.fire(target); + } + #[allow(unsafe_code)] pub fn handle_touch_event( &self, diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs index cf8d8a49389..b4365a405b2 100644 --- a/components/script/dom/mod.rs +++ b/components/script/dom/mod.rs @@ -528,6 +528,7 @@ pub mod webgltexture; pub mod webgluniformlocation; pub mod webglvertexarrayobjectoes; pub mod websocket; +pub mod wheelevent; pub mod window; pub mod windowproxy; pub mod worker; diff --git a/components/script/dom/mouseevent.rs b/components/script/dom/mouseevent.rs index 6fcadbbeaf8..7a54a20925b 100644 --- a/components/script/dom/mouseevent.rs +++ b/components/script/dom/mouseevent.rs @@ -38,7 +38,7 @@ pub struct MouseEvent { } impl MouseEvent { - fn new_inherited() -> MouseEvent { + pub fn new_inherited() -> MouseEvent { MouseEvent { uievent: UIEvent::new_inherited(), screen_x: Cell::new(0), diff --git a/components/script/dom/webidls/WheelEvent.webidl b/components/script/dom/webidls/WheelEvent.webidl new file mode 100644 index 00000000000..a38b87dd97d --- /dev/null +++ b/components/script/dom/webidls/WheelEvent.webidl @@ -0,0 +1,33 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +// https://w3c.github.io/uievents/#interface-wheelevent +[Constructor(DOMString typeArg, optional WheelEventInit wheelEventInitDict), + Exposed=Window] +interface WheelEvent : MouseEvent { + const unsigned long DOM_DELTA_PIXEL = 0x00; + const unsigned long DOM_DELTA_LINE = 0x01; + const unsigned long DOM_DELTA_PAGE = 0x02; + readonly attribute double deltaX; + readonly attribute double deltaY; + readonly attribute double deltaZ; + readonly attribute unsigned long deltaMode; +}; + +// https://w3c.github.io/uievents/#idl-wheeleventinit +dictionary WheelEventInit : MouseEventInit { + double deltaX = 0.0; + double deltaY = 0.0; + double deltaZ = 0.0; + unsigned long deltaMode = 0; +}; + +// https://w3c.github.io/uievents/#idl-interface-WheelEvent-initializers +partial interface WheelEvent { + // Deprecated in DOM Level 3 + void initWheelEvent (DOMString typeArg, boolean bubblesArg, boolean cancelableArg, + Window? viewArg, long detailArg, + double deltaX, double deltaY, + double deltaZ, unsigned long deltaMode); +}; diff --git a/components/script/dom/wheelevent.rs b/components/script/dom/wheelevent.rs new file mode 100644 index 00000000000..0fd23db8da8 --- /dev/null +++ b/components/script/dom/wheelevent.rs @@ -0,0 +1,163 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +use crate::dom::bindings::codegen::Bindings::MouseEventBinding::MouseEventMethods; +use crate::dom::bindings::codegen::Bindings::WheelEventBinding; +use crate::dom::bindings::codegen::Bindings::WheelEventBinding::WheelEventMethods; +use crate::dom::bindings::error::Fallible; +use crate::dom::bindings::inheritance::Castable; +use crate::dom::bindings::num::Finite; +use crate::dom::bindings::reflector::reflect_dom_object; +use crate::dom::bindings::root::DomRoot; +use crate::dom::bindings::str::DOMString; +use crate::dom::event::{Event, EventBubbles, EventCancelable}; +use crate::dom::mouseevent::MouseEvent; +use crate::dom::window::Window; +use dom_struct::dom_struct; +use std::cell::Cell; + +#[dom_struct] +pub struct WheelEvent { + mouseevent: MouseEvent, + delta_x: Cell>, + delta_y: Cell>, + delta_z: Cell>, + delta_mode: Cell, +} + +impl WheelEvent { + fn new_inherited() -> WheelEvent { + WheelEvent { + mouseevent: MouseEvent::new_inherited(), + delta_x: Cell::new(Finite::wrap(0.0)), + delta_y: Cell::new(Finite::wrap(0.0)), + delta_z: Cell::new(Finite::wrap(0.0)), + delta_mode: Cell::new(0), + } + } + + pub fn new_unintialized(window: &Window) -> DomRoot { + reflect_dom_object( + Box::new(WheelEvent::new_inherited()), + window, + WheelEventBinding::Wrap, + ) + } + + pub fn new( + window: &Window, + type_: DOMString, + can_bubble: EventBubbles, + cancelable: EventCancelable, + view: Option<&Window>, + detail: i32, + delta_x: Finite, + delta_y: Finite, + delta_z: Finite, + delta_mode: u32, + ) -> DomRoot { + let ev = WheelEvent::new_unintialized(window); + ev.InitWheelEvent( + type_, + bool::from(can_bubble), + bool::from(cancelable), + view, + detail, + delta_x, + delta_y, + delta_z, + delta_mode, + ); + + ev + } + + pub fn Constructor( + window: &Window, + type_: DOMString, + init: &WheelEventBinding::WheelEventInit, + ) -> Fallible> { + let event = WheelEvent::new( + window, + type_, + EventBubbles::from(init.parent.parent.parent.parent.bubbles), + EventCancelable::from(init.parent.parent.parent.parent.cancelable), + init.parent.parent.parent.view.deref(), + init.parent.parent.parent.detail, + init.deltaX, + init.deltaY, + init.deltaZ, + init.deltaMode, + ); + + Ok(event) + } +} + +impl WheelEventMethods for WheelEvent { + // https://w3c.github.io/uievents/#widl-WheelEvent-deltaX + fn DeltaX(&self) -> Finite { + self.delta_x.get() + } + + // https://w3c.github.io/uievents/#widl-WheelEvent-deltaY + fn DeltaY(&self) -> Finite { + self.delta_y.get() + } + + // https://w3c.github.io/uievents/#widl-WheelEvent-deltaZ + fn DeltaZ(&self) -> Finite { + self.delta_z.get() + } + + // https://w3c.github.io/uievents/#widl-WheelEvent-deltaMode + fn DeltaMode(&self) -> u32 { + self.delta_mode.get() + } + + // https://w3c.github.io/uievents/#widl-WheelEvent-initWheelEvent + fn InitWheelEvent( + &self, + type_arg: DOMString, + can_bubble_arg: bool, + cancelable_arg: bool, + view_arg: Option<&Window>, + detail_arg: i32, + delta_x_arg: Finite, + delta_y_arg: Finite, + delta_z_arg: Finite, + delta_mode_arg: u32, + ) { + if self.upcast::().dispatching() { + return; + } + + self.upcast::().InitMouseEvent( + type_arg, + can_bubble_arg, + cancelable_arg, + view_arg, + detail_arg, + self.mouseevent.ScreenX(), + self.mouseevent.ScreenY(), + self.mouseevent.ClientX(), + self.mouseevent.ClientY(), + self.mouseevent.CtrlKey(), + self.mouseevent.AltKey(), + self.mouseevent.ShiftKey(), + self.mouseevent.MetaKey(), + self.mouseevent.Button(), + self.mouseevent.GetRelatedTarget().deref(), + ); + self.delta_x.set(delta_x_arg); + self.delta_y.set(delta_y_arg); + self.delta_z.set(delta_z_arg); + self.delta_mode.set(delta_mode_arg); + } + + // https://dom.spec.whatwg.org/#dom-event-istrusted + fn IsTrusted(&self) -> bool { + self.mouseevent.IsTrusted() + } +} diff --git a/components/script/script_thread.rs b/components/script/script_thread.rs index f284e14dd0c..d0dad1cd9ba 100644 --- a/components/script/script_thread.rs +++ b/components/script/script_thread.rs @@ -125,6 +125,7 @@ use script_layout_interface::message::{self, LayoutThreadInit, Msg, ReflowGoal}; use script_traits::webdriver_msg::WebDriverScriptCommand; use script_traits::CompositorEvent::{ CompositionEvent, KeyboardEvent, MouseButtonEvent, MouseMoveEvent, ResizeEvent, TouchEvent, + WheelEvent, }; use script_traits::{CompositorEvent, ConstellationControlMsg}; use script_traits::{DiscardBrowsingContext, DocumentActivity, EventResult}; @@ -132,7 +133,7 @@ use script_traits::{InitialScriptState, JsEvalResult, LayoutMsg, LoadData}; use script_traits::{MouseButton, MouseEventType, NewLayoutInfo}; use script_traits::{Painter, ProgressiveWebMetricType, ScriptMsg, ScriptThreadFactory}; use script_traits::{ScriptToConstellationChan, TimerEvent, TimerSchedulerMsg}; -use script_traits::{TimerSource, TouchEventType, TouchId, UntrustedNodeAddress}; +use script_traits::{TimerSource, TouchEventType, TouchId, UntrustedNodeAddress, WheelDelta}; use script_traits::{UpdatePipelineIdReason, WindowSizeData, WindowSizeType}; use servo_atoms::Atom; use servo_config::opts; @@ -3162,6 +3163,10 @@ impl ScriptThread { } }, + WheelEvent(delta, point, node_address) => { + self.handle_wheel_event(pipeline_id, delta, point, node_address); + }, + KeyboardEvent(key_event) => { let document = match { self.documents.borrow().find_document(pipeline_id) } { Some(document) => document, @@ -3229,6 +3234,20 @@ impl ScriptThread { ) } + fn handle_wheel_event( + &self, + pipeline_id: PipelineId, + wheel_delta: WheelDelta, + point: Point2D, + node_address: Option, + ) { + let document = match { self.documents.borrow().find_document(pipeline_id) } { + Some(document) => document, + None => return warn!("Message sent to closed pipeline {}.", pipeline_id), + }; + document.handle_wheel_event(self.js_runtime.rt(), wheel_delta, point, node_address); + } + /// /// The entry point for content to notify that a new load has been requested /// for the given pipeline (specifically the "navigate" algorithm). diff --git a/components/script_traits/lib.rs b/components/script_traits/lib.rs index de05de657bd..28a6dbbfad4 100644 --- a/components/script_traits/lib.rs +++ b/components/script_traits/lib.rs @@ -462,6 +462,30 @@ pub enum MouseEventType { MouseUp, } +/// Mode to measure WheelDelta floats in +#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] +pub enum WheelMode { + /// Delta values are specified in pixels + DeltaPixel = 0x00, + /// Delta values are specified in lines + DeltaLine = 0x01, + /// Delta values are specified in pages + DeltaPage = 0x02, +} + +/// The Wheel event deltas in every direction +#[derive(Clone, Copy, Debug, Deserialize, PartialEq, Serialize)] +pub struct WheelDelta { + /// Delta in the left/right direction + pub x: f64, + /// Delta in the up/down direction + pub y: f64, + /// Delta in the direction going into/out of the screen + pub z: f64, + /// Mode to measure the floats in + pub mode: WheelMode, +} + /// Events from the compositor that the script thread needs to know about #[derive(Debug, Deserialize, Serialize)] pub enum CompositorEvent { @@ -491,6 +515,8 @@ pub enum CompositorEvent { Point2D, Option, ), + /// A wheel event was generated with a delta in the X, Y, and/or Z directions + WheelEvent(WheelDelta, Point2D, Option), /// A key was pressed. KeyboardEvent(KeyboardEvent), /// An event from the IME is dispatched. diff --git a/components/servo/lib.rs b/components/servo/lib.rs index 2e54db585ec..61ddd3f1e0f 100644 --- a/components/servo/lib.rs +++ b/components/servo/lib.rs @@ -397,6 +397,10 @@ where .on_touch_event(event_type, identifier, location); }, + WindowEvent::Wheel(delta, location) => { + self.compositor.on_wheel_event(delta, location); + }, + WindowEvent::Scroll(delta, cursor, phase) => { self.compositor.on_scroll_event(delta, cursor, phase); }, diff --git a/ports/glutin/headed_window.rs b/ports/glutin/headed_window.rs index 5a07adf9093..3026170645e 100644 --- a/ports/glutin/headed_window.rs +++ b/ports/glutin/headed_window.rs @@ -23,7 +23,7 @@ use keyboard_types::{Key, KeyState, KeyboardEvent}; use servo::compositing::windowing::{AnimationState, MouseWindowEvent, WindowEvent}; use servo::compositing::windowing::{EmbedderCoordinates, WindowMethods}; use servo::embedder_traits::Cursor; -use servo::script_traits::TouchEventType; +use servo::script_traits::{TouchEventType, WheelMode, WheelDelta}; use servo::servo_config::opts; use servo::servo_geometry::DeviceIndependentPixel; use servo::style_traits::DevicePixel; @@ -400,14 +400,22 @@ impl WindowPortsMethods for Window { ))); }, glutin::WindowEvent::MouseWheel { delta, phase, .. } => { - let (mut dx, mut dy) = match delta { - MouseScrollDelta::LineDelta(dx, dy) => (dx, dy * LINE_HEIGHT), + let (mut dx, mut dy, mode) = match delta { + MouseScrollDelta::LineDelta(dx, dy) => (dx as f64, (dy * LINE_HEIGHT) as f64, + WheelMode::DeltaLine), MouseScrollDelta::PixelDelta(position) => { let position = position.to_physical(self.device_hidpi_factor().get() as f64); - (position.x as f32, position.y as f32) + (position.x as f64, position.y as f64, WheelMode::DeltaPixel) }, }; + + // Create wheel event before snapping to the major axis of movement + let wheel_delta = WheelDelta { x: dx, y: dy, z: 0.0, mode }; + let pos = self.mouse_pos.get(); + let position = TypedPoint2D::new(pos.x as f32, pos.y as f32); + let wheel_event = WindowEvent::Wheel(wheel_delta, position); + // Scroll events snap to the major axis of movement, with vertical // preferred over horizontal. if dy.abs() >= dx.abs() { @@ -416,10 +424,13 @@ impl WindowPortsMethods for Window { dy = 0.0; } - let scroll_location = ScrollLocation::Delta(TypedVector2D::new(dx, dy)); + let scroll_location = ScrollLocation::Delta(TypedVector2D::new(dx as f32, dy as f32)); let phase = winit_phase_to_touch_event_type(phase); - let event = WindowEvent::Scroll(scroll_location, self.mouse_pos.get(), phase); - self.event_queue.borrow_mut().push(event); + let scroll_event = WindowEvent::Scroll(scroll_location, self.mouse_pos.get(), phase); + + // Send events + self.event_queue.borrow_mut().push(wheel_event); + self.event_queue.borrow_mut().push(scroll_event); }, glutin::WindowEvent::Touch(touch) => { use servo::script_traits::TouchId; diff --git a/tests/wpt/metadata/dom/events/Event-subclasses-constructors.html.ini b/tests/wpt/metadata/dom/events/Event-subclasses-constructors.html.ini index e251347ee4f..952d6bea81c 100644 --- a/tests/wpt/metadata/dom/events/Event-subclasses-constructors.html.ini +++ b/tests/wpt/metadata/dom/events/Event-subclasses-constructors.html.ini @@ -3,21 +3,6 @@ [MouseEvent constructor (argument with non-default values)] expected: FAIL - [WheelEvent constructor (no argument)] - expected: FAIL - - [WheelEvent constructor (undefined argument)] - expected: FAIL - - [WheelEvent constructor (null argument)] - expected: FAIL - - [WheelEvent constructor (empty argument)] - expected: FAIL - - [WheelEvent constructor (argument with default values)] - expected: FAIL - [WheelEvent constructor (argument with non-default values)] expected: FAIL diff --git a/tests/wpt/metadata/dom/events/Event-timestamp-high-resolution.html.ini b/tests/wpt/metadata/dom/events/Event-timestamp-high-resolution.html.ini index 1e980e21f8b..1eea3101ab7 100644 --- a/tests/wpt/metadata/dom/events/Event-timestamp-high-resolution.html.ini +++ b/tests/wpt/metadata/dom/events/Event-timestamp-high-resolution.html.ini @@ -3,9 +3,6 @@ [Untitled] expected: FAIL - [Constructed WheelEvent timestamp should be high resolution and have the same time origin as performance.now()] - expected: FAIL - [Constructed GamepadEvent timestamp should be high resolution and have the same time origin as performance.now()] expected: FAIL diff --git a/tests/wpt/metadata/uievents/idlharness.window.js.ini b/tests/wpt/metadata/uievents/idlharness.window.js.ini index 035480e6efe..4f3e95fcaf9 100644 --- a/tests/wpt/metadata/uievents/idlharness.window.js.ini +++ b/tests/wpt/metadata/uievents/idlharness.window.js.ini @@ -2,18 +2,9 @@ [idlharness] expected: FAIL - [MouseEvent interface: new WheelEvent("event") must inherit property "buttons" with the proper type] - expected: FAIL - [UIEvent interface: new CompositionEvent("event") must inherit property "view" with the proper type] expected: FAIL - [WheelEvent interface object length] - expected: FAIL - - [WheelEvent interface object name] - expected: FAIL - [UIEvent interface: new CompositionEvent("event") must inherit property "which" with the proper type] expected: FAIL @@ -32,27 +23,9 @@ [MouseEvent interface: operation getModifierState(DOMString)] expected: FAIL - [WheelEvent interface: existence and properties of interface prototype object] - expected: FAIL - - [MouseEvent interface: new WheelEvent("event") must inherit property "shiftKey" with the proper type] - expected: FAIL - [CompositionEvent interface object name] expected: FAIL - [UIEvent interface: new WheelEvent("event") must inherit property "detail" with the proper type] - expected: FAIL - - [WheelEvent interface: constant DOM_DELTA_PAGE on interface prototype object] - expected: FAIL - - [MouseEvent interface: new WheelEvent("event") must inherit property "ctrlKey" with the proper type] - expected: FAIL - - [WheelEvent interface: constant DOM_DELTA_PAGE on interface object] - expected: FAIL - [MouseEvent interface: new MouseEvent("event") must inherit property "getModifierState(DOMString)" with the proper type] expected: FAIL @@ -62,57 +35,18 @@ [CompositionEvent interface: existence and properties of interface object] expected: FAIL - [WheelEvent interface: constant DOM_DELTA_PIXEL on interface object] - expected: FAIL - - [WheelEvent interface: new WheelEvent("event") must inherit property "DOM_DELTA_LINE" with the proper type] - expected: FAIL - - [UIEvent interface: new WheelEvent("event") must inherit property "view" with the proper type] - expected: FAIL - - [MouseEvent interface: new WheelEvent("event") must inherit property "altKey" with the proper type] - expected: FAIL - [UIEvent interface: new CompositionEvent("event") must inherit property "detail" with the proper type] expected: FAIL - [MouseEvent interface: new WheelEvent("event") must inherit property "relatedTarget" with the proper type] - expected: FAIL - [MouseEvent interface: calling getModifierState(DOMString) on new MouseEvent("event") with too few arguments must throw TypeError] expected: FAIL - [WheelEvent interface: existence and properties of interface object] - expected: FAIL - - [WheelEvent interface: attribute deltaX] - expected: FAIL - - [WheelEvent interface: attribute deltaY] - expected: FAIL - - [WheelEvent interface: attribute deltaZ] - expected: FAIL - - [WheelEvent must be primary interface of new WheelEvent("event")] - expected: FAIL - - [WheelEvent interface: constant DOM_DELTA_LINE on interface object] - expected: FAIL - [Stringification of new CompositionEvent("event")] expected: FAIL - [WheelEvent interface: new WheelEvent("event") must inherit property "deltaX" with the proper type] - expected: FAIL - [MouseEvent interface: new WheelEvent("event") must inherit property "getModifierState(DOMString)" with the proper type] expected: FAIL - [MouseEvent interface: new WheelEvent("event") must inherit property "metaKey" with the proper type] - expected: FAIL - [CompositionEvent interface: existence and properties of interface prototype object] expected: FAIL @@ -122,69 +56,21 @@ [CompositionEvent must be primary interface of new CompositionEvent("event")] expected: FAIL - [WheelEvent interface: new WheelEvent("event") must inherit property "DOM_DELTA_PIXEL" with the proper type] - expected: FAIL - - [Stringification of new WheelEvent("event")] - expected: FAIL - [UIEvent interface: new FocusEvent("event") must inherit property "which" with the proper type] expected: FAIL - [MouseEvent interface: new WheelEvent("event") must inherit property "screenX" with the proper type] - expected: FAIL - [CompositionEvent interface: new CompositionEvent("event") must inherit property "data" with the proper type] expected: FAIL - [WheelEvent interface: existence and properties of interface prototype object's "constructor" property] - expected: FAIL - - [MouseEvent interface: new WheelEvent("event") must inherit property "clientX" with the proper type] - expected: FAIL - [CompositionEvent interface: existence and properties of interface prototype object's @@unscopables property] expected: FAIL - [WheelEvent interface: existence and properties of interface prototype object's @@unscopables property] - expected: FAIL - - [MouseEvent interface: new WheelEvent("event") must inherit property "screenY" with the proper type] - expected: FAIL - - [WheelEvent interface: attribute deltaMode] - expected: FAIL - - [WheelEvent interface: constant DOM_DELTA_LINE on interface prototype object] - expected: FAIL - [CompositionEvent interface: existence and properties of interface prototype object's "constructor" property] expected: FAIL - [WheelEvent interface: new WheelEvent("event") must inherit property "DOM_DELTA_PAGE" with the proper type] - expected: FAIL - - [MouseEvent interface: new WheelEvent("event") must inherit property "button" with the proper type] - expected: FAIL - - [MouseEvent interface: new WheelEvent("event") must inherit property "clientY" with the proper type] - expected: FAIL - - [WheelEvent interface: new WheelEvent("event") must inherit property "deltaMode" with the proper type] - expected: FAIL - [UIEvent interface: attribute which] expected: FAIL - [WheelEvent interface: new WheelEvent("event") must inherit property "deltaY" with the proper type] - expected: FAIL - - [WheelEvent interface: constant DOM_DELTA_PIXEL on interface prototype object] - expected: FAIL - - [WheelEvent interface: new WheelEvent("event") must inherit property "deltaZ" with the proper type] - expected: FAIL - [CompositionEvent interface object length] expected: FAIL diff --git a/tests/wpt/mozilla/meta/MANIFEST.json b/tests/wpt/mozilla/meta/MANIFEST.json index c83c5668edf..a2623a0c338 100644 --- a/tests/wpt/mozilla/meta/MANIFEST.json +++ b/tests/wpt/mozilla/meta/MANIFEST.json @@ -20330,7 +20330,7 @@ "testharness" ], "mozilla/interfaces.html": [ - "2effd46f565c4787e8632f5e898e1b43d457672f", + "b6cbf4b4f9b4fdcbe5f05a96970822d2ae9d325d", "testharness" ], "mozilla/interfaces.js": [ diff --git a/tests/wpt/mozilla/tests/mozilla/interfaces.html b/tests/wpt/mozilla/tests/mozilla/interfaces.html index 2effd46f565..b6cbf4b4f9b 100644 --- a/tests/wpt/mozilla/tests/mozilla/interfaces.html +++ b/tests/wpt/mozilla/tests/mozilla/interfaces.html @@ -242,6 +242,7 @@ test_interfaces([ "WebGLActiveInfo", "WebGLShaderPrecisionFormat", "WebSocket", + "WheelEvent", "Window", "Worker", "XMLDocument",