<html>
<head>
<script>

function log(message)
{
    document.body.innerHTML += message + "<br>";
}

function terminateTest()
{
    if (window.layoutTestController)
        layoutTestController.notifyDone();
}

function openTestDatabase()
{
    return openDatabase("ReadTransactionsRunningConcurrentlyTest",
                        "1.0",
                        "Test to make sure that multiple read transactions on different DB handles to the same DB run concurrently.",
                        32768);
}

var readTransactionsInProgress = 0;

function runReadTransaction(db)
{
    db.readTransaction(function(tx) {
            readTransactionsInProgress++;
        }, function(error) {
            log("Read transaction failed: " + error.message);
            terminateTest();
        }, function() {
            if (readTransactionsInProgress == 2)
                log("Read transactions running concurrently.");
            readTransactionsInProgress--;
            if (readTransactionsInProgress == 0)
                terminateTest();
        });
}

function runTest() {
    if (window.layoutTestController) {
        layoutTestController.dumpAsText();
        layoutTestController.waitUntilDone();
    }

    try {
        var db1 = openTestDatabase();
        var db2 = openTestDatabase();
        db1.transaction(function(tx) {
                tx.executeSql("CREATE TABLE IF NOT EXISTS Test (Foo int);");
            }, function(error) {
                log("Cannot create the Test table: " + error.message);
                terminateTest();
            }, function() {
                runReadTransaction(db1);
                runReadTransaction(db2);
            });
     } catch(err) { log(err); }
}
</script>
</head>
<body onload="runTest();">
This test tests that two read-only transactions on different handles to the same database run concurrently.<br>
</body>
</html>
