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

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

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

    var transactionsRun = 0;

    // Open a new database with a creation callback, and make sure the creation callback is queued
    var creationCallbackCalled1 = false;
    var db1Name = "OpenDatabaseCreationCallback1" + (new Date()).getTime();
    var db1 = openDatabase(db1Name, "1.0", "", 1,
                           function(db) {
                               creationCallbackCalled1 = true;
                               if (db.version != "") {
                                   log("Creation callback was called with a database with version " +
                                       db.version + "; empty string expected.");
                                   finishTest();
                               }
                           });

    // Putting this code inside a transaction on 'db1' makes sure that it is executed after
    // the creation callback is.
    db1.transaction(function(tx) {
        if (!creationCallbackCalled1) {
            log("Creation callback for db1 was not called.");
            finishTest();
        }
        if (++transactionsRun == 2)
            finishTest();
    });

    // Try to open another handle to the same database.
    // Since the version of this database is "" (empty string), openDatabase() should return
    // a null handle and throw a INVALID_STATE_ERR exception.
    var db1Fail = null;
    try {
        db1Fail = openDatabase(db1Name, "1.0", "", 1);
        log("This statement should not have been executed; an INVALID_STATE_ERR exception should've been thrown.");
        finishTest();
    } catch(err) {
        if (db1Fail) {
            log("db1Fail should have been null.");
            finishTest();
        }
    }

    // Open a handle to another database, first without a creation callback, then with one.
    // Make sure the creation callback is not called.
    var creationCallbackCalled2 = false;
    var db2 = openDatabase("OpenDatabaseCreationCallback2", "1.0", "", 1);
    db2 = openDatabase("OpenDatabaseCreationCallback2", "1.0", "", 1,
                       function(db) { creationCallbackCalled2 = true; });
    db2.transaction(function(tx) {
        if (creationCallbackCalled2) {
            log("Creation callback for db2 should not have been called.");
            finishTest();
        }
        if (++transactionsRun == 2)
            finishTest();
    });
}

</script>
</head>

<body onload="runTest()">
This test tests openDatabase()'s creation callback.
<pre id="console">
</pre>
</body>

</html>
