diff --git a/Cargo.lock b/Cargo.lock index a4f59fc9b40..0679a64ab99 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6419,7 +6419,7 @@ dependencies = [ [[package]] name = "webxr" version = "0.0.1" -source = "git+https://github.com/servo/webxr#836a08e1168e3a2b0b0fa12d7987603d5fc79002" +source = "git+https://github.com/servo/webxr#6ead41b15b0c72ef8bd98af0c09f4fefec888aac" dependencies = [ "android_injected_glue", "bindgen", @@ -6442,7 +6442,7 @@ dependencies = [ [[package]] name = "webxr-api" version = "0.0.1" -source = "git+https://github.com/servo/webxr#836a08e1168e3a2b0b0fa12d7987603d5fc79002" +source = "git+https://github.com/servo/webxr#6ead41b15b0c72ef8bd98af0c09f4fefec888aac" dependencies = [ "euclid", "ipc-channel", diff --git a/components/script/dom/xrsystem.rs b/components/script/dom/xrsystem.rs index 0fc4ab108e2..a2ba7946e62 100644 --- a/components/script/dom/xrsystem.rs +++ b/components/script/dom/xrsystem.rs @@ -267,7 +267,8 @@ impl XRSystem { ) { let session = match response { Ok(session) => session, - Err(_) => { + Err(e) => { + warn!("Error requesting XR session: {:?}", e); if mode != XRSessionMode::Inline { self.pending_immersive_session.set(false); } diff --git a/ports/libsimpleservo/api/src/lib.rs b/ports/libsimpleservo/api/src/lib.rs index afd2dd89cc2..02177e90233 100644 --- a/ports/libsimpleservo/api/src/lib.rs +++ b/ports/libsimpleservo/api/src/lib.rs @@ -810,7 +810,7 @@ impl EmbedderMethods for ServoEmbedderCallbacks { } struct GlThread(WebGlExecutor); - impl webxr::openxr::GlThread for GlThread { + impl openxr::GlThread for GlThread { fn execute(&self, runnable: Box) { let _ = self.0.send(runnable); } @@ -819,12 +819,27 @@ impl EmbedderMethods for ServoEmbedderCallbacks { } } - let discovery = webxr::openxr::OpenXrDiscovery::new( - Box::new(GlThread(executor)), - Box::new(ProviderRegistration(surface_providers)), - Box::new(ContextMenuCallback(embedder_proxy)), - ); - registry.register(discovery); + if openxr::create_instance().is_ok() { + let discovery = openxr::OpenXrDiscovery::new( + Box::new(GlThread(executor)), + Box::new(ProviderRegistration(surface_providers)), + Box::new(ContextMenuCallback(embedder_proxy)), + ); + registry.register(discovery); + } else { + let msg = + "Cannot initialize OpenXR - please ensure runtime is installed and enabled in \ + the OpenXR developer portal app.\n\nImmersive mode will not function until \ + this error is fixed."; + let (sender, _receiver) = ipc::channel().unwrap(); + embedder_proxy.send(( + None, + EmbedderMsg::Prompt( + PromptDefinition::Alert(msg.to_owned(), sender), + PromptOrigin::Trusted, + ), + )); + } } #[cfg(not(feature = "uwp"))]