Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(37)

Side by Side Diff: third_party/WebKit/Source/devtools/front_end/resources/IndexedDBModel.js

Issue 2466123002: DevTools: reformat front-end code to match chromium style. (Closed)
Patch Set: all done Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
11 * copyright notice, this list of conditions and the following disclaimer 11 * copyright notice, this list of conditions and the following disclaimer
12 * in the documentation and/or other materials provided with the 12 * in the documentation and/or other materials provided with the
13 * distribution. 13 * distribution.
14 * * Neither the name of Google Inc. nor the names of its 14 * * Neither the name of Google Inc. nor the names of its
15 * contributors may be used to endorse or promote products derived from 15 * contributors may be used to endorse or promote products derived from
16 * this software without specific prior written permission. 16 * this software without specific prior written permission.
17 * 17 *
18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 18 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 19 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 20 * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 21 * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 22 * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 23 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 24 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 25 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 26 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29 */ 29 */
30
31 /** 30 /**
32 * @constructor 31 * @unrestricted
33 * @extends {WebInspector.SDKModel}
34 * @param {!WebInspector.Target} target
35 * @param {!WebInspector.SecurityOriginManager} securityOriginManager
36 */ 32 */
37 WebInspector.IndexedDBModel = function(target, securityOriginManager) 33 WebInspector.IndexedDBModel = class extends WebInspector.SDKModel {
38 { 34 /**
39 WebInspector.SDKModel.call(this, WebInspector.IndexedDBModel, target); 35 * @param {!WebInspector.Target} target
36 * @param {!WebInspector.SecurityOriginManager} securityOriginManager
37 */
38 constructor(target, securityOriginManager) {
39 super(WebInspector.IndexedDBModel, target);
40 this._securityOriginManager = securityOriginManager; 40 this._securityOriginManager = securityOriginManager;
41 this._agent = target.indexedDBAgent(); 41 this._agent = target.indexedDBAgent();
42 42
43 /** @type {!Map.<!WebInspector.IndexedDBModel.DatabaseId, !WebInspector.Inde xedDBModel.Database>} */ 43 /** @type {!Map.<!WebInspector.IndexedDBModel.DatabaseId, !WebInspector.Inde xedDBModel.Database>} */
44 this._databases = new Map(); 44 this._databases = new Map();
45 /** @type {!Object.<string, !Array.<string>>} */ 45 /** @type {!Object.<string, !Array.<string>>} */
46 this._databaseNamesBySecurityOrigin = {}; 46 this._databaseNamesBySecurityOrigin = {};
47 }; 47 }
48 48
49 WebInspector.IndexedDBModel.KeyTypes = { 49 /**
50 NumberType: "number", 50 * @param {*} idbKey
51 StringType: "string", 51 * @return {({
52 DateType: "date", 52 * array: (!Array<?>|undefined),
53 ArrayType: "array" 53 * date: (number|undefined),
54 }; 54 * number: (number|undefined),
55 55 * string: (string|undefined),
56 WebInspector.IndexedDBModel.KeyPathTypes = { 56 * type: !IndexedDBAgent.KeyType<string>
57 NullType: "null", 57 * }|undefined)}
58 StringType: "string", 58 */
59 ArrayType: "array" 59 static keyFromIDBKey(idbKey) {
60 }; 60 if (typeof(idbKey) === 'undefined' || idbKey === null)
61 61 return undefined;
62 /**
63 * @param {*} idbKey
64 * @return {({
65 * array: (!Array<?>|undefined),
66 * date: (number|undefined),
67 * number: (number|undefined),
68 * string: (string|undefined),
69 * type: !IndexedDBAgent.KeyType<string>
70 * }|undefined)}
71 */
72 WebInspector.IndexedDBModel.keyFromIDBKey = function(idbKey)
73 {
74 if (typeof(idbKey) === "undefined" || idbKey === null)
75 return undefined;
76 62
77 var type; 63 var type;
78 var key = {}; 64 var key = {};
79 switch (typeof(idbKey)) { 65 switch (typeof(idbKey)) {
80 case "number": 66 case 'number':
81 key.number = idbKey; 67 key.number = idbKey;
82 type = WebInspector.IndexedDBModel.KeyTypes.NumberType; 68 type = WebInspector.IndexedDBModel.KeyTypes.NumberType;
83 break; 69 break;
84 case "string": 70 case 'string':
85 key.string = idbKey; 71 key.string = idbKey;
86 type = WebInspector.IndexedDBModel.KeyTypes.StringType; 72 type = WebInspector.IndexedDBModel.KeyTypes.StringType;
87 break; 73 break;
88 case "object": 74 case 'object':
89 if (idbKey instanceof Date) { 75 if (idbKey instanceof Date) {
90 key.date = idbKey.getTime(); 76 key.date = idbKey.getTime();
91 type = WebInspector.IndexedDBModel.KeyTypes.DateType; 77 type = WebInspector.IndexedDBModel.KeyTypes.DateType;
92 } else if (Array.isArray(idbKey)) { 78 } else if (Array.isArray(idbKey)) {
93 key.array = []; 79 key.array = [];
94 for (var i = 0; i < idbKey.length; ++i) 80 for (var i = 0; i < idbKey.length; ++i)
95 key.array.push(WebInspector.IndexedDBModel.keyFromIDBKey(idbKey[ i])); 81 key.array.push(WebInspector.IndexedDBModel.keyFromIDBKey(idbKey[i])) ;
96 type = WebInspector.IndexedDBModel.KeyTypes.ArrayType; 82 type = WebInspector.IndexedDBModel.KeyTypes.ArrayType;
97 } 83 }
98 break; 84 break;
99 default: 85 default:
100 return undefined; 86 return undefined;
101 } 87 }
102 key.type = /** @type {!IndexedDBAgent.KeyType<string>} */ (type); 88 key.type = /** @type {!IndexedDBAgent.KeyType<string>} */ (type);
103 return key; 89 return key;
104 }; 90 }
105 91
106 /** 92 /**
107 * @param {?IDBKeyRange=} idbKeyRange 93 * @param {?IDBKeyRange=} idbKeyRange
108 * @return {?IndexedDBAgent.KeyRange} 94 * @return {?IndexedDBAgent.KeyRange}
109 * eturn {?{lower: ?Object, upper: ?Object, lowerOpen: *, upperOpen: *}} 95 * eturn {?{lower: ?Object, upper: ?Object, lowerOpen: *, upperOpen: *}}
110 */ 96 */
111 WebInspector.IndexedDBModel.keyRangeFromIDBKeyRange = function(idbKeyRange) 97 static keyRangeFromIDBKeyRange(idbKeyRange) {
112 { 98 if (typeof idbKeyRange === 'undefined' || idbKeyRange === null)
113 if (typeof idbKeyRange === "undefined" || idbKeyRange === null) 99 return null;
114 return null;
115 100
116 var keyRange = {}; 101 var keyRange = {};
117 keyRange.lower = WebInspector.IndexedDBModel.keyFromIDBKey(idbKeyRange.lower ); 102 keyRange.lower = WebInspector.IndexedDBModel.keyFromIDBKey(idbKeyRange.lower );
118 keyRange.upper = WebInspector.IndexedDBModel.keyFromIDBKey(idbKeyRange.upper ); 103 keyRange.upper = WebInspector.IndexedDBModel.keyFromIDBKey(idbKeyRange.upper );
119 keyRange.lowerOpen = !!idbKeyRange.lowerOpen; 104 keyRange.lowerOpen = !!idbKeyRange.lowerOpen;
120 keyRange.upperOpen = !!idbKeyRange.upperOpen; 105 keyRange.upperOpen = !!idbKeyRange.upperOpen;
121 return keyRange; 106 return keyRange;
122 }; 107 }
123 108
124 /** 109 /**
125 * @param {!IndexedDBAgent.KeyPath} keyPath 110 * @param {!IndexedDBAgent.KeyPath} keyPath
126 * @return {?string|!Array.<string>|undefined} 111 * @return {?string|!Array.<string>|undefined}
127 */ 112 */
128 WebInspector.IndexedDBModel.idbKeyPathFromKeyPath = function(keyPath) 113 static idbKeyPathFromKeyPath(keyPath) {
129 {
130 var idbKeyPath; 114 var idbKeyPath;
131 switch (keyPath.type) { 115 switch (keyPath.type) {
132 case WebInspector.IndexedDBModel.KeyPathTypes.NullType: 116 case WebInspector.IndexedDBModel.KeyPathTypes.NullType:
133 idbKeyPath = null; 117 idbKeyPath = null;
134 break; 118 break;
135 case WebInspector.IndexedDBModel.KeyPathTypes.StringType: 119 case WebInspector.IndexedDBModel.KeyPathTypes.StringType:
136 idbKeyPath = keyPath.string; 120 idbKeyPath = keyPath.string;
137 break; 121 break;
138 case WebInspector.IndexedDBModel.KeyPathTypes.ArrayType: 122 case WebInspector.IndexedDBModel.KeyPathTypes.ArrayType:
139 idbKeyPath = keyPath.array; 123 idbKeyPath = keyPath.array;
140 break; 124 break;
141 } 125 }
142 return idbKeyPath; 126 return idbKeyPath;
143 }; 127 }
144 128
145 /** 129 /**
146 * @param {?string|!Array.<string>|undefined} idbKeyPath 130 * @param {?string|!Array.<string>|undefined} idbKeyPath
147 * @return {?string} 131 * @return {?string}
148 */ 132 */
149 WebInspector.IndexedDBModel.keyPathStringFromIDBKeyPath = function(idbKeyPath) 133 static keyPathStringFromIDBKeyPath(idbKeyPath) {
150 { 134 if (typeof idbKeyPath === 'string')
151 if (typeof idbKeyPath === "string") 135 return '"' + idbKeyPath + '"';
152 return "\"" + idbKeyPath + "\"";
153 if (idbKeyPath instanceof Array) 136 if (idbKeyPath instanceof Array)
154 return "[\"" + idbKeyPath.join("\", \"") + "\"]"; 137 return '["' + idbKeyPath.join('", "') + '"]';
155 return null; 138 return null;
156 }; 139 }
140
141 /**
142 * @param {!WebInspector.Target} target
143 * @return {!WebInspector.IndexedDBModel}
144 */
145 static fromTarget(target) {
146 var model = /** @type {?WebInspector.IndexedDBModel} */ (target.model(WebIns pector.IndexedDBModel));
147 if (!model)
148 model = new WebInspector.IndexedDBModel(target, WebInspector.SecurityOrigi nManager.fromTarget(target));
149 return model;
150 }
151
152 enable() {
153 if (this._enabled)
154 return;
155
156 this._agent.enable();
157 this._securityOriginManager.addEventListener(
158 WebInspector.SecurityOriginManager.Events.SecurityOriginAdded, this._sec urityOriginAdded, this);
159 this._securityOriginManager.addEventListener(
160 WebInspector.SecurityOriginManager.Events.SecurityOriginRemoved, this._s ecurityOriginRemoved, this);
161
162 for (var securityOrigin of this._securityOriginManager.securityOrigins())
163 this._addOrigin(securityOrigin);
164
165 this._enabled = true;
166 }
167
168 /**
169 * @param {string} origin
170 */
171 clearForOrigin(origin) {
172 if (!this._enabled)
173 return;
174
175 this._removeOrigin(origin);
176 this._addOrigin(origin);
177 }
178
179 refreshDatabaseNames() {
180 for (var securityOrigin in this._databaseNamesBySecurityOrigin)
181 this._loadDatabaseNames(securityOrigin);
182 }
183
184 /**
185 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
186 */
187 refreshDatabase(databaseId) {
188 this._loadDatabase(databaseId);
189 }
190
191 /**
192 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
193 * @param {string} objectStoreName
194 * @param {function()} callback
195 */
196 clearObjectStore(databaseId, objectStoreName, callback) {
197 this._agent.clearObjectStore(databaseId.securityOrigin, databaseId.name, obj ectStoreName, callback);
198 }
199
200 /**
201 * @param {!WebInspector.Event} event
202 */
203 _securityOriginAdded(event) {
204 var securityOrigin = /** @type {string} */ (event.data);
205 this._addOrigin(securityOrigin);
206 }
207
208 /**
209 * @param {!WebInspector.Event} event
210 */
211 _securityOriginRemoved(event) {
212 var securityOrigin = /** @type {string} */ (event.data);
213 this._removeOrigin(securityOrigin);
214 }
215
216 /**
217 * @param {string} securityOrigin
218 */
219 _addOrigin(securityOrigin) {
220 console.assert(!this._databaseNamesBySecurityOrigin[securityOrigin]);
221 this._databaseNamesBySecurityOrigin[securityOrigin] = [];
222 this._loadDatabaseNames(securityOrigin);
223 }
224
225 /**
226 * @param {string} securityOrigin
227 */
228 _removeOrigin(securityOrigin) {
229 console.assert(this._databaseNamesBySecurityOrigin[securityOrigin]);
230 for (var i = 0; i < this._databaseNamesBySecurityOrigin[securityOrigin].leng th; ++i)
231 this._databaseRemoved(securityOrigin, this._databaseNamesBySecurityOrigin[ securityOrigin][i]);
232 delete this._databaseNamesBySecurityOrigin[securityOrigin];
233 }
234
235 /**
236 * @param {string} securityOrigin
237 * @param {!Array.<string>} databaseNames
238 */
239 _updateOriginDatabaseNames(securityOrigin, databaseNames) {
240 var newDatabaseNames = new Set(databaseNames);
241 var oldDatabaseNames = new Set(this._databaseNamesBySecurityOrigin[securityO rigin]);
242
243 this._databaseNamesBySecurityOrigin[securityOrigin] = databaseNames;
244
245 for (var databaseName of oldDatabaseNames) {
246 if (!newDatabaseNames.has(databaseName))
247 this._databaseRemoved(securityOrigin, databaseName);
248 }
249 for (var databaseName of newDatabaseNames) {
250 if (!oldDatabaseNames.has(databaseName))
251 this._databaseAdded(securityOrigin, databaseName);
252 }
253 }
254
255 /**
256 * @return {!Array.<!WebInspector.IndexedDBModel.DatabaseId>}
257 */
258 databases() {
259 var result = [];
260 for (var securityOrigin in this._databaseNamesBySecurityOrigin) {
261 var databaseNames = this._databaseNamesBySecurityOrigin[securityOrigin];
262 for (var i = 0; i < databaseNames.length; ++i) {
263 result.push(new WebInspector.IndexedDBModel.DatabaseId(securityOrigin, d atabaseNames[i]));
264 }
265 }
266 return result;
267 }
268
269 /**
270 * @param {string} securityOrigin
271 * @param {string} databaseName
272 */
273 _databaseAdded(securityOrigin, databaseName) {
274 var databaseId = new WebInspector.IndexedDBModel.DatabaseId(securityOrigin, databaseName);
275 this.dispatchEventToListeners(WebInspector.IndexedDBModel.Events.DatabaseAdd ed, databaseId);
276 }
277
278 /**
279 * @param {string} securityOrigin
280 * @param {string} databaseName
281 */
282 _databaseRemoved(securityOrigin, databaseName) {
283 var databaseId = new WebInspector.IndexedDBModel.DatabaseId(securityOrigin, databaseName);
284 this.dispatchEventToListeners(WebInspector.IndexedDBModel.Events.DatabaseRem oved, databaseId);
285 }
286
287 /**
288 * @param {string} securityOrigin
289 */
290 _loadDatabaseNames(securityOrigin) {
291 /**
292 * @param {?Protocol.Error} error
293 * @param {!Array.<string>} databaseNames
294 * @this {WebInspector.IndexedDBModel}
295 */
296 function callback(error, databaseNames) {
297 if (error) {
298 console.error('IndexedDBAgent error: ' + error);
299 return;
300 }
301
302 if (!this._databaseNamesBySecurityOrigin[securityOrigin])
303 return;
304 this._updateOriginDatabaseNames(securityOrigin, databaseNames);
305 }
306
307 this._agent.requestDatabaseNames(securityOrigin, callback.bind(this));
308 }
309
310 /**
311 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
312 */
313 _loadDatabase(databaseId) {
314 /**
315 * @param {?Protocol.Error} error
316 * @param {!IndexedDBAgent.DatabaseWithObjectStores} databaseWithObjectStore s
317 * @this {WebInspector.IndexedDBModel}
318 */
319 function callback(error, databaseWithObjectStores) {
320 if (error) {
321 console.error('IndexedDBAgent error: ' + error);
322 return;
323 }
324
325 if (!this._databaseNamesBySecurityOrigin[databaseId.securityOrigin])
326 return;
327 var databaseModel = new WebInspector.IndexedDBModel.Database(databaseId, d atabaseWithObjectStores.version);
328 this._databases.set(databaseId, databaseModel);
329 for (var i = 0; i < databaseWithObjectStores.objectStores.length; ++i) {
330 var objectStore = databaseWithObjectStores.objectStores[i];
331 var objectStoreIDBKeyPath = WebInspector.IndexedDBModel.idbKeyPathFromKe yPath(objectStore.keyPath);
332 var objectStoreModel = new WebInspector.IndexedDBModel.ObjectStore(
333 objectStore.name, objectStoreIDBKeyPath, objectStore.autoIncrement);
334 for (var j = 0; j < objectStore.indexes.length; ++j) {
335 var index = objectStore.indexes[j];
336 var indexIDBKeyPath = WebInspector.IndexedDBModel.idbKeyPathFromKeyPat h(index.keyPath);
337 var indexModel =
338 new WebInspector.IndexedDBModel.Index(index.name, indexIDBKeyPath, index.unique, index.multiEntry);
339 objectStoreModel.indexes[indexModel.name] = indexModel;
340 }
341 databaseModel.objectStores[objectStoreModel.name] = objectStoreModel;
342 }
343
344 this.dispatchEventToListeners(WebInspector.IndexedDBModel.Events.DatabaseL oaded, databaseModel);
345 }
346
347 this._agent.requestDatabase(databaseId.securityOrigin, databaseId.name, call back.bind(this));
348 }
349
350 /**
351 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
352 * @param {string} objectStoreName
353 * @param {?IDBKeyRange} idbKeyRange
354 * @param {number} skipCount
355 * @param {number} pageSize
356 * @param {function(!Array.<!WebInspector.IndexedDBModel.Entry>, boolean)} cal lback
357 */
358 loadObjectStoreData(databaseId, objectStoreName, idbKeyRange, skipCount, pageS ize, callback) {
359 this._requestData(databaseId, databaseId.name, objectStoreName, '', idbKeyRa nge, skipCount, pageSize, callback);
360 }
361
362 /**
363 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
364 * @param {string} objectStoreName
365 * @param {string} indexName
366 * @param {?IDBKeyRange} idbKeyRange
367 * @param {number} skipCount
368 * @param {number} pageSize
369 * @param {function(!Array.<!WebInspector.IndexedDBModel.Entry>, boolean)} cal lback
370 */
371 loadIndexData(databaseId, objectStoreName, indexName, idbKeyRange, skipCount, pageSize, callback) {
372 this._requestData(
373 databaseId, databaseId.name, objectStoreName, indexName, idbKeyRange, sk ipCount, pageSize, callback);
374 }
375
376 /**
377 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
378 * @param {string} databaseName
379 * @param {string} objectStoreName
380 * @param {string} indexName
381 * @param {?IDBKeyRange} idbKeyRange
382 * @param {number} skipCount
383 * @param {number} pageSize
384 * @param {function(!Array.<!WebInspector.IndexedDBModel.Entry>, boolean)} cal lback
385 */
386 _requestData(databaseId, databaseName, objectStoreName, indexName, idbKeyRange , skipCount, pageSize, callback) {
387 /**
388 * @param {?Protocol.Error} error
389 * @param {!Array.<!IndexedDBAgent.DataEntry>} dataEntries
390 * @param {boolean} hasMore
391 * @this {WebInspector.IndexedDBModel}
392 */
393 function innerCallback(error, dataEntries, hasMore) {
394 if (error) {
395 console.error('IndexedDBAgent error: ' + error);
396 return;
397 }
398
399 if (!this._databaseNamesBySecurityOrigin[databaseId.securityOrigin])
400 return;
401 var entries = [];
402 for (var i = 0; i < dataEntries.length; ++i) {
403 var key = this.target().runtimeModel.createRemoteObject(dataEntries[i].k ey);
404 var primaryKey = this.target().runtimeModel.createRemoteObject(dataEntri es[i].primaryKey);
405 var value = this.target().runtimeModel.createRemoteObject(dataEntries[i] .value);
406 entries.push(new WebInspector.IndexedDBModel.Entry(key, primaryKey, valu e));
407 }
408 callback(entries, hasMore);
409 }
410
411 var keyRange = WebInspector.IndexedDBModel.keyRangeFromIDBKeyRange(idbKeyRan ge);
412 this._agent.requestData(
413 databaseId.securityOrigin, databaseName, objectStoreName, indexName, ski pCount, pageSize,
414 keyRange ? keyRange : undefined, innerCallback.bind(this));
415 }
416 };
417
418 WebInspector.IndexedDBModel.KeyTypes = {
419 NumberType: 'number',
420 StringType: 'string',
421 DateType: 'date',
422 ArrayType: 'array'
423 };
424
425 WebInspector.IndexedDBModel.KeyPathTypes = {
426 NullType: 'null',
427 StringType: 'string',
428 ArrayType: 'array'
429 };
430
157 431
158 /** @enum {symbol} */ 432 /** @enum {symbol} */
159 WebInspector.IndexedDBModel.Events = { 433 WebInspector.IndexedDBModel.Events = {
160 DatabaseAdded: Symbol("DatabaseAdded"), 434 DatabaseAdded: Symbol('DatabaseAdded'),
161 DatabaseRemoved: Symbol("DatabaseRemoved"), 435 DatabaseRemoved: Symbol('DatabaseRemoved'),
162 DatabaseLoaded: Symbol("DatabaseLoaded") 436 DatabaseLoaded: Symbol('DatabaseLoaded')
163 };
164
165 WebInspector.IndexedDBModel.prototype = {
166 enable: function()
167 {
168 if (this._enabled)
169 return;
170
171 this._agent.enable();
172 this._securityOriginManager.addEventListener(WebInspector.SecurityOrigin Manager.Events.SecurityOriginAdded, this._securityOriginAdded, this);
173 this._securityOriginManager.addEventListener(WebInspector.SecurityOrigin Manager.Events.SecurityOriginRemoved, this._securityOriginRemoved, this);
174
175 for (var securityOrigin of this._securityOriginManager.securityOrigins() )
176 this._addOrigin(securityOrigin);
177
178 this._enabled = true;
179 },
180
181 /**
182 * @param {string} origin
183 */
184 clearForOrigin: function(origin)
185 {
186 if (!this._enabled)
187 return;
188
189 this._removeOrigin(origin);
190 this._addOrigin(origin);
191 },
192
193 refreshDatabaseNames: function()
194 {
195 for (var securityOrigin in this._databaseNamesBySecurityOrigin)
196 this._loadDatabaseNames(securityOrigin);
197 },
198
199 /**
200 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
201 */
202 refreshDatabase: function(databaseId)
203 {
204 this._loadDatabase(databaseId);
205 },
206
207 /**
208 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
209 * @param {string} objectStoreName
210 * @param {function()} callback
211 */
212 clearObjectStore: function(databaseId, objectStoreName, callback)
213 {
214 this._agent.clearObjectStore(databaseId.securityOrigin, databaseId.name, objectStoreName, callback);
215 },
216
217 /**
218 * @param {!WebInspector.Event} event
219 */
220 _securityOriginAdded: function(event)
221 {
222 var securityOrigin = /** @type {string} */ (event.data);
223 this._addOrigin(securityOrigin);
224 },
225
226 /**
227 * @param {!WebInspector.Event} event
228 */
229 _securityOriginRemoved: function(event)
230 {
231 var securityOrigin = /** @type {string} */ (event.data);
232 this._removeOrigin(securityOrigin);
233 },
234
235 /**
236 * @param {string} securityOrigin
237 */
238 _addOrigin: function(securityOrigin)
239 {
240 console.assert(!this._databaseNamesBySecurityOrigin[securityOrigin]);
241 this._databaseNamesBySecurityOrigin[securityOrigin] = [];
242 this._loadDatabaseNames(securityOrigin);
243 },
244
245 /**
246 * @param {string} securityOrigin
247 */
248 _removeOrigin: function(securityOrigin)
249 {
250 console.assert(this._databaseNamesBySecurityOrigin[securityOrigin]);
251 for (var i = 0; i < this._databaseNamesBySecurityOrigin[securityOrigin]. length; ++i)
252 this._databaseRemoved(securityOrigin, this._databaseNamesBySecurityO rigin[securityOrigin][i]);
253 delete this._databaseNamesBySecurityOrigin[securityOrigin];
254 },
255
256 /**
257 * @param {string} securityOrigin
258 * @param {!Array.<string>} databaseNames
259 */
260 _updateOriginDatabaseNames: function(securityOrigin, databaseNames)
261 {
262 var newDatabaseNames = new Set(databaseNames);
263 var oldDatabaseNames = new Set(this._databaseNamesBySecurityOrigin[secur ityOrigin]);
264
265 this._databaseNamesBySecurityOrigin[securityOrigin] = databaseNames;
266
267 for (var databaseName of oldDatabaseNames) {
268 if (!newDatabaseNames.has(databaseName))
269 this._databaseRemoved(securityOrigin, databaseName);
270 }
271 for (var databaseName of newDatabaseNames) {
272 if (!oldDatabaseNames.has(databaseName))
273 this._databaseAdded(securityOrigin, databaseName);
274 }
275 },
276
277 /**
278 * @return {!Array.<!WebInspector.IndexedDBModel.DatabaseId>}
279 */
280 databases: function()
281 {
282 var result = [];
283 for (var securityOrigin in this._databaseNamesBySecurityOrigin) {
284 var databaseNames = this._databaseNamesBySecurityOrigin[securityOrig in];
285 for (var i = 0; i < databaseNames.length; ++i) {
286 result.push(new WebInspector.IndexedDBModel.DatabaseId(securityO rigin, databaseNames[i]));
287 }
288 }
289 return result;
290 },
291
292 /**
293 * @param {string} securityOrigin
294 * @param {string} databaseName
295 */
296 _databaseAdded: function(securityOrigin, databaseName)
297 {
298 var databaseId = new WebInspector.IndexedDBModel.DatabaseId(securityOrig in, databaseName);
299 this.dispatchEventToListeners(WebInspector.IndexedDBModel.Events.Databas eAdded, databaseId);
300 },
301
302 /**
303 * @param {string} securityOrigin
304 * @param {string} databaseName
305 */
306 _databaseRemoved: function(securityOrigin, databaseName)
307 {
308 var databaseId = new WebInspector.IndexedDBModel.DatabaseId(securityOrig in, databaseName);
309 this.dispatchEventToListeners(WebInspector.IndexedDBModel.Events.Databas eRemoved, databaseId);
310 },
311
312 /**
313 * @param {string} securityOrigin
314 */
315 _loadDatabaseNames: function(securityOrigin)
316 {
317 /**
318 * @param {?Protocol.Error} error
319 * @param {!Array.<string>} databaseNames
320 * @this {WebInspector.IndexedDBModel}
321 */
322 function callback(error, databaseNames)
323 {
324 if (error) {
325 console.error("IndexedDBAgent error: " + error);
326 return;
327 }
328
329 if (!this._databaseNamesBySecurityOrigin[securityOrigin])
330 return;
331 this._updateOriginDatabaseNames(securityOrigin, databaseNames);
332 }
333
334 this._agent.requestDatabaseNames(securityOrigin, callback.bind(this));
335 },
336
337 /**
338 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
339 */
340 _loadDatabase: function(databaseId)
341 {
342 /**
343 * @param {?Protocol.Error} error
344 * @param {!IndexedDBAgent.DatabaseWithObjectStores} databaseWithObjectS tores
345 * @this {WebInspector.IndexedDBModel}
346 */
347 function callback(error, databaseWithObjectStores)
348 {
349 if (error) {
350 console.error("IndexedDBAgent error: " + error);
351 return;
352 }
353
354 if (!this._databaseNamesBySecurityOrigin[databaseId.securityOrigin])
355 return;
356 var databaseModel = new WebInspector.IndexedDBModel.Database(databas eId, databaseWithObjectStores.version);
357 this._databases.set(databaseId, databaseModel);
358 for (var i = 0; i < databaseWithObjectStores.objectStores.length; ++ i) {
359 var objectStore = databaseWithObjectStores.objectStores[i];
360 var objectStoreIDBKeyPath = WebInspector.IndexedDBModel.idbKeyPa thFromKeyPath(objectStore.keyPath);
361 var objectStoreModel = new WebInspector.IndexedDBModel.ObjectSto re(objectStore.name, objectStoreIDBKeyPath, objectStore.autoIncrement);
362 for (var j = 0; j < objectStore.indexes.length; ++j) {
363 var index = objectStore.indexes[j];
364 var indexIDBKeyPath = WebInspector.IndexedDBModel.idbKeyPath FromKeyPath(index.keyPath);
365 var indexModel = new WebInspector.IndexedDBModel.Index(index .name, indexIDBKeyPath, index.unique, index.multiEntry);
366 objectStoreModel.indexes[indexModel.name] = indexModel;
367 }
368 databaseModel.objectStores[objectStoreModel.name] = objectStoreM odel;
369 }
370
371 this.dispatchEventToListeners(WebInspector.IndexedDBModel.Events.Dat abaseLoaded, databaseModel);
372 }
373
374 this._agent.requestDatabase(databaseId.securityOrigin, databaseId.name, callback.bind(this));
375 },
376
377 /**
378 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
379 * @param {string} objectStoreName
380 * @param {?IDBKeyRange} idbKeyRange
381 * @param {number} skipCount
382 * @param {number} pageSize
383 * @param {function(!Array.<!WebInspector.IndexedDBModel.Entry>, boolean)} c allback
384 */
385 loadObjectStoreData: function(databaseId, objectStoreName, idbKeyRange, skip Count, pageSize, callback)
386 {
387 this._requestData(databaseId, databaseId.name, objectStoreName, "", idbK eyRange, skipCount, pageSize, callback);
388 },
389
390 /**
391 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
392 * @param {string} objectStoreName
393 * @param {string} indexName
394 * @param {?IDBKeyRange} idbKeyRange
395 * @param {number} skipCount
396 * @param {number} pageSize
397 * @param {function(!Array.<!WebInspector.IndexedDBModel.Entry>, boolean)} c allback
398 */
399 loadIndexData: function(databaseId, objectStoreName, indexName, idbKeyRange, skipCount, pageSize, callback)
400 {
401 this._requestData(databaseId, databaseId.name, objectStoreName, indexNam e, idbKeyRange, skipCount, pageSize, callback);
402 },
403
404 /**
405 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
406 * @param {string} databaseName
407 * @param {string} objectStoreName
408 * @param {string} indexName
409 * @param {?IDBKeyRange} idbKeyRange
410 * @param {number} skipCount
411 * @param {number} pageSize
412 * @param {function(!Array.<!WebInspector.IndexedDBModel.Entry>, boolean)} c allback
413 */
414 _requestData: function(databaseId, databaseName, objectStoreName, indexName, idbKeyRange, skipCount, pageSize, callback)
415 {
416 /**
417 * @param {?Protocol.Error} error
418 * @param {!Array.<!IndexedDBAgent.DataEntry>} dataEntries
419 * @param {boolean} hasMore
420 * @this {WebInspector.IndexedDBModel}
421 */
422 function innerCallback(error, dataEntries, hasMore)
423 {
424 if (error) {
425 console.error("IndexedDBAgent error: " + error);
426 return;
427 }
428
429 if (!this._databaseNamesBySecurityOrigin[databaseId.securityOrigin])
430 return;
431 var entries = [];
432 for (var i = 0; i < dataEntries.length; ++i) {
433 var key = this.target().runtimeModel.createRemoteObject(dataEntr ies[i].key);
434 var primaryKey = this.target().runtimeModel.createRemoteObject(d ataEntries[i].primaryKey);
435 var value = this.target().runtimeModel.createRemoteObject(dataEn tries[i].value);
436 entries.push(new WebInspector.IndexedDBModel.Entry(key, primaryK ey, value));
437 }
438 callback(entries, hasMore);
439 }
440
441 var keyRange = WebInspector.IndexedDBModel.keyRangeFromIDBKeyRange(idbKe yRange);
442 this._agent.requestData(databaseId.securityOrigin, databaseName, objectS toreName, indexName, skipCount, pageSize, keyRange ? keyRange : undefined, inner Callback.bind(this));
443 },
444
445 __proto__: WebInspector.SDKModel.prototype
446 }; 437 };
447 438
448 /** 439 /**
449 * @constructor 440 * @unrestricted
450 * @param {!WebInspector.RemoteObject} key
451 * @param {!WebInspector.RemoteObject} primaryKey
452 * @param {!WebInspector.RemoteObject} value
453 */ 441 */
454 WebInspector.IndexedDBModel.Entry = function(key, primaryKey, value) 442 WebInspector.IndexedDBModel.Entry = class {
455 { 443 /**
444 * @param {!WebInspector.RemoteObject} key
445 * @param {!WebInspector.RemoteObject} primaryKey
446 * @param {!WebInspector.RemoteObject} value
447 */
448 constructor(key, primaryKey, value) {
456 this.key = key; 449 this.key = key;
457 this.primaryKey = primaryKey; 450 this.primaryKey = primaryKey;
458 this.value = value; 451 this.value = value;
452 }
459 }; 453 };
460 454
461 /** 455 /**
462 * @constructor 456 * @unrestricted
463 * @param {string} securityOrigin
464 * @param {string} name
465 */ 457 */
466 WebInspector.IndexedDBModel.DatabaseId = function(securityOrigin, name) 458 WebInspector.IndexedDBModel.DatabaseId = class {
467 { 459 /**
460 * @param {string} securityOrigin
461 * @param {string} name
462 */
463 constructor(securityOrigin, name) {
468 this.securityOrigin = securityOrigin; 464 this.securityOrigin = securityOrigin;
469 this.name = name; 465 this.name = name;
470 }; 466 }
471 467
472 WebInspector.IndexedDBModel.DatabaseId.prototype = { 468 /**
473 /** 469 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
474 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId 470 * @return {boolean}
475 * @return {boolean} 471 */
476 */ 472 equals(databaseId) {
477 equals: function(databaseId) 473 return this.name === databaseId.name && this.securityOrigin === databaseId.s ecurityOrigin;
478 { 474 }
479 return this.name === databaseId.name && this.securityOrigin === database Id.securityOrigin; 475 };
480 }, 476
481 };
482 /** 477 /**
483 * @constructor 478 * @unrestricted
484 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
485 * @param {number} version
486 */ 479 */
487 WebInspector.IndexedDBModel.Database = function(databaseId, version) 480 WebInspector.IndexedDBModel.Database = class {
488 { 481 /**
482 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId
483 * @param {number} version
484 */
485 constructor(databaseId, version) {
489 this.databaseId = databaseId; 486 this.databaseId = databaseId;
490 this.version = version; 487 this.version = version;
491 this.objectStores = {}; 488 this.objectStores = {};
489 }
492 }; 490 };
493 491
494 /** 492 /**
495 * @constructor 493 * @unrestricted
496 * @param {string} name
497 * @param {*} keyPath
498 * @param {boolean} autoIncrement
499 */ 494 */
500 WebInspector.IndexedDBModel.ObjectStore = function(name, keyPath, autoIncrement) 495 WebInspector.IndexedDBModel.ObjectStore = class {
501 { 496 /**
497 * @param {string} name
498 * @param {*} keyPath
499 * @param {boolean} autoIncrement
500 */
501 constructor(name, keyPath, autoIncrement) {
502 this.name = name; 502 this.name = name;
503 this.keyPath = keyPath; 503 this.keyPath = keyPath;
504 this.autoIncrement = autoIncrement; 504 this.autoIncrement = autoIncrement;
505 this.indexes = {}; 505 this.indexes = {};
506 }; 506 }
507 507
508 WebInspector.IndexedDBModel.ObjectStore.prototype = { 508 /**
509 /** 509 * @return {string}
510 * @type {string} 510 */
511 */ 511 get keyPathString() {
512 get keyPathString() 512 return /** @type {string}*/ (
513 { 513 WebInspector.IndexedDBModel.keyPathStringFromIDBKeyPath(/** @type {strin g}*/ (this.keyPath)));
514 return WebInspector.IndexedDBModel.keyPathStringFromIDBKeyPath(this.keyP ath); 514 }
515 }
516 }; 515 };
517 516
518 /** 517 /**
519 * @constructor 518 * @unrestricted
520 * @param {string} name
521 * @param {*} keyPath
522 * @param {boolean} unique
523 * @param {boolean} multiEntry
524 */ 519 */
525 WebInspector.IndexedDBModel.Index = function(name, keyPath, unique, multiEntry) 520 WebInspector.IndexedDBModel.Index = class {
526 { 521 /**
522 * @param {string} name
523 * @param {*} keyPath
524 * @param {boolean} unique
525 * @param {boolean} multiEntry
526 */
527 constructor(name, keyPath, unique, multiEntry) {
527 this.name = name; 528 this.name = name;
528 this.keyPath = keyPath; 529 this.keyPath = keyPath;
529 this.unique = unique; 530 this.unique = unique;
530 this.multiEntry = multiEntry; 531 this.multiEntry = multiEntry;
531 }; 532 }
532 533
533 WebInspector.IndexedDBModel.Index.prototype = { 534 /**
534 /** 535 * @return {string}
535 * @type {string} 536 */
536 */ 537 get keyPathString() {
537 get keyPathString() 538 return /** @type {string}*/ (
538 { 539 WebInspector.IndexedDBModel.keyPathStringFromIDBKeyPath(/** @type {strin g}*/ (this.keyPath)));
539 return WebInspector.IndexedDBModel.keyPathStringFromIDBKeyPath(this.keyP ath); 540 }
540 } 541 };
541 }; 542
542 543
543 /**
544 * @param {!WebInspector.Target} target
545 * @return {!WebInspector.IndexedDBModel}
546 */
547 WebInspector.IndexedDBModel.fromTarget = function(target)
548 {
549 var model = /** @type {?WebInspector.IndexedDBModel} */ (target.model(WebIns pector.IndexedDBModel));
550 if (!model)
551 model = new WebInspector.IndexedDBModel(target, WebInspector.SecurityOri ginManager.fromTarget(target));
552 return model;
553 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698