summaryrefslogtreecommitdiffstats
path: root/testing/web-platform/tests/html/browsers/the-window-object/window-open-windowfeatures-values.html
diff options
context:
space:
mode:
Diffstat (limited to 'testing/web-platform/tests/html/browsers/the-window-object/window-open-windowfeatures-values.html')
-rw-r--r--testing/web-platform/tests/html/browsers/the-window-object/window-open-windowfeatures-values.html72
1 files changed, 72 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/browsers/the-window-object/window-open-windowfeatures-values.html b/testing/web-platform/tests/html/browsers/the-window-object/window-open-windowfeatures-values.html
new file mode 100644
index 0000000000..32551dd8d7
--- /dev/null
+++ b/testing/web-platform/tests/html/browsers/the-window-object/window-open-windowfeatures-values.html
@@ -0,0 +1,72 @@
+<!doctype html>
+<meta charset=utf-8>
+<meta name="timeout" content="long">
+<title>window.open() windowFeature value parsing</title>
+<link rel="author" href="mailto:masonf@chromium.org">
+<link rel="help" href="https://html.spec.whatwg.org/multipage/window-object.html#concept-window-open-features-parse-boolean">
+<script src="/resources/testharness.js"></script>
+<script src="/resources/testharnessreport.js"></script>
+<script>
+function testValueGeneric(val, expectTrue, property, testFn) {
+ const windowFeatureStr = val === "" ? property : `${property}=${val}`;
+ async_test(t => {
+ const windowName = '' + Math.round(Math.random()*1e12);
+ const channel = new BroadcastChannel(windowName);
+ channel.onmessage = t.step_func_done(e => {
+ // Send message first so if asserts throw the popup is still closed
+ channel.postMessage(null);
+ testFn(e.data);
+ });
+ window.open("support/windowFeature-values-target.html?" + windowName, windowName, windowFeatureStr);
+ },`Test ${windowFeatureStr}, expected interpretation is ${expectTrue ? 'true' : 'false'}`);
+}
+
+function testValueForNoReferrer(val, expectTrue) {
+ testValueGeneric(val, expectTrue, "noreferrer", (data) => {
+ if (expectTrue) {
+ assert_false(data.haveReferrer);
+ assert_false(data.haveOpener);
+ } else {
+ assert_true(data.haveReferrer);
+ assert_true(data.haveOpener);
+ }
+ });
+}
+
+function testValueForNoOpener(val, expectTrue) {
+ testValueGeneric(val, expectTrue, "noopener", (data) => {
+ assert_equals(data.haveOpener, !expectTrue);
+ });
+}
+
+function testValueForPopup(val, expectTrue) {
+ testValueGeneric(val, expectTrue, "popup", (data) => {
+ assert_equals(data.isPopup, expectTrue);
+ });
+}
+
+function testValue(val, expectTrue) {
+ const quotes = val === "" ? [''] : ['','"',"'"];
+ let noQuotes = true;
+ for (const quote of quotes) {
+ const thisExpectTrue = expectTrue && noQuotes;
+ const thisVal = quote + val + quote;
+ testValueForNoReferrer(thisVal, thisExpectTrue);
+ testValueForNoOpener(thisVal, thisExpectTrue);
+ testValueForPopup(thisVal, thisExpectTrue);
+ noQuotes = false;
+ }
+}
+
+testValue('',true); // Just the parameter means true
+testValue('yes',true); // Yes means true
+testValue('true',true); // True means true
+testValue('foo',false); // If parsing as an integer is an error, false
+testValue('0',false); // 0 is false
+testValue('00',false); // 0 is false
+testValue('1',true); // Non-zero is true
+testValue('99999',true); // Non-zero is true
+testValue('-1',true); // Non-zero is true
+testValue('1foo',true); // This parses to 1
+testValue('0foo',false); // This parses to 0
+</script>