importScripts('../../../resources/js-test.js');
importScripts('shared.js');
debug("opening database connection");
evalAndLog("request = indexedDB.open('dont-commit-on-blocked.html', 2)");
request.onerror = unexpectedErrorCallback;
evalAndLog("state = 'setversion'");
evalAndLog("request.onblocked = onSetVersionBlocked");
evalAndLog("request.onupgradeneeded = onSetVersionSuccess");
request.onsuccess = onTransactionComplete;
debug("spinning for 100ms to let events be queued but prevent dispatch");
var t = Date.now();
while ((Date.now() - t) < 100) {
}
debug("done spinning");
function onSetVersionBlocked(e)
{
debug("");
debug("onSetVersionBlocked():");
shouldBeEqualToString("state", "setversion");
evalAndLog("state = 'blocked'");
}
function onSetVersionSuccess(e)
{
preamble(e);
evalAndLog("db = event.target.result");
db.onerror = unexpectedErrorCallback;
shouldBeEqualToString("state", "blocked");
evalAndLog("state = 'success'");
debug("creating object store - will fail if transaction commited after blocked event");
evalAndLog("db.createObjectStore('store2')");
}
function onTransactionComplete(e)
{
debug("");
debug("onTransactionComplete");
shouldBeEqualToString("state", "success");
shouldBe("Number(db.version)", "2");
shouldBeTrue("db.objectStoreNames.contains('store1')");
shouldBeTrue("db.objectStoreNames.contains('store2')");
finishJSTest();
}