chromium/third_party/blink/web_tests/fast/dom/Window/property-access-on-cached-properties-after-frame-removed-and-gced.html

<html>
<head>
<script src="../../../resources/gc.js"></script>
<script src="../../../resources/js-test.js"></script>
<script src="resources/window-property-collector.js"></script>
<script>
var jsTestIsAsync = true;

var childWindow;
var propertiesToVerify = [];

function insertExpectedResult(path, expected)
{
    if (path.length < 2)
        return;

    // Any special properties that may have exemptions should be added in
    // resources/window-property-collector.js.
    var propertyDir = getPropertyPath(path, path.length - 1);
    var cachedPropertyDir = "cached_" + propertyDir.replaceAll(".", "_").replaceAll("[0]", "_0");
    window[cachedPropertyDir] = eval("childWindow." + propertyDir);
    propertiesToVerify.push({
        'property': ["window", cachedPropertyDir, path[path.length - 1]].join("."),
        'expected': expected,
    });
}

function runTest()
{
    description("Tests access of cached DOMWindow properties after the associated frame is removed from a web page and garbage collected. Test should not crash and properties should be set to reasonable defaults as appropriate.");
    var frame = document.getElementById("test_frame");
    childWindow = frame.contentWindow;
    collectProperties(document.getElementById("src_frame").contentWindow);
    frame.parentNode.removeChild(frame);
    asyncGC(function () {
        for (var i = 0; i < propertiesToVerify.length; ++i)
            shouldBe(propertiesToVerify[i].property, propertiesToVerify[i].expected);
        finishJSTest();
    });
}
</script>
</head>
<body onload="runTest()">
<iframe id="src_frame"></iframe>
<iframe id="test_frame" src="about:blank"></iframe>
</body>
</html>