blob: 2a5eecbe0e1a01e92f1ad05be214c7b9a113f6db [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<script src="/js-test-resources/js-test.js"></script>
</head>
<body>
<script>
description("Validate the properties of a detached Window object.");
jsTestIsAsync = true;
function validateWindow(_w)
{
w = _w;
try {
shouldBeTrue("!!w.location");
if (w.location) {
shouldThrowErrorName("w.location.href", "SecurityError");
shouldThrowErrorName("w.location.protocol", "SecurityError");
shouldThrowErrorName("w.location.host", "SecurityError");
shouldThrowErrorName("w.location.hostname", "SecurityError");
shouldThrowErrorName("w.location.port", "SecurityError");
shouldThrowErrorName("w.location.pathname", "SecurityError");
shouldThrowErrorName("w.location.search", "SecurityError");
shouldThrowErrorName("w.location.hash", "SecurityError");
shouldThrowErrorName("w.location.origin", "SecurityError");
shouldThrowErrorName("w.location.assign('')", "SecurityError");
shouldNotThrow("w.location.replace('')");
shouldThrowErrorName("w.location.reload('')", "SecurityError");
}
} catch (e) {
debug(e);
}
shouldThrowErrorName("w.screen", "SecurityError");
shouldThrowErrorName("w.history", "SecurityError");
shouldThrowErrorName("w.crypto", "SecurityError");
let bars = ['locationbar', 'menubar', 'personalbar', 'scrollbars', 'statusbar', 'toolbar'];
for (let bar of bars) {
shouldThrowErrorName("w." + bar, "SecurityError");
}
shouldThrowErrorName("w.applicationCache", "SecurityError");
shouldThrowErrorName("w.visualViewport", "SecurityError");
shouldThrowErrorName("w.styleMedia", "SecurityError");
shouldThrowErrorName("w.navigator", "SecurityError");
shouldThrowErrorName("w.performance", "SecurityError");
shouldThrowErrorName("w.foo", "SecurityError");
shouldThrowErrorName("w.foo = 1", "SecurityError");
shouldThrowErrorName("w[0] = 1", "SecurityError");
shouldThrowErrorName("w.location.foo", "SecurityError");
}
onmessage = function() {
let w = f.contentWindow;
f.remove();
f = null;
debug("* Before GC");
validateWindow(w);
gc();
setTimeout(() => {
gc();
debug("");
debug("* After GC");
validateWindow(w);
finishJSTest();
}, 0);
}
onload = function() {
f = document.createElement("iframe");
f.src = "http://localhost:8000/dom/resources/post-message-to-parent-when-loaded.html"; // Cross-origin.
document.body.appendChild(f);
}
</script>
</body>
</html>