<!-- webkit-test-runner [ UsesBackForwardCache=true ] -->
<!DOCTYPE html>
<html>
<body>
<script src="../../resources/js-test-pre.js"></script>
<script>
description('Tests that a page with a closed IndexedDB database 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() {
    // Open the database.
    var request = indexedDB.open("Page Cache Test");
    request.onerror = function(event) {
        testFailed("Could not open the database");
        finishJSTest();
    }
    request.onsuccess = function(event) {
      db = event.target.result;
      db.close();

      // 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>
