From 4894e8f2c4924359c5d8de4c33dfda269f03d093 Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Tue, 28 Jul 2020 16:47:11 -0500 Subject: [PATCH 1/2] 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, From 89a2c5175f6ded630cf8a09dd899dad809921e6d Mon Sep 17 00:00:00 2001 From: Alan Jeffrey Date: Wed, 29 Jul 2020 16:58:47 -0500 Subject: [PATCH 2/2] Set the dom.webxr.unsafe-assume-user-intent pref in the gstreamer plugin's webxr mode --- ports/gstplugin/servowebsrc.rs | 1 + 1 file changed, 1 insertion(+) diff --git a/ports/gstplugin/servowebsrc.rs b/ports/gstplugin/servowebsrc.rs index 90a69b2967c..6302131e163 100644 --- a/ports/gstplugin/servowebsrc.rs +++ b/ports/gstplugin/servowebsrc.rs @@ -218,6 +218,7 @@ impl ServoThread { None => Some(webrender_swap_chain), Some(..) => { set_pref!(dom.webxr.sessionavailable, true); + set_pref!(dom.webxr.unsafe_assume_user_intent, true); servo.handle_events(vec![WindowEvent::ChangeBrowserVisibility(id, false)]); None },