<!-- webkit-test-runner [ enableBackForwardCache=true ] -->
<!DOCTYPE html>
<html>
<head>
<script src="../../../resources/js-test.js"></script>
<script src="../../editing.js"></script>
</head>
<body>
<div id="dropzone" style="width: 200px; height: 200px; background-color: grey;"></div>
<script>
description("Make sure that fileSystemDirectoryEntry.getFile() does not prevent a page from entering the back/forward cache.");
jsTestIsAsync = true;
restoredFromPageCache = false;

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");
        restoredFromPageCache = true;
    }
}, 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();
    } else {
        entry.getFile('/testFiles/subfolder1/file3.txt', {}, function(file) {
            testPassed("Success callback was called");
            shouldBeTrue("restoredFromPageCache");
            finishJSTest();
        }, function(e) {
            testFailed("Error callback was called");
            finishJSTest();
        });
    }
}, false);

var dropzone = document.getElementById('dropzone');
dropzone.ondrop = function(e) {
    e.preventDefault();
    dataTransfer = e.dataTransfer;

    entry = dataTransfer.items[0].webkitGetAsEntry();
    window.location.href = "../../../fast/history/resources/page-cache-helper.html";
};

dropzone.ondragover = function(ev) {
    ev.preventDefault();
}

onload = function() {
    setTimeout(() => {
        dragFilesOntoElement(dropzone, ['../../../fast/forms/file/entries-api/resources/testFiles']);
    }, 0);
}
</script>
</body>
</html>
