if (this.importScripts) {
    importScripts('../../../resources/js-test.js');
    importScripts('shared.js');
}

description("Ensure that IDBDatabase objects are deleted when there are no retaining paths left");

indexedDBTest(prepareDatabase, openSuccess);
function prepareDatabase()
{
}

function openSuccess()
{
    db = event.target.result;
    evalAndLog("db.close()");

    var openRequest = evalAndLog("indexedDB.open(dbname)");
    openRequest.onblocked = unexpectedBlockedCallback;
    openRequest.onupgradeneeded = unexpectedUpgradeNeededCallback;
    openRequest.onerror = unexpectedErrorCallback;
    openRequest.onsuccess = function() {
        debug("Dropping references to new connection.");
        // After leaving this function, there are no remaining references to the
        // db, so it should get deleted.
        setTimeout(setVersion, 2);
    };
}

function setVersion()
{
    evalAndLog("gc()");
    debug("Open request should not receive a blocked event:");
    var request = evalAndLog("indexedDB.open(dbname, 2)");
    request.onerror = unexpectedErrorCallback;
    request.onblocked = unexpectedBlockedCallback;
    request.onsuccess = finishJSTest;
}
