<html>
<head>
<link rel="stylesheet" href="../../fast/js/resources/js-test-style.css">
<script src="../../fast/js/resources/js-test-pre.js"></script>
<script src="../../fast/js/resources/js-test-post-function.js"></script>
<script src="resources/shared.js"></script>
</head>
<body>
<p id="description"></p>
<div id="console"></div>
<script>

description("Test event propogation on IDBTransaction.");
if (window.layoutTestController) 
    layoutTestController.waitUntilDone();

function test()
{
    request = evalAndLog("webkitIndexedDB.open('transaction-event-propagation')");
    request.onsuccess = setVersion;
    request.onerror = unexpectedErrorCallback;
}

function setVersion()
{
    db = evalAndLog("db = event.target.result");

    request = evalAndLog("db.setVersion('new version')");
    request.onsuccess = deleteExisting;
    request.onerror = unexpectedErrorCallback;
}

function deleteExisting()
{
    window.trans = evalAndLog("trans = event.target.result");
    shouldBeTrue("trans !== null");
    trans.onabort = unexpectedAbortCallback;
    evalAndLog("trans.oncomplete = startTest");

    deleteAllObjectStores(db);

    store = evalAndLog("store = db.createObjectStore('storeName', null)");
    request = evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
    request.onerror = unexpectedErrorCallback;
}

function startTest()
{
    debug("Verifing abort");
    trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
    evalAndLog("trans.onabort = abortFiredCallback");
    evalAndLog("trans.oncomplete = unexpectedAbortCallback");
    evalAndLog("db.addEventListener('abort', dbAbortCaptureCallback, true)");
    evalAndLog("db.addEventListener('abort', dbAbortBubbleCallback, false)");
    evalAndLog("db.addEventListener('complete', unexpectedCompleteCallback, true)");
    evalAndLog("db.addEventListener('complete', unexpectedCompleteCallback, false)");
    store = evalAndLog("store = trans.objectStore('storeName')");
    evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key')");
    dbCaptureFired = false;
    abortFired = false;
    dbBubbleFired1 = false;
}

function dbAbortCaptureCallback()
{
    debug("");
    debug("In IDBDatabase abort capture");
    shouldBeFalse("dbCaptureFired");
    shouldBeFalse("abortFired");
    shouldBeFalse("dbBubbleFired1");
    shouldBe("event.target", "trans");
    shouldBe("event.currentTarget", "db");
    dbCaptureFired = true;
}

function abortFiredCallback()
{
    debug("");
    debug("In abort handler");
    shouldBeTrue("dbCaptureFired");
    shouldBeFalse("abortFired");
    shouldBeFalse("dbBubbleFired1");
    shouldBe("event.target", "trans");
    shouldBe("event.currentTarget", "trans");
    abortFired = true;
}

function dbAbortBubbleCallback()
{
    debug("");
    debug("In IDBDatabase error bubble");
    shouldBeTrue("dbCaptureFired");
    shouldBeTrue("abortFired");
    shouldBeFalse("dbBubbleFired1");
    shouldBe("event.target", "trans");
    shouldBe("event.currentTarget", "db");
    dbBubbleFired1 = true;
    debug("");
    debug("Verifing success.");
    trans = evalAndLog("trans = db.transaction([], webkitIDBTransaction.READ_WRITE)");
    evalAndLog("trans.oncomplete = completeFiredCallback");
    evalAndLog("trans.onabort = unexpectedAbortCallback");
    evalAndLog("db.removeEventListener('abort', dbAbortCaptureCallback, true)");
    evalAndLog("db.removeEventListener('abort', dbAbortBubbleCallback, false)");
    evalAndLog("db.removeEventListener('complete', unexpectedCompleteCallback, true)");
    evalAndLog("db.removeEventListener('complete', unexpectedCompleteCallback, false)");
    evalAndLog("db.addEventListener('complete', dbCompleteCaptureCallback, true)");
    evalAndLog("db.addEventListener('complete', dbCompleteBubbleCallback, false)");
    evalAndLog("db.addEventListener('abort', unexpectedAbortCallback, true)");
    evalAndLog("db.addEventListener('abort', unexpectedAbortCallback, false)");
    store = evalAndLog("store = trans.objectStore('storeName')");
    evalAndLog("store.add({x: 'value', y: 'zzz'}, 'key2')");
    dbCaptureFired = false;
    completeFired = false;
    dbBubbleFired2 = false;
}

function dbCompleteCaptureCallback()
{
    debug("");
    debug("In IDBDatabase complete capture");
    shouldBeFalse("dbCaptureFired");
    shouldBeFalse("completeFired");
    shouldBeFalse("dbBubbleFired2");
    shouldBe("event.target", "trans");
    shouldBe("event.currentTarget", "db");
    dbCaptureFired = true;
}

function completeFiredCallback()
{
    debug("");
    debug("In IDBRequest handler");
    shouldBeTrue("dbCaptureFired");
    shouldBeFalse("completeFired");
    shouldBeFalse("dbBubbleFired2");
    shouldBe("event.target", "trans");
    shouldBe("event.currentTarget", "trans");
    completeFired = true;
    debug("");
    done();
}

function dbCompleteBubbleCallback()
{
    debug("");
    debug("In IDBDatabase complete bubble");
    testFailed("Complete bubble callback should NOT fire");
    dbBubbleFired2 = true;
}

test();

var successfullyParsed = true;

</script>
</body>
</html>
