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

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

function statementSuccessCallback2(tx, data)
{
    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(
        0,
        "function statementSuccessCallback1(tx, data)\n" +
        "{\n" +
        "    alert(document.body.foo);\n" +
        "    window.location='javascript:done()';\n" +
        "}\n" +
        "var db1 = openDatabase('StatementSuccessCallbackIsolatedWorld1', '1.0', '', 1);\n" +
        "db1.transaction(function(tx) {\n" +
        "    tx.executeSql('CREATE TABLE IF NOT EXISTS Test (Foo INT)', [], statementSuccessCallback1);\n" +
        "});");

    var db2 = openDatabase('StatementSuccessCallbackIsolatedWorld2', '1.0', '', 1);
    db2.transaction(function(tx) {
        tx.executeSql('CREATE TABLE IF NOT EXISTS Test (Foo INT)', [], statementSuccessCallback2);
    });
}
</script>
</body>
</html>
