<html>
<head>
<script src="../../resources/js-test.js"></script>
<script src="resources/shared.js"></script>
</head>
<body>
<script>
if (window.internals)
    window.internals.settings.setIndexedDBWorkersEnabled(true);

description("Implicitly terminating worker with blocked setVersion call should allow later open calls to proceed");

function test()
{
    removeVendorPrefixes();
    dbname = self.location.pathname.substring(1 + self.location.pathname.lastIndexOf("/"));
    evalAndLog("request = indexedDB.open(\"" + dbname + "\")");
    request.onblocked = unexpectedBlockedCallback;
    request.onerror = unexpectedErrorCallback;
    if (self.location.search == "?second") {
        request.onsuccess = function() {
            testPassed("Open worked after page reload.");
            finishJSTest();
        };
    } else {
        request.onsuccess = startTheWorker;
    }
}

function startTheWorker()
{
    worker = startWorker("resources/pending-version-change-stuck.js?" + encodeURI(dbname));
    worker.onerror = function(e) {
        testFailed(e.message);
        finishJSTest();
    };
    originalOnMessage = worker.onmessage;
    worker.onmessage = function(event) {
        if (event.data == "gotblocked")
            self.location = self.location + "?second";
        else
            originalOnMessage(event);
    };
}

test();

</script>
</body>
</html>
