diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /testing/web-platform/tests/html/browsers/windows/embedded-opener-remove-frame.html | |
parent | Initial commit. (diff) | |
download | firefox-43a97878ce14b72f0981164f87f2e35e14151312.tar.xz firefox-43a97878ce14b72f0981164f87f2e35e14151312.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/html/browsers/windows/embedded-opener-remove-frame.html')
-rw-r--r-- | testing/web-platform/tests/html/browsers/windows/embedded-opener-remove-frame.html | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/browsers/windows/embedded-opener-remove-frame.html b/testing/web-platform/tests/html/browsers/windows/embedded-opener-remove-frame.html new file mode 100644 index 0000000000..a66f52e5f6 --- /dev/null +++ b/testing/web-platform/tests/html/browsers/windows/embedded-opener-remove-frame.html @@ -0,0 +1,66 @@ +<!doctype html> +<title>opener and discarded browsing contexts</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<div id=log></div> +<iframe name=matchesastring></iframe> +<script> +function testOpener(t, otherW, thisW, discardOtherBC, isDiscardedFromATask) { + assert_equals(otherW.opener, thisW, "opener before removal"); + + const openerDesc = Object.getOwnPropertyDescriptor(otherW, "opener"), + openerGet = openerDesc.get; + + assert_equals(openerGet(), thisW, "opener before removal via directly invoking the getter"); + discardOtherBC(); + if (isDiscardedFromATask) { + t.step_timeout(() => { + testOpenerRemainder(t, otherW, openerDesc, openerGet); + }, 250); + } else { + testOpenerRemainder(t, otherW, openerDesc, openerGet); + } +} + +function testOpenerRemainder(t, otherW, openerDesc, openerGet) { + assert_equals(otherW.opener, null, "opener after removal"); + assert_equals(openerGet(), null, "opener after removal via directly invoking the getter"); + + otherW.opener = null; + assert_equals(openerGet(), null, "opener after setting it null via directly invoking the getter"); + const openerDescNull = Object.getOwnPropertyDescriptor(otherW, "opener"); + assert_not_equals(openerDescNull, openerDesc); + assert_object_equals(openerDescNull, openerDesc); + + otherW.opener = "immaterial"; + assert_equals(openerGet(), null, "opener after setting it \"immaterial\" via directly invoking the getter"); + const openerDescImmaterial = Object.getOwnPropertyDescriptor(otherW, "opener"); + assert_equals(openerDescImmaterial.value, "immaterial"); + assert_true(openerDescImmaterial.writable); + assert_true(openerDescImmaterial.enumerable); + assert_true(openerDescImmaterial.configurable); + + t.done(); +} + +async_test(t => { + const frame = document.querySelector("iframe"), + frameW = frame.contentWindow; + frame.onload = t.step_func(() => { + // Firefox and Chrome/Safari load differently + if (frame.contentWindow.location.href === "about:blank") { + return; + } + + testOpener(t, frameW, window, () => frame.remove(), false); + }); + window.open("/common/blank.html", "matchesastring"); +}, "opener of discarded nested browsing context"); + +async_test(t => { + const popupW = window.open("/common/blank.html"); + popupW.onload = t.step_func(() => { + testOpener(t, popupW, window, () => popupW.close(), true); + }); +}, "opener of discarded auxiliary browsing context"); +</script> |