chromium/third_party/blink/web_tests/storage/indexeddb/resources/deletedatabase-delayed-by-versionchange.js

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

description("Test the order when there are pending open (with upgrade) and delete calls.");

indexedDBTest(null, h1OpenSuccess);
function h1OpenSuccess(evt)
{
    preamble(evt);
    evalAndLog("openWithUpgradeBlockedEventFired = false");
    evalAndLog("upgradeComplete = false");
    evalAndLog("deleteDatabaseBlockedEventFired = false");
    evalAndLog("deleteDatabaseComplete = false");

    evalAndLog("h1 = event.target.result");

    h1.onversionchange = function h1OnVersionChange(evt) {
        preamble(evt);
        shouldBe("event.target.version", "1");
        shouldBe("event.oldVersion", "1");
        shouldBe("event.newVersion", "2");

        h1.onversionchange = function h1SecondOnVersionChange(evt) {
            preamble(evt);
            testFailed('Second "versionchange" event should not be seen');
        };
    };

    debug('');
    debug("Open h2:");
    request = evalAndLog("indexedDB.open(dbname)");
    request.onblocked = unexpectedBlockedCallback;
    request.onerror = unexpectedErrorCallback;
    request.onsuccess = function h2OpenSuccess(evt) {
        preamble(evt);
        evalAndLog("h2OpenSuccess = true");
        h2 = event.target.result;

        h2.onversionchange = function h2OnVersionChange(evt) {
            preamble(evt);
            shouldBe("event.target.version", "1");
            shouldBe("event.oldVersion", "1");
            shouldBe("event.newVersion", "2");

            h2.onversionchange = function h2OnSecondVersionChange(evt) {
                preamble(evt);
                testFailed('Second "versionchange" event should not be seen');
            };
        };

        debug('');
        debug("Open h3:");
        request = evalAndLog("indexedDB.open(dbname, 2)");
        request.onerror = unexpectedErrorCallback;
        request.onsuccess = function h3OpenSuccess(evt) {
            preamble(evt);
            h3 = event.target.result;
            shouldBeTrue("upgradeComplete");
            shouldBeFalse("deleteDatabaseBlockedEventFired");
            shouldBeFalse("deleteDatabaseComplete");
            evalAndLog("h3.close()");
        };
        request.onblocked = function h3Blocked(evt) {
            preamble(evt);
            evalAndLog("openWithUpgradeBlockedEventFired = true");

            debug('');
            debug("Open h4:");
            request = evalAndLog("indexedDB.open(dbname)");
            request.onblocked = unexpectedBlockedCallback;
            request.onerror = unexpectedErrorCallback;
            request.onsuccess = function h4OpenSuccess(evt) {
                preamble(evt);
                h4 = event.target.result;
                h4.onversionchange = unexpectedVersionChangeCallback;

                shouldBeTrue("deleteDatabaseBlockedEventFired");
                shouldBeTrue("deleteDatabaseComplete");

                finishJSTest();
            };

            debug('');
            debug('Close connections to unblock previous requests:');
            evalAndLog("h1.close()");
            evalAndLog("h2.close()");
        };
        request.onupgradeneeded = function h3OnUpgradeneeded(evt) {
            preamble(evt);

            transaction = event.target.transaction;
            transaction.onabort = unexpectedAbortCallback;
            transaction.oncomplete = function transactionOnComplete(evt) {
                preamble(evt);
                evalAndLog("upgradeComplete = true");
            };
        };

        debug('... and deleteDatabase()');
        request = evalAndLog("indexedDB.deleteDatabase(dbname)");
        request.onerror = unexpectedErrorCallback;
        request.onblocked = function deleteDatabaseOnBlocked(evt) {
            preamble(evt);
            evalAndLog("deleteDatabaseBlockedEventFired = true");
        };
        request.onsuccess = function deleteDatabaseOnSuccess(evt) {
            preamble(evt);
            evalAndLog("deleteDatabaseComplete = true");
            shouldBeTrue("openWithUpgradeBlockedEventFired");
            shouldBeTrue("upgradeComplete");
            evalAndLog("deleteDatabaseBlockedEventFired = true");
        };
    };
}