From 4894e8f2c4924359c5d8de4c33dfda269f03d093 Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Tue, 28 Jul 2020 16:47:11 -0500 Subject: [PATCH] Add a pref to indicate user intent to enter webxr --- components/config/prefs.rs | 2 ++ components/script/dom/xrsystem.rs | 9 +++++++-- resources/prefs.json | 1 + 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/components/config/prefs.rs b/components/config/prefs.rs index 9fa4075f606..a6d51943190 100644 --- a/components/config/prefs.rs +++ b/components/config/prefs.rs @@ -300,6 +300,8 @@ mod gen { enabled: bool, }, sessionavailable: bool, + #[serde(rename = "dom.webxr.unsafe-assume-user-intent")] + unsafe_assume_user_intent: bool, }, worklet: { blockingsleep: { diff --git a/components/script/dom/xrsystem.rs b/components/script/dom/xrsystem.rs index 798ba502aeb..29ecf4aa91f 100644 --- a/components/script/dom/xrsystem.rs +++ b/components/script/dom/xrsystem.rs @@ -26,6 +26,7 @@ use ipc_channel::ipc::{self as ipc_crate, IpcReceiver}; use ipc_channel::router::ROUTER; use msg::constellation_msg::PipelineId; use profile_traits::ipc; +use servo_config::pref; use std::cell::Cell; use std::rc::Rc; use webxr_api::{Error as XRError, Frame, Session, SessionInit, SessionMode}; @@ -161,8 +162,12 @@ impl XRSystemMethods for XRSystem { if mode != XRSessionMode::Inline { if !ScriptThread::is_user_interacting() { - promise.reject_error(Error::Security); - return promise; + if pref!(dom.webxr.unsafe_assume_user_intent) { + warn!("The dom.webxr.unsafe-assume-user-intent preference assumes user intent to enter WebXR."); + } else { + promise.reject_error(Error::Security); + return promise; + } } if self.pending_or_active_session() { diff --git a/resources/prefs.json b/resources/prefs.json index 219e9dda394..8ea63008560 100644 --- a/resources/prefs.json +++ b/resources/prefs.json @@ -49,6 +49,7 @@ "dom.webxr.layers.enabled": false, "dom.webxr.sessionavailable": false, "dom.webxr.test": false, + "dom.webxr.unsafe-assume-user-intent": false, "dom.worklet.timeout_ms": 10, "gfx.subpixel-text-antialiasing.enabled": true, "gfx.texture-swizzling.enabled": true,