chromium/third_party/blink/web_tests/storage/indexeddb/resources/transaction-rollback.js

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

description("Test IndexedDB transaction rollback.");

indexedDBTest(prepareDatabase, setVersionComplete);
function prepareDatabase()
{
    db = event.target.result;
    event.target.transaction.onabort = unexpectedAbortCallback;
    evalAndLog("db.createObjectStore('myObjectStore')");
    shouldBe("db.objectStoreNames.length", "1");
}

function setVersionComplete()
{
    debug("setVersionComplete():");

    self.transaction = evalAndLog("transaction = db.transaction(['myObjectStore'], 'readwrite')");
    transaction.onabort = abortCallback;
    transaction.oncomplete = unexpectedCompleteCallback;

    self.store = evalAndLog("store = transaction.objectStore('myObjectStore')");
    request = evalAndLog("store.add('rollbackValue', 'rollbackKey123')");
    request.onsuccess = addSuccess;
    request.onerror = unexpectedErrorCallback;
}

function addSuccess()
{
    debug("addSuccess():");
    shouldBeEqualToString("event.target.result", "rollbackKey123");

    request = evalAndLog("store.openCursor()");
    request.onsuccess = openCursorSuccess;
    request.onerror = unexpectedErrorCallback;
}

function openCursorSuccess()
{
    debug("openCursorSuccess():");
    self.cursor = evalAndLog("cursor = event.target.result");

    transaction.abort();
}

function abortCallback()
{
    debug("abortCallback():");
    debug('Transaction was aborted.');

    self.transaction = evalAndLog("transaction = db.transaction(['myObjectStore'], 'readonly')");
    self.store = evalAndLog("store = transaction.objectStore('myObjectStore')");
    request = evalAndLog("store.get('rollbackKey123')");
    request.onerror = unexpectedErrorCallback;
    request.onsuccess = getSuccess;
}

function getSuccess()
{
    debug("getSuccess():");
    shouldBe("event.target.result", "undefined");

    shouldBeEqualToString("cursor.value", "rollbackValue");
    finishJSTest();
}