<!DOCTYPE html>
<html>
<head>
<script>
function startTest()
{
t = window.top;
t.shouldBe("window", "self");
t.shouldBe("window", "frames");
t.shouldBe("parent", "top");
t.savedClosure = () => {
// The normal shouldBeNull() helpers don't work well here, since they don't
// eval in the right context.
function shouldBeNull(value, name)
{
if (value === null)
t.testPassed(name + " is null.");
else
t.testFailed(name + " should be null. Was " + value);
}
function shouldBeNonNull(value, name) {
if (value != null)
t.testPassed(name + " is non-null.");
else
t.testFailed(name + " should be non-null. Was " + value);
}
// window, self and frames never be null.
// https://html.spec.whatwg.org/multipage/browsers.html#dom-window
shouldBeNonNull(window, "window");
shouldBeNonNull(self, "self");
shouldBeNonNull(frames, "frames");
// top and parent are null if there is no browsing context with the
// WindowProxy.
// https://html.spec.whatwg.org/multipage/browsers.html#dom-top
// https://html.spec.whatwg.org/multipage/browsers.html#dom-parent
// However, when navigated, the WindowProxy's browsing context still exists.
// When the iframe is removed, |parent| and |top| are null.
shouldBeNonNull(parent, "parent");
shouldBeNonNull(top, "top");
};
location = 'data:text/html,<body>Testing...</body>';
}
</script>
</head>
<body onload="startTest()">
</body>
</html>