diff options
-rw-r--r-- | Cargo.lock | 4 | ||||
-rw-r--r-- | components/atoms/static_atoms.txt | 3 | ||||
-rw-r--r-- | components/script/dom/webidls/XRSession.webidl | 3 | ||||
-rw-r--r-- | components/script/dom/xrsession.rs | 30 | ||||
-rw-r--r-- | tests/wpt/metadata/webxr/idlharness.https.window.js.ini | 10 |
5 files changed, 31 insertions, 19 deletions
diff --git a/Cargo.lock b/Cargo.lock index b953e026d2e..0947f0385e9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6007,7 +6007,7 @@ dependencies = [ [[package]] name = "webxr" version = "0.0.1" -source = "git+https://github.com/servo/webxr#27c83fde49d820bc3ffd0396d9aea01a3b5c5729" +source = "git+https://github.com/servo/webxr#e44552df536a6f424d58ccd068aa0301fee5fa1e" dependencies = [ "bindgen", "euclid", @@ -6027,7 +6027,7 @@ dependencies = [ [[package]] name = "webxr-api" version = "0.0.1" -source = "git+https://github.com/servo/webxr#27c83fde49d820bc3ffd0396d9aea01a3b5c5729" +source = "git+https://github.com/servo/webxr#e44552df536a6f424d58ccd068aa0301fee5fa1e" dependencies = [ "euclid", "ipc-channel", diff --git a/components/atoms/static_atoms.txt b/components/atoms/static_atoms.txt index abbddbcfd3f..bf50e2e9acd 100644 --- a/components/atoms/static_atoms.txt +++ b/components/atoms/static_atoms.txt @@ -107,6 +107,9 @@ selectend selectstart serif signalingstatechange +squeeze +squeezeend +squeezestart srclang statechange stroke diff --git a/components/script/dom/webidls/XRSession.webidl b/components/script/dom/webidls/XRSession.webidl index be8fb36e7bf..e726a500cb7 100644 --- a/components/script/dom/webidls/XRSession.webidl +++ b/components/script/dom/webidls/XRSession.webidl @@ -39,8 +39,11 @@ interface XRSession : EventTarget { // // Events attribute EventHandler onend; attribute EventHandler onselect; + attribute EventHandler onsqueeze; // attribute EventHandler oninputsourceschange; attribute EventHandler onselectstart; attribute EventHandler onselectend; + attribute EventHandler onsqueezestart; + attribute EventHandler onsqueezeend; attribute EventHandler onvisibilitychange; }; diff --git a/components/script/dom/xrsession.rs b/components/script/dom/xrsession.rs index 6fbdc592b0e..438705853f6 100644 --- a/components/script/dom/xrsession.rs +++ b/components/script/dom/xrsession.rs @@ -47,7 +47,8 @@ use std::cell::Cell; use std::mem; use std::rc::Rc; use webxr_api::{ - self, EnvironmentBlendMode, Event as XREvent, Frame, SelectEvent, Session, Visibility, + self, EnvironmentBlendMode, Event as XREvent, Frame, SelectEvent, SelectKind, Session, + Visibility, }; #[dom_struct] @@ -218,16 +219,22 @@ impl XRSession { let event = XRSessionEvent::new(&self.global(), atom!("end"), false, false, self); event.upcast::<Event>().fire(self.upcast()); }, - XREvent::Select(input, kind, frame) => { + XREvent::Select(input, kind, ty, frame) => { + use servo_atoms::Atom; + const START_ATOMS: [Atom; 2] = [atom!("selectstart"), atom!("squeezestart")]; + const EVENT_ATOMS: [Atom; 2] = [atom!("select"), atom!("squeeze")]; + const END_ATOMS: [Atom; 2] = [atom!("selectend"), atom!("squeezeend")]; + // https://immersive-web.github.io/webxr/#primary-action let source = self.input_sources.find(input); + let atom_index = if kind == SelectKind::Squeeze { 1 } else { 0 }; if let Some(source) = source { let frame = XRFrame::new(&self.global(), self, frame); frame.set_active(true); - if kind == SelectEvent::Start { + if ty == SelectEvent::Start { let event = XRInputSourceEvent::new( &self.global(), - atom!("selectstart"), + START_ATOMS[atom_index].clone(), false, false, &frame, @@ -235,10 +242,10 @@ impl XRSession { ); event.upcast::<Event>().fire(self.upcast()); } else { - if kind == SelectEvent::Select { + if ty == SelectEvent::Select { let event = XRInputSourceEvent::new( &self.global(), - atom!("select"), + EVENT_ATOMS[atom_index].clone(), false, false, &frame, @@ -248,7 +255,7 @@ impl XRSession { } let event = XRInputSourceEvent::new( &self.global(), - atom!("selectend"), + END_ATOMS[atom_index].clone(), false, false, &frame, @@ -353,6 +360,15 @@ impl XRSessionMethods for XRSession { /// https://immersive-web.github.io/webxr/#eventdef-xrsession-selectend event_handler!(selectend, GetOnselectend, SetOnselectend); + /// https://immersive-web.github.io/webxr/#eventdef-xrsession-squeeze + event_handler!(squeeze, GetOnsqueeze, SetOnsqueeze); + + /// https://immersive-web.github.io/webxr/#eventdef-xrsession-squeezestart + event_handler!(squeezestart, GetOnsqueezestart, SetOnsqueezestart); + + /// https://immersive-web.github.io/webxr/#eventdef-xrsession-squeezeend + event_handler!(squeezeend, GetOnsqueezeend, SetOnsqueezeend); + /// https://immersive-web.github.io/webxr/#eventdef-xrsession-visibilitychange event_handler!( visibilitychange, diff --git a/tests/wpt/metadata/webxr/idlharness.https.window.js.ini b/tests/wpt/metadata/webxr/idlharness.https.window.js.ini index fb2e8a3327e..d65bfccb3a4 100644 --- a/tests/wpt/metadata/webxr/idlharness.https.window.js.ini +++ b/tests/wpt/metadata/webxr/idlharness.https.window.js.ini @@ -169,13 +169,3 @@ [WebGLRenderingContext includes WebGLRenderingContextBase: member names are unique] expected: FAIL - - [XRSession interface: attribute onsqueeze] - expected: FAIL - - [XRSession interface: attribute onsqueezestart] - expected: FAIL - - [XRSession interface: attribute onsqueezeend] - expected: FAIL - |