diff --git a/android_webview/lib/aw_main_delegate.cc b/android_webview/lib/aw_main_delegate.cc
index f72b6fd496361c..900846c57153b8 100644
--- a/android_webview/lib/aw_main_delegate.cc
+++ b/android_webview/lib/aw_main_delegate.cc
@@ -211,6 +211,8 @@ bool AwMainDelegate::BasicStartupComplete(int* exit_code) {
// TODO(https://crbug.com/963653): SmsReceiver is not yet supported on
// WebView.
features.DisableIfNotSet(::features::kSmsReceiver);
+
+ features.DisableIfNotSet(::features::kWebXr);
}
android_webview::RegisterPathProvider();
diff --git a/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt b/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt
index 237cc53113661a..6f0a395a748edf 100644
--- a/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt
+++ b/android_webview/tools/system_webview_shell/test/data/webexposed/not-webview-exposed.txt
@@ -55,13 +55,14 @@ interface HTMLMediaElement : HTMLElement
# permissions API (crbug.com/490120), presentation API (crbug.com/521319),
# share API (crbug.com/765923), custom scheme handlers (crbug.com/589502),
-# media session API (crbug.com/925997), and sms API (crbug.com/963653)
-# are not supported in webview.
+# media session API (crbug.com/925997), sms API (crbug.com/963653), and WebXr
+# API (crbug.com/1012899) are not supported in webview.
interface Navigator
getter mediaSession # crbug.com/925997
getter permissions # crbug.com/490120
getter presentation # crbug.com/521319
getter sms # crbug.com/963653
+ getter xr # crbug.com/1012899
method registerProtocolHandler # crbug.com/589502
method unregisterProtocolHandler # crbug.com/589502
method share # crbug.com/765923
@@ -129,6 +130,31 @@ interface OffscreenCanvas : EventTarget
interface HTMLCanvasElement : HTMLElement
method transferControlToOffscreen
+# WebXR dependent interfaces are not supported on WebView crbug.com/1012899
+interface XRView
+interface XRViewport
+interface XR : EventTarget
+interface XRFrame
+interface XRRigidTransform
+interface XRSpace : EventTarget
+interface XRInputSourcesChangeEvent : Event
+interface XRInputSource
+interface XRWebGLLayer
+interface XRInputSourceEvent : Event
+interface XRViewerPose : XRPose
+interface XRInputSourceArray
+interface XRRenderState
+interface XRPose
+interface XRSession : EventTarget
+interface XRReferenceSpaceEvent : Event
+interface XRBoundedReferenceSpace : XRReferenceSpace
+interface XRSessionEvent : Event
+interface XRReferenceSpace : XRSpace
+interface WebGLRenderingContext
+ method makeXRCompatible
+interface WebGL2RenderingContext
+ method makeXRCompatible
+
[GLOBAL OBJECT]
method openDatabase
attribute eventSender # test only
diff --git a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrTransitionTest.java b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrTransitionTest.java
index 7b6cba497be451..677f019325a869 100644
--- a/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrTransitionTest.java
+++ b/chrome/android/javatests/src/org/chromium/chrome/browser/vr/WebXrVrTransitionTest.java
@@ -183,11 +183,11 @@ public void testWebVrDisabledWithoutFlagSet() {
*/
@Test
@MediumTest
- @CommandLineFlags.Remove({"enable-webvr"})
- @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
- public void testWebXrDisabledWithoutFlagSet() {
- // TODO(bsheedy): Remove this test once WebXR is on by default without
- // requiring an origin trial.
+ @CommandLineFlags
+ .Add({"disable-features=WebXR"})
+ @CommandLineFlags.Remove({"enable-webvr"})
+ @XrActivityRestriction({XrActivityRestriction.SupportedActivity.ALL})
+ public void testWebXrDisabledWithoutFlagSet() {
apiDisabledWithoutFlagSetImpl(WebXrVrTestFramework.getFileUrlForHtmlTestFile(
"test_webxr_disabled_without_flag_set"),
mWebXrVrTestFramework);
diff --git a/content/child/runtime_features.cc b/content/child/runtime_features.cc
index 4ce8738fad8dda..82d6006f912843 100644
--- a/content/child/runtime_features.cc
+++ b/content/child/runtime_features.cc
@@ -153,8 +153,8 @@ void SetRuntimeFeaturesFromChromiumFeatures() {
if (base::FeatureList::IsEnabled(features::kPeriodicBackgroundSync))
WebRuntimeFeatures::EnablePeriodicBackgroundSync(true);
- if (base::FeatureList::IsEnabled(features::kWebXr))
- WebRuntimeFeatures::EnableWebXR(true);
+ WebRuntimeFeatures::EnableWebXR(
+ base::FeatureList::IsEnabled(features::kWebXr));
if (base::FeatureList::IsEnabled(features::kWebXrArDOMOverlay))
WebRuntimeFeatures::EnableWebXRARDOMOverlay(true);
diff --git a/content/public/common/content_features.cc b/content/public/common/content_features.cc
index a627165fd38995..57733d7b93fbcd 100644
--- a/content/public/common/content_features.cc
+++ b/content/public/common/content_features.cc
@@ -693,7 +693,7 @@ const base::Feature kWebRtcUseGpuMemoryBufferVideoFrames{
const base::Feature kWebUsb{"WebUSB", base::FEATURE_ENABLED_BY_DEFAULT};
// Controls whether the WebXR Device API is enabled.
-const base::Feature kWebXr{"WebXR", base::FEATURE_DISABLED_BY_DEFAULT};
+const base::Feature kWebXr{"WebXR", base::FEATURE_ENABLED_BY_DEFAULT};
// Enables access to AR features via the WebXR API.
const base::Feature kWebXrArModule{"WebXRARModule",
diff --git a/third_party/blink/renderer/platform/runtime_enabled_features.json5 b/third_party/blink/renderer/platform/runtime_enabled_features.json5
index ef0908525b43fe..05960cbe0c87c0 100644
--- a/third_party/blink/renderer/platform/runtime_enabled_features.json5
+++ b/third_party/blink/renderer/platform/runtime_enabled_features.json5
@@ -1799,8 +1799,7 @@
},
{
name: "WebXR",
- origin_trial_feature_name: "WebXRDeviceM76",
- status: "experimental",
+ status: "stable",
},
{
name: "WebXRAnchors",
@@ -1813,7 +1812,7 @@
},
{
name: "WebXRARModule",
- // depends_on: ["WebXR"], // TODO(https://crbug.com/954679): uncomment once bug is fixed
+ depends_on: ["WebXR"],
status: "experimental",
},
{
diff --git a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/xr/webxr-origin-trial-interfaces.html b/third_party/blink/web_tests/http/tests/origin_trials/webexposed/xr/webxr-origin-trial-interfaces.html
deleted file mode 100644
index 4aab4c445ef0db..00000000000000
--- a/third_party/blink/web_tests/http/tests/origin_trials/webexposed/xr/webxr-origin-trial-interfaces.html
+++ /dev/null
@@ -1,156 +0,0 @@
-
-
-
WebXR - interfaces exposed by origin trial
-
-
-
-
diff --git a/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
index e0ec92c9d1f461..e9c65a5aaec4d7 100644
--- a/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/http/tests/serviceworker/webexposed/global-interface-listing-service-worker-expected.txt
@@ -1951,6 +1951,7 @@ interface WebGL2RenderingContext
method isVertexArray
method lineWidth
method linkProgram
+ method makeXRCompatible
method pauseTransformFeedback
method pixelStorei
method polygonOffset
@@ -2443,6 +2444,7 @@ interface WebGLRenderingContext
method isTexture
method lineWidth
method linkProgram
+ method makeXRCompatible
method pixelStorei
method polygonOffset
method readPixels
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/feature-policy-features-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/feature-policy-features-expected.txt
index aee66211f8c5e8..324728f08401d3 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/feature-policy-features-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/feature-policy-features-expected.txt
@@ -18,4 +18,5 @@ picture-in-picture
sync-xhr
usb
vr
+xr-spatial-tracking
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
index 5af578b448ac64..c2efd0547231cb 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-dedicated-worker-expected.txt
@@ -1973,6 +1973,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method isVertexArray
[Worker] method lineWidth
[Worker] method linkProgram
+[Worker] method makeXRCompatible
[Worker] method pauseTransformFeedback
[Worker] method pixelStorei
[Worker] method polygonOffset
@@ -2465,6 +2466,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method isTexture
[Worker] method lineWidth
[Worker] method linkProgram
+[Worker] method makeXRCompatible
[Worker] method pixelStorei
[Worker] method polygonOffset
[Worker] method readPixels
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
index 2aae6d36f30402..5f8b634a1bc110 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-expected.txt
@@ -4324,6 +4324,7 @@ interface Navigator
getter vendorSub
getter webkitPersistentStorage
getter webkitTemporaryStorage
+ getter xr
method constructor
method getBattery
method getGamepads
@@ -7953,6 +7954,7 @@ interface WebGL2RenderingContext
method isVertexArray
method lineWidth
method linkProgram
+ method makeXRCompatible
method pauseTransformFeedback
method pixelStorei
method polygonOffset
@@ -8449,6 +8451,7 @@ interface WebGLRenderingContext
method isTexture
method lineWidth
method linkProgram
+ method makeXRCompatible
method pixelStorei
method polygonOffset
method readPixels
@@ -8750,6 +8753,139 @@ interface XPathResult
method constructor
method iterateNext
method snapshotItem
+interface XR : EventTarget
+ attribute @@toStringTag
+ getter ondevicechange
+ method constructor
+ method isSessionSupported
+ method requestSession
+ method supportsSession
+ setter ondevicechange
+interface XRBoundedReferenceSpace : XRReferenceSpace
+ attribute @@toStringTag
+ getter boundsGeometry
+ method constructor
+interface XRFrame
+ attribute @@toStringTag
+ getter session
+ method constructor
+ method getPose
+ method getViewerPose
+interface XRInputSource
+ attribute @@toStringTag
+ getter gripSpace
+ getter handedness
+ getter profiles
+ getter targetRayMode
+ getter targetRaySpace
+ method constructor
+interface XRInputSourceArray
+ attribute @@toStringTag
+ getter length
+ method @@iterator
+ method constructor
+ method entries
+ method forEach
+ method keys
+ method values
+interface XRInputSourceEvent : Event
+ attribute @@toStringTag
+ getter frame
+ getter inputSource
+ method constructor
+interface XRInputSourcesChangeEvent : Event
+ attribute @@toStringTag
+ getter added
+ getter removed
+ getter session
+ method constructor
+interface XRPose
+ attribute @@toStringTag
+ getter emulatedPosition
+ getter transform
+ method constructor
+interface XRReferenceSpace : XRSpace
+ attribute @@toStringTag
+ getter onreset
+ method constructor
+ method getOffsetReferenceSpace
+ setter onreset
+interface XRReferenceSpaceEvent : Event
+ attribute @@toStringTag
+ getter referenceSpace
+ getter transform
+ method constructor
+interface XRRenderState
+ attribute @@toStringTag
+ getter baseLayer
+ getter depthFar
+ getter depthNear
+ getter inlineVerticalFieldOfView
+ method constructor
+interface XRRigidTransform
+ attribute @@toStringTag
+ getter inverse
+ getter matrix
+ getter orientation
+ getter position
+ method constructor
+interface XRSession : EventTarget
+ attribute @@toStringTag
+ getter inputSources
+ getter onend
+ getter oninputsourceschange
+ getter onselect
+ getter onselectend
+ getter onselectstart
+ getter onvisibilitychange
+ getter renderState
+ getter visibilityState
+ method cancelAnimationFrame
+ method constructor
+ method end
+ method requestAnimationFrame
+ method requestReferenceSpace
+ method updateRenderState
+ setter onend
+ setter oninputsourceschange
+ setter onselect
+ setter onselectend
+ setter onselectstart
+ setter onvisibilitychange
+interface XRSessionEvent : Event
+ attribute @@toStringTag
+ getter session
+ method constructor
+interface XRSpace : EventTarget
+ attribute @@toStringTag
+ method constructor
+interface XRView
+ attribute @@toStringTag
+ getter eye
+ getter projectionMatrix
+ getter transform
+ method constructor
+interface XRViewerPose : XRPose
+ attribute @@toStringTag
+ getter views
+ method constructor
+interface XRViewport
+ attribute @@toStringTag
+ getter height
+ getter width
+ getter x
+ getter y
+ method constructor
+interface XRWebGLLayer
+ static method getNativeFramebufferScaleFactor
+ attribute @@toStringTag
+ getter antialias
+ getter framebuffer
+ getter framebufferHeight
+ getter framebufferWidth
+ getter ignoreDepthValues
+ method constructor
+ method getViewport
interface XSLTProcessor
attribute @@toStringTag
method clearParameters
diff --git a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
index 9a25a1e28fe312..84ada2db019fce 100644
--- a/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
+++ b/third_party/blink/web_tests/virtual/stable/webexposed/global-interface-listing-shared-worker-expected.txt
@@ -1869,6 +1869,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method isVertexArray
[Worker] method lineWidth
[Worker] method linkProgram
+[Worker] method makeXRCompatible
[Worker] method pauseTransformFeedback
[Worker] method pixelStorei
[Worker] method polygonOffset
@@ -2361,6 +2362,7 @@ Starting worker: resources/global-interface-listing-worker.js
[Worker] method isTexture
[Worker] method lineWidth
[Worker] method linkProgram
+[Worker] method makeXRCompatible
[Worker] method pixelStorei
[Worker] method polygonOffset
[Worker] method readPixels