1 if (this.importScripts) {
2 importScripts('../../../resources/js-test.js');
3 importScripts('shared.js');
6 description("Upgrade a database, open a second connection at the same version, ensure specifying a lower version causes an error");
10 removeVendorPrefixes();
13 request = evalAndLog("indexedDB.deleteDatabase(dbname)");
14 shouldBeEqualToString("String(request)", "[object IDBOpenDBRequest]");
15 request.onsuccess = deleteSuccess;
16 request.onerror = unexpectedErrorCallback;
19 function deleteSuccess(evt) {
21 debug("Call open with no version parameter:");
22 request = evalAndLog("indexedDB.open(dbname)");
23 request.onsuccess = openSuccess;
24 request.onerror = unexpectedErrorCallback;
25 request.onupgradeneeded = initialUpgradeNeeded;
26 request.onblocked = unexpectedBlockedCallback;
29 function initialUpgradeNeeded(evt)
34 function openSuccess(evt)
37 evalAndLog("connection1 = event.target.result");
38 shouldBe("connection1.version", "1");
39 evalAndLog("connection1.onversionchange = connection1VersionChangeCallback");
40 evalAndLog("request = indexedDB.open(dbname, 2)");
41 request.onupgradeneeded = connection2UpgradeNeeded;
42 request.onerror = unexpectedErrorCallback;
43 request.onblocked = unexpectedBlockedCallback;
44 request.onsuccess = connection2Success;
47 function connection1VersionChangeCallback(evt)
50 evalAndLog("connection1.close()");
53 function connection2UpgradeNeeded(evt)
56 evalAndLog("connection2 = event.target.result");
57 shouldBeEqualToString("String(connection2)", "[object IDBDatabase]");
58 shouldBeEqualToString("String(request.transaction)", "[object IDBTransaction]");
59 shouldBe("event.oldVersion", "1");
60 shouldBe("event.newVersion", "2");
61 evalAndLog("request.transaction.oncomplete = transactionCompleted");
62 request.transaction.onabort = unexpectedAbortCallback;
65 var didTransactionComplete = false;
66 function transactionCompleted(evt)
69 evalAndLog("didTransactionComplete = true");
72 function connection2Success(evt)
75 shouldBeTrue("didTransactionComplete");
76 shouldBe("event.target.result", "connection2");
77 debug("The next connection opens the database at the same version so connection2 shouldn't get a versionchange event.");
78 evalAndLog("connection2.onversionchange = unexpectedVersionChangeCallback");
79 shouldBeEqualToString("String(connection2)", "[object IDBDatabase]");
80 shouldBeNull("request.transaction");
81 shouldBe("connection2.version", "2");
82 evalAndLog("request = indexedDB.open(dbname, 2)");
83 evalAndLog("request.onsuccess = connection3Success");
84 evalAndLog("request.onblocked = unexpectedBlockedCallback");
85 request.onerror = unexpectedErrorCallback;
88 function connection3Success(evt)
91 evalAndLog("event.target.result.close()");
92 evalAndLog("connection2.close()");
93 evalAndLog("connection3 = event.target.result");
94 shouldBe("connection3.version", "2");
95 evalAndLog("request = indexedDB.open(dbname, 1)");
96 evalAndLog("request.onerror = errorWhenTryingLowVersion");
97 request.onblocked = unexpectedBlockedCallback;
98 request.onsuccess = unexpectedSuccessCallback;
99 request.onupgradeneeded = unexpectedUpgradeNeededCallback;
102 function errorWhenTryingLowVersion(evt)
105 debug("request.error.message = " + request.error.message);
106 evalAndLog("request = indexedDB.open(dbname, 4)");
107 request.onblocked = unexpectedBlockedCallback;
108 request.onerror = unexpectedErrorCallback;
109 evalAndLog("request.onupgradeneeded = connection4UpgradeNeeded");
110 evalAndLog("request.onsuccess = connection4Success");
113 var gotConnection4UpgradeNeeded = false;
114 function connection4UpgradeNeeded(evt)
117 evalAndLog("gotConnection4UpgradeNeeded = true");
118 shouldBe("event.oldVersion", "2");
119 shouldBe("event.newVersion", "4");
122 function connection4Success(evt)
125 shouldBeTrue("gotConnection4UpgradeNeeded");
126 evalAndLog("connection4 = event.target.result");
127 shouldBe("connection4.version", "4");
128 evalAndLog("connection4.close()");
129 evalAndLog("request = indexedDB.open(dbname)");
130 evalAndLog("request.onsuccess = connection5Success");
131 request.onblocked = unexpectedBlockedCallback;
132 request.onupgradeneeded = unexpectedUpgradeNeededCallback;
133 request.onerror = unexpectedUpgradeNeededCallback;
136 function connection5Success(evt)
139 evalAndLog("db = event.target.result");
140 shouldBe("db.version", "4");