<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test.js"></script>
<iframe id="testFrame" src="about:blank"></iframe>
<script>
description("Tests that Window properties do not get GC'd before their Window.");
jsTestIsAsync = true;

var windowProperties = ["applicationCache", "history", "location", "locationbar", "menubar", "navigator", "personalbar", "screen", "scrollbars", "statusbar", "toolbar" ];

onload = function() {
    frameWindow = document.getElementById("testFrame").contentWindow;
    for (let windowProperty of windowProperties)
        eval("frameWindow." + windowProperty + ".foo = 1;");
    document.getElementById("testFrame").remove();
    for (let windowProperty of windowProperties)
        shouldBe("frameWindow." + windowProperty + ".foo", "1");
    debug("");
    gc();
    for (let windowProperty of windowProperties)
        shouldBe("frameWindow." + windowProperty + ".foo", "1");
    debug("");
    setTimeout(() => {
        gc();
        for (let windowProperty of windowProperties)
            shouldBe("frameWindow." + windowProperty + ".foo", "1");
        finishJSTest();
    }, 10);
}
</script>
</body>
