Modern IDB: storage/indexeddb/delete-in-upgradeneeded-close-in-versionchange.html...
[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("Open request error: " + request.error.name);
33 }
34
35 request.onupgradeneeded = function(e)
36 {
37     log("Initial upgrade old version - " + e.oldVersion + " new version - " + e.newVersion);
38     
39     var versionTransaction = request.transaction;
40     var database = event.target.result;
41     var objectStore = database.createObjectStore("TestObjectStore");
42     objectStore.put("This is a record", 1);
43     
44     // Spin the transaction until told to stop spinning it.
45     var keepGoing = function() {
46         if (!stopSpinning)
47             objectStore.get(1).onsuccess = keepGoing;
48     }
49     objectStore.get(1).onsuccess = keepGoing;
50
51     database.onversionchange = function(e)
52     {
53         log("First connection received versionchange event: oldVersion " + e.oldVersion + ", newVersion " + e.newVersion);
54         
55         var shutErDown = function() {
56             database.close();
57             stopSpinning = true;
58         }
59         window.setTimeout(shutErDown, 0);
60     }
61         
62     request.transaction.oncomplete = function()
63     {
64         log("First version change complete");
65     }
66     
67     request.transaction.onabort = function()
68     {
69         log("Version change unexpected abort");
70         done();
71     }
72     request.transaction.onerror = function()
73     {
74         log("Version change unexpected error");
75         done();
76     }
77     
78     window.setTimeout(continueTest1, 0);
79 }
80
81 function continueTest1()
82 {
83     log("Requesting deleteDatabase");
84     var request = window.indexedDB.deleteDatabase("DeleteDatabase2TestDatabase");
85     request.onsuccess = function(e)
86     {
87         log("Delete database success: oldVersion " + e.oldVersion + ", newVersion " + e.newVersion);
88         continueTest2();
89     }
90     request.onerror = function(e)
91     {
92         log("Delete database unexpected error");
93         done();
94     }
95     request.onupgradeneeded = function(e)
96     {
97         log("Delete database unexpected upgradeneeded");
98         done();
99     }
100 }
101
102 function continueTest2()
103 {
104     log("Recreating database to make sure it's new and empty");
105     var request = window.indexedDB.open("DeleteDatabase2TestDatabase");
106
107     request.onupgradeneeded = function(e)
108     {
109         log("Second upgrade old version - " + e.oldVersion + " new version - " + e.newVersion);
110         var versionTransaction = request.transaction;
111         
112         try {
113             var objectStore = versionTransaction.objectStore("TestObjectStore");
114         } catch(e) {
115             log("Unable to get object store in second upgrade transaction (which is correct because it should not be there)");
116         }
117
118         versionTransaction.oncomplete = function(e)
119         {
120             log("Second database upgrade success");
121             done();
122         }
123         
124         versionTransaction.onabort = function(e)
125         {
126             log("Second database upgrade unexpected abort");
127             done();
128         }
129             
130         versionTransaction.onerror = function(e)
131         {
132             log("Second database upgrade unexpected error");
133             done();
134         }
135     }
136
137     request.onsuccess = function(e)
138     {
139         log("Second database opening unexpected success");
140         done();
141     }
142     
143     request.onerror = function(e)
144     {
145         log("Second database opening unexpected error");
146         done();
147     }
148 }
149 </script>