15c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/* 25c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Copyright (C) 2012 Google Inc. All rights reserved. 35c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 45c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without 55c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * modification, are permitted provided that the following conditions are 65c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * met: 75c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 85c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions of source code must retain the above copyright 95c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * notice, this list of conditions and the following disclaimer. 105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Redistributions in binary form must reproduce the above 115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * copyright notice, this list of conditions and the following disclaimer 125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * in the documentation and/or other materials provided with the 135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * distribution. 145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * * Neither the name of Google Inc. nor the names of its 155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * contributors may be used to endorse or promote products derived from 165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * this software without specific prior written permission. 175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * 185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT 225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 337242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @extends {WebInspector.SDKModel} 345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 35a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben MurdochWebInspector.IndexedDBModel = function(target) 365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 377242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci WebInspector.SDKModel.call(this, WebInspector.IndexedDBModel, target); 38a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._agent = target.indexedDBAgent(); 39a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._agent.enable(); 405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 41a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.SecurityOriginAdded, this._securityOriginAdded, this); 42a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch target.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.SecurityOriginRemoved, this._securityOriginRemoved, this); 435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 447757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch /** @type {!Map.<!WebInspector.IndexedDBModel.DatabaseId, !WebInspector.IndexedDBModel.Database>} */ 455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._databases = new Map(); 467757ec2eadfa2dd8ac2aeed0a4399e9b07ec38cbBen Murdoch /** @type {!Object.<string, !Array.<string>>} */ 475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._databaseNamesBySecurityOrigin = {}; 48926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._reset(); 495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.KeyTypes = { 525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NumberType: "number", 535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StringType: "string", 545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DateType: "date", 555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ArrayType: "array" 565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.KeyPathTypes = { 595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) NullType: "null", 605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) StringType: "string", 615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) ArrayType: "array" 625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)}; 635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 645d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/** 655d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {*} idbKey 665d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?Object} 675d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.keyFromIDBKey = function(idbKey) 695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (typeof(idbKey) === "undefined" || idbKey === null) 715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var key = {}; 745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (typeof(idbKey)) { 755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "number": 765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) key.number = idbKey; 775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) key.type = WebInspector.IndexedDBModel.KeyTypes.NumberType; 785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "string": 805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) key.string = idbKey; 815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) key.type = WebInspector.IndexedDBModel.KeyTypes.StringType; 825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case "object": 845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (idbKey instanceof Date) { 855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) key.date = idbKey.getTime(); 865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) key.type = WebInspector.IndexedDBModel.KeyTypes.DateType; 875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } else if (idbKey instanceof Array) { 885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) key.array = []; 895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < idbKey.length; ++i) 905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) key.array.push(WebInspector.IndexedDBModel.keyFromIDBKey(idbKey[i])); 915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) key.type = WebInspector.IndexedDBModel.KeyTypes.ArrayType; 925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) default: 955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return key; 985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1005d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/** 1015d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {?IDBKeyRange=} idbKeyRange 1025d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?{lower: ?Object, upper: ?Object, lowerOpen: *, upperOpen: *}} 1035d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 1045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.keyRangeFromIDBKeyRange = function(idbKeyRange) 1055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1065d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) if (typeof idbKeyRange === "undefined" || idbKeyRange === null) 1075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 1085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var keyRange = {}; 1105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyRange.lower = WebInspector.IndexedDBModel.keyFromIDBKey(idbKeyRange.lower); 1115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyRange.upper = WebInspector.IndexedDBModel.keyFromIDBKey(idbKeyRange.upper); 1125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyRange.lowerOpen = idbKeyRange.lowerOpen; 1135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) keyRange.upperOpen = idbKeyRange.upperOpen; 1145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return keyRange; 1155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 118a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!IndexedDBAgent.KeyPath} keyPath 1195d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?string|!Array.<string>|undefined} 1205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.idbKeyPathFromKeyPath = function(keyPath) 1225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var idbKeyPath; 1245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) switch (keyPath.type) { 1255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInspector.IndexedDBModel.KeyPathTypes.NullType: 1265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) idbKeyPath = null; 1275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 1285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInspector.IndexedDBModel.KeyPathTypes.StringType: 1295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) idbKeyPath = keyPath.string; 1305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 1315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) case WebInspector.IndexedDBModel.KeyPathTypes.ArrayType: 1325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) idbKeyPath = keyPath.array; 1335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) break; 1345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 1355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return idbKeyPath; 1365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1385d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles)/** 1395d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {?string|!Array.<string>|undefined} idbKeyPath 1405d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @return {?string} 1415d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) */ 1425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.keyPathStringFromIDBKeyPath = function(idbKeyPath) 1435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 1445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (typeof idbKeyPath === "string") 1455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "\"" + idbKeyPath + "\""; 1465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (idbKeyPath instanceof Array) 1475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return "[\"" + idbKeyPath.join("\", \"") + "\"]"; 1485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return null; 1495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.EventTypes = { 1525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DatabaseAdded: "DatabaseAdded", 1535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DatabaseRemoved: "DatabaseRemoved", 1545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) DatabaseLoaded: "DatabaseLoaded" 1555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 1565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.prototype = { 158926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _reset: function() 159926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) { 160926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var securityOrigin in this._databaseNamesBySecurityOrigin) 161926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._removeOrigin(securityOrigin); 162a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch var securityOrigins = this.target().resourceTreeModel.securityOrigins(); 163926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var i = 0; i < securityOrigins.length; ++i) 164926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._addOrigin(securityOrigins[i]); 165926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) }, 166926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) 1675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) refreshDatabaseNames: function() 1685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 169926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) for (var securityOrigin in this._databaseNamesBySecurityOrigin) 170926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._loadDatabaseNames(securityOrigin); 1715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 174a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId 1755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 1765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) refreshDatabase: function(databaseId) 1775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 1785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._loadDatabase(databaseId); 1795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 182a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId 183926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} objectStoreName 184926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {function()} callback 1855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 186926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) clearObjectStore: function(databaseId, objectStoreName, callback) 1875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 188a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._agent.clearObjectStore(databaseId.securityOrigin, databaseId.name, objectStoreName, callback); 1895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 1915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 192a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Event} event 1935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 194926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _securityOriginAdded: function(event) 1955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 196926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var securityOrigin = /** @type {string} */ (event.data); 197926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._addOrigin(securityOrigin); 1985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 1995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 201a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.Event} event 2025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 203926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _securityOriginRemoved: function(event) 2045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 205926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) var securityOrigin = /** @type {string} */ (event.data); 206926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._removeOrigin(securityOrigin); 2075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} securityOrigin 2115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 212926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _addOrigin: function(securityOrigin) 2135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 214926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) console.assert(!this._databaseNamesBySecurityOrigin[securityOrigin]); 215926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._databaseNamesBySecurityOrigin[securityOrigin] = []; 216926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._loadDatabaseNames(securityOrigin); 2175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2195c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} securityOrigin 2215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 222926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _removeOrigin: function(securityOrigin) 2235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 224926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) console.assert(this._databaseNamesBySecurityOrigin[securityOrigin]); 2255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < this._databaseNamesBySecurityOrigin[securityOrigin].length; ++i) 2265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._databaseRemoved(securityOrigin, this._databaseNamesBySecurityOrigin[securityOrigin][i]); 2275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) delete this._databaseNamesBySecurityOrigin[securityOrigin]; 2285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} securityOrigin 232a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<string>} databaseNames 2335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _updateOriginDatabaseNames: function(securityOrigin, databaseNames) 2355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 236197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var newDatabaseNames = databaseNames.keySet(); 237197021e6b966cfb06891637935ef33fff06433d1Ben Murdoch var oldDatabaseNames = this._databaseNamesBySecurityOrigin[securityOrigin].keySet(); 2385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._databaseNamesBySecurityOrigin[securityOrigin] = databaseNames; 2405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var databaseName in oldDatabaseNames) { 2425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!newDatabaseNames[databaseName]) 2435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._databaseRemoved(securityOrigin, databaseName); 2445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var databaseName in newDatabaseNames) { 2465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (!oldDatabaseNames[databaseName]) 2475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._databaseAdded(securityOrigin, databaseName); 2485c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 2495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2527242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci * @return {!Array.<!WebInspector.IndexedDBModel.DatabaseId>} 2537242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci */ 2547242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci databases: function() 2557242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci { 2567242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var result = []; 2577242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (var securityOrigin in this._databaseNamesBySecurityOrigin) { 2587242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci var databaseNames = this._databaseNamesBySecurityOrigin[securityOrigin]; 2597242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci for (var i = 0; i < databaseNames.length; ++i) { 2607242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci result.push(new WebInspector.IndexedDBModel.DatabaseId(securityOrigin, databaseNames[i])); 2617242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 2627242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci } 2637242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci return result; 2647242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci }, 2657242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci 2667242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci /** 2675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} securityOrigin 2685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} databaseName 2695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _databaseAdded: function(securityOrigin, databaseName) 2715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var databaseId = new WebInspector.IndexedDBModel.DatabaseId(securityOrigin, databaseName); 2735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.IndexedDBModel.EventTypes.DatabaseAdded, databaseId); 2745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} securityOrigin 2785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} databaseName 2795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 2805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _databaseRemoved: function(securityOrigin, databaseName) 2815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var databaseId = new WebInspector.IndexedDBModel.DatabaseId(securityOrigin, databaseName); 2835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.IndexedDBModel.EventTypes.DatabaseRemoved, databaseId); 2845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 2855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 2865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 287926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) * @param {string} securityOrigin 2885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 289926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) _loadDatabaseNames: function(securityOrigin) 2905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 2925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?Protocol.Error} error 293a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<string>} databaseNames 29409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.IndexedDBModel} 2955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 296926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) function callback(error, databaseNames) 2975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 2985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (error) { 2995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) console.error("IndexedDBAgent error: " + error); 3005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 303926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this._databaseNamesBySecurityOrigin[securityOrigin]) 304926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 305926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) this._updateOriginDatabaseNames(securityOrigin, databaseNames); 3065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 308a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._agent.requestDatabaseNames(securityOrigin, callback.bind(this)); 3095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 312a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId 3135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _loadDatabase: function(databaseId) 3155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 3175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?Protocol.Error} error 318a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!IndexedDBAgent.DatabaseWithObjectStores} databaseWithObjectStores 31909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.IndexedDBModel} 3205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function callback(error, databaseWithObjectStores) 3225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (error) { 3245c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) console.error("IndexedDBAgent error: " + error); 3255c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3265c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 328926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this._databaseNamesBySecurityOrigin[databaseId.securityOrigin]) 3295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 3305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var databaseModel = new WebInspector.IndexedDBModel.Database(databaseId, databaseWithObjectStores.version, databaseWithObjectStores.intVersion); 3319e12abdf8c3a23d52091ea54ebb6a04d327f9300Torne (Richard Coles) this._databases.set(databaseId, databaseModel); 3325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < databaseWithObjectStores.objectStores.length; ++i) { 3335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var objectStore = databaseWithObjectStores.objectStores[i]; 3345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var objectStoreIDBKeyPath = WebInspector.IndexedDBModel.idbKeyPathFromKeyPath(objectStore.keyPath); 3355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var objectStoreModel = new WebInspector.IndexedDBModel.ObjectStore(objectStore.name, objectStoreIDBKeyPath, objectStore.autoIncrement); 3365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var j = 0; j < objectStore.indexes.length; ++j) { 3375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var index = objectStore.indexes[j]; 3385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var indexIDBKeyPath = WebInspector.IndexedDBModel.idbKeyPathFromKeyPath(index.keyPath); 3395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var indexModel = new WebInspector.IndexedDBModel.Index(index.name, indexIDBKeyPath, index.unique, index.multiEntry); 3405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) objectStoreModel.indexes[indexModel.name] = indexModel; 3415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) databaseModel.objectStores[objectStoreModel.name] = objectStoreModel; 3435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.dispatchEventToListeners(WebInspector.IndexedDBModel.EventTypes.DatabaseLoaded, databaseModel); 3465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 3475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 348a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._agent.requestDatabase(databaseId.securityOrigin, databaseId.name, callback.bind(this)); 3495c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 352a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId 3535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} objectStoreName 3545d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {?IDBKeyRange} idbKeyRange 3555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} skipCount 3565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} pageSize 357a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!Array.<!WebInspector.IndexedDBModel.Entry>, boolean)} callback 3585c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loadObjectStoreData: function(databaseId, objectStoreName, idbKeyRange, skipCount, pageSize, callback) 3605c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._requestData(databaseId, databaseId.name, objectStoreName, "", idbKeyRange, skipCount, pageSize, callback); 3625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 365a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId 3665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} objectStoreName 3675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} indexName 3685d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {?IDBKeyRange} idbKeyRange 3695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} skipCount 3705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} pageSize 371a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!Array.<!WebInspector.IndexedDBModel.Entry>, boolean)} callback 3725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) loadIndexData: function(databaseId, objectStoreName, indexName, idbKeyRange, skipCount, pageSize, callback) 3745c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this._requestData(databaseId, databaseId.name, objectStoreName, indexName, idbKeyRange, skipCount, pageSize, callback); 3765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 3775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 3785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 379a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId 3805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} databaseName 3815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} objectStoreName 3825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} indexName 3835d92fedcae5e801a8b224de090094f2d9df0b54aTorne (Richard Coles) * @param {?IDBKeyRange} idbKeyRange 3845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} skipCount 3855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {number} pageSize 386a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {function(!Array.<!WebInspector.IndexedDBModel.Entry>, boolean)} callback 3875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) _requestData: function(databaseId, databaseName, objectStoreName, indexName, idbKeyRange, skipCount, pageSize, callback) 3895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 3915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {?Protocol.Error} error 392a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!Array.<!IndexedDBAgent.DataEntry>} dataEntries 3935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {boolean} hasMore 39409380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @this {WebInspector.IndexedDBModel} 3955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 3965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) function innerCallback(error, dataEntries, hasMore) 3975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 3985c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) if (error) { 3995c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) console.error("IndexedDBAgent error: " + error); 4005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return; 4015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 403926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) if (!this._databaseNamesBySecurityOrigin[databaseId.securityOrigin]) 404926b001d589ce2f10facb93dd4b87578ea35a855Torne (Richard Coles) return; 4055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var entries = []; 4065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) for (var i = 0; i < dataEntries.length; ++i) { 40709380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var key = WebInspector.RemoteObject.fromLocalObject(JSON.parse(dataEntries[i].key)); 40809380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var primaryKey = WebInspector.RemoteObject.fromLocalObject(JSON.parse(dataEntries[i].primaryKey)); 40909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) var value = WebInspector.RemoteObject.fromLocalObject(JSON.parse(dataEntries[i].value)); 4105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) entries.push(new WebInspector.IndexedDBModel.Entry(key, primaryKey, value)); 4115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) callback(entries, hasMore); 4135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) var keyRange = WebInspector.IndexedDBModel.keyRangeFromIDBKeyRange(idbKeyRange); 416a9984bf9ddc3cf73fdae3f29134a2bab379e7029Ben Murdoch this._agent.requestData(databaseId.securityOrigin, databaseName, objectStoreName, indexName, skipCount, pageSize, keyRange ? keyRange : undefined, innerCallback.bind(this)); 4175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4185c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4197242dc3dbeb210b5e876a3c42d1ec1a667fc621aPrimiano Tucci __proto__: WebInspector.SDKModel.prototype 4205c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4215c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4225c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 4235c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 424a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.RemoteObject} key 425a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.RemoteObject} primaryKey 426a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.RemoteObject} value 4275c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 4285c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.Entry = function(key, primaryKey, value) 4295c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4305c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.key = key; 4315c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.primaryKey = primaryKey; 4325c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.value = value; 4335c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4345c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4355c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 4365c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 4375c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} securityOrigin 4385c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} name 4395c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 4405c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.DatabaseId = function(securityOrigin, name) 4415c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4425c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.securityOrigin = securityOrigin; 4435c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.name = name; 4445c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4455c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4465c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.DatabaseId.prototype = { 4475c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 448a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId 44909380295ba73501a205346becac22c6978e4671dTorne (Richard Coles) * @return {boolean} 4505c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 4515c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) equals: function(databaseId) 4525c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4535c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return this.name === databaseId.name && this.securityOrigin === databaseId.securityOrigin; 4545c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) }, 4555c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4565c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 4575c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 458a854de003a23bf3c7f95ec0f8154ada64092ff5cTorne (Richard Coles) * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId 4595c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} version 460f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {number} intVersion 4615c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 4625c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.Database = function(databaseId, version, intVersion) 4635c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4645c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.databaseId = databaseId; 4655c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.version = version; 4665c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.intVersion = intVersion; 4675c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.objectStores = {}; 4685c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4695c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4705c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 4715c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 4725c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} name 4735c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {*} keyPath 474f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {boolean} autoIncrement 4755c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 4765c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.ObjectStore = function(name, keyPath, autoIncrement) 4775c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 4785c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.name = name; 4795c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.keyPath = keyPath; 4805c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.autoIncrement = autoIncrement; 4815c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.indexes = {}; 4825c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4835c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4845c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.ObjectStore.prototype = { 4855c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 4865c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @type {string} 4875c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 4885c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get keyPathString() 4895c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 4905c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebInspector.IndexedDBModel.keyPathStringFromIDBKeyPath(this.keyPath); 4915c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 4925c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 4935c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 4945c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)/** 4955c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @constructor 4965c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {string} name 4975c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @param {*} keyPath 498f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {boolean} unique 499f6b7aed3f7ce69aca0d7a032d144cbd088b04393Torne (Richard Coles) * @param {boolean} multiEntry 5005c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 5015c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.Index = function(name, keyPath, unique, multiEntry) 5025c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles){ 5035c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.name = name; 5045c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.keyPath = keyPath; 5055c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.unique = unique; 5065c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) this.multiEntry = multiEntry; 5075c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 5085c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) 5095c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)WebInspector.IndexedDBModel.Index.prototype = { 5105c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) /** 5115c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) * @type {string} 5125c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) */ 5135c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) get keyPathString() 5145c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) { 5155c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) return WebInspector.IndexedDBModel.keyPathStringFromIDBKeyPath(this.keyPath); 5165c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles) } 5175c87bf8b86a7c82ef50fb7a89697d8e02e2553beTorne (Richard Coles)} 518