Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / third_party / WebKit / LayoutTests / storage / indexeddb / resources / shared.js
1 var jsTestIsAsync = true;
2 if (self.importScripts && !self.postMessage) {
3     // Shared worker.  Make postMessage send to the newest client, which in
4     // our tests is the only client.
5
6     // Store messages for sending until we have somewhere to send them.
7     self.postMessage = function(message)
8     {
9         if (typeof self.pendingMessages === "undefined")
10             self.pendingMessages = [];
11         self.pendingMessages.push(message);
12     };
13     self.onconnect = function(event)
14     {
15         self.postMessage = function(message)
16         {
17             event.ports[0].postMessage(message);
18         };
19         // Offload any stored messages now that someone has connected to us.
20         if (typeof self.pendingMessages === "undefined")
21             return;
22         while (self.pendingMessages.length)
23             event.ports[0].postMessage(self.pendingMessages.shift());
24     };
25 }
26
27 function removeVendorPrefixes()
28 {
29     indexedDB = evalAndLog("indexedDB = self.indexedDB || self.webkitIndexedDB || self.mozIndexedDB || self.msIndexedDB || self.OIndexedDB;");
30     debug("");
31 }
32
33 function unexpectedSuccessCallback()
34 {
35     testFailed("Success function called unexpectedly.");
36     finishJSTest();
37 }
38
39 function unexpectedErrorCallback(event)
40 {
41     testFailed("Error function called unexpectedly: (" + event.target.error.name + ") " + event.target.error.message);
42     finishJSTest();
43 }
44
45 function unexpectedAbortCallback(e)
46 {
47     testFailed("Abort function called unexpectedly! Message: [" + e.target.error.message + "]");
48     finishJSTest();
49 }
50
51 function unexpectedCompleteCallback()
52 {
53     testFailed("oncomplete function called unexpectedly!");
54     finishJSTest();
55 }
56
57 function unexpectedBlockedCallback(e)
58 {
59     testFailed("onblocked called unexpectedly. oldVersion = " + e.oldVersion + ", newVersion = " + e.newVersion);
60     finishJSTest();
61 }
62
63 function unexpectedUpgradeNeededCallback()
64 {
65     testFailed("onupgradeneeded called unexpectedly");
66     finishJSTest();
67 }
68
69 function unexpectedVersionChangeCallback(e)
70 {
71     testFailed("onversionchange called unexpectedly. oldVersion = " + e.oldVersion + ". newVersion = " + e.newVersion);
72     finishJSTest();
73 }
74
75 function evalAndExpectException(cmd, exceptionCode, exceptionName, _quiet)
76 {
77     if (!_quiet)
78         debug("Expecting exception from " + cmd);
79     try {
80         eval(cmd);
81         testFailed("No exception thrown! Should have been " + exceptionCode);
82     } catch (e) {
83         code = e.code;
84         if (!_quiet)
85             testPassed("Exception was thrown.");
86         shouldBe("code", exceptionCode, _quiet);
87         if (exceptionName) {
88             ename = e.name;
89             shouldBe("ename", exceptionName, _quiet);
90         }
91         if (!_quiet)
92             debug("Exception message: " + e.message);
93     }
94 }
95
96 function evalAndExpectExceptionClass(cmd, expected)
97 {
98     debug("Expecting " + expected + " exception from " + cmd);
99     try {
100         eval(cmd);
101         testFailed("No exception thrown!" );
102     } catch (e) {
103         testPassed("Exception was thrown.");
104         if (eval("e instanceof " + expected))
105             testPassed(cmd + " threw " + e);
106         else
107             testFailed("Expected " + expected + " but saw " + e);
108     }
109 }
110
111 function evalAndLogCallback(cmd) {
112   function callback() {
113     evalAndLog(cmd);
114   }
115   return callback;
116 }
117
118 // If this function is deleted, a standalone layout test exercising its
119 // functionality should be added.
120 function deleteAllObjectStores(db)
121 {
122     while (db.objectStoreNames.length)
123         db.deleteObjectStore(db.objectStoreNames.item(0));
124     debug("Deleted all object stores.");
125 }
126
127 function setDBNameFromPath(suffix) {
128     var name = self.location.pathname.substring(1 + self.location.pathname.lastIndexOf("/"));
129     if (suffix)
130         name += suffix;
131     evalAndLog('dbname = "' + name + '"');
132 }
133
134 function preamble(evt)
135 {
136     if (evt)
137         event = evt;
138     debug("");
139     debug(preamble.caller.name + "():");
140 }
141
142 // For Workers
143 if (!self.DOMException) {
144     self.DOMException = {
145         INDEX_SIZE_ERR: 1,
146         DOMSTRING_SIZE_ERR: 2,
147         HIERARCHY_REQUEST_ERR: 3,
148         WRONG_DOCUMENT_ERR: 4,
149         INVALID_CHARACTER_ERR: 5,
150         NO_DATA_ALLOWED_ERR: 6,
151         NO_MODIFICATION_ALLOWED_ERR: 7,
152         NOT_FOUND_ERR: 8,
153         NOT_SUPPORTED_ERR: 9,
154         INUSE_ATTRIBUTE_ERR: 10,
155         INVALID_STATE_ERR: 11,
156         SYNTAX_ERR: 12,
157         INVALID_MODIFICATION_ERR: 13,
158         NAMESPACE_ERR: 14,
159         INVALID_ACCESS_ERR: 15,
160         VALIDATION_ERR: 16,
161         TYPE_MISMATCH_ERR: 17,
162         SECURITY_ERR: 18,
163         NETWORK_ERR: 19,
164         ABORT_ERR: 20,
165         URL_MISMATCH_ERR: 21,
166         QUOTA_EXCEEDED_ERR: 22,
167         TIMEOUT_ERR: 23,
168         INVALID_NODE_TYPE_ERR: 24,
169         DATA_CLONE_ERR: 25
170     };
171 }
172
173 function indexedDBTest(upgradeCallback, optionalOpenCallback, optionalParameters) {
174     removeVendorPrefixes();
175     if (optionalParameters && 'suffix' in optionalParameters) {
176         setDBNameFromPath(optionalParameters['suffix']);
177     } else {
178         setDBNameFromPath();
179     }
180     var deleteRequest = evalAndLog("indexedDB.deleteDatabase(dbname)");
181     deleteRequest.onerror = unexpectedErrorCallback;
182     deleteRequest.onblocked = unexpectedBlockedCallback;
183     deleteRequest.onsuccess = function() {
184         self.openRequest = null;
185         if (optionalParameters && 'version' in optionalParameters)
186             openRequest = evalAndLog("indexedDB.open(dbname, " + optionalParameters['version'] + ")");
187         else
188             openRequest = evalAndLog("indexedDB.open(dbname)");
189         shouldBe("openRequest.readyState", "'pending'", true/*quiet*/);
190         openRequest.onerror = unexpectedErrorCallback;
191         openRequest.onupgradeneeded = upgradeCallback;
192         openRequest.onblocked = unexpectedBlockedCallback;
193         if (optionalOpenCallback)
194             openRequest.onsuccess = optionalOpenCallback;
195         delete self.openRequest;
196         if (optionalParameters && 'runAfterOpen' in optionalParameters)
197             (optionalParameters['runAfterOpen'])();
198     };
199 }
200
201 function waitForRequests(requests, callback) {
202     var count = requests.length;
203
204     if (!count) {
205         callback(requests);
206         return;
207     }
208
209     requests.forEach(function(req) {
210         req.onsuccess = function() {
211             --count;
212             if (!count)
213                 callback(requests);
214         };
215         req.onerror = unexpectedErrorCallback;
216     });
217 }