diff options
Diffstat (limited to 'testing/web-platform/tests/html/browsers/the-window-object/window-open-popup-behavior.html')
-rw-r--r-- | testing/web-platform/tests/html/browsers/the-window-object/window-open-popup-behavior.html | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/browsers/the-window-object/window-open-popup-behavior.html b/testing/web-platform/tests/html/browsers/the-window-object/window-open-popup-behavior.html new file mode 100644 index 0000000000..258698d94d --- /dev/null +++ b/testing/web-platform/tests/html/browsers/the-window-object/window-open-popup-behavior.html @@ -0,0 +1,51 @@ +<!DOCTYPE html> +<meta charset=utf-8> +<meta name="timeout" content="long"> +<title>Window.open popup behavior</title> +<link rel="author" href="masonf@chromium.org"> +<link rel="help" href="https://html.spec.whatwg.org/multipage/window-object.html#window-open-steps"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> + +<script> +function testOne(windowFeatures, expectPopup) { + const windowName = Math.round(Math.random()*1e12); + const channel = new BroadcastChannel(windowName); + var w; + promise_test(() => { + return new Promise(resolve => { + w = window.open("support/window-open-popup-target.html", windowName, windowFeatures); + channel.addEventListener('message', resolve); + }).then(e => { + // Send message first so if asserts throw the popup is still closed + channel.postMessage(null); + assert_false(e.data.mixedState, "No mixed state"); + assert_equals(e.data.isPopup, expectPopup, "Popup state"); + }); + },`${windowFeatures} (expect ${expectPopup ? "popup" : "tab"})`); +} + +// No windowpreferences at all - tab. +testOne(undefined, /*expectPopup=*/false); + +// Test all permutations of these properties: +const features = ["location","toolbar","menubar","resizable","scrollbars","status"]; +const nProps = features.length; +const skip = 7; // To speed up the test, don't test all values. Skip 7 to pseudo-randomize. +for(let i=0;i<2**nProps;i+=skip) { + const enableVec = Number(i).toString(2).padStart(nProps,'0').split('').map(s => (s==="1")); + let windowFeatures = []; + for(let i=0;i<nProps;++i) { + if (enableVec[i]) + windowFeatures.push(features[i] + "=yes"); + } + windowFeatures = windowFeatures.join(','); + // We get a popup we got windowFeatures, and any of them are false: + const expectPopup = !!windowFeatures.length && (!(enableVec[0] || enableVec[1]) || !enableVec[2] || !enableVec[3] || !enableVec[4] || !enableVec[5]); + testOne(windowFeatures, expectPopup); + testOne(windowFeatures + ",noopener", /*expectPopup=*/false); + testOne(windowFeatures + ",noreferrer", /*expectPopup=*/false); + testOne(windowFeatures + ",popup", /*expectPopup=*/true); // "popup" feature = popup + testOne(windowFeatures + ",noopener,noreferrer,popup", /*expectPopup=*/false); +} +</script> |