| <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> |