| <html> |
| <head> |
| <script> |
| |
| function log(message) |
| { |
| document.body.innerHTML += message + "<br>"; |
| } |
| |
| function GC() |
| { |
| // Force GC. |
| if (window.GCController) |
| GCController.collect(); |
| else { |
| for (var i = 0; i < 10000; ++i) { |
| ({ }); |
| } |
| } |
| } |
| |
| // Variable for the database that will never be forgotten |
| var persistentDB = 0; |
| // Variable for the forgotten database |
| var forgottenDB = 0; |
| |
| var completed = 0; |
| function checkCompletion() |
| { |
| if (++completed == 2 && window.layoutTestController) |
| layoutTestController.notifyDone(); |
| } |
| |
| function runTest() |
| { |
| if (window.layoutTestController) { |
| layoutTestController.dumpAsText(); |
| layoutTestController.waitUntilDone(); |
| } |
| |
| persistentDB = openDatabase("MultipleDatabasesTest1", "1.0", "Test one out of a set of databases being destroyed (1)", 32768); |
| forgottenDB = openDatabase("MultipleDatabasesTest2", "1.0", "Test one out of a set of databases being destroyed (2)", 32768); |
| |
| persistentDB.transaction(function(tx) { |
| tx.executeSql("CREATE TABLE IF NOT EXISTS DataTest (randomData)", [], function(tx, result) { |
| for (var i = 0; i < 25; ++i) |
| tx.executeSql("INSERT INTO DataTest (randomData) VALUES (1)", []); |
| }); |
| }, function(err) { |
| log("Persistent Database Transaction Errored - " + err); |
| checkCompletion(); |
| }, function() { |
| log("Persistent Database Transaction Complete"); |
| checkCompletion(); |
| }); |
| |
| forgottenDB.transaction(function(tx) { |
| tx.executeSql("CREATE TABLE IF NOT EXISTS EmptyTable (unimportantData)", []); |
| }, function(err) { |
| log("Forgotten Database Transaction Errored - " + err); |
| forgottenDB = 0; |
| GC(); |
| checkCompletion(); |
| }, function() { |
| log("Forgotten Database Transaction Complete"); |
| forgottenDB = 0; |
| GC(); |
| checkCompletion(); |
| }); |
| } |
| |
| </script> |
| <body onload="runTest();"> |
| This test opens two databases, queues up a series of operations on both, then "forgets" about one of them. |
| After forcing GC, resources associated with that database should be freed gracefully.<br> |
| </body> |
| </html> |