Skip to content

Commit 11f89e5

Browse files
committed
Bug 1527661 [wpt PR 15356] - HTML: <form rel>, a=testonly
Automatic update from web-platform-tests HTML: <form rel> (#15356) For whatwg/html#4332. -- wpt-commits: b44dacf7a939fd93f3afb0c46f8f89d71ea20409 wpt-pr: 15356 UltraBlame original commit: 8324cb961aaf665330e8e1a13d95836c5edd5ffa
1 parent 4aa9f7a commit 11f89e5

File tree

7 files changed

+129
-1
lines changed

7 files changed

+129
-1
lines changed
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!DOCTYPE html>
2+
<title>&lt;form rel> with &lt;base target></title>
3+
<script src="/resources/testharness.js"></script>
4+
<script src="/resources/testharnessreport.js"></script>
5+
<script src=resources/reltester.js></script>
6+
<base target=_blank>
7+
<div id=log></div>
8+
<form action=resources/endpoint.html><input type=hidden name=channelname></form>
9+
<script>
10+
const submitter = document.querySelector("form"),
11+
channelInput = document.querySelector("input");
12+
relTester(submitter, channelInput, "<base target>");
13+
</script>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<title>&lt;form rel> with &lt;button formtarget></title>
3+
<script src="/resources/testharness.js"></script>
4+
<script src="/resources/testharnessreport.js"></script>
5+
<script src=resources/reltester.js></script>
6+
<div id=log></div>
7+
<form action=resources/endpoint.html><input type=hidden name=channelname><button type=submit formtarget=_blank></form>
8+
<script>
9+
const submitter = document.querySelector("button"),
10+
channelInput = document.querySelector("input");
11+
relTester(submitter, channelInput, "<button formtarget>");
12+
</script>
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<!DOCTYPE html>
2+
<title>&lt;form rel target></title>
3+
<script src="/resources/testharness.js"></script>
4+
<script src="/resources/testharnessreport.js"></script>
5+
<script src=resources/reltester.js></script>
6+
<div id=log></div>
7+
<form action=resources/endpoint.html target=_blank><input type=hidden name=channelname></form>
8+
<script>
9+
const submitter = document.querySelector("form"),
10+
channelInput = document.querySelector("input");
11+
relTester(submitter, channelInput, "<form target>");
12+
</script>
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
<!DOCTYPE html>
2+
<title>&lt;form rel> with &lt;input formtarget></title>
3+
<script src="/resources/testharness.js"></script>
4+
<script src="/resources/testharnessreport.js"></script>
5+
<script src=resources/reltester.js></script>
6+
<base target=_blank>
7+
<div id=log></div>
8+
<form action=resources/endpoint.html><input type=hidden name=channelname><input type=submit formtarget=_blank></form>
9+
<script>
10+
const submitter = document.querySelector("input[type=submit]"),
11+
channelInput = document.querySelector("input");
12+
relTester(submitter, channelInput, "<input formtarget>");
13+
</script>
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<script>
2+
const channelName = new URL(location).searchParams.get("channelname"),
3+
channel = new BroadcastChannel(channelName);
4+
channel.postMessage({ haveOpener: window.opener !== null,
5+
referrer: document.referrer });
6+
// Because messages are not delivered synchronously and because closing a
7+
// browsing context prompts the eventual clearing of all task sources, this
8+
// document should not be closed until the opener document has confirmed
9+
// receipt.
10+
channel.onmessage = () => window.close();
11+
</script>
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
function relTester(submitter, channelInput, title) {
2+
[
3+
{
4+
rel: "",
5+
exposed: "all"
6+
},
7+
{
8+
rel: "noopener",
9+
exposed: "noopener"
10+
},
11+
{
12+
rel: "noreferrer",
13+
exposed: "noreferrer"
14+
},
15+
{
16+
rel: "opener",
17+
exposed: "all"
18+
},
19+
{
20+
rel: "noopener noreferrer",
21+
exposed: "noreferrer"
22+
},
23+
{
24+
rel: "noreferrer opener",
25+
exposed: "noreferrer"
26+
},
27+
{
28+
rel: "opener noopener",
29+
exposed: "noopener"
30+
}
31+
].forEach(relTest => {
32+
33+
promise_test(t => {
34+
return new Promise(resolve => {
35+
const channelName = Date.now() + relTest.rel,
36+
channel = new BroadcastChannel(channelName);
37+
let form = submitter;
38+
if (submitter.localName !== "form") {
39+
form = submitter.form;
40+
}
41+
form.rel = relTest.rel;
42+
channelInput.value = channelName;
43+
if (submitter.localName !== "form") {
44+
submitter.click();
45+
} else {
46+
submitter.submit();
47+
}
48+
channel.onmessage = t.step_func(e => {
49+
if (relTest.exposed === "all" || relTest.exposed === "noopener") {
50+
assert_equals(e.data.referrer, window.location.href, "referrer");
51+
} else {
52+
assert_equals(e.data.referrer, "", "referrer");
53+
}
54+
if (relTest.exposed === "all") {
55+
assert_true(e.data.haveOpener, "opener");
56+
} else {
57+
assert_false(e.data.haveOpener, "opener");
58+
}
59+
resolve();
60+
});
61+
t.add_cleanup(() => channel.postMessage(null));
62+
});
63+
}, `<form rel="${relTest.rel}"> with ${title}`);
64+
});
65+
}

testing/web-platform/tests/html/semantics/rellist-feature-detection.html

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
'noreferrer', 'noopener']
1616
};
1717
link_support_table['a'] = {
18-
supported : ['noreferrer', 'noopener'],
18+
supported : ['noreferrer', 'noopener', 'opener'],
1919
unsupported : ['author', 'bookmark', 'external', 'help', 'license',
2020
'nofollow', 'pingback', 'prev', 'search', 'tag',
2121
'modulepreload', 'preload', 'preconnect', 'dns-prefetch',
@@ -24,6 +24,7 @@
2424
'apple-touch-icon-precomposed', 'canonical']
2525
};
2626
link_support_table['area'] = link_support_table['a'];
27+
link_support_table['form'] = link_support_table['form'];
2728

2829
function test_rellist(tag_name, rel_table) {
2930
let element = document.createElement(tag_name);
@@ -77,5 +78,6 @@
7778
test_rellist('LINK', link_support_table['link']);
7879
test_rellist('A', link_support_table['a']);
7980
test_rellist('AREA', link_support_table['area']);
81+
test_rellist('FORM', link_support_table['form']);
8082
}, 'Make sure that relList based feature detection is working');
8183
</script>

0 commit comments

Comments
 (0)