<!-- webkit-test-runner [ enableBackForwardCache=true ] -->
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test-pre.js"></script>
<script>
description('Tests that a page with a closed MediaSource goes into the page cache.');
window.jsTestIsAsync = true;

window.addEventListener("pageshow", function(event) {
    debug("pageshow - " + (event.persisted ? "" : "not ") + "from cache");

    if (event.persisted) {
        testPassed("Page did enter and was restored from the page cache");
        finishJSTest();
    }
}, false);

window.addEventListener("pagehide", function(event) {
    debug("pagehide - " + (event.persisted ? "" : "not ") + "entering cache");
    if (!event.persisted) {
        testFailed("Page did not enter the page cache.");
        finishJSTest();
    }
}, false);

window.addEventListener('load', function() {
    // Construct a MediaSource and open it.
    mediaSource = new MediaSource();
    mediaTag = document.createElement("video");
    document.body.appendChild(mediaTag);
    mediaSourceURL = URL.createObjectURL(mediaSource);
    mediaTag.src = mediaSourceURL;

    window.sessionStorage.page_cache_open_mediasource_test_started = true;

    mediaSource.addEventListener('sourceopen', function() {
        // Cause the MediaSource to close.
        mediaTag.src = "";
    });

    mediaSource.addEventListener('sourceclose', function() {
        // Force a back navigation back to this page.
        window.location.href = "resources/page-cache-helper.html";
    });
}, false);

</script>
<script src="../../resources/js-test-post.js"></script>
</body>
</html>
