if (this.importScripts) {
importScripts('../../../resources/js-test.js');
importScripts('shared.js');
}
description("Upgrade a database, open a second connection at the same version, ensure specifying a lower version causes an error");
function test()
{
setDBNameFromPath();
request = evalAndLog("indexedDB.deleteDatabase(dbname)");
shouldBeEqualToString("String(request)", "[object IDBOpenDBRequest]");
request.onsuccess = deleteSuccess;
request.onerror = unexpectedErrorCallback;
}
function deleteSuccess(evt) {
debug("");
debug("Call open with no version parameter:");
request = evalAndLog("indexedDB.open(dbname)");
request.onsuccess = openSuccess;
request.onerror = unexpectedErrorCallback;
request.onupgradeneeded = initialUpgradeNeeded;
request.onblocked = unexpectedBlockedCallback;
}
function initialUpgradeNeeded(evt)
{
preamble(evt);
}
function openSuccess(evt)
{
preamble(evt);
evalAndLog("connection1 = event.target.result");
shouldBe("connection1.version", "1");
evalAndLog("connection1.onversionchange = connection1VersionChangeCallback");
evalAndLog("request = indexedDB.open(dbname, 2)");
request.onupgradeneeded = connection2UpgradeNeeded;
request.onerror = unexpectedErrorCallback;
request.onblocked = unexpectedBlockedCallback;
request.onsuccess = connection2Success;
}
function connection1VersionChangeCallback(evt)
{
preamble(evt);
evalAndLog("connection1.close()");
}
function connection2UpgradeNeeded(evt)
{
preamble(evt);
evalAndLog("connection2 = event.target.result");
shouldBeEqualToString("String(connection2)", "[object IDBDatabase]");
shouldBeEqualToString("String(request.transaction)", "[object IDBTransaction]");
shouldBe("event.oldVersion", "1");
shouldBe("event.newVersion", "2");
evalAndLog("request.transaction.oncomplete = transactionCompleted");
request.transaction.onabort = unexpectedAbortCallback;
}
var didTransactionComplete = false;
function transactionCompleted(evt)
{
preamble(evt);
evalAndLog("didTransactionComplete = true");
}
function connection2Success(evt)
{
preamble(evt);
shouldBeTrue("didTransactionComplete");
shouldBe("event.target.result", "connection2");
debug("The next connection opens the database at the same version so connection2 shouldn't get a versionchange event.");
evalAndLog("connection2.onversionchange = unexpectedVersionChangeCallback");
shouldBeEqualToString("String(connection2)", "[object IDBDatabase]");
shouldBeNull("request.transaction");
shouldBe("connection2.version", "2");
evalAndLog("request = indexedDB.open(dbname, 2)");
evalAndLog("request.onsuccess = connection3Success");
evalAndLog("request.onblocked = unexpectedBlockedCallback");
request.onerror = unexpectedErrorCallback;
}
function connection3Success(evt)
{
preamble(evt);
evalAndLog("event.target.result.close()");
evalAndLog("connection2.close()");
evalAndLog("connection3 = event.target.result");
shouldBe("connection3.version", "2");
evalAndLog("request = indexedDB.open(dbname, 1)");
evalAndLog("request.onerror = errorWhenTryingLowVersion");
request.onblocked = unexpectedBlockedCallback;
request.onsuccess = unexpectedSuccessCallback;
request.onupgradeneeded = unexpectedUpgradeNeededCallback;
}
function errorWhenTryingLowVersion(evt)
{
preamble(evt);
debug("request.error.message = " + request.error.message);
evalAndLog("request = indexedDB.open(dbname, 4)");
request.onblocked = unexpectedBlockedCallback;
request.onerror = unexpectedErrorCallback;
evalAndLog("request.onupgradeneeded = connection4UpgradeNeeded");
evalAndLog("request.onsuccess = connection4Success");
}
var gotConnection4UpgradeNeeded = false;
function connection4UpgradeNeeded(evt)
{
preamble(evt);
evalAndLog("gotConnection4UpgradeNeeded = true");
shouldBe("event.oldVersion", "2");
shouldBe("event.newVersion", "4");
}
function connection4Success(evt)
{
preamble(evt);
shouldBeTrue("gotConnection4UpgradeNeeded");
evalAndLog("connection4 = event.target.result");
shouldBe("connection4.version", "4");
evalAndLog("connection4.close()");
evalAndLog("request = indexedDB.open(dbname)");
evalAndLog("request.onsuccess = connection5Success");
request.onblocked = unexpectedBlockedCallback;
request.onupgradeneeded = unexpectedUpgradeNeededCallback;
request.onerror = unexpectedUpgradeNeededCallback;
}
function connection5Success(evt)
{
preamble(evt);
evalAndLog("db = event.target.result");
shouldBe("db.version", "4");
finishJSTest();
}
test();