aboutsummaryrefslogtreecommitdiffstats
path: root/components/script
diff options
context:
space:
mode:
Diffstat (limited to 'components/script')
-rw-r--r--components/script/dom/bindings/trace.rs3
-rw-r--r--components/script/dom/fakexrinputcontroller.rs42
-rw-r--r--components/script/dom/mod.rs1
-rw-r--r--components/script/dom/webidls/FakeXRInputController.webidl53
4 files changed, 98 insertions, 1 deletions
diff --git a/components/script/dom/bindings/trace.rs b/components/script/dom/bindings/trace.rs
index d2e1876b9d8..3bad24b1b1d 100644
--- a/components/script/dom/bindings/trace.rs
+++ b/components/script/dom/bindings/trace.rs
@@ -534,7 +534,8 @@ unsafe_no_jsmanaged_fields!(
webxr_api::Registry,
webxr_api::Session,
webxr_api::Frame,
- webxr_api::InputSource
+ webxr_api::InputSource,
+ webxr_api::InputId
);
unsafe_no_jsmanaged_fields!(ScriptToConstellationChan);
unsafe_no_jsmanaged_fields!(InteractiveMetrics);
diff --git a/components/script/dom/fakexrinputcontroller.rs b/components/script/dom/fakexrinputcontroller.rs
new file mode 100644
index 00000000000..274039c2fd2
--- /dev/null
+++ b/components/script/dom/fakexrinputcontroller.rs
@@ -0,0 +1,42 @@
+/* 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::FakeXRInputControllerBinding::{self};
+use crate::dom::bindings::reflector::{reflect_dom_object, Reflector};
+use crate::dom::bindings::root::DomRoot;
+use crate::dom::globalscope::GlobalScope;
+use dom_struct::dom_struct;
+use ipc_channel::ipc::IpcSender;
+use webxr_api::{InputId, MockDeviceMsg};
+
+#[dom_struct]
+pub struct FakeXRInputController {
+ reflector: Reflector,
+ #[ignore_malloc_size_of = "defined in ipc-channel"]
+ sender: IpcSender<MockDeviceMsg>,
+ #[ignore_malloc_size_of = "defined in webxr-api"]
+ id: InputId,
+}
+
+impl FakeXRInputController {
+ pub fn new_inherited(sender: IpcSender<MockDeviceMsg>, id: InputId) -> FakeXRInputController {
+ FakeXRInputController {
+ reflector: Reflector::new(),
+ sender,
+ id,
+ }
+ }
+
+ pub fn new(
+ global: &GlobalScope,
+ sender: IpcSender<MockDeviceMsg>,
+ id: InputId,
+ ) -> DomRoot<FakeXRInputController> {
+ reflect_dom_object(
+ Box::new(FakeXRInputController::new_inherited(sender, id)),
+ global,
+ FakeXRInputControllerBinding::Wrap,
+ )
+ }
+}
diff --git a/components/script/dom/mod.rs b/components/script/dom/mod.rs
index b8bdc638c17..014a82e8a73 100644
--- a/components/script/dom/mod.rs
+++ b/components/script/dom/mod.rs
@@ -301,6 +301,7 @@ pub mod eventtarget;
pub mod extendableevent;
pub mod extendablemessageevent;
pub mod fakexrdevice;
+pub mod fakexrinputcontroller;
pub mod file;
pub mod filelist;
pub mod filereader;
diff --git a/components/script/dom/webidls/FakeXRInputController.webidl b/components/script/dom/webidls/FakeXRInputController.webidl
new file mode 100644
index 00000000000..b4022d5d404
--- /dev/null
+++ b/components/script/dom/webidls/FakeXRInputController.webidl
@@ -0,0 +1,53 @@
+/* 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://immersive-web.github.io/webxr-test-api/#fakexrinputcontroller
+
+[Exposed=Window, Pref="dom.webxr.test"]
+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);
+
+ // void disconnect();
+ // void reconnect();
+
+ // void startSelection();
+ // void endSelection();
+ // void simulateSelect();
+
+ // void setSupportedButtons(sequence<FakeXRButtonStateInit> supportedButtons);
+ // void updateButtonState(FakeXRButtonStateInit buttonState);
+};
+
+dictionary FakeXRInputSourceInit {
+ required XRHandedness handedness;
+ required XRTargetRayMode targetRayMode;
+ required FakeXRRigidTransformInit pointerOrigin;
+ required sequence<DOMString> profiles;
+ boolean selectionStarted = false;
+ boolean selectionClicked = false;
+ sequence<FakeXRButtonStateInit> supportedButtons;
+ FakeXRRigidTransformInit gripOrigin;
+};
+
+enum FakeXRButtonType {
+ "grip",
+ "touchpad",
+ "thumbstick",
+ "optional-button",
+ "optional-thumbstick"
+};
+
+dictionary FakeXRButtonStateInit {
+ required FakeXRButtonType buttonType;
+ required boolean pressed;
+ required boolean touched;
+ required float pressedValue;
+ float xValue = 0.0;
+ float yValue = 0.0;
+};