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

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

function statementErrorCallback2(tx, error)
{
    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.layoutTestController) {
    layoutTestController.clearAllDatabases();
    layoutTestController.dumpAsText();
    layoutTestController.waitUntilDone();
    layoutTestController.evaluateScriptInIsolatedWorld(
        0,
        "function statementErrorCallback1(tx, error)\n" +
        "{\n" +
        "    alert(document.body.foo);\n" +
        "    window.location='javascript:done()';\n" +
        "}\n" +
        "var db1 = openDatabase('StatementErrorCallbackIsolatedWorld1', '1.0', '', 1);\n" +
        "db1.transaction(function(tx) {\n" +
        "    tx.executeSql('BAD STATEMENT', [], function(tx, data) {}, statementErrorCallback1);\n" +
        "});");

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