summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/browsers/the-window-object/window-open-popup-behavior.html
diff options
context:
space:
mode:
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.html51
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>