From 36bd9a7fa8630ffc2a32f1cad3256ee5ab77acda Mon Sep 17 00:00:00 2001 From: Alexander Cooper Date: Mon, 20 Jul 2026 22:31:50 -0700 Subject: [PATCH] [WebXR] Detect all frame owners in DOM Overlay ProcessOverlayHitTest downcasts the hit element to HTMLFrameElementBase to decide whether to walk the content frame subtree for cross-origin content. That base class only covers + + + @@ -175,11 +178,11 @@ return eventPromise; }; -let testCrossOriginContent = function(overlayElement, session, fakeDeviceController, t) { +let testCrossOriginContent = function(elementId, overlayElement, session, fakeDeviceController, t) { let debug = xr_debug.bind(this, 'testCrossOriginContent'); - let iframe = document.getElementById('iframe'); - assert_true(iframe != null); + let element = document.getElementById(elementId); + assert_true(element != null); let inner_b = document.getElementById('inner_b'); assert_true(inner_b != null); @@ -198,8 +201,8 @@ // Press the primary input button and then release it a short time later. requestSkipAnimationFrame(session, (time, xrFrame) => { debug('got rAF 1'); - input_source.setOverlayPointerPosition(iframe.offsetLeft + 1, - iframe.offsetTop + 1); + input_source.setOverlayPointerPosition(element.offsetLeft + 1, + element.offsetTop + 1); input_source.startSelection(); session.requestAnimationFrame((time, xrFrame) => { @@ -289,7 +292,15 @@ xr_session_promise_test( "Ensures DOM Overlay interactions on cross origin iframe are ignored", - testCrossOriginContent.bind(this, document.getElementById('div_overlay')), + testCrossOriginContent.bind(this, 'iframe', document.getElementById('div_overlay')), + fakeDeviceInitParams, 'immersive-ar', { + requiredFeatures: ['dom-overlay'], + domOverlay: { root: document.getElementById('div_overlay') } + }); + +xr_session_promise_test( + "Ensures DOM Overlay interactions on cross origin object are ignored", + testCrossOriginContent.bind(this, 'object', document.getElementById('div_overlay')), fakeDeviceInitParams, 'immersive-ar', { requiredFeatures: ['dom-overlay'], domOverlay: { root: document.getElementById('div_overlay') }