Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

[
undefined,
42,
function() { return "hi" },
"hi",
{},
[],
Symbol()
].forEach(val => {
test(t => {
const frame = document.body.appendChild(document.createElement("iframe")),
win = frame.contentWindow;
t.add_cleanup(() => frame.remove());
assert_own_property(win, "opener");
assert_equals(win.opener, null);
const beforeDesc = Object.getOwnPropertyDescriptor(win, "opener"),
openerGet = beforeDesc.get,
openerSet = beforeDesc.set;
assert_own_property(beforeDesc, "get");
assert_own_property(beforeDesc, "set");
assert_true(beforeDesc.enumerable);
assert_true(beforeDesc.configurable);
win.opener = val;
assert_equals(win.opener, val);
assert_equals(openerGet(), null);
const desc = Object.getOwnPropertyDescriptor(win, "opener");
assert_equals(desc.value, val);
assert_true(desc.writable);
assert_true(desc.enumerable);
assert_true(desc.configurable);
openerSet("x");
assert_equals(win.opener, "x");
}, "Setting window.opener to " + String(val)); // String() needed for symbols
});