Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / storage / indexeddb / resources / intversion-upgrades.js
1 if (this.importScripts) {
2     importScripts('../../../resources/js-test.js');
3     importScripts('shared.js');
4 }
5
6 description("Upgrade a database, open a second connection at the same version, ensure specifying a lower version causes an error");
7
8 function test()
9 {
10     removeVendorPrefixes();
11     setDBNameFromPath();
12
13     request = evalAndLog("indexedDB.deleteDatabase(dbname)");
14     shouldBeEqualToString("String(request)", "[object IDBOpenDBRequest]");
15     request.onsuccess = deleteSuccess;
16     request.onerror = unexpectedErrorCallback;
17 }
18
19 function deleteSuccess(evt) {
20     debug("");
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;
27 }
28
29 function initialUpgradeNeeded(evt)
30 {
31     preamble(evt);
32 }
33
34 function openSuccess(evt)
35 {
36     preamble(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;
45 }
46
47 function connection1VersionChangeCallback(evt)
48 {
49     preamble(evt);
50     evalAndLog("connection1.close()");
51 }
52
53 function connection2UpgradeNeeded(evt)
54 {
55     preamble(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;
63 }
64
65 var didTransactionComplete = false;
66 function transactionCompleted(evt)
67 {
68     preamble(evt);
69     evalAndLog("didTransactionComplete = true");
70 }
71
72 function connection2Success(evt)
73 {
74     preamble(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;
86 }
87
88 function connection3Success(evt)
89 {
90     preamble(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;
100 }
101
102 function errorWhenTryingLowVersion(evt)
103 {
104     preamble(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");
111 }
112
113 var gotConnection4UpgradeNeeded = false;
114 function connection4UpgradeNeeded(evt)
115 {
116     preamble(evt);
117     evalAndLog("gotConnection4UpgradeNeeded = true");
118     shouldBe("event.oldVersion", "2");
119     shouldBe("event.newVersion", "4");
120 }
121
122 function connection4Success(evt)
123 {
124     preamble(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;
134 }
135
136 function connection5Success(evt)
137 {
138     preamble(evt);
139     evalAndLog("db = event.target.result");
140     shouldBe("db.version", "4");
141     finishJSTest();
142 }
143
144 test();