<!doctype html>
<html>
<head>

<style>
pre { padding: 5px; border: 1px solid black; }
</style>

<script>
var db;

try {
    if (window.openDatabase) {
        db = openDatabase("StressTest1", "1.0", "Database Stress Test", 200000);
        if (!db)
            alert("Failed to open the database on disk.  This is probably because the version was bad or there is not enough space left in this domain's quota");
    } else
        alert("Couldn't open the database.");
} catch(err) { }

var highestId = 0;
var allData = new Array();

function newData()
{
    var id = ++highestId;
    allData.push(id);
    db.transaction(function (tx) 
    {
        tx.executeSql("INSERT INTO FillerData (id, filler) VALUES (?, randomblob(1024))", [id]);
    }); 
}

function testOpen()
{
    for (var i = 0; i < 4; i++) {
        newData();
    }

    setTimeout("testClose();", 0);
}

function testClose()
{    
    db.transaction(function(tx)
    {   
        for (var i = 0; i < allData.length; i++)
            tx.executeSql("DELETE FROM FillerData WHERE id = ?", [allData[i]]);

        allData = new Array();
    });
    setTimeout("testOpen();", 0);
}

function updateTransactionCount()
{
    document.getElementById("transactionCount").innerHTML = "Current Transaction Count: " + highestId;
    setTimeout("updateTransactionCount();", 1000);
}

function loaded()
{
    db.transaction(function(tx) {
        tx.executeSql("SELECT COUNT(*) FROM FillerData", [], function(result) { }, function(tx, error) {
            tx.executeSql("CREATE TABLE FillerData (id REAL UNIQUE, filler)", [], function(result) { 
            });
        });
    });

    setTimeout("testOpen();", 0);
    setTimeout("updateTransactionCount();", 1000);
}

addEventListener('load', loaded, false);
</script>
</head>

<body>
This test stresses the database threading code by constantly opening transactions to the test database at a fast rate.<br>
See radar 5729446 for more details.<br>
<pre id="transactionCount">Current Transaction Count: 0</pre>

</body>
</html>
