aboutsummaryrefslogtreecommitdiffstats
path: root/components/script/dom
diff options
context:
space:
mode:
Diffstat (limited to 'components/script/dom')
-rw-r--r--components/script/dom/fakexrinputcontroller.rs34
-rw-r--r--components/script/dom/webidls/FakeXRInputController.webidl6
2 files changed, 35 insertions, 5 deletions
diff --git a/components/script/dom/fakexrinputcontroller.rs b/components/script/dom/fakexrinputcontroller.rs
index 274039c2fd2..63c0084fb6e 100644
--- a/components/script/dom/fakexrinputcontroller.rs
+++ b/components/script/dom/fakexrinputcontroller.rs
@@ -2,13 +2,18 @@
* 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::FakeXRInputControllerBinding::{self};
+use crate::dom::bindings::codegen::Bindings::FakeXRDeviceBinding::FakeXRRigidTransformInit;
+use crate::dom::bindings::codegen::Bindings::FakeXRInputControllerBinding::{
+ self, FakeXRInputControllerMethods,
+};
+use crate::dom::bindings::error::Fallible;
use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
use crate::dom::bindings::root::DomRoot;
+use crate::dom::fakexrdevice::get_origin;
use crate::dom::globalscope::GlobalScope;
use dom_struct::dom_struct;
use ipc_channel::ipc::IpcSender;
-use webxr_api::{InputId, MockDeviceMsg};
+use webxr_api::{InputId, MockDeviceMsg, MockInputMsg};
#[dom_struct]
pub struct FakeXRInputController {
@@ -39,4 +44,29 @@ impl FakeXRInputController {
FakeXRInputControllerBinding::Wrap,
)
}
+
+ fn send_message(&self, msg: MockInputMsg) {
+ let _ = self
+ .sender
+ .send(MockDeviceMsg::MessageInputSource(self.id, msg));
+ }
+}
+
+impl FakeXRInputControllerMethods for FakeXRInputController {
+ /// https://immersive-web.github.io/webxr-test-api/#dom-fakexrinputcontroller-setpointerorigin
+ fn SetPointerOrigin(&self, origin: &FakeXRRigidTransformInit, _emulated: bool) -> Fallible<()> {
+ self.send_message(MockInputMsg::SetPointerOrigin(Some(get_origin(origin)?)));
+ Ok(())
+ }
+
+ /// https://immersive-web.github.io/webxr-test-api/#dom-fakexrinputcontroller-setgriporigin
+ fn SetGripOrigin(&self, origin: &FakeXRRigidTransformInit, _emulated: bool) -> Fallible<()> {
+ self.send_message(MockInputMsg::SetGripOrigin(Some(get_origin(origin)?)));
+ Ok(())
+ }
+
+ /// https://immersive-web.github.io/webxr-test-api/#dom-fakexrinputcontroller-cleargriporigin
+ fn ClearGripOrigin(&self) {
+ self.send_message(MockInputMsg::SetGripOrigin(None))
+ }
}
diff --git a/components/script/dom/webidls/FakeXRInputController.webidl b/components/script/dom/webidls/FakeXRInputController.webidl
index b4022d5d404..165b768c0a5 100644
--- a/components/script/dom/webidls/FakeXRInputController.webidl
+++ b/components/script/dom/webidls/FakeXRInputController.webidl
@@ -9,9 +9,9 @@ interface FakeXRInputController {
// void setHandedness(XRHandedness handedness);
// void setTargetRayMode(XRTargetRayMode targetRayMode);
// void setProfiles(sequence<DOMString> profiles);
- // void setGripOrigin(FakeXRRigidTransformInit gripOrigin, optional boolean emulatedPosition = false);
- // void clearGripOrigin();
- // void setPointerOrigin(FakeXRRigidTransformInit pointerOrigin, optional boolean emulatedPosition = false);
+ [Throws] void setGripOrigin(FakeXRRigidTransformInit gripOrigin, optional boolean emulatedPosition = false);
+ void clearGripOrigin();
+ [Throws] void setPointerOrigin(FakeXRRigidTransformInit pointerOrigin, optional boolean emulatedPosition = false);
// void disconnect();
// void reconnect();