Skip to content

Commit

Permalink
HTML: document.open() and global variables (#10815)
Browse files Browse the repository at this point in the history
For whatwg/html#3918.

Several tests were removed as they no longer apply after the change in HTML. The expectations were reversed and moved to the new no-new-global.window.js file.

Co-authored-by: Timothy Gu <timothygu99@gmail.com>
  • Loading branch information
2 people authored and zcorpan committed Aug 27, 2018
1 parent d4ddd03 commit 81fcc63
Show file tree
Hide file tree
Showing 9 changed files with 65 additions and 78 deletions.

This file was deleted.

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
parent.tests[0].step(function() {parent.assert_equals(document.open(), document)});
document.write("<script>test_prop = 2;<\/script>");
document.close();
parent.tests[0].step(function() {parent.assert_equals(test_prop, 1)});
parent.tests[0].step(function() {parent.assert_equals(test_prop, 2)});
parent.tests[1].step(function() {parent.assert_equals(window.test_prop, 2)});
parent.tests[2].step(function() {parent.assert_equals(get_this(), window)});
parent.tests_done();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
<div id="log"></div>
<script>
var tests = [async_test("global scope unchanged"),
async_test("window object changed"),
async_test("window object unchanged"),
async_test("this is the window object")];
function tests_done() {
tests.forEach(function(t) {t.done()});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
onload = function() {
document.open();
document.close();
parent.report(window.setTimeout === setTimeout, false, "setTimeout");
parent.report(window.setTimeout === setTimeout, true, "setTimeout");
parent.report(window === this, true, "this");
parent.done();
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
<!DOCTYPE html>
<title>document.open and singleton replacement</title>
<title>document.open and no singleton replacement</title>
<link rel="author" title="Ms2ger" href="mailto:ms2ger@gmail.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-document-open">
<script src="/resources/testharness.js"></script>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
// In an earlier version of the HTML Standard, document open steps created a
// new JavaScript realm and migrated the existing objects to use the new realm.
// Test that this no longer happens.

async_test(t => {
const frame = document.body.appendChild(document.createElement("iframe"));
// Ensure a load event gets dispatched to unblock testharness
t.add_cleanup(() => frame.remove());
frame.src = "resources/global-variables-frame.html";
frame.onload = t.step_func_done(() => {
assert_equals(frame.contentWindow.hey, "You", "precondition");
frame.contentDocument.open();
assert_equals(frame.contentWindow.hey, "You", "actual check");
});
}, "Obtaining a variable from a global whose document had open() invoked");

function testIdentity(desc, frameToObject, frameToConstructor) {
async_test(t => {
const frame = document.body.appendChild(document.createElement("iframe"));
// Ensure a load event gets dispatched to unblock testharness
t.add_cleanup(() => frame.remove());
frame.src = "/common/blank.html";
frame.onload = t.step_func_done(() => {
const obj = frameToObject(frame);
frame.contentDocument.open();
assert_equals(frameToObject(frame), obj);
});
}, `${desc} maintains object identity through open()`);

async_test(t => {
const frame = document.body.appendChild(document.createElement("iframe"));
// Ensure a load event gets dispatched to unblock testharness
t.add_cleanup(() => frame.remove());
frame.src = "/common/blank.html";
frame.onload = t.step_func_done(() => {
const obj = frameToObject(frame);
const origProto = Object.getPrototypeOf(obj);
const origCtor = frameToConstructor(frame);
const sym = Symbol();
obj[sym] = "foo";
frame.contentDocument.open();
assert_equals(frameToObject(frame)[sym], "foo");
assert_true(frameToObject(frame) instanceof origCtor);
assert_equals(Object.getPrototypeOf(frameToObject(frame)), origProto);
assert_equals(frameToConstructor(frame), origCtor);
});
}, `${desc} maintains its prototype and properties through open()`);
}

testIdentity("Document", frame => frame.contentDocument, frame => frame.contentWindow.Document);
testIdentity("WindowProxy", frame => frame.contentWindow, frame => frame.contentWindow.Window);
testIdentity("BarProp", frame => frame.contentWindow.locationbar, frame => frame.contentWindow.BarProp);
testIdentity("History", frame => frame.contentWindow.history, frame => frame.contentWindow.History);
testIdentity("localStorage", frame => frame.contentWindow.localStorage, frame => frame.contentWindow.Storage);
testIdentity("Location", frame => frame.contentWindow.location, frame => frame.contentWindow.Location);
testIdentity("sessionStorage", frame => frame.contentWindow.sessionStorage, frame => frame.contentWindow.Storage);
testIdentity("Navigator", frame => frame.contentWindow.navigator, frame => frame.contentWindow.Navigator);
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<!doctype html>
<script>
hey = "You";
</script>

0 comments on commit 81fcc63

Please sign in to comment.