<!DOCTYPE html>
<html>
<body>
This test tests that the transaction error callback is called in the right world.
<div id="console"></div>
<script>
var transactionErrorCallbacksInvoked = 0;
function done()
{
    if ((++transactionErrorCallbacksInvoked == 2) && (window.testRunner))
        testRunner.notifyDone();
}

function transactionErrorCallback1(tx)
{
    alert("FAIL: Visible in isolated world.");
    done();
}

function transactionErrorCallback2(tx)
{
    alert(document.body.bar);
    done();
}

document.body.foo = "FAIL: document.body.foo visible in isolated world.";
document.body.bar = "PASS: document.body.bar visible in a callback created in this world.";

if (window.testRunner) {
    testRunner.clearAllDatabases();
    testRunner.dumpAsText();
    testRunner.waitUntilDone();
    testRunner.evaluateScriptInIsolatedWorld(
        1,
        "function transactionErrorCallback1(tx)\n" +
        "{\n" +
        "    alert(document.body.foo);\n" +
        "    window.location='javascript:done()';\n" +
        "}\n" +
        "var db1 = openDatabase('TransactionErrorCallbackIsolatedWorld1', '1.0', '', 1);\n" +
        "db1.transaction(function(tx) {\n" +
        "    tx.executeSql('BAD STATEMENT', [], function(tx, data) {}, function(tx, error) { return true; });\n" +
        "}, transactionErrorCallback1);");

    var db2 = openDatabase('TransactionErrorCallbackIsolatedWorld2', '1.0', '', 1);
    db2.transaction(function(tx) {
        tx.executeSql('BAD STATEMENT', [], function(tx, data) {}, function(tx, error) { return true; });
    }, transactionErrorCallback2);
}
</script>
</body>
</html>
