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