Commit 1a52fe03 authored by Bill Orr's avatar Bill Orr Committed by Commit Bot

WebXR: Require user activation to create AR sessions

BUG=835039

Change-Id: If61cc049fd0f8d18de7bdd7df7ff71a9dd8f699b
Reviewed-on: https://chromium-review.googlesource.com/1041217
Commit-Queue: Bill Orr <billorr@chromium.org>
Reviewed-by: default avatarKentaro Hara <haraken@chromium.org>
Reviewed-by: default avatarDavid Dorwin <ddorwin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#556234}
parent 62efba10
...@@ -213,6 +213,9 @@ void SetRuntimeFeaturesDefaultsAndUpdateFromArgs( ...@@ -213,6 +213,9 @@ void SetRuntimeFeaturesDefaultsAndUpdateFromArgs(
if (base::FeatureList::IsEnabled(features::kWebXrGamepadSupport)) if (base::FeatureList::IsEnabled(features::kWebXrGamepadSupport))
WebRuntimeFeatures::EnableWebXRGamepadSupport(true); WebRuntimeFeatures::EnableWebXRGamepadSupport(true);
if (base::FeatureList::IsEnabled(features::kWebXrHitTest))
WebRuntimeFeatures::EnableWebXRHitTest(true);
if (command_line.HasSwitch(switches::kDisablePresentationAPI)) if (command_line.HasSwitch(switches::kDisablePresentationAPI))
WebRuntimeFeatures::EnablePresentationAPI(false); WebRuntimeFeatures::EnablePresentationAPI(false);
......
...@@ -13,6 +13,6 @@ let fakeDevices = fakeXRDevices(); ...@@ -13,6 +13,6 @@ let fakeDevices = fakeXRDevices();
promise_test( (t) => { promise_test( (t) => {
setFakeDevices([fakeDevices["FakeGooglePixelPhone"]]); setFakeDevices([fakeDevices["FakeGooglePixelPhone"]]);
return navigator.xr.requestDevice().then( (device) => return navigator.xr.requestDevice().then( (device) =>
promise_rejects(t, 'InvalidStateError', device.requestSession({ exclusive: true }))); promise_rejects(t, 'SecurityError', device.requestSession({ exclusive: true })));
}, "requestSession with an exclusive session outside of a user gesture rejects"); }, "requestSession with an exclusive session outside of a user gesture rejects");
</script> </script>
...@@ -152,6 +152,7 @@ class WebRuntimeFeatures { ...@@ -152,6 +152,7 @@ class WebRuntimeFeatures {
BLINK_PLATFORM_EXPORT static void EnableWebUsb(bool); BLINK_PLATFORM_EXPORT static void EnableWebUsb(bool);
BLINK_PLATFORM_EXPORT static void EnableWebVR(bool); BLINK_PLATFORM_EXPORT static void EnableWebVR(bool);
BLINK_PLATFORM_EXPORT static void EnableWebXR(bool); BLINK_PLATFORM_EXPORT static void EnableWebXR(bool);
BLINK_PLATFORM_EXPORT static void EnableWebXRHitTest(bool);
BLINK_PLATFORM_EXPORT static void EnableWebXRGamepadSupport(bool); BLINK_PLATFORM_EXPORT static void EnableWebXRGamepadSupport(bool);
BLINK_PLATFORM_EXPORT static void EnableXSLT(bool); BLINK_PLATFORM_EXPORT static void EnableXSLT(bool);
BLINK_PLATFORM_EXPORT static void ForceOverlayFullscreenVideo(bool); BLINK_PLATFORM_EXPORT static void ForceOverlayFullscreenVideo(bool);
......
...@@ -128,7 +128,17 @@ ScriptPromise XRDevice::requestSession( ...@@ -128,7 +128,17 @@ ScriptPromise XRDevice::requestSession(
if (!Frame::HasTransientUserActivation(doc ? doc->GetFrame() : nullptr)) { if (!Frame::HasTransientUserActivation(doc ? doc->GetFrame() : nullptr)) {
return ScriptPromise::RejectWithDOMException( return ScriptPromise::RejectWithDOMException(
script_state, script_state,
DOMException::Create(kInvalidStateError, kRequestNotInUserGesture)); DOMException::Create(kSecurityError, kRequestNotInUserGesture));
}
}
// All AR sessions require a user gesture.
// TODO(https://crbug.com/828321): Use session options instead.
if (RuntimeEnabledFeatures::WebXRHitTestEnabled()) {
if (!Frame::HasTransientUserActivation(doc ? doc->GetFrame() : nullptr)) {
return ScriptPromise::RejectWithDOMException(
script_state,
DOMException::Create(kSecurityError, kRequestNotInUserGesture));
} }
} }
......
...@@ -364,6 +364,10 @@ void WebRuntimeFeatures::EnableWebXRGamepadSupport(bool enable) { ...@@ -364,6 +364,10 @@ void WebRuntimeFeatures::EnableWebXRGamepadSupport(bool enable) {
RuntimeEnabledFeatures::SetWebXRGamepadSupportEnabled(enable); RuntimeEnabledFeatures::SetWebXRGamepadSupportEnabled(enable);
} }
void WebRuntimeFeatures::EnableWebXRHitTest(bool enable) {
RuntimeEnabledFeatures::SetWebXRHitTestEnabled(enable);
}
void WebRuntimeFeatures::EnablePresentationAPI(bool enable) { void WebRuntimeFeatures::EnablePresentationAPI(bool enable) {
RuntimeEnabledFeatures::SetPresentationEnabled(enable); RuntimeEnabledFeatures::SetPresentationEnabled(enable);
} }
......
...@@ -1365,6 +1365,10 @@ ...@@ -1365,6 +1365,10 @@
implied_by: ["GamepadExtensions"], implied_by: ["GamepadExtensions"],
status: "experimental", status: "experimental",
}, },
{
name: "WebXRHitTest",
status: "experimental",
},
{ {
name: "WorkerNosniffBlock", name: "WorkerNosniffBlock",
status: "test", status: "test",
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment