Skip to content

Commit

Permalink
HTML: window.open() can set opener of a nested browsing context
Browse files Browse the repository at this point in the history
Needed for whatwg/html#4284.
  • Loading branch information
annevk committed Jan 31, 2019
1 parent ec735e1 commit 5cf7f41
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
30 changes: 30 additions & 0 deletions html/browsers/windows/embedded-opener-a-form.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
<!doctype html>
<title>opener and embedded documents; using a and form</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<iframe name=matchesastring></iframe>
<a href=/common/blank.html target=matchesastring>&lt;a></a>
<form action=/common/blank.html target=matchesastring><input type=submit value="<form>"></form>
<script>
async_test(t => {
const frame = document.querySelector("iframe");
let counter = 0;
frame.onload = t.step_func(() => {
// Firefox and Chrome/Safari load differently
if (frame.contentWindow.location.href === "about:blank") {
return;
}

// Test bits
assert_equals(frame.contentWindow.opener, null);
if (counter === 0) {
document.querySelector("input").click();
} else {
t.done();
}
counter++;
});
document.querySelector("a").click();
});
</script>
32 changes: 32 additions & 0 deletions html/browsers/windows/embedded-opener.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<!doctype html>
<title>opener and embedded documents; using window.open()</title>
<script src=/resources/testharness.js></script>
<script src=/resources/testharnessreport.js></script>
<div id=log></div>
<iframe name=matchesastring></iframe>
<script>
async_test(t => {
const frame = document.querySelector("iframe");
frame.onload = t.step_func(() => {
// Firefox and Chrome/Safari load differently
if (frame.contentWindow.location.href === "about:blank") {
return;
}

// Test bits
assert_equals(frame.contentWindow.opener, window, "opener before setting it to null");

const openerDesc = Object.getOwnPropertyDescriptor(frame.contentWindow, "opener"),
openerGet = openerDesc.get;

assert_equals(openerGet(), window, "opener before setting it to null via directly invoking the getter");
frame.contentWindow.opener = null;
frame.contentWindow.opener = "immaterial";
assert_equals(openerGet(), null, "opener after setting it to null via directly invoking the getter");
assert_equals(frame.contentWindow.opener, "immaterial");

t.done();
});
window.open("/common/blank.html", "matchesastring");
});
</script>

0 comments on commit 5cf7f41

Please sign in to comment.