Included UNCONFIRMED bugs by default in advanced search query
[WebKit-https.git] / LayoutTests / storage / open-database-while-transaction-in-progress.html
1 <html>
2 <head>
3 <script>
4
5 function log(message)
6 {
7     document.body.innerHTML += message + "<br>";
8 }
9
10 var complete = 0;
11
12 function checkCompletion()
13 {
14     // The test should end after two transactions
15     if (++complete == 1 && window.layoutTestController)
16         layoutTestController.notifyDone();
17 }
18
19 // Opens the database used in this test case
20 function openTestDatabase()
21 {
22     return openDatabase("OpenDatabaseWhileTransactionInProgressTest",
23                         "1.0",
24                         "Test to make sure that calling openDatabase() while a transaction is in progress on a different handle to the same database does not result in a deadlock.",
25                         2100000); // 2MB + epsilon
26 }
27
28 // See https://bugs.webkit.org/show_bug.cgi?id=28207
29 // In order to trigger this bug, the transaction must acquire an exclusive
30 // lock on the DB file before trying to obtain a second handle to the same DB.
31 // The only way to force SQLite to obtain an exclusive lock is to change more
32 // than cache_size * page_size bytes in the database. The default value for
33 // cache_size is 2000 pages, and the default page_size is 1024 bytes. So the
34 // size of the blob must be at least 2MB.
35 function runTest()
36 {
37     if (window.layoutTestController) {
38         layoutTestController.dumpAsText();
39         layoutTestController.waitUntilDone();
40     }
41
42     try {
43         var db1 = openTestDatabase();
44         db1.transaction(function(tx) {
45             // Create the Test table if it does not exist
46             tx.executeSql("CREATE TABLE IF NOT EXISTS Test (Foo BLOB);");
47             tx.executeSql("INSERT INTO Test VALUES (RANDOMBLOB(2097152));", [],
48                           function(result) {
49                               var db2 = openTestDatabase();
50                               log("openDatabase() succeeded.");
51                           },
52                           function(tx, error) {
53                               log("Executing statement failed: " + error.message);
54                           });
55
56             // Clean up the DB to allow for repeated runs of this test
57             // without needing to increase the default allowed quota (5MB)
58             tx.executeSql("DELETE FROM Test;");
59         }, function(error) {
60             log("Transaction failed: " + error.message);
61         }, function() {
62             checkCompletion();
63         });
64     } catch(err) {}
65 }
66 </script>
67 </head>
68 <body onload="runTest();">
69 This is a test to see if opening a database while a transaction is running on a different handle to the same database results in a deadlock.<br>
70 </body>
71 </html>