diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 19:33:14 +0000 |
commit | 36d22d82aa202bb199967e9512281e9a53db42c9 (patch) | |
tree | 105e8c98ddea1c1e4784a60a5a6410fa416be2de /testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements | |
parent | Initial commit. (diff) | |
download | firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.tar.xz firefox-esr-36d22d82aa202bb199967e9512281e9a53db42c9.zip |
Adding upstream version 115.7.0esr.upstream/115.7.0esr
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements')
9 files changed, 345 insertions, 0 deletions
diff --git a/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html new file mode 100644 index 0000000000..2db3082e21 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_attribute-getter-setter.html @@ -0,0 +1,65 @@ +<!doctype html> +<meta charset="utf-8"> +<html> +<head> +<title>HTMLAnchorElement getters and setters</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<a>anchor</a> +<script> +function test_gettersetter(property, oldresult, newval, newresult, oldurl, newurl) { + var a = document.querySelector('a'); + a.href = oldurl; + var r1 = a[property]; + assert_equals(r1, oldresult); + a[property] = newval; + var r2 = a[property]; + assert_equals(r2, newresult); + var r3 = a.href; + assert_equals(r3, newurl); +} + +//Elements for each test: [property, oldresult, newvalue, newresult, oldurl, newurl] +// [0] [1] [2] [3] [4] [5] +tests = [ + ["hash", "#somehash", "someother", "#someother", + "http://google.com/index.html#somehash", + "http://google.com/index.html#someother"], + ["hash", "#somehash", "#someother", "#someother", + "http://google.com/index.html#somehash", + "http://google.com/index.html#someother"], + ["host", "google.com:1234", "github.com:4444", "github.com:4444", + "http://google.com:1234/somedir", + "http://github.com:4444/somedir"], + ["hostname", "google.com", "github.com", "github.com", + "http://google.com:1234/somedir", + "http://github.com:1234/somedir"], + ["href", "http://google.com:1234/somedir", "http://goo-gle.com:1234/other/x.html", "http://goo-gle.com:1234/other/x.html", + "http://google.com:1234/somedir", + "http://goo-gle.com:1234/other/x.html"], + ["password", "flabada", "blubb", "blubb", + "https://anonymous:flabada@developer.mozilla.org/en-US/docs/", + "https://anonymous:blubb@developer.mozilla.org/en-US/docs/"], + ["pathname", "/somedir/someotherdir/index.html", "/newpath/x.txt", "/newpath/x.txt", + "http://google.com:1234/somedir/someotherdir/index.html", + "http://google.com:1234/newpath/x.txt"], + ["port", "1234", "4444", "4444", "http://google.com:1234/somedir", "http://google.com:4444/somedir"], + ["protocol", "http:", "ftp:", "ftp:", "http://google.com/somedir", "ftp://google.com/somedir"], + ["protocol", "http:", "ftp", "ftp:", "http://google.com/somedir", "ftp://google.com/somedir"], + ["search", "?ho", "?hi", "?hi", "http://google.com/q.php?ho", "http://google.com/q.php?hi"], + ["search", "?ho", "hi", "?hi", "http://google.com/q.php?ho", "http://google.com/q.php?hi"], + ["search", "?ho", "?hi", "?hi", "http://google.com/?ho", "http://google.com/?hi"], + ["search", "?ho", "hi", "?hi", "http://google.com/?ho", "http://google.com/?hi"], + ["username", "anonymous", "wellknown", "wellknown", + "https://anonymous:pwd@developer.mozilla.org:1234/en-US/", + "https://wellknown:pwd@developer.mozilla.org:1234/en-US/"] +]; + +for (var i = 0; i < tests.length; i++) { + test(function() { + test_gettersetter(tests[i][0], tests[i][1], tests[i][2], tests[i][3], tests[i][4], tests[i][5]) + }, "Getter and setter for attribute of anchor element(" + i + "):" + tests[i][0] ); +} +</script> +</head> +</html> diff --git a/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html new file mode 100644 index 0000000000..759eada220 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_getter.html @@ -0,0 +1,48 @@ +<!doctype html> +<meta charset="utf-8"> +<html> +<head> +<title>HTMLAnchorElement getters test</title> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +<a id=a1 href="http://google.com?hi">a1</a> +<a id=a2 href="http://google.com#somehash">a2</a> +<a id=a3 href="http://google.com:1234/somedir">a3</a> +<a id=a4 href="http://google.com:1234/somedir">a4</a> +<a id=a5 href="http://google.com:1234/somedir">a5</a> +<a id=a6 href="https://anonymous:flabada@developer.mozilla.org/en-US/docs/">a6</a> +<a id=a7 href="http://google.com:1234/somedir/someotherdir/index.html">a7</a> +<a id=a8 href="http://google.com:1234/somedir">a8</a> +<a id=a9 href="http://google.com/somedir">a9</a> +<a id=a10 href="https://anonymous:pwd@developer.mozilla.org:1234/en-US/">a10</a> +<script> +function test_getter(property, result, id) { + var a = document.getElementById(id); + var r = a[property]; + assert_equals(r, result); +} + +//Elements for each test: [property, result, id] +// [0] [1] [2] +tests = [ + ["search", "?hi", "a1"], + ["hash", "#somehash", "a2"], + ["host", "google.com:1234", "a3"], + ["hostname", "google.com", "a4"], + ["href", "http://google.com:1234/somedir", "a5"], + ["password", "flabada", "a6"], + ["pathname", "/somedir/someotherdir/index.html", "a7"], + ["port", "1234", "a8"], + ["protocol", "http:", "a9"], + ["username", "anonymous", "a10"] +]; + +for (var i = 0; i < tests.length; i++) { + test(function() { + test_getter(tests[i][0], tests[i][1], tests[i][2]) + }, "Getter for attribute of anchor element(" + i + "):" + tests[i][0]); +} +</script> +</head> +</html> + diff --git a/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html new file mode 100644 index 0000000000..95ab1c81fb --- /dev/null +++ b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/htmlanchorelement_noopener.html @@ -0,0 +1,78 @@ +<!doctype html> +<meta charset=utf-8> +<title>Test behavior of rel="noopener" links</title> +<script src=/resources/testharness.js></script> +<script src=/resources/testharnessreport.js></script> +<iframe name="oursubframe"></iframe> +<a href="support/noopener-target-2.html" rel="noopener" target="ourpopup"></a> +<a href="support/noopener-target-2.html" rel="noopener" target="oursubframe"></a> +<script> +var tests = []; +// First test the special targets +function target1Loaded(win) { + // Find the relevant test + var test = tests.find((t) => t.openedWindow == win); + test.step(function() { + assert_equals(win.opener, window); + win.close(); + test.done(); + }); +} +/** + * Test that <a rel="noopener"> targeted at one of _self, _parent, _top does the + * load in the appropriate existing browsing context instead of opening a new + * one. The test is run in a separate popup window we open and which we can + * navigate without causing the test harness going into conniptions. + */ +for (var target of ["self", "parent", "top"]) { + var t = async_test("Check that rel=noopener with target=_" + target + " does a normal load"); + tests.push(t); + t.openedWindow = window.open("support/noopener-popup.html"); + t.targetName = target; + t.openedWindow.onload = t.step_func(function() { + this.openedWindow.findLink(this.targetName).click(); + }); +} + +/** + * And now check that a noopener load targeted at something other than one of + * the three special targets above is still able to reuse existing things with the + * given name. We do this in two ways. First, by opening a window named + * "ourpopup" and then doing a load via <a rel="noopener" target="ourpopup"> and + * verifying that the load happens in a window with a null opener, etc, while + * the opener of the thing we opened is not modified. And second, by targeting + * <a rel="noopener"> at a name that an existing subframe has, and ensuring that + * this subframe is not navigated. + */ +var t1 = async_test("Check that targeting of rel=noopener with a given name reuses an existing window with that name"); +var w; +t1.add_cleanup(function() { w.close(); }); +var channel = new BroadcastChannel("ourpopup"); +channel.onmessage = t1.step_func_done(function(e) { + var data = e.data; + assert_true(data.hasOpener); + assert_false(data.hasParent); + assert_equals(data.name, "ourpopup"); + assert_equals(w.opener, window); + assert_not_equals(w.location.href, "about:blank"); +}); +t1.step(function() { + w = window.open("", "ourpopup"); + assert_equals(w.opener, window); + document.querySelectorAll("a")[0].click(); +}); + +var t2 = async_test("Check that targeting of rel=noopener with a given name reuses an existing subframe with that name"); +var channel = new BroadcastChannel("oursubframe"); +channel.onmessage = t2.step_func_done(function(e) { + var data = e.data; + assert_false(data.hasOpener); + assert_true(data.hasParent); + assert_equals(data.name, "oursubframe"); + assert_not_equals(document.querySelector("iframe").contentWindow.location.href, + "about:blank"); +}); +t2.step(function() { + document.querySelectorAll("a")[1].click(); +}); +</script> diff --git a/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-popup.html b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-popup.html new file mode 100644 index 0000000000..2057dbf0be --- /dev/null +++ b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-popup.html @@ -0,0 +1,19 @@ +<!DOCTYPE html> +<script> + function findLink(arg) { + var doc; + if (arg == "self") { + doc = document; + } else { + doc = frames[0].document; + } + return doc.getElementById(arg + "target"); + } +</script> +<a rel="noopener" target="_self" id="selftarget" + href="noopener-target-1.html"></a> +<iframe srcdoc=' + <a rel="noopener" target="_parent" id="parenttarget" + href="noopener-target-1.html"></a> + <a rel="noopener" target="_top" id="toptarget" + href="noopener-target-1.html"></a>'></iframe> diff --git a/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-1.html b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-1.html new file mode 100644 index 0000000000..0dbd14275c --- /dev/null +++ b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-1.html @@ -0,0 +1,4 @@ +<!DOCTYPE html> +<script> + opener.target1Loaded(this); +</script> diff --git a/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-2.html b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-2.html new file mode 100644 index 0000000000..dd2d719134 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/noopener-target-2.html @@ -0,0 +1,8 @@ +<!DOCTYPE html> +<script> + var channel = new BroadcastChannel(this.name); + channel.postMessage({ hasOpener: opener !== null , + hasParent: parent != this, + name: window.name }); + window.close(); +</script> diff --git a/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/target_blank_implicit_noopener.html b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/target_blank_implicit_noopener.html new file mode 100644 index 0000000000..bf6a1ae5bf --- /dev/null +++ b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/support/target_blank_implicit_noopener.html @@ -0,0 +1,6 @@ +<!DOCTYPE html> +<script> + let bc = new BroadcastChannel(window.location.search.substring(1)); + bc.postMessage({ hasOpener: opener !== null }); + window.close(); +</script> diff --git a/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener.html b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener.html new file mode 100644 index 0000000000..73eebaff70 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener.html @@ -0,0 +1,58 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset=utf-8> + <meta name="timeout" content="long"> + <title>Test behavior of target=_blank links</title> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> +</head> +<body> + <a href="support/target_blank_implicit_noopener.html?a1" id="a1" rel="noopener" target="_blank">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a2" id="a2" rel="opener" target="_blank">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a3" id="a3" target="_blank">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a4" id="a4" rel="opener noopener" target="_blank">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a5" id="a5" rel="noopener opener" target="_blank">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a6" id="a6" rel="noreferrer" target="_blank">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a7" id="a7" rel="opener noreferrer" target="_blank">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a8" id="a8" rel="noopener opener noreferrer" target="_blank">Click me</a> + + <!-- Although this is not valid, per the processing model of area it ought to work --> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area1" id="area1" rel="noopener" target="_blank"> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area2" id="area2" rel="opener" target="_blank"> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area3" id="area3" target="_blank"> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area4" id="area4" rel="opener noopener" target="_blank"> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area5" id="area5" rel="noopener opener" target="_blank"> + + <script> + + let tests = [ + { id: "a1", hasOpener: false, name: "Anchor element with target=_blank with rel=noopener" }, + { id: "a2", hasOpener: true, name: "Anchor element with target=_blank with rel=opener" }, + { id: "a3", hasOpener: false, name: "Anchor element with target=_blank with implicit rel=noopener" }, + { id: "a4", hasOpener: false, name: "Anchor element with target=_blank with rel=opener+noopener" }, + { id: "a5", hasOpener: false, name: "Anchor element with target=_blank with rel=noopener+opener" }, + { id: "a6", hasOpener: false, name: "Anchor element with target=_blank with rel=noreferrer" }, + { id: "a7", hasOpener: false, name: "Anchor element with target=_blank with rel=opener+noreferrer" }, + { id: "a8", hasOpener: false, name: "Anchor element with target=_blank with rel=noopener+opener+noreferrer" }, + { id: "area1", hasOpener: false, name: "Area element with target=_blank with rel=noopener" }, + { id: "area2", hasOpener: true, name: "Area element with target=_blank with rel=opener" }, + { id: "area3", hasOpener: false, name: "Area element with target=_blank with implicit rel=noopener" }, + { id: "area4", hasOpener: false, name: "Area element with target=_blank with rel=opener+noopener" }, + { id: "area5", hasOpener: false, name: "Area element with target=_blank with rel=noopener+opener" }, + ]; + + tests.forEach(data => { + async_test( + test => { + let bc = new BroadcastChannel(data.id); + bc.addEventListener("message", test.step_func_done(e => { + assert_equals(e.data.hasOpener, data.hasOpener); + }), {once: true}); + + document.getElementById(data.id).click(); + }, data.name); + }); + </script> +</body> +</html> diff --git a/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener_base.html b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener_base.html new file mode 100644 index 0000000000..3da6a49ef8 --- /dev/null +++ b/testing/web-platform/tests/html/semantics/links/links-created-by-a-and-area-elements/target_blank_implicit_noopener_base.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<html> +<head> + <meta charset=utf-8> + <meta name="timeout" content="long"> + <title>Test behavior of base target=_blank links</title> + <script src=/resources/testharness.js></script> + <script src=/resources/testharnessreport.js></script> + <base target=_blank> +</head> +<body> + <a href="support/target_blank_implicit_noopener.html?a1" id="a1" rel="noopener">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a2" id="a2" rel="opener">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a3" id="a3">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a4" id="a4" rel="opener noopener">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a5" id="a5" rel="noopener opener">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a6" id="a6" rel="noreferrer">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a7" id="a7" rel="opener noreferrer">Click me</a> + <a href="support/target_blank_implicit_noopener.html?a8" id="a8" rel="noopener opener noreferrer">Click me</a> + + <!-- Although this is not valid, per the processing model of area it ought to work --> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area1" id="area1" rel="noopener"> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area2" id="area2" rel="opener"> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area3" id="area3"> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area4" id="area4" rel="opener noopener"> + <area shape="rect" coords="0,0,99,50" href="support/target_blank_implicit_noopener.html?area5" id="area5" rel="noopener opener"> + + <script> + + let tests = [ + { id: "a1", hasOpener: false, name: "Anchor element with base target=_blank with rel=noopener" }, + { id: "a2", hasOpener: true, name: "Anchor element with base target=_blank with rel=opener" }, + { id: "a3", hasOpener: false, name: "Anchor element with base target=_blank with implicit rel=noopener" }, + { id: "a4", hasOpener: false, name: "Anchor element with base target=_blank with rel=opener+noopener" }, + { id: "a5", hasOpener: false, name: "Anchor element with base target=_blank with rel=noopener+opener" }, + { id: "a6", hasOpener: false, name: "Anchor element with base target=_blank with rel=noreferrer" }, + { id: "a7", hasOpener: false, name: "Anchor element with base target=_blank with rel=opener+noreferrer" }, + { id: "a8", hasOpener: false, name: "Anchor element with base target=_blank with rel=noopener+opener+noreferrer" }, + { id: "area1", hasOpener: false, name: "Area element with base target=_blank with rel=noopener" }, + { id: "area2", hasOpener: true, name: "Area element with base target=_blank with rel=opener" }, + { id: "area3", hasOpener: false, name: "Area element with base target=_blank with implicit rel=noopener" }, + { id: "area4", hasOpener: false, name: "Area element with base target=_blank with rel=opener+noopener" }, + { id: "area5", hasOpener: false, name: "Area element with base target=_blank with rel=noopener+opener" }, + ]; + + tests.forEach(data => { + async_test( + test => { + let bc = new BroadcastChannel(data.id); + bc.addEventListener("message", test.step_func_done(e => { + assert_equals(e.data.hasOpener, data.hasOpener); + }), {once: true}); + + document.getElementById(data.id).click(); + }, data.name); + }); + </script> +</body> +</html> |