chromium/third_party/blink/web_tests/storage/indexeddb/resources/intversion-pending-version-changes-descending.js

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

description("Check processing of pending version change requests - descending versions.");

indexedDBTest(null, function onConnection1Open(evt) {
    preamble(evt);
    db = event.target.result;

    request = evalAndLog("indexedDB.open(dbname, 3)");
    request.onblocked = connection2Blocked;
    request.onupgradeneeded = connection2UpgradeNeeded;
    request.onsuccess = connection2OpenSuccess;
    request.onerror = unexpectedErrorCallback;

    request = evalAndLog("indexedDB.open(dbname, 2)");
    request.onblocked = connection3Blocked;
    request.onupgradeneeded = unexpectedUpgradeNeededCallback;
    request.onsuccess = unexpectedErrorCallback;
    request.onerror = connection3Error;
});

function connection2Blocked(evt)
{
    preamble(evt);
    // Attempt to delay this until the third open has been processed;
    // not strictly necessary but will exercise IPC/event timing.
    setTimeout(function() {
        evalAndLog("db.close()");
    }, 0);
}

function connection3Blocked(evt)
{
    preamble(evt);
}

function connection2UpgradeNeeded(evt)
{
    preamble(evt);
    shouldBe("event.oldVersion", "1");
    shouldBe("event.newVersion", "3");
}

function connection2OpenSuccess(evt)
{
    preamble(evt);
    evalAndLog("event.target.result.close()");
    evalAndLog("db2 = event.target.result");
    shouldBe("db2.version", "3");
}

function connection3Error(evt)
{
    preamble(evt);
    shouldBeEqualToString("event.target.error.name", "VersionError");
    finishJSTest();
}