<html>
<head>
<script>
function log(message)
{
    document.getElementById("console").innerHTML += message + "<br>";
}

function finishTest()
{
    log("Test part 1 Complete");
    if (window.layoutTestController)
        layoutTestController.notifyDone();
}

function errorFunction(error)
{
    log("Test failed - " + error.message);
    finishTest();
}

function addData(db)
{
    db.transaction(function(tx) {
        log("Inserting some data");
        // Load a new page while the transaction is still in progress, interrupting the transaction.
        // This should not leave the database locked and on the next page we should be able to insert
        // some more data.
        tx.executeSql("INSERT INTO DataTest (testData) VALUES (ZEROBLOB(524200))", [],
            function(tx, result) { location.href = "./resources/database-lock-after-reload-2.html"; },
            function(tx, error) { errorFunction(error); });
        tx.executeSql("INSERT INTO DataTest (testData) VALUES (ZEROBLOB(524200))");
    }, errorFunction, function() { finishTest(); });
}

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

    var database;
    try {
        database = openDatabase("DatabaseLockTest", "1.0", "Test for database locking", 5242880);
    } catch (e) {
        log("Error - could not open database");
        finishTest();
    }

    database.transaction(function(tx) {
        log("Adding a table");
        tx.executeSql("CREATE TABLE DataTest (testData)", [], function(tx, result) { },
            function(tx, error) { errorFunction(error); });
    }, errorFunction, function() { addData(database); });
}

</script>
</head>

<body onload="runTest()">
<pre id="console">
</pre>
</body>

</html>
