chromium/third_party/blink/web_tests/storage/indexeddb/resources/unblocked-version-changes.js

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

description("Ensure that metadata remains correct when an aborted version change is followed by another. ");

function test() {
    setDBNameFromPath();
    request = evalAndLog("indexedDB.deleteDatabase(dbname)");
    request.onblocked = unexpectedBlockedCallback;
    request.onerror = unexpectedErrorCallback;
    request.onsuccess = openConnection;
}

function openConnection()
{
    preamble();
    evalAndLog("request = indexedDB.open(dbname, 2)");
    request.onblocked = unexpectedBlockedCallback;
    request.onsuccess = unexpectedSuccessCallback;
    request.onupgradeneeded = onUpgradeNeeded;
    request.onerror = onError;
}

function onUpgradeNeeded(evt)
{
    preamble(evt);
    evalAndLog("db = request.result");
    shouldBe("db.version", "2");
    evalAndLog("transaction = request.transaction");

    evalAndLog("request = indexedDB.open(dbname, 3)");
    request.onerror = unexpectedErrorCallback;
    request.onupgradeneeded = onUpgradeNeeded2;
    request.onsuccess = onSuccess;

    evalAndLog("transaction.abort()");
}

function onError(evt)
{
    preamble(evt);
    shouldBe("db.version", "0");
}

function onUpgradeNeeded2(evt)
{
    preamble(evt);
    evalAndLog("db = request.result");
    shouldBe("db.version", "3");
}

function onSuccess(evt)
{
    preamble(evt);
    evalAndLog("db = request.result");
    shouldBe("db.version", "3");
    finishJSTest();
}

test();