diff --git a/testing/web-platform/tests/compute-pressure/compute_pressure_cross_origin_focus_control.tentative.https.window.js b/testing/web-platform/tests/compute-pressure/compute_pressure_cross_origin_focus_control.tentative.https.window.js new file mode 100644 index 00000000000000..982e4bba0e6cb7 --- /dev/null +++ b/testing/web-platform/tests/compute-pressure/compute_pressure_cross_origin_focus_control.tentative.https.window.js @@ -0,0 +1,50 @@ +// META: timeout=long +// META: script=/common/get-host-info.sub.js + +'use strict'; + +promise_test(t => { + const iframe = document.createElement('iframe'); + iframe.src = get_host_info().HTTPS_REMOTE_ORIGIN + + '/compute-pressure/resources/support-iframe.html'; + document.body.appendChild(iframe); + iframe.contentWindow.focus(); + + const observer = new PressureObserver(() => { + assert_unreached('The observer callback should not be called'); + }); + t.add_cleanup(() => { + observer.disconnect(); + iframe.remove(); + }); + + return new Promise(resolve => t.step_timeout(resolve, 2000)); +}, 'Observer in main frame should not receive PressureRecord when focused on cross-origin iframe'); + +promise_test(async t => { + const iframe = document.createElement('iframe'); + iframe.src = get_host_info().HTTPS_REMOTE_ORIGIN + + '/compute-pressure/resources/support-iframe.html'; + iframe.allow = 'compute-pressure'; + const iframeLoadWatcher = new EventWatcher(t, iframe, 'load'); + document.body.appendChild(iframe); + await iframeLoadWatcher.wait_for('load'); + // Focus on the main frame to make the iframe lose focus, so that + // PressureObserver in the iframe can't receive PressureRecord by default. + // If the main frame has focus, but the iframe is cross-origin with the main + // frame, PressureObserver in the iframe still can't receive PressureRecord. + window.focus(); + + return new Promise((resolve, reject) => { + window.addEventListener('message', (e) => { + if (e.data.result === 'timeout') { + resolve(); + } else if (e.data.result === 'success') { + reject('Observer should not receive PressureRecord'); + } else { + reject('Got unexpected reply'); + } + }, {once: true}); + iframe.contentWindow.postMessage({command: 'start'}, '*'); + }); +}, 'Observer in iframe should not receive PressureRecord when focused on cross-origin main frame'); diff --git a/testing/web-platform/tests/compute-pressure/compute_pressure_privacy_test.tentative.https.window.js b/testing/web-platform/tests/compute-pressure/compute_pressure_privacy_test.tentative.https.window.js index 3a4198f547cc4b..ceea886323cdfc 100644 --- a/testing/web-platform/tests/compute-pressure/compute_pressure_privacy_test.tentative.https.window.js +++ b/testing/web-platform/tests/compute-pressure/compute_pressure_privacy_test.tentative.https.window.js @@ -16,12 +16,13 @@ promise_test(async t => { assert_not_equals(pipWindow.height, 0); const iframe = document.createElement('iframe'); + iframe.src = get_host_info().HTTPS_REMOTE_ORIGIN + + '/compute-pressure/resources/support-iframe.html'; document.body.appendChild(iframe); - // Focus on the iframe to make the main frame lose focus, so that - // PressureObserver in the main frame can't receive PressureRecord - // by default. However, if the main frame is the initiator of active - // Picture-in-Picture session, PressureObserver in the main frame can - // receive PressureRecord. + // Focus on the cross-origin iframe, so that PressureObserver in the main + // frame can't receive PressureRecord by default. However, if the main + // frame is the initiator of active Picture-in-Picture session, + // PressureObserver in the main frame can receive PressureRecord. iframe.contentWindow.focus(); await new Promise(resolve => { @@ -45,11 +46,13 @@ promise_test(async t => { assert_true(stream.active); const iframe = document.createElement('iframe'); + iframe.src = get_host_info().HTTPS_REMOTE_ORIGIN + + '/compute-pressure/resources/support-iframe.html'; document.body.appendChild(iframe); - // Focus on the iframe to make the main frame lose focus, so that - // PressureObserver in the main frame can't receive PressureRecord - // by default. However, if the main frame's browsing context is capturing, - // PressureObserver in the main frame can receive PressureRecord. + // Focus on the cross-origin iframe, so that PressureObserver in the main + // frame can't receive PressureRecord by default. However, if the main + // frame's browsing context is capturing, PressureObserver in the main + // frame can receive PressureRecord. iframe.contentWindow.focus(); await new Promise(resolve => { @@ -62,69 +65,3 @@ promise_test(async t => { observer.observe('cpu'); }); }, 'Observer should receive PressureRecord if browsing context is capturing'); - -promise_test(async t => { - const iframe = document.createElement('iframe'); - document.body.appendChild(iframe); - // Focus on the iframe to make the main frame lose focus, so that - // PressureObserver in the main frame can't receive PressureRecord - // by default. - iframe.contentWindow.focus(); - - const observer = new PressureObserver(() => { - assert_unreached('The observer callback should not be called'); - }); - t.add_cleanup(() => { - observer.disconnect(); - iframe.remove(); - }); - - return new Promise(resolve => t.step_timeout(resolve, 2000)); -}, 'Observer should not receive PressureRecord when top-level browsing context does not have system focus'); - -promise_test(async t => { - const iframe = document.createElement('iframe'); - document.body.appendChild(iframe); - // Focus on the main frame to make the iframe lose focus, so that - // PressureObserver in the iframe can't receive PressureRecord by default. - // However, if the iframe is same-origin with the main frame and the main - // frame has focus, PressureObserver in iframe can receive PressureRecord. - window.focus(); - - await new Promise(resolve => { - const observer = new iframe.contentWindow.PressureObserver(resolve); - t.add_cleanup(() => { - observer.disconnect(); - iframe.remove(); - }); - observer.observe('cpu'); - }); -}, 'Observer in iframe should receive PressureRecord when focused on same-origin main frame'); - -promise_test(async t => { - const iframe = document.createElement('iframe'); - iframe.src = get_host_info().HTTPS_REMOTE_ORIGIN + - '/compute-pressure/resources/support-iframe.html'; - iframe.allow = 'compute-pressure'; - const iframeLoadWatcher = new EventWatcher(t, iframe, 'load'); - document.body.appendChild(iframe); - await iframeLoadWatcher.wait_for('load'); - // Focus on the main frame to make the iframe lose focus, so that - // PressureObserver in the iframe can't receive PressureRecord by default. - // If the main frame has focus, but the iframe is cross-origin with the main - // frame, PressureObserver in the iframe still can't receive PressureRecord. - window.focus(); - - return new Promise((resolve, reject) => { - window.addEventListener('message', (e) => { - if (e.data.result === 'timeout') { - resolve(); - } else if (e.data.result === 'success') { - reject('Observer should not receive PressureRecord'); - } else { - reject('Got unexpected reply'); - } - }, {once: true}); - iframe.contentWindow.postMessage({command: 'start'}, '*'); - }); -}, 'Observer in iframe should not receive PressureRecord when focused on cross-origin main frame'); diff --git a/testing/web-platform/tests/compute-pressure/compute_pressure_same_origin_focus_control.tentative.https.window.js b/testing/web-platform/tests/compute-pressure/compute_pressure_same_origin_focus_control.tentative.https.window.js new file mode 100644 index 00000000000000..746f119f249c8c --- /dev/null +++ b/testing/web-platform/tests/compute-pressure/compute_pressure_same_origin_focus_control.tentative.https.window.js @@ -0,0 +1,35 @@ +'use strict'; + +promise_test(async t => { + const iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + iframe.contentWindow.focus(); + + await new Promise(resolve => { + const observer = new PressureObserver(resolve); + t.add_cleanup(async () => { + observer.disconnect(); + iframe.remove(); + }); + observer.observe('cpu'); + }); +}, 'Observer in main frame should receive PressureRecord when focused on same-origin iframe'); + +promise_test(async t => { + const iframe = document.createElement('iframe'); + document.body.appendChild(iframe); + // Focus on the main frame to make the iframe lose focus, so that + // PressureObserver in the iframe can't receive PressureRecord by default. + // However, if the iframe is same-origin with the main frame and the main + // frame has focus, PressureObserver in iframe can receive PressureRecord. + window.focus(); + + await new Promise(resolve => { + const observer = new iframe.contentWindow.PressureObserver(resolve); + t.add_cleanup(() => { + observer.disconnect(); + iframe.remove(); + }); + observer.observe('cpu'); + }); +}, 'Observer in iframe should receive PressureRecord when focused on same-origin main frame');