Modern IDB: After versionchange transactions complete, fire onsuccess on the original...
[WebKit-https.git] / LayoutTests / storage / indexeddb / modern / deletedatabase-2.html
1 This tests that if deleteDatabase is called while there is already an open connection to the database that the open connection gets the appropriate versionChange event.<br>
2 That open connection also has an in-progress transaction at the time it gets the versionChange event.<br>
3 <div id="logger"></div>
4 <script>
5
6 if (window.testRunner) {
7     testRunner.waitUntilDone();
8     testRunner.dumpAsText();
9 }
10
11 function done()
12 {
13     log("Done");
14     if (window.testRunner)
15         testRunner.notifyDone();
16 }
17
18 function log(message)
19 {
20     document.getElementById("logger").innerHTML += message + "<br>";
21 }
22
23 var stopSpinning = false;
24
25 var request = window.indexedDB.open("DeleteDatabase2TestDatabase");
26 request.onsuccess = function()
27 {
28     log("open db success");
29 }
30 request.onerror = function(e)
31 {
32     log("Unexpected error");
33         done();
34 }
35
36 request.onupgradeneeded = function(e)
37 {
38     log("Initial upgrade old version - " + e.oldVersion + " new version - " + e.newVersion);
39     
40     var versionTransaction = request.transaction;
41     var database = event.target.result;
42     var objectStore = database.createObjectStore("TestObjectStore");
43     objectStore.put("This is a record", 1);
44     
45     // Spin the transaction until told to stop spinning it.
46     var keepGoing = function() {
47         if (!stopSpinning)
48             objectStore.get(1).onsuccess = keepGoing;
49     }
50     objectStore.get(1).onsuccess = keepGoing;
51
52     database.onversionchange = function(e)
53     {
54         log("First connection received versionchange event: oldVersion " + e.oldVersion + ", newVersion " + e.newVersion);
55         
56         var shutErDown = function() {
57             database.close();
58             stopSpinning = true;
59         }
60         window.setTimeout(shutErDown, 0);
61     }
62         
63     request.transaction.oncomplete = function()
64     {
65         log("First version change complete");
66     }
67     
68     request.transaction.onabort = function()
69     {
70         log("Version change unexpected abort");
71         done();
72     }
73     request.transaction.onerror = function()
74     {
75         log("Version change unexpected error");
76         done();
77     }
78     
79     window.setTimeout(continueTest1, 0);
80 }
81
82 function continueTest1()
83 {
84     log("Requesting deleteDatabase");
85     var request = window.indexedDB.deleteDatabase("DeleteDatabase2TestDatabase");
86     request.onsuccess = function(e)
87     {
88         log("Delete database success: oldVersion " + e.oldVersion + ", newVersion " + e.newVersion);
89         continueTest2();
90     }
91     request.onerror = function(e)
92     {
93         log("Delete database unexpected error");
94         done();
95     }
96     request.onupgradeneeded = function(e)
97     {
98         log("Delete database unexpected upgradeneeded");
99         done();
100     }
101 }
102
103 function continueTest2()
104 {
105     log("Recreating database to make sure it's new and empty");
106     var request = window.indexedDB.open("DeleteDatabase2TestDatabase");
107
108     request.onupgradeneeded = function(e)
109     {
110         log("Second upgrade old version - " + e.oldVersion + " new version - " + e.newVersion);
111         var versionTransaction = request.transaction;
112         
113         try {
114             var objectStore = versionTransaction.objectStore("TestObjectStore");
115         } catch(e) {
116             log("Unable to get object store in second upgrade transaction (which is correct because it should not be there)");
117         }
118
119         versionTransaction.oncomplete = function(e)
120         {
121             log("Second database upgrade success");
122             done();
123         }
124         
125         versionTransaction.onabort = function(e)
126         {
127             log("Second database upgrade unexpected abort");
128             done();
129         }
130             
131         versionTransaction.onerror = function(e)
132         {
133             log("Second database upgrade unexpected error");
134             done();
135         }
136     }
137
138     request.onsuccess = function(e)
139     {
140         log("Second database opening unexpected success");
141         done();
142     }
143     
144     request.onerror = function(e)
145     {
146         log("Second database opening unexpected error");
147         done();
148     }
149 }
150 </script>