OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2007, 2008, 2010 Apple Inc. All rights reserved. | 2 * Copyright (C) 2007, 2008, 2010 Apple Inc. All rights reserved. |
3 * Copyright (C) 2009 Joseph Pecoraro | 3 * Copyright (C) 2009 Joseph Pecoraro |
4 * Copyright (C) 2013 Samsung Electronics. All rights reserved. | 4 * Copyright (C) 2013 Samsung Electronics. All rights reserved. |
5 * | 5 * |
6 * Redistribution and use in source and binary forms, with or without | 6 * Redistribution and use in source and binary forms, with or without |
7 * modification, are permitted provided that the following conditions | 7 * modification, are permitted provided that the following conditions |
8 * are met: | 8 * are met: |
9 * | 9 * |
10 * 1. Redistributions of source code must retain the above copyright | 10 * 1. Redistributions of source code must retain the above copyright |
11 * notice, this list of conditions and the following disclaimer. | 11 * notice, this list of conditions and the following disclaimer. |
12 * 2. Redistributions in binary form must reproduce the above copyright | 12 * 2. Redistributions in binary form must reproduce the above copyright |
13 * notice, this list of conditions and the following disclaimer in the | 13 * notice, this list of conditions and the following disclaimer in the |
14 * documentation and/or other materials provided with the distribution. | 14 * documentation and/or other materials provided with the distribution. |
15 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of | 15 * 3. Neither the name of Apple Computer, Inc. ("Apple") nor the names of |
16 * its contributors may be used to endorse or promote products derived | 16 * its contributors may be used to endorse or promote products derived |
17 * from this software without specific prior written permission. | 17 * from this software without specific prior written permission. |
18 * | 18 * |
19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY | 19 * THIS SOFTWARE IS PROVIDED BY APPLE AND ITS CONTRIBUTORS "AS IS" AND ANY |
20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | 20 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED |
21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | 21 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE |
22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY | 22 * DISCLAIMED. IN NO EVENT SHALL APPLE OR ITS CONTRIBUTORS BE LIABLE FOR ANY |
23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | 23 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES |
24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | 24 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | 25 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND |
26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | 26 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF | 27 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF |
28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | 28 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
29 */ | 29 */ |
| 30 /** |
| 31 * @implements {WebInspector.TargetManager.Observer} |
| 32 * @unrestricted |
| 33 */ |
| 34 WebInspector.ResourcesPanel = class extends WebInspector.PanelWithSidebar { |
| 35 constructor() { |
| 36 super('resources'); |
| 37 this.registerRequiredCSS('resources/resourcesPanel.css'); |
30 | 38 |
31 /** | 39 this._resourcesLastSelectedItemSetting = WebInspector.settings.createSetting
('resourcesLastSelectedItem', {}); |
32 * @constructor | |
33 * @extends {WebInspector.PanelWithSidebar} | |
34 * @implements {WebInspector.TargetManager.Observer} | |
35 */ | |
36 WebInspector.ResourcesPanel = function() | |
37 { | |
38 WebInspector.PanelWithSidebar.call(this, "resources"); | |
39 this.registerRequiredCSS("resources/resourcesPanel.css"); | |
40 | |
41 this._resourcesLastSelectedItemSetting = WebInspector.settings.createSetting
("resourcesLastSelectedItem", {}); | |
42 | 40 |
43 this._sidebarTree = new TreeOutlineInShadow(); | 41 this._sidebarTree = new TreeOutlineInShadow(); |
44 this._sidebarTree.element.classList.add("resources-sidebar"); | 42 this._sidebarTree.element.classList.add('resources-sidebar'); |
45 this._sidebarTree.registerRequiredCSS("resources/resourcesSidebar.css"); | 43 this._sidebarTree.registerRequiredCSS('resources/resourcesSidebar.css'); |
46 this._sidebarTree.element.classList.add("filter-all"); | 44 this._sidebarTree.element.classList.add('filter-all'); |
47 this.panelSidebarElement().appendChild(this._sidebarTree.element); | 45 this.panelSidebarElement().appendChild(this._sidebarTree.element); |
48 | 46 |
49 this._applicationTreeElement = this._addSidebarSection(WebInspector.UIString
("Application")); | 47 this._applicationTreeElement = this._addSidebarSection(WebInspector.UIString
('Application')); |
50 this._manifestTreeElement = new WebInspector.AppManifestTreeElement(this); | 48 this._manifestTreeElement = new WebInspector.AppManifestTreeElement(this); |
51 this._applicationTreeElement.appendChild(this._manifestTreeElement); | 49 this._applicationTreeElement.appendChild(this._manifestTreeElement); |
52 this.serviceWorkersTreeElement = new WebInspector.ServiceWorkersTreeElement(
this); | 50 this.serviceWorkersTreeElement = new WebInspector.ServiceWorkersTreeElement(
this); |
53 this._applicationTreeElement.appendChild(this.serviceWorkersTreeElement); | 51 this._applicationTreeElement.appendChild(this.serviceWorkersTreeElement); |
54 var clearStorageTreeElement = new WebInspector.ClearStorageTreeElement(this)
; | 52 var clearStorageTreeElement = new WebInspector.ClearStorageTreeElement(this)
; |
55 this._applicationTreeElement.appendChild(clearStorageTreeElement); | 53 this._applicationTreeElement.appendChild(clearStorageTreeElement); |
56 | 54 |
57 var storageTreeElement = this._addSidebarSection(WebInspector.UIString("Stor
age")); | 55 var storageTreeElement = this._addSidebarSection(WebInspector.UIString('Stor
age')); |
58 this.localStorageListTreeElement = new WebInspector.StorageCategoryTreeEleme
nt(this, WebInspector.UIString("Local Storage"), "LocalStorage", ["table-tree-it
em", "resource-tree-item"]); | 56 this.localStorageListTreeElement = new WebInspector.StorageCategoryTreeEleme
nt( |
| 57 this, WebInspector.UIString('Local Storage'), 'LocalStorage', ['table-tr
ee-item', 'resource-tree-item']); |
59 storageTreeElement.appendChild(this.localStorageListTreeElement); | 58 storageTreeElement.appendChild(this.localStorageListTreeElement); |
60 this.sessionStorageListTreeElement = new WebInspector.StorageCategoryTreeEle
ment(this, WebInspector.UIString("Session Storage"), "SessionStorage", ["table-t
ree-item", "resource-tree-item"]); | 59 this.sessionStorageListTreeElement = new WebInspector.StorageCategoryTreeEle
ment( |
| 60 this, WebInspector.UIString('Session Storage'), 'SessionStorage', ['tabl
e-tree-item', 'resource-tree-item']); |
61 storageTreeElement.appendChild(this.sessionStorageListTreeElement); | 61 storageTreeElement.appendChild(this.sessionStorageListTreeElement); |
62 this.indexedDBListTreeElement = new WebInspector.IndexedDBTreeElement(this); | 62 this.indexedDBListTreeElement = new WebInspector.IndexedDBTreeElement(this); |
63 storageTreeElement.appendChild(this.indexedDBListTreeElement); | 63 storageTreeElement.appendChild(this.indexedDBListTreeElement); |
64 this.databasesListTreeElement = new WebInspector.StorageCategoryTreeElement(
this, WebInspector.UIString("Web SQL"), "Databases", ["database-tree-item", "res
ource-tree-item"]); | 64 this.databasesListTreeElement = new WebInspector.StorageCategoryTreeElement( |
| 65 this, WebInspector.UIString('Web SQL'), 'Databases', ['database-tree-ite
m', 'resource-tree-item']); |
65 storageTreeElement.appendChild(this.databasesListTreeElement); | 66 storageTreeElement.appendChild(this.databasesListTreeElement); |
66 this.cookieListTreeElement = new WebInspector.StorageCategoryTreeElement(thi
s, WebInspector.UIString("Cookies"), "Cookies", ["cookie-tree-item", "resource-t
ree-item"]); | 67 this.cookieListTreeElement = new WebInspector.StorageCategoryTreeElement( |
| 68 this, WebInspector.UIString('Cookies'), 'Cookies', ['cookie-tree-item',
'resource-tree-item']); |
67 storageTreeElement.appendChild(this.cookieListTreeElement); | 69 storageTreeElement.appendChild(this.cookieListTreeElement); |
68 | 70 |
69 var cacheTreeElement = this._addSidebarSection(WebInspector.UIString("Cache"
)); | 71 var cacheTreeElement = this._addSidebarSection(WebInspector.UIString('Cache'
)); |
70 this.cacheStorageListTreeElement = new WebInspector.ServiceWorkerCacheTreeEl
ement(this); | 72 this.cacheStorageListTreeElement = new WebInspector.ServiceWorkerCacheTreeEl
ement(this); |
71 cacheTreeElement.appendChild(this.cacheStorageListTreeElement); | 73 cacheTreeElement.appendChild(this.cacheStorageListTreeElement); |
72 this.applicationCacheListTreeElement = new WebInspector.StorageCategoryTreeE
lement(this, WebInspector.UIString("Application Cache"), "ApplicationCache", ["a
ppcache-tree-item", "table-tree-item", "resource-tree-item"]); | 74 this.applicationCacheListTreeElement = new WebInspector.StorageCategoryTreeE
lement( |
| 75 this, WebInspector.UIString('Application Cache'), 'ApplicationCache', |
| 76 ['appcache-tree-item', 'table-tree-item', 'resource-tree-item']); |
73 cacheTreeElement.appendChild(this.applicationCacheListTreeElement); | 77 cacheTreeElement.appendChild(this.applicationCacheListTreeElement); |
74 | 78 |
75 this.resourcesListTreeElement = this._addSidebarSection(WebInspector.UIStrin
g("Frames")); | 79 this.resourcesListTreeElement = this._addSidebarSection(WebInspector.UIStrin
g('Frames')); |
76 | 80 |
77 var mainContainer = new WebInspector.VBox(); | 81 var mainContainer = new WebInspector.VBox(); |
78 this.storageViews = mainContainer.element.createChild("div", "vbox flex-auto
"); | 82 this.storageViews = mainContainer.element.createChild('div', 'vbox flex-auto
'); |
79 this._storageViewToolbar = new WebInspector.Toolbar("resources-toolbar", mai
nContainer.element); | 83 this._storageViewToolbar = new WebInspector.Toolbar('resources-toolbar', mai
nContainer.element); |
80 this.splitWidget().setMainWidget(mainContainer); | 84 this.splitWidget().setMainWidget(mainContainer); |
81 | 85 |
82 /** @type {!Map.<!WebInspector.Database, !Object.<string, !WebInspector.Data
baseTableView>>} */ | 86 /** @type {!Map.<!WebInspector.Database, !Object.<string, !WebInspector.Data
baseTableView>>} */ |
83 this._databaseTableViews = new Map(); | 87 this._databaseTableViews = new Map(); |
84 /** @type {!Map.<!WebInspector.Database, !WebInspector.DatabaseQueryView>} *
/ | 88 /** @type {!Map.<!WebInspector.Database, !WebInspector.DatabaseQueryView>} *
/ |
85 this._databaseQueryViews = new Map(); | 89 this._databaseQueryViews = new Map(); |
86 /** @type {!Map.<!WebInspector.Database, !WebInspector.DatabaseTreeElement>}
*/ | 90 /** @type {!Map.<!WebInspector.Database, !WebInspector.DatabaseTreeElement>}
*/ |
87 this._databaseTreeElements = new Map(); | 91 this._databaseTreeElements = new Map(); |
88 /** @type {!Map.<!WebInspector.DOMStorage, !WebInspector.DOMStorageItemsView
>} */ | 92 /** @type {!Map.<!WebInspector.DOMStorage, !WebInspector.DOMStorageItemsView
>} */ |
89 this._domStorageViews = new Map(); | 93 this._domStorageViews = new Map(); |
90 /** @type {!Map.<!WebInspector.DOMStorage, !WebInspector.DOMStorageTreeEleme
nt>} */ | 94 /** @type {!Map.<!WebInspector.DOMStorage, !WebInspector.DOMStorageTreeEleme
nt>} */ |
91 this._domStorageTreeElements = new Map(); | 95 this._domStorageTreeElements = new Map(); |
92 /** @type {!Object.<string, !WebInspector.CookieItemsView>} */ | 96 /** @type {!Object.<string, !WebInspector.CookieItemsView>} */ |
93 this._cookieViews = {}; | 97 this._cookieViews = {}; |
94 /** @type {!Object.<string, boolean>} */ | 98 /** @type {!Object.<string, boolean>} */ |
95 this._domains = {}; | 99 this._domains = {}; |
96 | 100 |
97 this.panelSidebarElement().addEventListener("mousemove", this._onmousemove.b
ind(this), false); | 101 this.panelSidebarElement().addEventListener('mousemove', this._onmousemove.b
ind(this), false); |
98 this.panelSidebarElement().addEventListener("mouseleave", this._onmouseleave
.bind(this), false); | 102 this.panelSidebarElement().addEventListener('mouseleave', this._onmouseleave
.bind(this), false); |
99 | 103 |
100 WebInspector.targetManager.observeTargets(this); | 104 WebInspector.targetManager.observeTargets(this); |
101 }; | 105 } |
102 | 106 |
103 WebInspector.ResourcesPanel.prototype = { | 107 /** |
| 108 * @return {!WebInspector.ResourcesPanel} |
| 109 */ |
| 110 static _instance() { |
| 111 return /** @type {!WebInspector.ResourcesPanel} */ (self.runtime.sharedInsta
nce(WebInspector.ResourcesPanel)); |
| 112 } |
| 113 |
| 114 /** |
| 115 * @param {string} title |
| 116 * @return {!TreeElement} |
| 117 */ |
| 118 _addSidebarSection(title) { |
| 119 var treeElement = new TreeElement(title, true); |
| 120 treeElement.listItemElement.classList.add('storage-group-list-item'); |
| 121 treeElement.setCollapsible(false); |
| 122 treeElement.selectable = false; |
| 123 this._sidebarTree.appendChild(treeElement); |
| 124 return treeElement; |
| 125 } |
| 126 |
| 127 /** |
| 128 * @override |
| 129 * @param {!WebInspector.Target} target |
| 130 */ |
| 131 targetAdded(target) { |
| 132 if (this._target) |
| 133 return; |
| 134 this._target = target; |
| 135 this._databaseModel = WebInspector.DatabaseModel.fromTarget(target); |
| 136 |
| 137 this._databaseModel.addEventListener(WebInspector.DatabaseModel.Events.Datab
aseAdded, this._databaseAdded, this); |
| 138 this._databaseModel.addEventListener(WebInspector.DatabaseModel.Events.Datab
asesRemoved, this._resetWebSQL, this); |
| 139 |
| 140 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target); |
| 141 if (!resourceTreeModel) |
| 142 return; |
| 143 |
| 144 if (resourceTreeModel.cachedResourcesLoaded()) |
| 145 this._initialize(); |
| 146 |
| 147 resourceTreeModel.addEventListener( |
| 148 WebInspector.ResourceTreeModel.Events.CachedResourcesLoaded, this._initi
alize, this); |
| 149 resourceTreeModel.addEventListener( |
| 150 WebInspector.ResourceTreeModel.Events.WillLoadCachedResources, this._res
etWithFrames, this); |
| 151 } |
| 152 |
| 153 /** |
| 154 * @override |
| 155 * @param {!WebInspector.Target} target |
| 156 */ |
| 157 targetRemoved(target) { |
| 158 if (target !== this._target) |
| 159 return; |
| 160 delete this._target; |
| 161 |
| 162 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target); |
| 163 if (resourceTreeModel) { |
| 164 resourceTreeModel.removeEventListener( |
| 165 WebInspector.ResourceTreeModel.Events.CachedResourcesLoaded, this._ini
tialize, this); |
| 166 resourceTreeModel.removeEventListener( |
| 167 WebInspector.ResourceTreeModel.Events.WillLoadCachedResources, this._r
esetWithFrames, this); |
| 168 } |
| 169 this._databaseModel.removeEventListener(WebInspector.DatabaseModel.Events.Da
tabaseAdded, this._databaseAdded, this); |
| 170 this._databaseModel.removeEventListener( |
| 171 WebInspector.DatabaseModel.Events.DatabasesRemoved, this._resetWebSQL, t
his); |
| 172 |
| 173 this._resetWithFrames(); |
| 174 } |
| 175 |
| 176 /** |
| 177 * @override |
| 178 */ |
| 179 focus() { |
| 180 this._sidebarTree.focus(); |
| 181 } |
| 182 |
| 183 _initialize() { |
| 184 this._databaseModel.enable(); |
| 185 |
| 186 var indexedDBModel = WebInspector.IndexedDBModel.fromTarget(this._target); |
| 187 if (indexedDBModel) |
| 188 indexedDBModel.enable(); |
| 189 |
| 190 var cacheStorageModel = WebInspector.ServiceWorkerCacheModel.fromTarget(this
._target); |
| 191 if (cacheStorageModel) |
| 192 cacheStorageModel.enable(); |
| 193 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(this._targ
et); |
| 194 if (resourceTreeModel) { |
| 195 this._populateResourceTree(resourceTreeModel); |
| 196 this._populateApplicationCacheTree(resourceTreeModel); |
| 197 } |
| 198 var domStorageModel = WebInspector.DOMStorageModel.fromTarget(this._target); |
| 199 if (domStorageModel) |
| 200 this._populateDOMStorageTree(domStorageModel); |
| 201 this.indexedDBListTreeElement._initialize(); |
| 202 this.cacheStorageListTreeElement._initialize(); |
| 203 this._initDefaultSelection(); |
| 204 } |
| 205 |
| 206 _initDefaultSelection() { |
| 207 var itemURL = this._resourcesLastSelectedItemSetting.get(); |
| 208 if (itemURL) { |
| 209 var rootElement = this._sidebarTree.rootElement(); |
| 210 for (var treeElement = rootElement.firstChild(); treeElement; |
| 211 treeElement = treeElement.traverseNextTreeElement(false, rootElement,
true)) { |
| 212 if (treeElement.itemURL === itemURL) { |
| 213 treeElement.revealAndSelect(true); |
| 214 return; |
| 215 } |
| 216 } |
| 217 } |
| 218 this._manifestTreeElement.select(); |
| 219 } |
| 220 |
| 221 _resetWithFrames() { |
| 222 this.resourcesListTreeElement.removeChildren(); |
| 223 this._treeElementForFrameId = {}; |
| 224 this._reset(); |
| 225 } |
| 226 |
| 227 _resetWebSQL() { |
| 228 if (this.visibleView instanceof WebInspector.DatabaseQueryView || |
| 229 this.visibleView instanceof WebInspector.DatabaseTableView) { |
| 230 this.visibleView.detach(); |
| 231 delete this.visibleView; |
| 232 } |
| 233 |
| 234 var queryViews = this._databaseQueryViews.valuesArray(); |
| 235 for (var i = 0; i < queryViews.length; ++i) |
| 236 queryViews[i].removeEventListener( |
| 237 WebInspector.DatabaseQueryView.Events.SchemaUpdated, this._updateDatab
aseTables, this); |
| 238 this._databaseTableViews.clear(); |
| 239 this._databaseQueryViews.clear(); |
| 240 this._databaseTreeElements.clear(); |
| 241 this.databasesListTreeElement.removeChildren(); |
| 242 this.databasesListTreeElement.setExpandable(false); |
| 243 } |
| 244 |
| 245 _resetDOMStorage() { |
| 246 if (this.visibleView instanceof WebInspector.DOMStorageItemsView) { |
| 247 this.visibleView.detach(); |
| 248 delete this.visibleView; |
| 249 } |
| 250 |
| 251 this._domStorageViews.clear(); |
| 252 this._domStorageTreeElements.clear(); |
| 253 this.localStorageListTreeElement.removeChildren(); |
| 254 this.sessionStorageListTreeElement.removeChildren(); |
| 255 } |
| 256 |
| 257 _resetCookies() { |
| 258 if (this.visibleView instanceof WebInspector.CookieItemsView) { |
| 259 this.visibleView.detach(); |
| 260 delete this.visibleView; |
| 261 } |
| 262 this._cookieViews = {}; |
| 263 this.cookieListTreeElement.removeChildren(); |
| 264 } |
| 265 |
| 266 _resetCacheStorage() { |
| 267 if (this.visibleView instanceof WebInspector.ServiceWorkerCacheView) { |
| 268 this.visibleView.detach(); |
| 269 delete this.visibleView; |
| 270 } |
| 271 this.cacheStorageListTreeElement.removeChildren(); |
| 272 this.cacheStorageListTreeElement.setExpandable(false); |
| 273 } |
| 274 |
| 275 _resetAppCache() { |
| 276 for (var frameId of Object.keys(this._applicationCacheFrameElements)) |
| 277 this._applicationCacheFrameManifestRemoved({data: frameId}); |
| 278 this.applicationCacheListTreeElement.setExpandable(false); |
| 279 } |
| 280 |
| 281 _reset() { |
| 282 this._domains = {}; |
| 283 this._resetWebSQL(); |
| 284 this._resetDOMStorage(); |
| 285 this._resetCookies(); |
| 286 this._resetCacheStorage(); |
| 287 // No need to this._resetAppCache. |
| 288 |
| 289 if ((this.visibleView instanceof WebInspector.ResourceSourceFrame) || |
| 290 (this.visibleView instanceof WebInspector.ImageView) || (this.visibleVie
w instanceof WebInspector.FontView)) { |
| 291 this.visibleView.detach(); |
| 292 delete this.visibleView; |
| 293 } |
| 294 |
| 295 this._storageViewToolbar.removeToolbarItems(); |
| 296 |
| 297 if (this._sidebarTree.selectedTreeElement) |
| 298 this._sidebarTree.selectedTreeElement.deselect(); |
| 299 } |
| 300 |
| 301 /** |
| 302 * @param {!WebInspector.ResourceTreeModel} resourceTreeModel |
| 303 */ |
| 304 _populateResourceTree(resourceTreeModel) { |
| 305 this._treeElementForFrameId = {}; |
| 306 resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.Fra
meAdded, this._frameAdded, this); |
| 307 resourceTreeModel.addEventListener( |
| 308 WebInspector.ResourceTreeModel.Events.FrameNavigated, this._frameNavigat
ed, this); |
| 309 resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.Fra
meDetached, this._frameDetached, this); |
| 310 resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events.Res
ourceAdded, this._resourceAdded, this); |
| 311 |
104 /** | 312 /** |
105 * @param {string} title | 313 * @param {!WebInspector.ResourceTreeFrame} frame |
106 * @return {!TreeElement} | 314 * @this {WebInspector.ResourcesPanel} |
107 */ | 315 */ |
108 _addSidebarSection: function(title) | 316 function populateFrame(frame) { |
109 { | 317 this._frameAdded({data: frame}); |
110 var treeElement = new TreeElement(title, true); | 318 for (var i = 0; i < frame.childFrames.length; ++i) |
111 treeElement.listItemElement.classList.add("storage-group-list-item"); | 319 populateFrame.call(this, frame.childFrames[i]); |
112 treeElement.setCollapsible(false); | 320 |
113 treeElement.selectable = false; | 321 var resources = frame.resources(); |
114 this._sidebarTree.appendChild(treeElement); | 322 for (var i = 0; i < resources.length; ++i) |
115 return treeElement; | 323 this._resourceAdded({data: resources[i]}); |
116 }, | 324 } |
117 | 325 populateFrame.call(this, resourceTreeModel.mainFrame); |
118 /** | 326 } |
119 * @override | 327 |
120 * @param {!WebInspector.Target} target | 328 _frameAdded(event) { |
121 */ | 329 var frame = event.data; |
122 targetAdded: function(target) | 330 var parentFrame = frame.parentFrame; |
123 { | 331 |
124 if (this._target) | 332 var parentTreeElement = parentFrame ? this._treeElementForFrameId[parentFram
e.id] : this.resourcesListTreeElement; |
125 return; | 333 if (!parentTreeElement) { |
126 this._target = target; | 334 console.warn('No frame to route ' + frame.url + ' to.'); |
127 this._databaseModel = WebInspector.DatabaseModel.fromTarget(target); | 335 return; |
128 | 336 } |
129 this._databaseModel.addEventListener(WebInspector.DatabaseModel.Events.D
atabaseAdded, this._databaseAdded, this); | 337 |
130 this._databaseModel.addEventListener(WebInspector.DatabaseModel.Events.D
atabasesRemoved, this._resetWebSQL, this); | 338 var frameTreeElement = new WebInspector.FrameTreeElement(this, frame); |
131 | 339 this._treeElementForFrameId[frame.id] = frameTreeElement; |
132 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target
); | 340 parentTreeElement.appendChild(frameTreeElement); |
133 if (!resourceTreeModel) | 341 } |
134 return; | 342 |
135 | 343 _frameDetached(event) { |
136 if (resourceTreeModel.cachedResourcesLoaded()) | 344 var frame = event.data; |
137 this._initialize(); | 345 var frameTreeElement = this._treeElementForFrameId[frame.id]; |
138 | 346 if (!frameTreeElement) |
139 resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events
.CachedResourcesLoaded, this._initialize, this); | 347 return; |
140 resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events
.WillLoadCachedResources, this._resetWithFrames, this); | 348 |
141 }, | 349 delete this._treeElementForFrameId[frame.id]; |
142 | 350 if (frameTreeElement.parent) |
143 /** | 351 frameTreeElement.parent.removeChild(frameTreeElement); |
144 * @override | 352 } |
145 * @param {!WebInspector.Target} target | 353 |
146 */ | 354 _resourceAdded(event) { |
147 targetRemoved: function(target) | 355 var resource = event.data; |
148 { | 356 var frameId = resource.frameId; |
149 if (target !== this._target) | 357 |
150 return; | 358 if (resource.statusCode >= 301 && resource.statusCode <= 303) |
151 delete this._target; | 359 return; |
152 | 360 |
153 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(target
); | 361 var frameTreeElement = this._treeElementForFrameId[frameId]; |
154 if (resourceTreeModel) { | 362 if (!frameTreeElement) { |
155 resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel
.Events.CachedResourcesLoaded, this._initialize, this); | 363 // This is a frame's main resource, it will be retained |
156 resourceTreeModel.removeEventListener(WebInspector.ResourceTreeModel
.Events.WillLoadCachedResources, this._resetWithFrames, this); | 364 // and re-added by the resource manager; |
| 365 return; |
| 366 } |
| 367 |
| 368 frameTreeElement.appendResource(resource); |
| 369 } |
| 370 |
| 371 _frameNavigated(event) { |
| 372 var frame = event.data; |
| 373 |
| 374 if (!frame.parentFrame) |
| 375 this._reset(); |
| 376 |
| 377 var frameId = frame.id; |
| 378 var frameTreeElement = this._treeElementForFrameId[frameId]; |
| 379 if (frameTreeElement) |
| 380 frameTreeElement.frameNavigated(frame); |
| 381 |
| 382 var applicationCacheFrameTreeElement = this._applicationCacheFrameElements[f
rameId]; |
| 383 if (applicationCacheFrameTreeElement) |
| 384 applicationCacheFrameTreeElement.frameNavigated(frame); |
| 385 } |
| 386 |
| 387 /** |
| 388 * @param {!WebInspector.Event} event |
| 389 */ |
| 390 _databaseAdded(event) { |
| 391 var database = /** @type {!WebInspector.Database} */ (event.data); |
| 392 this._addDatabase(database); |
| 393 } |
| 394 |
| 395 /** |
| 396 * @param {!WebInspector.Database} database |
| 397 */ |
| 398 _addDatabase(database) { |
| 399 var databaseTreeElement = new WebInspector.DatabaseTreeElement(this, databas
e); |
| 400 this._databaseTreeElements.set(database, databaseTreeElement); |
| 401 this.databasesListTreeElement.appendChild(databaseTreeElement); |
| 402 } |
| 403 |
| 404 addDocumentURL(url) { |
| 405 var parsedURL = url.asParsedURL(); |
| 406 if (!parsedURL) |
| 407 return; |
| 408 |
| 409 var domain = parsedURL.securityOrigin(); |
| 410 if (!this._domains[domain]) { |
| 411 this._domains[domain] = true; |
| 412 var cookieDomainTreeElement = new WebInspector.CookieTreeElement(this, dom
ain); |
| 413 this.cookieListTreeElement.appendChild(cookieDomainTreeElement); |
| 414 } |
| 415 } |
| 416 |
| 417 /** |
| 418 * @param {!WebInspector.Event} event |
| 419 */ |
| 420 _domStorageAdded(event) { |
| 421 var domStorage = /** @type {!WebInspector.DOMStorage} */ (event.data); |
| 422 this._addDOMStorage(domStorage); |
| 423 } |
| 424 |
| 425 /** |
| 426 * @param {!WebInspector.DOMStorage} domStorage |
| 427 */ |
| 428 _addDOMStorage(domStorage) { |
| 429 console.assert(!this._domStorageTreeElements.get(domStorage)); |
| 430 |
| 431 var domStorageTreeElement = new WebInspector.DOMStorageTreeElement(this, dom
Storage); |
| 432 this._domStorageTreeElements.set(domStorage, domStorageTreeElement); |
| 433 if (domStorage.isLocalStorage) |
| 434 this.localStorageListTreeElement.appendChild(domStorageTreeElement); |
| 435 else |
| 436 this.sessionStorageListTreeElement.appendChild(domStorageTreeElement); |
| 437 } |
| 438 |
| 439 /** |
| 440 * @param {!WebInspector.Event} event |
| 441 */ |
| 442 _domStorageRemoved(event) { |
| 443 var domStorage = /** @type {!WebInspector.DOMStorage} */ (event.data); |
| 444 this._removeDOMStorage(domStorage); |
| 445 } |
| 446 |
| 447 /** |
| 448 * @param {!WebInspector.DOMStorage} domStorage |
| 449 */ |
| 450 _removeDOMStorage(domStorage) { |
| 451 var treeElement = this._domStorageTreeElements.get(domStorage); |
| 452 if (!treeElement) |
| 453 return; |
| 454 var wasSelected = treeElement.selected; |
| 455 var parentListTreeElement = treeElement.parent; |
| 456 parentListTreeElement.removeChild(treeElement); |
| 457 if (wasSelected) |
| 458 parentListTreeElement.select(); |
| 459 this._domStorageTreeElements.remove(domStorage); |
| 460 this._domStorageViews.remove(domStorage); |
| 461 } |
| 462 |
| 463 /** |
| 464 * @param {!WebInspector.Database} database |
| 465 */ |
| 466 selectDatabase(database) { |
| 467 if (database) { |
| 468 this._showDatabase(database); |
| 469 this._databaseTreeElements.get(database).select(); |
| 470 } |
| 471 } |
| 472 |
| 473 /** |
| 474 * @param {!WebInspector.DOMStorage} domStorage |
| 475 */ |
| 476 selectDOMStorage(domStorage) { |
| 477 if (domStorage) { |
| 478 this._showDOMStorage(domStorage); |
| 479 this._domStorageTreeElements.get(domStorage).select(); |
| 480 } |
| 481 } |
| 482 |
| 483 /** |
| 484 * @param {!WebInspector.Resource} resource |
| 485 * @param {number=} line |
| 486 * @param {number=} column |
| 487 * @return {boolean} |
| 488 */ |
| 489 showResource(resource, line, column) { |
| 490 var resourceTreeElement = this._findTreeElementForResource(resource); |
| 491 if (resourceTreeElement) |
| 492 resourceTreeElement.revealAndSelect(true); |
| 493 |
| 494 if (typeof line === 'number') { |
| 495 var resourceSourceFrame = this._resourceSourceFrameViewForResource(resourc
e); |
| 496 if (resourceSourceFrame) |
| 497 resourceSourceFrame.revealPosition(line, column, true); |
| 498 } |
| 499 return true; |
| 500 } |
| 501 |
| 502 _showResourceView(resource) { |
| 503 var view = this._resourceViewForResource(resource); |
| 504 if (!view) { |
| 505 this.visibleView.detach(); |
| 506 return; |
| 507 } |
| 508 this._innerShowView(view); |
| 509 } |
| 510 |
| 511 /** |
| 512 * @param {!WebInspector.Resource} resource |
| 513 * @return {?WebInspector.Widget} |
| 514 */ |
| 515 _resourceViewForResource(resource) { |
| 516 if (resource.hasTextContent()) { |
| 517 var treeElement = this._findTreeElementForResource(resource); |
| 518 if (!treeElement) |
| 519 return null; |
| 520 return treeElement.sourceView(); |
| 521 } |
| 522 |
| 523 switch (resource.resourceType()) { |
| 524 case WebInspector.resourceTypes.Image: |
| 525 return new WebInspector.ImageView(resource.mimeType, resource); |
| 526 case WebInspector.resourceTypes.Font: |
| 527 return new WebInspector.FontView(resource.mimeType, resource); |
| 528 default: |
| 529 return new WebInspector.EmptyWidget(resource.url); |
| 530 } |
| 531 } |
| 532 |
| 533 /** |
| 534 * @param {!WebInspector.Resource} resource |
| 535 * @return {?WebInspector.ResourceSourceFrame} |
| 536 */ |
| 537 _resourceSourceFrameViewForResource(resource) { |
| 538 var resourceView = this._resourceViewForResource(resource); |
| 539 if (resourceView && resourceView instanceof WebInspector.ResourceSourceFrame
) |
| 540 return /** @type {!WebInspector.ResourceSourceFrame} */ (resourceView); |
| 541 return null; |
| 542 } |
| 543 |
| 544 /** |
| 545 * @param {!WebInspector.Database} database |
| 546 * @param {string=} tableName |
| 547 */ |
| 548 _showDatabase(database, tableName) { |
| 549 if (!database) |
| 550 return; |
| 551 |
| 552 var view; |
| 553 if (tableName) { |
| 554 var tableViews = this._databaseTableViews.get(database); |
| 555 if (!tableViews) { |
| 556 tableViews = /** @type {!Object.<string, !WebInspector.DatabaseTableView
>} */ ({}); |
| 557 this._databaseTableViews.set(database, tableViews); |
| 558 } |
| 559 view = tableViews[tableName]; |
| 560 if (!view) { |
| 561 view = new WebInspector.DatabaseTableView(database, tableName); |
| 562 tableViews[tableName] = view; |
| 563 } |
| 564 } else { |
| 565 view = this._databaseQueryViews.get(database); |
| 566 if (!view) { |
| 567 view = new WebInspector.DatabaseQueryView(database); |
| 568 this._databaseQueryViews.set(database, view); |
| 569 view.addEventListener(WebInspector.DatabaseQueryView.Events.SchemaUpdate
d, this._updateDatabaseTables, this); |
| 570 } |
| 571 } |
| 572 |
| 573 this._innerShowView(view); |
| 574 } |
| 575 |
| 576 /** |
| 577 * @param {!WebInspector.DOMStorage} domStorage |
| 578 */ |
| 579 _showDOMStorage(domStorage) { |
| 580 if (!domStorage) |
| 581 return; |
| 582 |
| 583 var view; |
| 584 view = this._domStorageViews.get(domStorage); |
| 585 if (!view) { |
| 586 view = new WebInspector.DOMStorageItemsView(domStorage); |
| 587 this._domStorageViews.set(domStorage, view); |
| 588 } |
| 589 |
| 590 this._innerShowView(view); |
| 591 } |
| 592 |
| 593 /** |
| 594 * @param {!WebInspector.CookieTreeElement} treeElement |
| 595 * @param {string} cookieDomain |
| 596 */ |
| 597 showCookies(treeElement, cookieDomain) { |
| 598 var view = this._cookieViews[cookieDomain]; |
| 599 if (!view) { |
| 600 view = new WebInspector.CookieItemsView(treeElement, cookieDomain); |
| 601 this._cookieViews[cookieDomain] = view; |
| 602 } |
| 603 |
| 604 this._innerShowView(view); |
| 605 } |
| 606 |
| 607 /** |
| 608 * @param {string} cookieDomain |
| 609 */ |
| 610 clearCookies(cookieDomain) { |
| 611 if (this._cookieViews[cookieDomain]) |
| 612 this._cookieViews[cookieDomain].clear(); |
| 613 } |
| 614 |
| 615 showApplicationCache(frameId) { |
| 616 if (!this._applicationCacheViews[frameId]) |
| 617 this._applicationCacheViews[frameId] = |
| 618 new WebInspector.ApplicationCacheItemsView(this._applicationCacheModel
, frameId); |
| 619 |
| 620 this._innerShowView(this._applicationCacheViews[frameId]); |
| 621 } |
| 622 |
| 623 /** |
| 624 * @param {!WebInspector.Widget} view |
| 625 */ |
| 626 showFileSystem(view) { |
| 627 this._innerShowView(view); |
| 628 } |
| 629 |
| 630 showCategoryView(categoryName) { |
| 631 if (!this._categoryView) |
| 632 this._categoryView = new WebInspector.StorageCategoryView(); |
| 633 this._categoryView.setText(categoryName); |
| 634 this._innerShowView(this._categoryView); |
| 635 } |
| 636 |
| 637 _innerShowView(view) { |
| 638 if (this.visibleView === view) |
| 639 return; |
| 640 |
| 641 if (this.visibleView) |
| 642 this.visibleView.detach(); |
| 643 |
| 644 view.show(this.storageViews); |
| 645 this.visibleView = view; |
| 646 |
| 647 this._storageViewToolbar.removeToolbarItems(); |
| 648 var toolbarItems = view instanceof WebInspector.SimpleView ? view.syncToolba
rItems() : null; |
| 649 for (var i = 0; toolbarItems && i < toolbarItems.length; ++i) |
| 650 this._storageViewToolbar.appendToolbarItem(toolbarItems[i]); |
| 651 } |
| 652 |
| 653 closeVisibleView() { |
| 654 if (!this.visibleView) |
| 655 return; |
| 656 this.visibleView.detach(); |
| 657 delete this.visibleView; |
| 658 } |
| 659 |
| 660 _updateDatabaseTables(event) { |
| 661 var database = event.data; |
| 662 |
| 663 if (!database) |
| 664 return; |
| 665 |
| 666 var databasesTreeElement = this._databaseTreeElements.get(database); |
| 667 if (!databasesTreeElement) |
| 668 return; |
| 669 |
| 670 databasesTreeElement.invalidateChildren(); |
| 671 var tableViews = this._databaseTableViews.get(database); |
| 672 |
| 673 if (!tableViews) |
| 674 return; |
| 675 |
| 676 var tableNamesHash = {}; |
| 677 var self = this; |
| 678 function tableNamesCallback(tableNames) { |
| 679 var tableNamesLength = tableNames.length; |
| 680 for (var i = 0; i < tableNamesLength; ++i) |
| 681 tableNamesHash[tableNames[i]] = true; |
| 682 |
| 683 for (var tableName in tableViews) { |
| 684 if (!(tableName in tableNamesHash)) { |
| 685 if (self.visibleView === tableViews[tableName]) |
| 686 self.closeVisibleView(); |
| 687 delete tableViews[tableName]; |
157 } | 688 } |
158 this._databaseModel.removeEventListener(WebInspector.DatabaseModel.Event
s.DatabaseAdded, this._databaseAdded, this); | 689 } |
159 this._databaseModel.removeEventListener(WebInspector.DatabaseModel.Event
s.DatabasesRemoved, this._resetWebSQL, this); | 690 } |
160 | 691 database.getTableNames(tableNamesCallback); |
161 this._resetWithFrames(); | 692 } |
162 }, | 693 |
163 | 694 /** |
164 /** | 695 * @param {!WebInspector.DOMStorageModel} domStorageModel |
165 * @override | 696 */ |
166 */ | 697 _populateDOMStorageTree(domStorageModel) { |
167 focus: function() | 698 domStorageModel.enable(); |
168 { | 699 domStorageModel.storages().forEach(this._addDOMStorage.bind(this)); |
169 this._sidebarTree.focus(); | 700 domStorageModel.addEventListener(WebInspector.DOMStorageModel.Events.DOMStor
ageAdded, this._domStorageAdded, this); |
170 }, | 701 domStorageModel.addEventListener( |
171 | 702 WebInspector.DOMStorageModel.Events.DOMStorageRemoved, this._domStorageR
emoved, this); |
172 _initialize: function() | 703 } |
173 { | 704 |
174 this._databaseModel.enable(); | 705 /** |
175 | 706 * @param {!WebInspector.ResourceTreeModel} resourceTreeModel |
176 var indexedDBModel = WebInspector.IndexedDBModel.fromTarget(this._target
); | 707 */ |
177 if (indexedDBModel) | 708 _populateApplicationCacheTree(resourceTreeModel) { |
178 indexedDBModel.enable(); | 709 this._applicationCacheModel = new WebInspector.ApplicationCacheModel(this._t
arget, resourceTreeModel); |
179 | 710 |
180 var cacheStorageModel = WebInspector.ServiceWorkerCacheModel.fromTarget(
this._target); | 711 this._applicationCacheViews = {}; |
181 if (cacheStorageModel) | 712 this._applicationCacheFrameElements = {}; |
182 cacheStorageModel.enable(); | 713 this._applicationCacheManifestElements = {}; |
183 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(this._
target); | 714 |
184 if (resourceTreeModel) { | 715 this._applicationCacheModel.addEventListener( |
185 this._populateResourceTree(resourceTreeModel); | 716 WebInspector.ApplicationCacheModel.Events.FrameManifestAdded, this._appl
icationCacheFrameManifestAdded, this); |
186 this._populateApplicationCacheTree(resourceTreeModel); | 717 this._applicationCacheModel.addEventListener( |
187 } | 718 WebInspector.ApplicationCacheModel.Events.FrameManifestRemoved, this._ap
plicationCacheFrameManifestRemoved, |
188 var domStorageModel = WebInspector.DOMStorageModel.fromTarget(this._targ
et); | 719 this); |
189 if (domStorageModel) | 720 this._applicationCacheModel.addEventListener( |
190 this._populateDOMStorageTree(domStorageModel); | 721 WebInspector.ApplicationCacheModel.Events.FrameManifestsReset, this._res
etAppCache, this); |
191 this.indexedDBListTreeElement._initialize(); | 722 |
192 this.cacheStorageListTreeElement._initialize(); | 723 this._applicationCacheModel.addEventListener( |
193 this._initDefaultSelection(); | 724 WebInspector.ApplicationCacheModel.Events.FrameManifestStatusUpdated, |
194 }, | 725 this._applicationCacheFrameManifestStatusChanged, this); |
195 | 726 this._applicationCacheModel.addEventListener( |
196 _initDefaultSelection: function() | 727 WebInspector.ApplicationCacheModel.Events.NetworkStateChanged, this._app
licationCacheNetworkStateChanged, this); |
197 { | 728 } |
198 var itemURL = this._resourcesLastSelectedItemSetting.get(); | 729 |
199 if (itemURL) { | 730 _applicationCacheFrameManifestAdded(event) { |
200 var rootElement = this._sidebarTree.rootElement(); | 731 var frameId = event.data; |
201 for (var treeElement = rootElement.firstChild(); treeElement; treeEl
ement = treeElement.traverseNextTreeElement(false, rootElement, true)) { | 732 var manifestURL = this._applicationCacheModel.frameManifestURL(frameId); |
202 if (treeElement.itemURL === itemURL) { | 733 |
203 treeElement.revealAndSelect(true); | 734 var manifestTreeElement = this._applicationCacheManifestElements[manifestURL
]; |
204 return; | 735 if (!manifestTreeElement) { |
205 } | 736 manifestTreeElement = new WebInspector.ApplicationCacheManifestTreeElement
(this, manifestURL); |
206 } | 737 this.applicationCacheListTreeElement.appendChild(manifestTreeElement); |
207 } | 738 this._applicationCacheManifestElements[manifestURL] = manifestTreeElement; |
208 this._manifestTreeElement.select(); | 739 } |
209 }, | 740 |
210 | 741 var frameTreeElement = new WebInspector.ApplicationCacheFrameTreeElement(thi
s, frameId, manifestURL); |
211 _resetWithFrames: function() | 742 manifestTreeElement.appendChild(frameTreeElement); |
212 { | 743 manifestTreeElement.expand(); |
213 this.resourcesListTreeElement.removeChildren(); | 744 this._applicationCacheFrameElements[frameId] = frameTreeElement; |
214 this._treeElementForFrameId = {}; | 745 } |
215 this._reset(); | 746 |
216 }, | 747 _applicationCacheFrameManifestRemoved(event) { |
217 | 748 var frameId = event.data; |
218 _resetWebSQL: function() | 749 var frameTreeElement = this._applicationCacheFrameElements[frameId]; |
219 { | 750 if (!frameTreeElement) |
220 if (this.visibleView instanceof WebInspector.DatabaseQueryView || this.v
isibleView instanceof WebInspector.DatabaseTableView) { | 751 return; |
221 this.visibleView.detach(); | 752 |
222 delete this.visibleView; | 753 var manifestURL = frameTreeElement.manifestURL; |
223 } | 754 delete this._applicationCacheFrameElements[frameId]; |
224 | 755 delete this._applicationCacheViews[frameId]; |
225 var queryViews = this._databaseQueryViews.valuesArray(); | 756 frameTreeElement.parent.removeChild(frameTreeElement); |
226 for (var i = 0; i < queryViews.length; ++i) | 757 |
227 queryViews[i].removeEventListener(WebInspector.DatabaseQueryView.Eve
nts.SchemaUpdated, this._updateDatabaseTables, this); | 758 var manifestTreeElement = this._applicationCacheManifestElements[manifestURL
]; |
228 this._databaseTableViews.clear(); | 759 if (manifestTreeElement.childCount()) |
229 this._databaseQueryViews.clear(); | 760 return; |
230 this._databaseTreeElements.clear(); | 761 |
231 this.databasesListTreeElement.removeChildren(); | 762 delete this._applicationCacheManifestElements[manifestURL]; |
232 this.databasesListTreeElement.setExpandable(false); | 763 manifestTreeElement.parent.removeChild(manifestTreeElement); |
233 }, | 764 } |
234 | 765 |
235 _resetDOMStorage: function() | 766 _applicationCacheFrameManifestStatusChanged(event) { |
236 { | 767 var frameId = event.data; |
237 if (this.visibleView instanceof WebInspector.DOMStorageItemsView) { | 768 var status = this._applicationCacheModel.frameManifestStatus(frameId); |
238 this.visibleView.detach(); | 769 |
239 delete this.visibleView; | 770 if (this._applicationCacheViews[frameId]) |
240 } | 771 this._applicationCacheViews[frameId].updateStatus(status); |
241 | 772 } |
242 this._domStorageViews.clear(); | 773 |
243 this._domStorageTreeElements.clear(); | 774 _applicationCacheNetworkStateChanged(event) { |
244 this.localStorageListTreeElement.removeChildren(); | 775 var isNowOnline = event.data; |
245 this.sessionStorageListTreeElement.removeChildren(); | 776 |
246 }, | 777 for (var manifestURL in this._applicationCacheViews) |
247 | 778 this._applicationCacheViews[manifestURL].updateNetworkState(isNowOnline); |
248 _resetCookies: function() | 779 } |
249 { | 780 |
250 if (this.visibleView instanceof WebInspector.CookieItemsView) { | 781 _findTreeElementForResource(resource) { |
251 this.visibleView.detach(); | 782 return resource[WebInspector.FrameResourceTreeElement._symbol]; |
252 delete this.visibleView; | 783 } |
253 } | 784 |
254 this._cookieViews = {}; | 785 showView(view) { |
255 this.cookieListTreeElement.removeChildren(); | 786 if (view) |
256 }, | 787 this.showResource(view.resource); |
257 | 788 } |
258 _resetCacheStorage: function() | 789 |
259 { | 790 _onmousemove(event) { |
260 if (this.visibleView instanceof WebInspector.ServiceWorkerCacheView) { | 791 var nodeUnderMouse = event.target; |
261 this.visibleView.detach(); | 792 if (!nodeUnderMouse) |
262 delete this.visibleView; | 793 return; |
263 } | 794 |
264 this.cacheStorageListTreeElement.removeChildren(); | 795 var listNode = nodeUnderMouse.enclosingNodeOrSelfWithNodeName('li'); |
265 this.cacheStorageListTreeElement.setExpandable(false); | 796 if (!listNode) |
266 }, | 797 return; |
267 | 798 |
268 _resetAppCache: function() | 799 var element = listNode.treeElement; |
269 { | 800 if (this._previousHoveredElement === element) |
270 for (var frameId of Object.keys(this._applicationCacheFrameElements)) | 801 return; |
271 this._applicationCacheFrameManifestRemoved({data: frameId}); | 802 |
272 this.applicationCacheListTreeElement.setExpandable(false); | 803 if (this._previousHoveredElement) { |
273 }, | 804 this._previousHoveredElement.hovered = false; |
274 | 805 delete this._previousHoveredElement; |
275 _reset: function() | 806 } |
276 { | 807 |
277 this._domains = {}; | 808 if (element instanceof WebInspector.FrameTreeElement) { |
278 this._resetWebSQL(); | 809 this._previousHoveredElement = element; |
279 this._resetDOMStorage(); | 810 element.hovered = true; |
280 this._resetCookies(); | 811 } |
281 this._resetCacheStorage(); | 812 } |
282 // No need to this._resetAppCache. | 813 |
283 | 814 _onmouseleave(event) { |
284 if ((this.visibleView instanceof WebInspector.ResourceSourceFrame) | 815 if (this._previousHoveredElement) { |
285 || (this.visibleView instanceof WebInspector.ImageView) | 816 this._previousHoveredElement.hovered = false; |
286 || (this.visibleView instanceof WebInspector.FontView)) { | 817 delete this._previousHoveredElement; |
287 this.visibleView.detach(); | 818 } |
288 delete this.visibleView; | 819 } |
289 } | 820 }; |
290 | 821 |
291 this._storageViewToolbar.removeToolbarItems(); | 822 /** |
292 | |
293 if (this._sidebarTree.selectedTreeElement) | |
294 this._sidebarTree.selectedTreeElement.deselect(); | |
295 }, | |
296 | |
297 /** | |
298 * @param {!WebInspector.ResourceTreeModel} resourceTreeModel | |
299 */ | |
300 _populateResourceTree: function(resourceTreeModel) | |
301 { | |
302 this._treeElementForFrameId = {}; | |
303 resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events
.FrameAdded, this._frameAdded, this); | |
304 resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events
.FrameNavigated, this._frameNavigated, this); | |
305 resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events
.FrameDetached, this._frameDetached, this); | |
306 resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.Events
.ResourceAdded, this._resourceAdded, this); | |
307 | |
308 /** | |
309 * @param {!WebInspector.ResourceTreeFrame} frame | |
310 * @this {WebInspector.ResourcesPanel} | |
311 */ | |
312 function populateFrame(frame) | |
313 { | |
314 this._frameAdded({data:frame}); | |
315 for (var i = 0; i < frame.childFrames.length; ++i) | |
316 populateFrame.call(this, frame.childFrames[i]); | |
317 | |
318 var resources = frame.resources(); | |
319 for (var i = 0; i < resources.length; ++i) | |
320 this._resourceAdded({data:resources[i]}); | |
321 } | |
322 populateFrame.call(this, resourceTreeModel.mainFrame); | |
323 }, | |
324 | |
325 _frameAdded: function(event) | |
326 { | |
327 var frame = event.data; | |
328 var parentFrame = frame.parentFrame; | |
329 | |
330 var parentTreeElement = parentFrame ? this._treeElementForFrameId[parent
Frame.id] : this.resourcesListTreeElement; | |
331 if (!parentTreeElement) { | |
332 console.warn("No frame to route " + frame.url + " to."); | |
333 return; | |
334 } | |
335 | |
336 var frameTreeElement = new WebInspector.FrameTreeElement(this, frame); | |
337 this._treeElementForFrameId[frame.id] = frameTreeElement; | |
338 parentTreeElement.appendChild(frameTreeElement); | |
339 }, | |
340 | |
341 _frameDetached: function(event) | |
342 { | |
343 var frame = event.data; | |
344 var frameTreeElement = this._treeElementForFrameId[frame.id]; | |
345 if (!frameTreeElement) | |
346 return; | |
347 | |
348 delete this._treeElementForFrameId[frame.id]; | |
349 if (frameTreeElement.parent) | |
350 frameTreeElement.parent.removeChild(frameTreeElement); | |
351 }, | |
352 | |
353 _resourceAdded: function(event) | |
354 { | |
355 var resource = event.data; | |
356 var frameId = resource.frameId; | |
357 | |
358 if (resource.statusCode >= 301 && resource.statusCode <= 303) | |
359 return; | |
360 | |
361 var frameTreeElement = this._treeElementForFrameId[frameId]; | |
362 if (!frameTreeElement) { | |
363 // This is a frame's main resource, it will be retained | |
364 // and re-added by the resource manager; | |
365 return; | |
366 } | |
367 | |
368 frameTreeElement.appendResource(resource); | |
369 }, | |
370 | |
371 _frameNavigated: function(event) | |
372 { | |
373 var frame = event.data; | |
374 | |
375 if (!frame.parentFrame) | |
376 this._reset(); | |
377 | |
378 var frameId = frame.id; | |
379 var frameTreeElement = this._treeElementForFrameId[frameId]; | |
380 if (frameTreeElement) | |
381 frameTreeElement.frameNavigated(frame); | |
382 | |
383 var applicationCacheFrameTreeElement = this._applicationCacheFrameElemen
ts[frameId]; | |
384 if (applicationCacheFrameTreeElement) | |
385 applicationCacheFrameTreeElement.frameNavigated(frame); | |
386 }, | |
387 | |
388 /** | |
389 * @param {!WebInspector.Event} event | |
390 */ | |
391 _databaseAdded: function(event) | |
392 { | |
393 var database = /** @type {!WebInspector.Database} */ (event.data); | |
394 this._addDatabase(database); | |
395 }, | |
396 | |
397 /** | |
398 * @param {!WebInspector.Database} database | |
399 */ | |
400 _addDatabase: function(database) | |
401 { | |
402 var databaseTreeElement = new WebInspector.DatabaseTreeElement(this, dat
abase); | |
403 this._databaseTreeElements.set(database, databaseTreeElement); | |
404 this.databasesListTreeElement.appendChild(databaseTreeElement); | |
405 }, | |
406 | |
407 addDocumentURL: function(url) | |
408 { | |
409 var parsedURL = url.asParsedURL(); | |
410 if (!parsedURL) | |
411 return; | |
412 | |
413 var domain = parsedURL.securityOrigin(); | |
414 if (!this._domains[domain]) { | |
415 this._domains[domain] = true; | |
416 var cookieDomainTreeElement = new WebInspector.CookieTreeElement(thi
s, domain); | |
417 this.cookieListTreeElement.appendChild(cookieDomainTreeElement); | |
418 } | |
419 }, | |
420 | |
421 /** | |
422 * @param {!WebInspector.Event} event | |
423 */ | |
424 _domStorageAdded: function(event) | |
425 { | |
426 var domStorage = /** @type {!WebInspector.DOMStorage} */ (event.data); | |
427 this._addDOMStorage(domStorage); | |
428 }, | |
429 | |
430 /** | |
431 * @param {!WebInspector.DOMStorage} domStorage | |
432 */ | |
433 _addDOMStorage: function(domStorage) | |
434 { | |
435 console.assert(!this._domStorageTreeElements.get(domStorage)); | |
436 | |
437 var domStorageTreeElement = new WebInspector.DOMStorageTreeElement(this,
domStorage); | |
438 this._domStorageTreeElements.set(domStorage, domStorageTreeElement); | |
439 if (domStorage.isLocalStorage) | |
440 this.localStorageListTreeElement.appendChild(domStorageTreeElement); | |
441 else | |
442 this.sessionStorageListTreeElement.appendChild(domStorageTreeElement
); | |
443 }, | |
444 | |
445 /** | |
446 * @param {!WebInspector.Event} event | |
447 */ | |
448 _domStorageRemoved: function(event) | |
449 { | |
450 var domStorage = /** @type {!WebInspector.DOMStorage} */ (event.data); | |
451 this._removeDOMStorage(domStorage); | |
452 }, | |
453 | |
454 /** | |
455 * @param {!WebInspector.DOMStorage} domStorage | |
456 */ | |
457 _removeDOMStorage: function(domStorage) | |
458 { | |
459 var treeElement = this._domStorageTreeElements.get(domStorage); | |
460 if (!treeElement) | |
461 return; | |
462 var wasSelected = treeElement.selected; | |
463 var parentListTreeElement = treeElement.parent; | |
464 parentListTreeElement.removeChild(treeElement); | |
465 if (wasSelected) | |
466 parentListTreeElement.select(); | |
467 this._domStorageTreeElements.remove(domStorage); | |
468 this._domStorageViews.remove(domStorage); | |
469 }, | |
470 | |
471 /** | |
472 * @param {!WebInspector.Database} database | |
473 */ | |
474 selectDatabase: function(database) | |
475 { | |
476 if (database) { | |
477 this._showDatabase(database); | |
478 this._databaseTreeElements.get(database).select(); | |
479 } | |
480 }, | |
481 | |
482 /** | |
483 * @param {!WebInspector.DOMStorage} domStorage | |
484 */ | |
485 selectDOMStorage: function(domStorage) | |
486 { | |
487 if (domStorage) { | |
488 this._showDOMStorage(domStorage); | |
489 this._domStorageTreeElements.get(domStorage).select(); | |
490 } | |
491 }, | |
492 | |
493 /** | |
494 * @param {!WebInspector.Resource} resource | |
495 * @param {number=} line | |
496 * @param {number=} column | |
497 * @return {boolean} | |
498 */ | |
499 showResource: function(resource, line, column) | |
500 { | |
501 var resourceTreeElement = this._findTreeElementForResource(resource); | |
502 if (resourceTreeElement) | |
503 resourceTreeElement.revealAndSelect(true); | |
504 | |
505 if (typeof line === "number") { | |
506 var resourceSourceFrame = this._resourceSourceFrameViewForResource(r
esource); | |
507 if (resourceSourceFrame) | |
508 resourceSourceFrame.revealPosition(line, column, true); | |
509 } | |
510 return true; | |
511 }, | |
512 | |
513 _showResourceView: function(resource) | |
514 { | |
515 var view = this._resourceViewForResource(resource); | |
516 if (!view) { | |
517 this.visibleView.detach(); | |
518 return; | |
519 } | |
520 this._innerShowView(view); | |
521 }, | |
522 | |
523 /** | |
524 * @param {!WebInspector.Resource} resource | |
525 * @return {?WebInspector.Widget} | |
526 */ | |
527 _resourceViewForResource: function(resource) | |
528 { | |
529 if (resource.hasTextContent()) { | |
530 var treeElement = this._findTreeElementForResource(resource); | |
531 if (!treeElement) | |
532 return null; | |
533 return treeElement.sourceView(); | |
534 } | |
535 | |
536 switch (resource.resourceType()) { | |
537 case WebInspector.resourceTypes.Image: | |
538 return new WebInspector.ImageView(resource.mimeType, resource); | |
539 case WebInspector.resourceTypes.Font: | |
540 return new WebInspector.FontView(resource.mimeType, resource); | |
541 default: | |
542 return new WebInspector.EmptyWidget(resource.url); | |
543 } | |
544 }, | |
545 | |
546 /** | |
547 * @param {!WebInspector.Resource} resource | |
548 * @return {?WebInspector.ResourceSourceFrame} | |
549 */ | |
550 _resourceSourceFrameViewForResource: function(resource) | |
551 { | |
552 var resourceView = this._resourceViewForResource(resource); | |
553 if (resourceView && resourceView instanceof WebInspector.ResourceSourceF
rame) | |
554 return /** @type {!WebInspector.ResourceSourceFrame} */ (resourceVie
w); | |
555 return null; | |
556 }, | |
557 | |
558 /** | |
559 * @param {!WebInspector.Database} database | |
560 * @param {string=} tableName | |
561 */ | |
562 _showDatabase: function(database, tableName) | |
563 { | |
564 if (!database) | |
565 return; | |
566 | |
567 var view; | |
568 if (tableName) { | |
569 var tableViews = this._databaseTableViews.get(database); | |
570 if (!tableViews) { | |
571 tableViews = /** @type {!Object.<string, !WebInspector.DatabaseT
ableView>} */ ({}); | |
572 this._databaseTableViews.set(database, tableViews); | |
573 } | |
574 view = tableViews[tableName]; | |
575 if (!view) { | |
576 view = new WebInspector.DatabaseTableView(database, tableName); | |
577 tableViews[tableName] = view; | |
578 } | |
579 } else { | |
580 view = this._databaseQueryViews.get(database); | |
581 if (!view) { | |
582 view = new WebInspector.DatabaseQueryView(database); | |
583 this._databaseQueryViews.set(database, view); | |
584 view.addEventListener(WebInspector.DatabaseQueryView.Events.Sche
maUpdated, this._updateDatabaseTables, this); | |
585 } | |
586 } | |
587 | |
588 this._innerShowView(view); | |
589 }, | |
590 | |
591 /** | |
592 * @param {!WebInspector.DOMStorage} domStorage | |
593 */ | |
594 _showDOMStorage: function(domStorage) | |
595 { | |
596 if (!domStorage) | |
597 return; | |
598 | |
599 var view; | |
600 view = this._domStorageViews.get(domStorage); | |
601 if (!view) { | |
602 view = new WebInspector.DOMStorageItemsView(domStorage); | |
603 this._domStorageViews.set(domStorage, view); | |
604 } | |
605 | |
606 this._innerShowView(view); | |
607 }, | |
608 | |
609 /** | |
610 * @param {!WebInspector.CookieTreeElement} treeElement | |
611 * @param {string} cookieDomain | |
612 */ | |
613 showCookies: function(treeElement, cookieDomain) | |
614 { | |
615 var view = this._cookieViews[cookieDomain]; | |
616 if (!view) { | |
617 view = new WebInspector.CookieItemsView(treeElement, cookieDomain); | |
618 this._cookieViews[cookieDomain] = view; | |
619 } | |
620 | |
621 this._innerShowView(view); | |
622 }, | |
623 | |
624 /** | |
625 * @param {string} cookieDomain | |
626 */ | |
627 clearCookies: function(cookieDomain) | |
628 { | |
629 if (this._cookieViews[cookieDomain]) | |
630 this._cookieViews[cookieDomain].clear(); | |
631 }, | |
632 | |
633 showApplicationCache: function(frameId) | |
634 { | |
635 if (!this._applicationCacheViews[frameId]) | |
636 this._applicationCacheViews[frameId] = new WebInspector.ApplicationC
acheItemsView(this._applicationCacheModel, frameId); | |
637 | |
638 this._innerShowView(this._applicationCacheViews[frameId]); | |
639 }, | |
640 | |
641 /** | |
642 * @param {!WebInspector.Widget} view | |
643 */ | |
644 showFileSystem: function(view) | |
645 { | |
646 this._innerShowView(view); | |
647 }, | |
648 | |
649 showCategoryView: function(categoryName) | |
650 { | |
651 if (!this._categoryView) | |
652 this._categoryView = new WebInspector.StorageCategoryView(); | |
653 this._categoryView.setText(categoryName); | |
654 this._innerShowView(this._categoryView); | |
655 }, | |
656 | |
657 _innerShowView: function(view) | |
658 { | |
659 if (this.visibleView === view) | |
660 return; | |
661 | |
662 if (this.visibleView) | |
663 this.visibleView.detach(); | |
664 | |
665 view.show(this.storageViews); | |
666 this.visibleView = view; | |
667 | |
668 this._storageViewToolbar.removeToolbarItems(); | |
669 var toolbarItems = view instanceof WebInspector.SimpleView ? view.syncTo
olbarItems() : null; | |
670 for (var i = 0; toolbarItems && i < toolbarItems.length; ++i) | |
671 this._storageViewToolbar.appendToolbarItem(toolbarItems[i]); | |
672 }, | |
673 | |
674 closeVisibleView: function() | |
675 { | |
676 if (!this.visibleView) | |
677 return; | |
678 this.visibleView.detach(); | |
679 delete this.visibleView; | |
680 }, | |
681 | |
682 _updateDatabaseTables: function(event) | |
683 { | |
684 var database = event.data; | |
685 | |
686 if (!database) | |
687 return; | |
688 | |
689 var databasesTreeElement = this._databaseTreeElements.get(database); | |
690 if (!databasesTreeElement) | |
691 return; | |
692 | |
693 databasesTreeElement.invalidateChildren(); | |
694 var tableViews = this._databaseTableViews.get(database); | |
695 | |
696 if (!tableViews) | |
697 return; | |
698 | |
699 var tableNamesHash = {}; | |
700 var self = this; | |
701 function tableNamesCallback(tableNames) | |
702 { | |
703 var tableNamesLength = tableNames.length; | |
704 for (var i = 0; i < tableNamesLength; ++i) | |
705 tableNamesHash[tableNames[i]] = true; | |
706 | |
707 for (var tableName in tableViews) { | |
708 if (!(tableName in tableNamesHash)) { | |
709 if (self.visibleView === tableViews[tableName]) | |
710 self.closeVisibleView(); | |
711 delete tableViews[tableName]; | |
712 } | |
713 } | |
714 } | |
715 database.getTableNames(tableNamesCallback); | |
716 }, | |
717 | |
718 /** | |
719 * @param {!WebInspector.DOMStorageModel} domStorageModel | |
720 */ | |
721 _populateDOMStorageTree: function(domStorageModel) | |
722 { | |
723 domStorageModel.enable(); | |
724 domStorageModel.storages().forEach(this._addDOMStorage.bind(this)); | |
725 domStorageModel.addEventListener(WebInspector.DOMStorageModel.Events.DOM
StorageAdded, this._domStorageAdded, this); | |
726 domStorageModel.addEventListener(WebInspector.DOMStorageModel.Events.DOM
StorageRemoved, this._domStorageRemoved, this); | |
727 }, | |
728 | |
729 /** | |
730 * @param {!WebInspector.ResourceTreeModel} resourceTreeModel | |
731 */ | |
732 _populateApplicationCacheTree: function(resourceTreeModel) | |
733 { | |
734 this._applicationCacheModel = new WebInspector.ApplicationCacheModel(thi
s._target, resourceTreeModel); | |
735 | |
736 this._applicationCacheViews = {}; | |
737 this._applicationCacheFrameElements = {}; | |
738 this._applicationCacheManifestElements = {}; | |
739 | |
740 this._applicationCacheModel.addEventListener(WebInspector.ApplicationCac
heModel.Events.FrameManifestAdded, this._applicationCacheFrameManifestAdded, thi
s); | |
741 this._applicationCacheModel.addEventListener(WebInspector.ApplicationCac
heModel.Events.FrameManifestRemoved, this._applicationCacheFrameManifestRemoved,
this); | |
742 this._applicationCacheModel.addEventListener(WebInspector.ApplicationCac
heModel.Events.FrameManifestsReset, this._resetAppCache, this); | |
743 | |
744 this._applicationCacheModel.addEventListener(WebInspector.ApplicationCac
heModel.Events.FrameManifestStatusUpdated, this._applicationCacheFrameManifestSt
atusChanged, this); | |
745 this._applicationCacheModel.addEventListener(WebInspector.ApplicationCac
heModel.Events.NetworkStateChanged, this._applicationCacheNetworkStateChanged, t
his); | |
746 }, | |
747 | |
748 _applicationCacheFrameManifestAdded: function(event) | |
749 { | |
750 var frameId = event.data; | |
751 var manifestURL = this._applicationCacheModel.frameManifestURL(frameId); | |
752 | |
753 var manifestTreeElement = this._applicationCacheManifestElements[manifes
tURL]; | |
754 if (!manifestTreeElement) { | |
755 manifestTreeElement = new WebInspector.ApplicationCacheManifestTreeE
lement(this, manifestURL); | |
756 this.applicationCacheListTreeElement.appendChild(manifestTreeElement
); | |
757 this._applicationCacheManifestElements[manifestURL] = manifestTreeEl
ement; | |
758 } | |
759 | |
760 var frameTreeElement = new WebInspector.ApplicationCacheFrameTreeElement
(this, frameId, manifestURL); | |
761 manifestTreeElement.appendChild(frameTreeElement); | |
762 manifestTreeElement.expand(); | |
763 this._applicationCacheFrameElements[frameId] = frameTreeElement; | |
764 }, | |
765 | |
766 _applicationCacheFrameManifestRemoved: function(event) | |
767 { | |
768 var frameId = event.data; | |
769 var frameTreeElement = this._applicationCacheFrameElements[frameId]; | |
770 if (!frameTreeElement) | |
771 return; | |
772 | |
773 var manifestURL = frameTreeElement.manifestURL; | |
774 delete this._applicationCacheFrameElements[frameId]; | |
775 delete this._applicationCacheViews[frameId]; | |
776 frameTreeElement.parent.removeChild(frameTreeElement); | |
777 | |
778 var manifestTreeElement = this._applicationCacheManifestElements[manifes
tURL]; | |
779 if (manifestTreeElement.childCount()) | |
780 return; | |
781 | |
782 delete this._applicationCacheManifestElements[manifestURL]; | |
783 manifestTreeElement.parent.removeChild(manifestTreeElement); | |
784 }, | |
785 | |
786 _applicationCacheFrameManifestStatusChanged: function(event) | |
787 { | |
788 var frameId = event.data; | |
789 var status = this._applicationCacheModel.frameManifestStatus(frameId); | |
790 | |
791 if (this._applicationCacheViews[frameId]) | |
792 this._applicationCacheViews[frameId].updateStatus(status); | |
793 }, | |
794 | |
795 _applicationCacheNetworkStateChanged: function(event) | |
796 { | |
797 var isNowOnline = event.data; | |
798 | |
799 for (var manifestURL in this._applicationCacheViews) | |
800 this._applicationCacheViews[manifestURL].updateNetworkState(isNowOnl
ine); | |
801 }, | |
802 | |
803 _findTreeElementForResource: function(resource) | |
804 { | |
805 return resource[WebInspector.FrameResourceTreeElement._symbol]; | |
806 }, | |
807 | |
808 showView: function(view) | |
809 { | |
810 if (view) | |
811 this.showResource(view.resource); | |
812 }, | |
813 | |
814 _onmousemove: function(event) | |
815 { | |
816 var nodeUnderMouse = event.target; | |
817 if (!nodeUnderMouse) | |
818 return; | |
819 | |
820 var listNode = nodeUnderMouse.enclosingNodeOrSelfWithNodeName("li"); | |
821 if (!listNode) | |
822 return; | |
823 | |
824 var element = listNode.treeElement; | |
825 if (this._previousHoveredElement === element) | |
826 return; | |
827 | |
828 if (this._previousHoveredElement) { | |
829 this._previousHoveredElement.hovered = false; | |
830 delete this._previousHoveredElement; | |
831 } | |
832 | |
833 if (element instanceof WebInspector.FrameTreeElement) { | |
834 this._previousHoveredElement = element; | |
835 element.hovered = true; | |
836 } | |
837 }, | |
838 | |
839 _onmouseleave: function(event) | |
840 { | |
841 if (this._previousHoveredElement) { | |
842 this._previousHoveredElement.hovered = false; | |
843 delete this._previousHoveredElement; | |
844 } | |
845 }, | |
846 | |
847 __proto__: WebInspector.PanelWithSidebar.prototype | |
848 }; | |
849 | |
850 /** | |
851 * @constructor | |
852 * @implements {WebInspector.Revealer} | 823 * @implements {WebInspector.Revealer} |
853 */ | 824 * @unrestricted |
854 WebInspector.ResourcesPanel.ResourceRevealer = function() | 825 */ |
855 { | 826 WebInspector.ResourcesPanel.ResourceRevealer = class { |
856 }; | 827 /** |
857 | 828 * @override |
858 WebInspector.ResourcesPanel.ResourceRevealer.prototype = { | 829 * @param {!Object} resource |
859 /** | 830 * @return {!Promise} |
860 * @override | 831 */ |
861 * @param {!Object} resource | 832 reveal(resource) { |
862 * @return {!Promise} | 833 if (!(resource instanceof WebInspector.Resource)) |
863 */ | 834 return Promise.reject(new Error('Internal error: not a resource')); |
864 reveal: function(resource) | 835 var panel = WebInspector.ResourcesPanel._instance(); |
865 { | 836 return WebInspector.viewManager.showView('resources').then(panel.showResourc
e.bind(panel, resource)); |
866 if (!(resource instanceof WebInspector.Resource)) | 837 } |
867 return Promise.reject(new Error("Internal error: not a resource")); | 838 }; |
868 var panel = WebInspector.ResourcesPanel._instance(); | 839 |
869 return WebInspector.viewManager.showView("resources").then(panel.showRes
ource.bind(panel, resource)); | 840 /** |
870 } | 841 * @unrestricted |
871 }; | 842 */ |
872 | 843 WebInspector.BaseStorageTreeElement = class extends TreeElement { |
873 /** | 844 /** |
874 * @constructor | 845 * @param {!WebInspector.ResourcesPanel} storagePanel |
875 * @extends {TreeElement} | 846 * @param {string} title |
876 * @param {!WebInspector.ResourcesPanel} storagePanel | 847 * @param {?Array.<string>=} iconClasses |
877 * @param {string} title | 848 * @param {boolean=} expandable |
878 * @param {?Array.<string>=} iconClasses | 849 * @param {boolean=} noIcon |
879 * @param {boolean=} expandable | 850 */ |
880 * @param {boolean=} noIcon | 851 constructor(storagePanel, title, iconClasses, expandable, noIcon) { |
881 */ | 852 super(title, expandable); |
882 WebInspector.BaseStorageTreeElement = function(storagePanel, title, iconClasses,
expandable, noIcon) | |
883 { | |
884 TreeElement.call(this, title, expandable); | |
885 this._storagePanel = storagePanel; | 853 this._storagePanel = storagePanel; |
886 for (var i = 0; iconClasses && i < iconClasses.length; ++i) | 854 for (var i = 0; iconClasses && i < iconClasses.length; ++i) |
887 this.listItemElement.classList.add(iconClasses[i]); | 855 this.listItemElement.classList.add(iconClasses[i]); |
888 | 856 |
889 this._iconClasses = iconClasses; | 857 this._iconClasses = iconClasses; |
890 if (!noIcon) | 858 if (!noIcon) |
891 this.createIcon(); | 859 this.createIcon(); |
892 }; | 860 } |
893 | 861 |
894 WebInspector.BaseStorageTreeElement.prototype = { | 862 /** |
895 /** | 863 * @override |
896 * @override | 864 * @return {boolean} |
897 * @return {boolean} | 865 */ |
898 */ | 866 onselect(selectedByUser) { |
899 onselect: function(selectedByUser) | 867 if (!selectedByUser) |
900 { | 868 return false; |
901 if (!selectedByUser) | 869 var itemURL = this.itemURL; |
902 return false; | 870 if (itemURL) |
903 var itemURL = this.itemURL; | 871 this._storagePanel._resourcesLastSelectedItemSetting.set(itemURL); |
904 if (itemURL) | 872 return false; |
905 this._storagePanel._resourcesLastSelectedItemSetting.set(itemURL); | 873 } |
906 return false; | 874 }; |
907 }, | 875 |
908 | 876 /** |
909 __proto__: TreeElement.prototype | 877 * @unrestricted |
910 }; | 878 */ |
911 | 879 WebInspector.StorageCategoryTreeElement = class extends WebInspector.BaseStorage
TreeElement { |
912 /** | 880 /** |
913 * @constructor | 881 * @param {!WebInspector.ResourcesPanel} storagePanel |
914 * @extends {WebInspector.BaseStorageTreeElement} | 882 * @param {string} categoryName |
915 * @param {!WebInspector.ResourcesPanel} storagePanel | 883 * @param {string} settingsKey |
916 * @param {string} categoryName | 884 * @param {?Array.<string>=} iconClasses |
917 * @param {string} settingsKey | 885 * @param {boolean=} noIcon |
918 * @param {?Array.<string>=} iconClasses | 886 */ |
919 * @param {boolean=} noIcon | 887 constructor(storagePanel, categoryName, settingsKey, iconClasses, noIcon) { |
920 */ | 888 super(storagePanel, categoryName, iconClasses, false, noIcon); |
921 WebInspector.StorageCategoryTreeElement = function(storagePanel, categoryName, s
ettingsKey, iconClasses, noIcon) | 889 this._expandedSetting = |
922 { | 890 WebInspector.settings.createSetting('resources' + settingsKey + 'Expande
d', settingsKey === 'Frames'); |
923 WebInspector.BaseStorageTreeElement.call(this, storagePanel, categoryName, i
conClasses, false, noIcon); | |
924 this._expandedSetting = WebInspector.settings.createSetting("resources" + se
ttingsKey + "Expanded", settingsKey === "Frames"); | |
925 this._categoryName = categoryName; | 891 this._categoryName = categoryName; |
926 }; | 892 } |
927 | 893 |
928 WebInspector.StorageCategoryTreeElement.prototype = { | 894 /** |
929 /** | 895 * @return {!WebInspector.Target} |
930 * @return {!WebInspector.Target} | 896 */ |
931 */ | 897 target() { |
932 target: function() | 898 return this._storagePanel._target; |
933 { | 899 } |
934 return this._storagePanel._target; | 900 |
935 }, | 901 get itemURL() { |
936 | 902 return 'category://' + this._categoryName; |
937 get itemURL() | 903 } |
938 { | 904 |
939 return "category://" + this._categoryName; | 905 /** |
940 }, | 906 * @override |
941 | 907 * @return {boolean} |
942 /** | 908 */ |
943 * @override | 909 onselect(selectedByUser) { |
944 * @return {boolean} | 910 super.onselect(selectedByUser); |
945 */ | 911 this._storagePanel.showCategoryView(this._categoryName); |
946 onselect: function(selectedByUser) | 912 return false; |
947 { | 913 } |
948 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 914 |
949 this._storagePanel.showCategoryView(this._categoryName); | 915 /** |
950 return false; | 916 * @override |
951 }, | 917 */ |
952 | 918 onattach() { |
953 /** | 919 super.onattach(); |
954 * @override | 920 if (this._expandedSetting.get()) |
955 */ | 921 this.expand(); |
956 onattach: function() | 922 } |
957 { | 923 |
958 WebInspector.BaseStorageTreeElement.prototype.onattach.call(this); | 924 /** |
959 if (this._expandedSetting.get()) | 925 * @override |
960 this.expand(); | 926 */ |
961 }, | 927 onexpand() { |
962 | 928 this._expandedSetting.set(true); |
963 /** | 929 } |
964 * @override | 930 |
965 */ | 931 /** |
966 onexpand: function() | 932 * @override |
967 { | 933 */ |
968 this._expandedSetting.set(true); | 934 oncollapse() { |
969 }, | 935 this._expandedSetting.set(false); |
970 | 936 } |
971 /** | 937 }; |
972 * @override | 938 |
973 */ | 939 /** |
974 oncollapse: function() | 940 * @unrestricted |
975 { | 941 */ |
976 this._expandedSetting.set(false); | 942 WebInspector.FrameTreeElement = class extends WebInspector.BaseStorageTreeElemen
t { |
977 }, | 943 /** |
978 | 944 * @param {!WebInspector.ResourcesPanel} storagePanel |
979 __proto__: WebInspector.BaseStorageTreeElement.prototype | 945 * @param {!WebInspector.ResourceTreeFrame} frame |
980 }; | 946 */ |
981 | 947 constructor(storagePanel, frame) { |
982 /** | 948 super(storagePanel, '', ['navigator-tree-item', 'navigator-frame-tree-item']
); |
983 * @constructor | |
984 * @extends {WebInspector.BaseStorageTreeElement} | |
985 * @param {!WebInspector.ResourcesPanel} storagePanel | |
986 * @param {!WebInspector.ResourceTreeFrame} frame | |
987 */ | |
988 WebInspector.FrameTreeElement = function(storagePanel, frame) | |
989 { | |
990 WebInspector.BaseStorageTreeElement.call(this, storagePanel, "", ["navigator
-tree-item", "navigator-frame-tree-item"]); | |
991 this._frame = frame; | 949 this._frame = frame; |
992 this.frameNavigated(frame); | 950 this.frameNavigated(frame); |
993 }; | 951 } |
994 | 952 |
995 WebInspector.FrameTreeElement.prototype = { | 953 frameNavigated(frame) { |
996 frameNavigated: function(frame) | 954 this.removeChildren(); |
997 { | 955 this._frameId = frame.id; |
998 this.removeChildren(); | 956 this.title = frame.displayName(); |
999 this._frameId = frame.id; | 957 this._categoryElements = {}; |
1000 this.title = frame.displayName(); | 958 this._treeElementForResource = {}; |
1001 this._categoryElements = {}; | 959 |
1002 this._treeElementForResource = {}; | 960 this._storagePanel.addDocumentURL(frame.url); |
1003 | 961 } |
1004 this._storagePanel.addDocumentURL(frame.url); | 962 |
1005 }, | 963 get itemURL() { |
1006 | 964 return 'frame://' + encodeURI(this.titleAsText()); |
1007 get itemURL() | 965 } |
1008 { | 966 |
1009 return "frame://" + encodeURI(this.titleAsText()); | 967 /** |
1010 }, | 968 * @override |
1011 | 969 * @return {boolean} |
1012 /** | 970 */ |
1013 * @override | 971 onselect(selectedByUser) { |
1014 * @return {boolean} | 972 super.onselect(selectedByUser); |
1015 */ | 973 this._storagePanel.showCategoryView(this.titleAsText()); |
1016 onselect: function(selectedByUser) | 974 |
1017 { | 975 this.listItemElement.classList.remove('hovered'); |
1018 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 976 WebInspector.DOMModel.hideDOMNodeHighlight(); |
1019 this._storagePanel.showCategoryView(this.titleAsText()); | 977 return false; |
1020 | 978 } |
1021 this.listItemElement.classList.remove("hovered"); | 979 |
1022 WebInspector.DOMModel.hideDOMNodeHighlight(); | 980 set hovered(hovered) { |
1023 return false; | 981 if (hovered) { |
1024 }, | 982 this.listItemElement.classList.add('hovered'); |
1025 | 983 var domModel = WebInspector.DOMModel.fromTarget(this._frame.target()); |
1026 set hovered(hovered) | 984 if (domModel) |
1027 { | 985 domModel.highlightFrame(this._frameId); |
1028 if (hovered) { | 986 } else { |
1029 this.listItemElement.classList.add("hovered"); | 987 this.listItemElement.classList.remove('hovered'); |
1030 var domModel = WebInspector.DOMModel.fromTarget(this._frame.target()
); | 988 WebInspector.DOMModel.hideDOMNodeHighlight(); |
1031 if (domModel) | 989 } |
1032 domModel.highlightFrame(this._frameId); | 990 } |
1033 } else { | 991 |
1034 this.listItemElement.classList.remove("hovered"); | 992 /** |
1035 WebInspector.DOMModel.hideDOMNodeHighlight(); | 993 * @param {!WebInspector.Resource} resource |
1036 } | 994 */ |
1037 }, | 995 appendResource(resource) { |
1038 | 996 var resourceType = resource.resourceType(); |
1039 /** | 997 var categoryName = resourceType.name(); |
1040 * @param {!WebInspector.Resource} resource | 998 var categoryElement = |
1041 */ | 999 resourceType === WebInspector.resourceTypes.Document ? this : this._cate
goryElements[categoryName]; |
1042 appendResource: function(resource) | 1000 if (!categoryElement) { |
1043 { | 1001 categoryElement = new WebInspector.StorageCategoryTreeElement( |
1044 var resourceType = resource.resourceType(); | 1002 this._storagePanel, resource.resourceType().category().title, category
Name, null, true); |
1045 var categoryName = resourceType.name(); | 1003 this._categoryElements[resourceType.name()] = categoryElement; |
1046 var categoryElement = resourceType === WebInspector.resourceTypes.Docume
nt ? this : this._categoryElements[categoryName]; | 1004 this._insertInPresentationOrder(this, categoryElement); |
1047 if (!categoryElement) { | 1005 } |
1048 categoryElement = new WebInspector.StorageCategoryTreeElement(this._
storagePanel, resource.resourceType().category().title, categoryName, null, true
); | 1006 var resourceTreeElement = new WebInspector.FrameResourceTreeElement(this._st
oragePanel, resource); |
1049 this._categoryElements[resourceType.name()] = categoryElement; | 1007 this._insertInPresentationOrder(categoryElement, resourceTreeElement); |
1050 this._insertInPresentationOrder(this, categoryElement); | 1008 this._treeElementForResource[resource.url] = resourceTreeElement; |
1051 } | 1009 } |
1052 var resourceTreeElement = new WebInspector.FrameResourceTreeElement(this
._storagePanel, resource); | 1010 |
1053 this._insertInPresentationOrder(categoryElement, resourceTreeElement); | 1011 /** |
1054 this._treeElementForResource[resource.url] = resourceTreeElement; | 1012 * @param {string} url |
1055 }, | 1013 * @return {?WebInspector.Resource} |
1056 | 1014 */ |
1057 /** | 1015 resourceByURL(url) { |
1058 * @param {string} url | 1016 var treeElement = this._treeElementForResource[url]; |
1059 * @return {?WebInspector.Resource} | 1017 return treeElement ? treeElement._resource : null; |
1060 */ | 1018 } |
1061 resourceByURL: function(url) | 1019 |
1062 { | 1020 /** |
1063 var treeElement = this._treeElementForResource[url]; | 1021 * @override |
1064 return treeElement ? treeElement._resource : null; | 1022 */ |
1065 }, | 1023 appendChild(treeElement) { |
1066 | 1024 this._insertInPresentationOrder(this, treeElement); |
1067 appendChild: function(treeElement) | 1025 } |
1068 { | 1026 |
1069 this._insertInPresentationOrder(this, treeElement); | 1027 _insertInPresentationOrder(parentTreeElement, childTreeElement) { |
1070 }, | 1028 // Insert in the alphabetical order, first frames, then resources. Document
resource goes last. |
1071 | 1029 function typeWeight(treeElement) { |
1072 _insertInPresentationOrder: function(parentTreeElement, childTreeElement) | 1030 if (treeElement instanceof WebInspector.StorageCategoryTreeElement) |
1073 { | 1031 return 2; |
1074 // Insert in the alphabetical order, first frames, then resources. Docum
ent resource goes last. | 1032 if (treeElement instanceof WebInspector.FrameTreeElement) |
1075 function typeWeight(treeElement) | 1033 return 1; |
1076 { | 1034 return 3; |
1077 if (treeElement instanceof WebInspector.StorageCategoryTreeElement) | 1035 } |
1078 return 2; | 1036 |
1079 if (treeElement instanceof WebInspector.FrameTreeElement) | 1037 function compare(treeElement1, treeElement2) { |
1080 return 1; | 1038 var typeWeight1 = typeWeight(treeElement1); |
1081 return 3; | 1039 var typeWeight2 = typeWeight(treeElement2); |
1082 } | 1040 |
1083 | 1041 var result; |
1084 function compare(treeElement1, treeElement2) | 1042 if (typeWeight1 > typeWeight2) |
1085 { | 1043 result = 1; |
1086 var typeWeight1 = typeWeight(treeElement1); | 1044 else if (typeWeight1 < typeWeight2) |
1087 var typeWeight2 = typeWeight(treeElement2); | 1045 result = -1; |
1088 | 1046 else |
1089 var result; | 1047 result = treeElement1.titleAsText().localeCompare(treeElement2.titleAsTe
xt()); |
1090 if (typeWeight1 > typeWeight2) | 1048 return result; |
1091 result = 1; | 1049 } |
1092 else if (typeWeight1 < typeWeight2) | 1050 |
1093 result = -1; | 1051 var childCount = parentTreeElement.childCount(); |
1094 else | 1052 var i; |
1095 result = treeElement1.titleAsText().localeCompare(treeElement2.t
itleAsText()); | 1053 for (i = 0; i < childCount; ++i) { |
1096 return result; | 1054 if (compare(childTreeElement, parentTreeElement.childAt(i)) < 0) |
1097 } | 1055 break; |
1098 | 1056 } |
1099 var childCount = parentTreeElement.childCount(); | 1057 parentTreeElement.insertChild(childTreeElement, i); |
1100 var i; | 1058 } |
1101 for (i = 0; i < childCount; ++i) { | 1059 }; |
1102 if (compare(childTreeElement, parentTreeElement.childAt(i)) < 0) | 1060 |
1103 break; | 1061 /** |
1104 } | 1062 * @unrestricted |
1105 parentTreeElement.insertChild(childTreeElement, i); | 1063 */ |
1106 }, | 1064 WebInspector.FrameResourceTreeElement = class extends WebInspector.BaseStorageTr
eeElement { |
1107 | 1065 /** |
1108 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1066 * @param {!WebInspector.ResourcesPanel} storagePanel |
1109 }; | 1067 * @param {!WebInspector.Resource} resource |
1110 | 1068 */ |
1111 /** | 1069 constructor(storagePanel, resource) { |
1112 * @constructor | 1070 super(storagePanel, resource.displayName, [ |
1113 * @extends {WebInspector.BaseStorageTreeElement} | 1071 'navigator-tree-item', 'navigator-file-tree-item', 'navigator-' + resource
.resourceType().name() + '-tree-item' |
1114 * @param {!WebInspector.ResourcesPanel} storagePanel | 1072 ]); |
1115 * @param {!WebInspector.Resource} resource | |
1116 */ | |
1117 WebInspector.FrameResourceTreeElement = function(storagePanel, resource) | |
1118 { | |
1119 WebInspector.BaseStorageTreeElement.call(this, storagePanel, resource.displa
yName, ["navigator-tree-item", "navigator-file-tree-item", "navigator-" + resour
ce.resourceType().name() + "-tree-item"]); | |
1120 /** @type {!WebInspector.Resource} */ | 1073 /** @type {!WebInspector.Resource} */ |
1121 this._resource = resource; | 1074 this._resource = resource; |
1122 this.tooltip = resource.url; | 1075 this.tooltip = resource.url; |
1123 this._resource[WebInspector.FrameResourceTreeElement._symbol] = this; | 1076 this._resource[WebInspector.FrameResourceTreeElement._symbol] = this; |
1124 }; | 1077 } |
1125 | 1078 |
1126 WebInspector.FrameResourceTreeElement._symbol = Symbol("treeElement"); | 1079 get itemURL() { |
1127 | 1080 return this._resource.url; |
1128 WebInspector.FrameResourceTreeElement.prototype = { | 1081 } |
1129 get itemURL() | 1082 |
1130 { | 1083 /** |
1131 return this._resource.url; | 1084 * @override |
1132 }, | 1085 * @return {boolean} |
| 1086 */ |
| 1087 onselect(selectedByUser) { |
| 1088 super.onselect(selectedByUser); |
| 1089 this._storagePanel._showResourceView(this._resource); |
| 1090 return false; |
| 1091 } |
| 1092 |
| 1093 /** |
| 1094 * @override |
| 1095 * @return {boolean} |
| 1096 */ |
| 1097 ondblclick(event) { |
| 1098 InspectorFrontendHost.openInNewTab(this._resource.url); |
| 1099 return false; |
| 1100 } |
| 1101 |
| 1102 /** |
| 1103 * @override |
| 1104 */ |
| 1105 onattach() { |
| 1106 super.onattach(); |
| 1107 this.listItemElement.draggable = true; |
| 1108 this.listItemElement.addEventListener('dragstart', this._ondragstart.bind(th
is), false); |
| 1109 this.listItemElement.addEventListener('contextmenu', this._handleContextMenu
Event.bind(this), true); |
| 1110 } |
| 1111 |
| 1112 /** |
| 1113 * @param {!MouseEvent} event |
| 1114 * @return {boolean} |
| 1115 */ |
| 1116 _ondragstart(event) { |
| 1117 event.dataTransfer.setData('text/plain', this._resource.content || ''); |
| 1118 event.dataTransfer.effectAllowed = 'copy'; |
| 1119 return true; |
| 1120 } |
| 1121 |
| 1122 _handleContextMenuEvent(event) { |
| 1123 var contextMenu = new WebInspector.ContextMenu(event); |
| 1124 contextMenu.appendApplicableItems(this._resource); |
| 1125 contextMenu.show(); |
| 1126 } |
| 1127 |
| 1128 /** |
| 1129 * @return {!WebInspector.ResourceSourceFrame} |
| 1130 */ |
| 1131 sourceView() { |
| 1132 if (!this._sourceView) { |
| 1133 var sourceFrame = new WebInspector.ResourceSourceFrame(this._resource); |
| 1134 sourceFrame.setHighlighterType(this._resource.canonicalMimeType()); |
| 1135 this._sourceView = sourceFrame; |
| 1136 } |
| 1137 return this._sourceView; |
| 1138 } |
| 1139 }; |
| 1140 |
| 1141 WebInspector.FrameResourceTreeElement._symbol = Symbol('treeElement'); |
| 1142 |
| 1143 /** |
| 1144 * @unrestricted |
| 1145 */ |
| 1146 WebInspector.DatabaseTreeElement = class extends WebInspector.BaseStorageTreeEle
ment { |
| 1147 /** |
| 1148 * @param {!WebInspector.ResourcesPanel} storagePanel |
| 1149 * @param {!WebInspector.Database} database |
| 1150 */ |
| 1151 constructor(storagePanel, database) { |
| 1152 super(storagePanel, database.name, ['database-tree-item', 'resource-tree-ite
m'], true); |
| 1153 this._database = database; |
| 1154 } |
| 1155 |
| 1156 get itemURL() { |
| 1157 return 'database://' + encodeURI(this._database.name); |
| 1158 } |
| 1159 |
| 1160 /** |
| 1161 * @override |
| 1162 * @return {boolean} |
| 1163 */ |
| 1164 onselect(selectedByUser) { |
| 1165 super.onselect(selectedByUser); |
| 1166 this._storagePanel._showDatabase(this._database); |
| 1167 return false; |
| 1168 } |
| 1169 |
| 1170 /** |
| 1171 * @override |
| 1172 */ |
| 1173 onexpand() { |
| 1174 this._updateChildren(); |
| 1175 } |
| 1176 |
| 1177 _updateChildren() { |
| 1178 this.removeChildren(); |
1133 | 1179 |
1134 /** | 1180 /** |
1135 * @override | 1181 * @param {!Array.<string>} tableNames |
1136 * @return {boolean} | 1182 * @this {WebInspector.DatabaseTreeElement} |
1137 */ | 1183 */ |
1138 onselect: function(selectedByUser) | 1184 function tableNamesCallback(tableNames) { |
1139 { | 1185 var tableNamesLength = tableNames.length; |
1140 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1186 for (var i = 0; i < tableNamesLength; ++i) |
1141 this._storagePanel._showResourceView(this._resource); | 1187 this.appendChild(new WebInspector.DatabaseTableTreeElement(this._storage
Panel, this._database, tableNames[i])); |
1142 return false; | 1188 } |
1143 }, | 1189 this._database.getTableNames(tableNamesCallback.bind(this)); |
1144 | 1190 } |
1145 /** | 1191 }; |
1146 * @override | 1192 |
1147 * @return {boolean} | 1193 /** |
1148 */ | 1194 * @unrestricted |
1149 ondblclick: function(event) | 1195 */ |
1150 { | 1196 WebInspector.DatabaseTableTreeElement = class extends WebInspector.BaseStorageTr
eeElement { |
1151 InspectorFrontendHost.openInNewTab(this._resource.url); | 1197 constructor(storagePanel, database, tableName) { |
1152 return false; | 1198 super(storagePanel, tableName, ['table-tree-item', 'resource-tree-item']); |
1153 }, | |
1154 | |
1155 /** | |
1156 * @override | |
1157 */ | |
1158 onattach: function() | |
1159 { | |
1160 WebInspector.BaseStorageTreeElement.prototype.onattach.call(this); | |
1161 this.listItemElement.draggable = true; | |
1162 this.listItemElement.addEventListener("dragstart", this._ondragstart.bin
d(this), false); | |
1163 this.listItemElement.addEventListener("contextmenu", this._handleContext
MenuEvent.bind(this), true); | |
1164 }, | |
1165 | |
1166 /** | |
1167 * @param {!MouseEvent} event | |
1168 * @return {boolean} | |
1169 */ | |
1170 _ondragstart: function(event) | |
1171 { | |
1172 event.dataTransfer.setData("text/plain", this._resource.content || ""); | |
1173 event.dataTransfer.effectAllowed = "copy"; | |
1174 return true; | |
1175 }, | |
1176 | |
1177 _handleContextMenuEvent: function(event) | |
1178 { | |
1179 var contextMenu = new WebInspector.ContextMenu(event); | |
1180 contextMenu.appendApplicableItems(this._resource); | |
1181 contextMenu.show(); | |
1182 }, | |
1183 | |
1184 /** | |
1185 * @return {!WebInspector.ResourceSourceFrame} | |
1186 */ | |
1187 sourceView: function() | |
1188 { | |
1189 if (!this._sourceView) { | |
1190 var sourceFrame = new WebInspector.ResourceSourceFrame(this._resourc
e); | |
1191 sourceFrame.setHighlighterType(this._resource.canonicalMimeType()); | |
1192 this._sourceView = sourceFrame; | |
1193 } | |
1194 return this._sourceView; | |
1195 }, | |
1196 | |
1197 __proto__: WebInspector.BaseStorageTreeElement.prototype | |
1198 }; | |
1199 | |
1200 /** | |
1201 * @constructor | |
1202 * @extends {WebInspector.BaseStorageTreeElement} | |
1203 * @param {!WebInspector.ResourcesPanel} storagePanel | |
1204 * @param {!WebInspector.Database} database | |
1205 */ | |
1206 WebInspector.DatabaseTreeElement = function(storagePanel, database) | |
1207 { | |
1208 WebInspector.BaseStorageTreeElement.call(this, storagePanel, database.name,
["database-tree-item", "resource-tree-item"], true); | |
1209 this._database = database; | |
1210 }; | |
1211 | |
1212 WebInspector.DatabaseTreeElement.prototype = { | |
1213 get itemURL() | |
1214 { | |
1215 return "database://" + encodeURI(this._database.name); | |
1216 }, | |
1217 | |
1218 /** | |
1219 * @override | |
1220 * @return {boolean} | |
1221 */ | |
1222 onselect: function(selectedByUser) | |
1223 { | |
1224 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | |
1225 this._storagePanel._showDatabase(this._database); | |
1226 return false; | |
1227 }, | |
1228 | |
1229 /** | |
1230 * @override | |
1231 */ | |
1232 onexpand: function() | |
1233 { | |
1234 this._updateChildren(); | |
1235 }, | |
1236 | |
1237 _updateChildren: function() | |
1238 { | |
1239 this.removeChildren(); | |
1240 | |
1241 /** | |
1242 * @param {!Array.<string>} tableNames | |
1243 * @this {WebInspector.DatabaseTreeElement} | |
1244 */ | |
1245 function tableNamesCallback(tableNames) | |
1246 { | |
1247 var tableNamesLength = tableNames.length; | |
1248 for (var i = 0; i < tableNamesLength; ++i) | |
1249 this.appendChild(new WebInspector.DatabaseTableTreeElement(this.
_storagePanel, this._database, tableNames[i])); | |
1250 } | |
1251 this._database.getTableNames(tableNamesCallback.bind(this)); | |
1252 }, | |
1253 | |
1254 __proto__: WebInspector.BaseStorageTreeElement.prototype | |
1255 }; | |
1256 | |
1257 /** | |
1258 * @constructor | |
1259 * @extends {WebInspector.BaseStorageTreeElement} | |
1260 */ | |
1261 WebInspector.DatabaseTableTreeElement = function(storagePanel, database, tableNa
me) | |
1262 { | |
1263 WebInspector.BaseStorageTreeElement.call(this, storagePanel, tableName, ["ta
ble-tree-item", "resource-tree-item"]); | |
1264 this._database = database; | 1199 this._database = database; |
1265 this._tableName = tableName; | 1200 this._tableName = tableName; |
1266 }; | 1201 } |
1267 | 1202 |
1268 WebInspector.DatabaseTableTreeElement.prototype = { | 1203 get itemURL() { |
1269 get itemURL() | 1204 return 'database://' + encodeURI(this._database.name) + '/' + encodeURI(this
._tableName); |
1270 { | 1205 } |
1271 return "database://" + encodeURI(this._database.name) + "/" + encodeURI(
this._tableName); | 1206 |
1272 }, | 1207 /** |
1273 | 1208 * @override |
1274 /** | 1209 * @return {boolean} |
1275 * @override | 1210 */ |
1276 * @return {boolean} | 1211 onselect(selectedByUser) { |
1277 */ | 1212 super.onselect(selectedByUser); |
1278 onselect: function(selectedByUser) | 1213 this._storagePanel._showDatabase(this._database, this._tableName); |
1279 { | 1214 return false; |
1280 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1215 } |
1281 this._storagePanel._showDatabase(this._database, this._tableName); | 1216 }; |
1282 return false; | 1217 |
1283 }, | 1218 /** |
1284 | 1219 * @unrestricted |
1285 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1220 */ |
1286 }; | 1221 WebInspector.ServiceWorkerCacheTreeElement = class extends WebInspector.StorageC
ategoryTreeElement { |
1287 | 1222 /** |
1288 | 1223 * @param {!WebInspector.ResourcesPanel} storagePanel |
1289 /** | 1224 */ |
1290 * @constructor | 1225 constructor(storagePanel) { |
1291 * @extends {WebInspector.StorageCategoryTreeElement} | 1226 super( |
1292 * @param {!WebInspector.ResourcesPanel} storagePanel | 1227 storagePanel, WebInspector.UIString('Cache Storage'), 'CacheStorage', |
1293 */ | 1228 ['database-tree-item', 'resource-tree-item']); |
1294 WebInspector.ServiceWorkerCacheTreeElement = function(storagePanel) | 1229 } |
1295 { | 1230 |
1296 WebInspector.StorageCategoryTreeElement.call(this, storagePanel, WebInspecto
r.UIString("Cache Storage"), "CacheStorage", ["database-tree-item", "resource-tr
ee-item"]); | 1231 _initialize() { |
1297 }; | 1232 /** @type {!Array.<!WebInspector.SWCacheTreeElement>} */ |
1298 | 1233 this._swCacheTreeElements = []; |
1299 WebInspector.ServiceWorkerCacheTreeElement.prototype = { | 1234 var target = this._storagePanel._target; |
1300 _initialize: function() | 1235 var model = target && WebInspector.ServiceWorkerCacheModel.fromTarget(target
); |
1301 { | 1236 if (model) { |
1302 /** @type {!Array.<!WebInspector.SWCacheTreeElement>} */ | 1237 for (var cache of model.caches()) |
1303 this._swCacheTreeElements = []; | |
1304 var target = this._storagePanel._target; | |
1305 var model = target && WebInspector.ServiceWorkerCacheModel.fromTarget(ta
rget); | |
1306 if (model) { | |
1307 for (var cache of model.caches()) | |
1308 this._addCache(model, cache); | |
1309 } | |
1310 WebInspector.targetManager.addModelListener(WebInspector.ServiceWorkerCa
cheModel, WebInspector.ServiceWorkerCacheModel.Events.CacheAdded, this._cacheAdd
ed, this); | |
1311 WebInspector.targetManager.addModelListener(WebInspector.ServiceWorkerCa
cheModel, WebInspector.ServiceWorkerCacheModel.Events.CacheRemoved, this._cacheR
emoved, this); | |
1312 }, | |
1313 | |
1314 onattach: function() | |
1315 { | |
1316 WebInspector.StorageCategoryTreeElement.prototype.onattach.call(this); | |
1317 this.listItemElement.addEventListener("contextmenu", this._handleContext
MenuEvent.bind(this), true); | |
1318 }, | |
1319 | |
1320 _handleContextMenuEvent: function(event) | |
1321 { | |
1322 var contextMenu = new WebInspector.ContextMenu(event); | |
1323 contextMenu.appendItem(WebInspector.UIString("Refresh Caches"), this._re
freshCaches.bind(this)); | |
1324 contextMenu.show(); | |
1325 }, | |
1326 | |
1327 _refreshCaches: function() | |
1328 { | |
1329 var target = this._storagePanel._target; | |
1330 if (target) { | |
1331 var model = WebInspector.ServiceWorkerCacheModel.fromTarget(target); | |
1332 if (!model) | |
1333 return; | |
1334 model.refreshCacheNames(); | |
1335 } | |
1336 }, | |
1337 | |
1338 /** | |
1339 * @param {!WebInspector.Event} event | |
1340 */ | |
1341 _cacheAdded: function(event) | |
1342 { | |
1343 var cache = /** @type {!WebInspector.ServiceWorkerCacheModel.Cache} */ (
event.data); | |
1344 var model = /** @type {!WebInspector.ServiceWorkerCacheModel} */ (event.
target); | |
1345 this._addCache(model, cache); | 1238 this._addCache(model, cache); |
1346 }, | 1239 } |
1347 | 1240 WebInspector.targetManager.addModelListener( |
1348 /** | 1241 WebInspector.ServiceWorkerCacheModel, WebInspector.ServiceWorkerCacheMod
el.Events.CacheAdded, this._cacheAdded, |
1349 * @param {!WebInspector.ServiceWorkerCacheModel} model | 1242 this); |
1350 * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache | 1243 WebInspector.targetManager.addModelListener( |
1351 */ | 1244 WebInspector.ServiceWorkerCacheModel, WebInspector.ServiceWorkerCacheMod
el.Events.CacheRemoved, |
1352 _addCache: function(model, cache) | 1245 this._cacheRemoved, this); |
1353 { | 1246 } |
1354 var swCacheTreeElement = new WebInspector.SWCacheTreeElement(this._stora
gePanel, model, cache); | 1247 |
1355 this._swCacheTreeElements.push(swCacheTreeElement); | 1248 /** |
1356 this.appendChild(swCacheTreeElement); | 1249 * @override |
1357 }, | 1250 */ |
1358 | 1251 onattach() { |
1359 /** | 1252 super.onattach(); |
1360 * @param {!WebInspector.Event} event | 1253 this.listItemElement.addEventListener('contextmenu', this._handleContextMenu
Event.bind(this), true); |
1361 */ | 1254 } |
1362 _cacheRemoved: function(event) | 1255 |
1363 { | 1256 _handleContextMenuEvent(event) { |
1364 var cache = /** @type {!WebInspector.ServiceWorkerCacheModel.Cache} */ (
event.data); | 1257 var contextMenu = new WebInspector.ContextMenu(event); |
1365 var model = /** @type {!WebInspector.ServiceWorkerCacheModel} */ (event.
target); | 1258 contextMenu.appendItem(WebInspector.UIString('Refresh Caches'), this._refres
hCaches.bind(this)); |
1366 | 1259 contextMenu.show(); |
1367 var swCacheTreeElement = this._cacheTreeElement(model, cache); | 1260 } |
1368 if (!swCacheTreeElement) | 1261 |
1369 return; | 1262 _refreshCaches() { |
1370 | 1263 var target = this._storagePanel._target; |
1371 swCacheTreeElement.clear(); | 1264 if (target) { |
1372 this.removeChild(swCacheTreeElement); | 1265 var model = WebInspector.ServiceWorkerCacheModel.fromTarget(target); |
1373 this._swCacheTreeElements.remove(swCacheTreeElement); | 1266 if (!model) |
1374 }, | 1267 return; |
1375 | 1268 model.refreshCacheNames(); |
1376 /** | 1269 } |
1377 * @param {!WebInspector.ServiceWorkerCacheModel} model | 1270 } |
1378 * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache | 1271 |
1379 * @return {?WebInspector.SWCacheTreeElement} | 1272 /** |
1380 */ | 1273 * @param {!WebInspector.Event} event |
1381 _cacheTreeElement: function(model, cache) | 1274 */ |
1382 { | 1275 _cacheAdded(event) { |
1383 var index = -1; | 1276 var cache = /** @type {!WebInspector.ServiceWorkerCacheModel.Cache} */ (even
t.data); |
1384 for (var i = 0; i < this._swCacheTreeElements.length; ++i) { | 1277 var model = /** @type {!WebInspector.ServiceWorkerCacheModel} */ (event.targ
et); |
1385 if (this._swCacheTreeElements[i]._cache.equals(cache) && this._swCac
heTreeElements[i]._model === model) { | 1278 this._addCache(model, cache); |
1386 index = i; | 1279 } |
1387 break; | 1280 |
1388 } | 1281 /** |
1389 } | 1282 * @param {!WebInspector.ServiceWorkerCacheModel} model |
1390 if (index !== -1) | 1283 * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache |
1391 return this._swCacheTreeElements[i]; | 1284 */ |
1392 return null; | 1285 _addCache(model, cache) { |
1393 }, | 1286 var swCacheTreeElement = new WebInspector.SWCacheTreeElement(this._storagePa
nel, model, cache); |
1394 | 1287 this._swCacheTreeElements.push(swCacheTreeElement); |
1395 __proto__: WebInspector.StorageCategoryTreeElement.prototype | 1288 this.appendChild(swCacheTreeElement); |
1396 }; | 1289 } |
1397 | 1290 |
1398 /** | 1291 /** |
1399 * @constructor | 1292 * @param {!WebInspector.Event} event |
1400 * @extends {WebInspector.BaseStorageTreeElement} | 1293 */ |
1401 * @param {!WebInspector.ResourcesPanel} storagePanel | 1294 _cacheRemoved(event) { |
1402 * @param {!WebInspector.ServiceWorkerCacheModel} model | 1295 var cache = /** @type {!WebInspector.ServiceWorkerCacheModel.Cache} */ (even
t.data); |
1403 * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache | 1296 var model = /** @type {!WebInspector.ServiceWorkerCacheModel} */ (event.targ
et); |
1404 */ | 1297 |
1405 WebInspector.SWCacheTreeElement = function(storagePanel, model, cache) | 1298 var swCacheTreeElement = this._cacheTreeElement(model, cache); |
1406 { | 1299 if (!swCacheTreeElement) |
1407 WebInspector.BaseStorageTreeElement.call(this, storagePanel, cache.cacheName
+ " - " + cache.securityOrigin, ["table-tree-item", "resource-tree-item"]); | 1300 return; |
| 1301 |
| 1302 swCacheTreeElement.clear(); |
| 1303 this.removeChild(swCacheTreeElement); |
| 1304 this._swCacheTreeElements.remove(swCacheTreeElement); |
| 1305 } |
| 1306 |
| 1307 /** |
| 1308 * @param {!WebInspector.ServiceWorkerCacheModel} model |
| 1309 * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache |
| 1310 * @return {?WebInspector.SWCacheTreeElement} |
| 1311 */ |
| 1312 _cacheTreeElement(model, cache) { |
| 1313 var index = -1; |
| 1314 for (var i = 0; i < this._swCacheTreeElements.length; ++i) { |
| 1315 if (this._swCacheTreeElements[i]._cache.equals(cache) && this._swCacheTree
Elements[i]._model === model) { |
| 1316 index = i; |
| 1317 break; |
| 1318 } |
| 1319 } |
| 1320 if (index !== -1) |
| 1321 return this._swCacheTreeElements[i]; |
| 1322 return null; |
| 1323 } |
| 1324 }; |
| 1325 |
| 1326 /** |
| 1327 * @unrestricted |
| 1328 */ |
| 1329 WebInspector.SWCacheTreeElement = class extends WebInspector.BaseStorageTreeElem
ent { |
| 1330 /** |
| 1331 * @param {!WebInspector.ResourcesPanel} storagePanel |
| 1332 * @param {!WebInspector.ServiceWorkerCacheModel} model |
| 1333 * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache |
| 1334 */ |
| 1335 constructor(storagePanel, model, cache) { |
| 1336 super(storagePanel, cache.cacheName + ' - ' + cache.securityOrigin, ['table-
tree-item', 'resource-tree-item']); |
1408 this._model = model; | 1337 this._model = model; |
1409 this._cache = cache; | 1338 this._cache = cache; |
1410 }; | 1339 } |
1411 | 1340 |
1412 WebInspector.SWCacheTreeElement.prototype = { | 1341 get itemURL() { |
1413 get itemURL() | 1342 // I don't think this will work at all. |
1414 { | 1343 return 'cache://' + this._cache.cacheId; |
1415 // I don't think this will work at all. | 1344 } |
1416 return "cache://" + this._cache.cacheId; | 1345 |
1417 }, | 1346 /** |
1418 | 1347 * @override |
1419 onattach: function() | 1348 */ |
1420 { | 1349 onattach() { |
1421 WebInspector.BaseStorageTreeElement.prototype.onattach.call(this); | 1350 super.onattach(); |
1422 this.listItemElement.addEventListener("contextmenu", this._handleContext
MenuEvent.bind(this), true); | 1351 this.listItemElement.addEventListener('contextmenu', this._handleContextMenu
Event.bind(this), true); |
1423 }, | 1352 } |
1424 | 1353 |
1425 _handleContextMenuEvent: function(event) | 1354 _handleContextMenuEvent(event) { |
1426 { | 1355 var contextMenu = new WebInspector.ContextMenu(event); |
1427 var contextMenu = new WebInspector.ContextMenu(event); | 1356 contextMenu.appendItem(WebInspector.UIString('Delete'), this._clearCache.bin
d(this)); |
1428 contextMenu.appendItem(WebInspector.UIString("Delete"), this._clearCache
.bind(this)); | 1357 contextMenu.show(); |
1429 contextMenu.show(); | 1358 } |
1430 }, | 1359 |
1431 | 1360 _clearCache() { |
1432 _clearCache: function() | 1361 this._model.deleteCache(this._cache); |
1433 { | 1362 } |
1434 this._model.deleteCache(this._cache); | 1363 |
1435 }, | 1364 /** |
1436 | 1365 * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache |
1437 /** | 1366 */ |
1438 * @param {!WebInspector.ServiceWorkerCacheModel.Cache} cache | 1367 update(cache) { |
1439 */ | 1368 this._cache = cache; |
1440 update: function(cache) | 1369 if (this._view) |
1441 { | 1370 this._view.update(cache); |
1442 this._cache = cache; | 1371 } |
1443 if (this._view) | 1372 |
1444 this._view.update(cache); | 1373 /** |
1445 }, | 1374 * @override |
1446 | 1375 * @return {boolean} |
1447 /** | 1376 */ |
1448 * @override | 1377 onselect(selectedByUser) { |
1449 * @return {boolean} | 1378 super.onselect(selectedByUser); |
1450 */ | 1379 if (!this._view) |
1451 onselect: function(selectedByUser) | 1380 this._view = new WebInspector.ServiceWorkerCacheView(this._model, this._ca
che); |
1452 { | 1381 |
1453 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1382 this._storagePanel._innerShowView(this._view); |
1454 if (!this._view) | 1383 return false; |
1455 this._view = new WebInspector.ServiceWorkerCacheView(this._model, th
is._cache); | 1384 } |
1456 | 1385 |
1457 this._storagePanel._innerShowView(this._view); | 1386 clear() { |
1458 return false; | 1387 if (this._view) |
1459 }, | 1388 this._view.clear(); |
1460 | 1389 } |
1461 clear: function() | 1390 }; |
1462 { | 1391 |
1463 if (this._view) | 1392 /** |
1464 this._view.clear(); | 1393 * @unrestricted |
1465 }, | 1394 */ |
1466 | 1395 WebInspector.ServiceWorkersTreeElement = class extends WebInspector.BaseStorageT
reeElement { |
1467 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1396 /** |
1468 }; | 1397 * @param {!WebInspector.ResourcesPanel} storagePanel |
1469 | 1398 */ |
1470 | 1399 constructor(storagePanel) { |
1471 /** | 1400 super( |
1472 * @constructor | 1401 storagePanel, WebInspector.UIString('Service Workers'), ['service-worker
-tree-item', 'resource-tree-item'], |
1473 * @extends {WebInspector.BaseStorageTreeElement} | 1402 false); |
1474 * @param {!WebInspector.ResourcesPanel} storagePanel | 1403 } |
1475 */ | 1404 |
1476 WebInspector.ServiceWorkersTreeElement = function(storagePanel) | 1405 /** |
1477 { | 1406 * @return {string} |
1478 WebInspector.BaseStorageTreeElement.call(this, storagePanel, WebInspector.UI
String("Service Workers"), ["service-worker-tree-item", "resource-tree-item"], f
alse); | 1407 */ |
1479 }; | 1408 get itemURL() { |
1480 | 1409 return 'service-workers://'; |
1481 WebInspector.ServiceWorkersTreeElement.prototype = { | 1410 } |
1482 /** | 1411 |
1483 * @return {string} | 1412 /** |
1484 */ | 1413 * @override |
1485 get itemURL() | 1414 * @return {boolean} |
1486 { | 1415 */ |
1487 return "service-workers://"; | 1416 onselect(selectedByUser) { |
1488 }, | 1417 super.onselect(selectedByUser); |
1489 | 1418 if (!this._view) |
1490 /** | 1419 this._view = new WebInspector.ServiceWorkersView(); |
1491 * @override | 1420 this._storagePanel._innerShowView(this._view); |
1492 * @return {boolean} | 1421 return false; |
1493 */ | 1422 } |
1494 onselect: function(selectedByUser) | 1423 }; |
1495 { | 1424 |
1496 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1425 /** |
1497 if (!this._view) | 1426 * @unrestricted |
1498 this._view = new WebInspector.ServiceWorkersView(); | 1427 */ |
1499 this._storagePanel._innerShowView(this._view); | 1428 WebInspector.AppManifestTreeElement = class extends WebInspector.BaseStorageTree
Element { |
1500 return false; | 1429 /** |
1501 }, | 1430 * @param {!WebInspector.ResourcesPanel} storagePanel |
1502 | 1431 */ |
1503 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1432 constructor(storagePanel) { |
1504 }; | 1433 super(storagePanel, WebInspector.UIString('Manifest'), ['manifest-tree-item'
, 'resource-tree-item'], false, false); |
1505 | 1434 } |
1506 /** | 1435 |
1507 * @constructor | 1436 /** |
1508 * @extends {WebInspector.BaseStorageTreeElement} | 1437 * @return {string} |
1509 * @param {!WebInspector.ResourcesPanel} storagePanel | 1438 */ |
1510 */ | 1439 get itemURL() { |
1511 WebInspector.AppManifestTreeElement = function(storagePanel) | 1440 return 'manifest://'; |
1512 { | 1441 } |
1513 WebInspector.BaseStorageTreeElement.call(this, storagePanel, WebInspector.UI
String("Manifest"), ["manifest-tree-item", "resource-tree-item"], false, false); | 1442 |
1514 }; | 1443 /** |
1515 | 1444 * @override |
1516 WebInspector.AppManifestTreeElement.prototype = { | 1445 * @return {boolean} |
1517 /** | 1446 */ |
1518 * @return {string} | 1447 onselect(selectedByUser) { |
1519 */ | 1448 super.onselect(selectedByUser); |
1520 get itemURL() | 1449 if (!this._view) |
1521 { | 1450 this._view = new WebInspector.AppManifestView(); |
1522 return "manifest://"; | 1451 this._storagePanel._innerShowView(this._view); |
1523 }, | 1452 return false; |
1524 | 1453 } |
1525 /** | 1454 }; |
1526 * @override | 1455 |
1527 * @return {boolean} | 1456 /** |
1528 */ | 1457 * @unrestricted |
1529 onselect: function(selectedByUser) | 1458 */ |
1530 { | 1459 WebInspector.ClearStorageTreeElement = class extends WebInspector.BaseStorageTre
eElement { |
1531 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1460 /** |
1532 if (!this._view) | 1461 * @param {!WebInspector.ResourcesPanel} storagePanel |
1533 this._view = new WebInspector.AppManifestView(); | 1462 */ |
1534 this._storagePanel._innerShowView(this._view); | 1463 constructor(storagePanel) { |
1535 return false; | 1464 super( |
1536 }, | 1465 storagePanel, WebInspector.UIString('Clear storage'), ['clear-storage-tr
ee-item', 'resource-tree-item'], false, |
1537 | 1466 false); |
1538 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1467 } |
1539 }; | 1468 |
1540 | 1469 /** |
1541 /** | 1470 * @return {string} |
1542 * @constructor | 1471 */ |
1543 * @extends {WebInspector.BaseStorageTreeElement} | 1472 get itemURL() { |
1544 * @param {!WebInspector.ResourcesPanel} storagePanel | 1473 return 'clear-storage://'; |
1545 */ | 1474 } |
1546 WebInspector.ClearStorageTreeElement = function(storagePanel) | 1475 |
1547 { | 1476 /** |
1548 WebInspector.BaseStorageTreeElement.call(this, storagePanel, WebInspector.UI
String("Clear storage"), ["clear-storage-tree-item", "resource-tree-item"], fals
e, false); | 1477 * @override |
1549 }; | 1478 * @return {boolean} |
1550 | 1479 */ |
1551 WebInspector.ClearStorageTreeElement.prototype = { | 1480 onselect(selectedByUser) { |
1552 /** | 1481 super.onselect(selectedByUser); |
1553 * @return {string} | 1482 if (!this._view) |
1554 */ | 1483 this._view = new WebInspector.ClearStorageView(this._storagePanel); |
1555 get itemURL() | 1484 this._storagePanel._innerShowView(this._view); |
1556 { | 1485 return false; |
1557 return "clear-storage://"; | 1486 } |
1558 }, | 1487 }; |
1559 | 1488 |
1560 /** | 1489 /** |
1561 * @override | 1490 * @unrestricted |
1562 * @return {boolean} | 1491 */ |
1563 */ | 1492 WebInspector.IndexedDBTreeElement = class extends WebInspector.StorageCategoryTr
eeElement { |
1564 onselect: function(selectedByUser) | 1493 /** |
1565 { | 1494 * @param {!WebInspector.ResourcesPanel} storagePanel |
1566 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1495 */ |
1567 if (!this._view) | 1496 constructor(storagePanel) { |
1568 this._view = new WebInspector.ClearStorageView(this._storagePanel); | 1497 super(storagePanel, WebInspector.UIString('IndexedDB'), 'IndexedDB', ['datab
ase-tree-item', 'resource-tree-item']); |
1569 this._storagePanel._innerShowView(this._view); | 1498 } |
1570 return false; | 1499 |
1571 }, | 1500 _initialize() { |
1572 | 1501 WebInspector.targetManager.addModelListener( |
1573 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1502 WebInspector.IndexedDBModel, WebInspector.IndexedDBModel.Events.Database
Added, this._indexedDBAdded, this); |
1574 }; | 1503 WebInspector.targetManager.addModelListener( |
1575 | 1504 WebInspector.IndexedDBModel, WebInspector.IndexedDBModel.Events.Database
Removed, this._indexedDBRemoved, this); |
1576 /** | 1505 WebInspector.targetManager.addModelListener( |
1577 * @constructor | 1506 WebInspector.IndexedDBModel, WebInspector.IndexedDBModel.Events.Database
Loaded, this._indexedDBLoaded, this); |
1578 * @extends {WebInspector.StorageCategoryTreeElement} | 1507 /** @type {!Array.<!WebInspector.IDBDatabaseTreeElement>} */ |
1579 * @param {!WebInspector.ResourcesPanel} storagePanel | 1508 this._idbDatabaseTreeElements = []; |
1580 */ | 1509 |
1581 WebInspector.IndexedDBTreeElement = function(storagePanel) | 1510 var targets = WebInspector.targetManager.targets(WebInspector.Target.Capabil
ity.Browser); |
1582 { | 1511 for (var i = 0; i < targets.length; ++i) { |
1583 WebInspector.StorageCategoryTreeElement.call(this, storagePanel, WebInspecto
r.UIString("IndexedDB"), "IndexedDB", ["database-tree-item", "resource-tree-item
"]); | 1512 var indexedDBModel = WebInspector.IndexedDBModel.fromTarget(targets[i]); |
1584 }; | 1513 var databases = indexedDBModel.databases(); |
1585 | 1514 for (var j = 0; j < databases.length; ++j) |
1586 WebInspector.IndexedDBTreeElement.prototype = { | 1515 this._addIndexedDB(indexedDBModel, databases[j]); |
1587 _initialize: function() | 1516 } |
1588 { | 1517 } |
1589 WebInspector.targetManager.addModelListener(WebInspector.IndexedDBModel,
WebInspector.IndexedDBModel.Events.DatabaseAdded, this._indexedDBAdded, this); | 1518 |
1590 WebInspector.targetManager.addModelListener(WebInspector.IndexedDBModel,
WebInspector.IndexedDBModel.Events.DatabaseRemoved, this._indexedDBRemoved, thi
s); | 1519 /** |
1591 WebInspector.targetManager.addModelListener(WebInspector.IndexedDBModel,
WebInspector.IndexedDBModel.Events.DatabaseLoaded, this._indexedDBLoaded, this)
; | 1520 * @override |
1592 /** @type {!Array.<!WebInspector.IDBDatabaseTreeElement>} */ | 1521 */ |
1593 this._idbDatabaseTreeElements = []; | 1522 onattach() { |
1594 | 1523 super.onattach(); |
1595 var targets = WebInspector.targetManager.targets(WebInspector.Target.Cap
ability.Browser); | 1524 this.listItemElement.addEventListener('contextmenu', this._handleContextMenu
Event.bind(this), true); |
1596 for (var i = 0; i < targets.length; ++i) { | 1525 } |
1597 var indexedDBModel = WebInspector.IndexedDBModel.fromTarget(targets[
i]); | 1526 |
1598 var databases = indexedDBModel.databases(); | 1527 _handleContextMenuEvent(event) { |
1599 for (var j = 0; j < databases.length; ++j) | 1528 var contextMenu = new WebInspector.ContextMenu(event); |
1600 this._addIndexedDB(indexedDBModel, databases[j]); | 1529 contextMenu.appendItem(WebInspector.UIString('Refresh IndexedDB'), this.refr
eshIndexedDB.bind(this)); |
1601 } | 1530 contextMenu.show(); |
1602 }, | 1531 } |
1603 | 1532 |
1604 onattach: function() | 1533 refreshIndexedDB() { |
1605 { | 1534 var targets = WebInspector.targetManager.targets(WebInspector.Target.Capabil
ity.Browser); |
1606 WebInspector.StorageCategoryTreeElement.prototype.onattach.call(this); | 1535 for (var i = 0; i < targets.length; ++i) |
1607 this.listItemElement.addEventListener("contextmenu", this._handleContext
MenuEvent.bind(this), true); | 1536 WebInspector.IndexedDBModel.fromTarget(targets[i]).refreshDatabaseNames(); |
1608 }, | 1537 } |
1609 | 1538 |
1610 _handleContextMenuEvent: function(event) | 1539 /** |
1611 { | 1540 * @param {!WebInspector.Event} event |
1612 var contextMenu = new WebInspector.ContextMenu(event); | 1541 */ |
1613 contextMenu.appendItem(WebInspector.UIString("Refresh IndexedDB"), this.
refreshIndexedDB.bind(this)); | 1542 _indexedDBAdded(event) { |
1614 contextMenu.show(); | 1543 var databaseId = /** @type {!WebInspector.IndexedDBModel.DatabaseId} */ (eve
nt.data); |
1615 }, | 1544 var model = /** @type {!WebInspector.IndexedDBModel} */ (event.target); |
1616 | 1545 this._addIndexedDB(model, databaseId); |
1617 refreshIndexedDB: function() | 1546 } |
1618 { | 1547 |
1619 var targets = WebInspector.targetManager.targets(WebInspector.Target.Cap
ability.Browser); | 1548 /** |
1620 for (var i = 0; i < targets.length; ++i) | 1549 * @param {!WebInspector.IndexedDBModel} model |
1621 WebInspector.IndexedDBModel.fromTarget(targets[i]).refreshDatabaseNa
mes(); | 1550 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId |
1622 }, | 1551 */ |
1623 | 1552 _addIndexedDB(model, databaseId) { |
1624 /** | 1553 var idbDatabaseTreeElement = new WebInspector.IDBDatabaseTreeElement(this._s
toragePanel, model, databaseId); |
1625 * @param {!WebInspector.Event} event | 1554 this._idbDatabaseTreeElements.push(idbDatabaseTreeElement); |
1626 */ | 1555 this.appendChild(idbDatabaseTreeElement); |
1627 _indexedDBAdded: function(event) | 1556 model.refreshDatabase(databaseId); |
1628 { | 1557 } |
1629 var databaseId = /** @type {!WebInspector.IndexedDBModel.DatabaseId} */
(event.data); | 1558 |
1630 var model = /** @type {!WebInspector.IndexedDBModel} */ (event.target); | 1559 /** |
1631 this._addIndexedDB(model, databaseId); | 1560 * @param {!WebInspector.Event} event |
1632 }, | 1561 */ |
1633 | 1562 _indexedDBRemoved(event) { |
1634 /** | 1563 var databaseId = /** @type {!WebInspector.IndexedDBModel.DatabaseId} */ (eve
nt.data); |
1635 * @param {!WebInspector.IndexedDBModel} model | 1564 var model = /** @type {!WebInspector.IndexedDBModel} */ (event.target); |
1636 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId | 1565 |
1637 */ | 1566 var idbDatabaseTreeElement = this._idbDatabaseTreeElement(model, databaseId)
; |
1638 _addIndexedDB: function(model, databaseId) | 1567 if (!idbDatabaseTreeElement) |
1639 { | 1568 return; |
1640 var idbDatabaseTreeElement = new WebInspector.IDBDatabaseTreeElement(thi
s._storagePanel, model, databaseId); | 1569 |
1641 this._idbDatabaseTreeElements.push(idbDatabaseTreeElement); | 1570 idbDatabaseTreeElement.clear(); |
1642 this.appendChild(idbDatabaseTreeElement); | 1571 this.removeChild(idbDatabaseTreeElement); |
1643 model.refreshDatabase(databaseId); | 1572 this._idbDatabaseTreeElements.remove(idbDatabaseTreeElement); |
1644 }, | 1573 } |
1645 | 1574 |
1646 /** | 1575 /** |
1647 * @param {!WebInspector.Event} event | 1576 * @param {!WebInspector.Event} event |
1648 */ | 1577 */ |
1649 _indexedDBRemoved: function(event) | 1578 _indexedDBLoaded(event) { |
1650 { | 1579 var database = /** @type {!WebInspector.IndexedDBModel.Database} */ (event.d
ata); |
1651 var databaseId = /** @type {!WebInspector.IndexedDBModel.DatabaseId} */
(event.data); | 1580 var model = /** @type {!WebInspector.IndexedDBModel} */ (event.target); |
1652 var model = /** @type {!WebInspector.IndexedDBModel} */ (event.target); | 1581 |
1653 | 1582 var idbDatabaseTreeElement = this._idbDatabaseTreeElement(model, database.da
tabaseId); |
1654 var idbDatabaseTreeElement = this._idbDatabaseTreeElement(model, databas
eId); | 1583 if (!idbDatabaseTreeElement) |
1655 if (!idbDatabaseTreeElement) | 1584 return; |
1656 return; | 1585 |
1657 | 1586 idbDatabaseTreeElement.update(database); |
1658 idbDatabaseTreeElement.clear(); | 1587 } |
1659 this.removeChild(idbDatabaseTreeElement); | 1588 |
1660 this._idbDatabaseTreeElements.remove(idbDatabaseTreeElement); | 1589 /** |
1661 }, | 1590 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId |
1662 | 1591 * @param {!WebInspector.IndexedDBModel} model |
1663 /** | 1592 * @return {?WebInspector.IDBDatabaseTreeElement} |
1664 * @param {!WebInspector.Event} event | 1593 */ |
1665 */ | 1594 _idbDatabaseTreeElement(model, databaseId) { |
1666 _indexedDBLoaded: function(event) | 1595 var index = -1; |
1667 { | 1596 for (var i = 0; i < this._idbDatabaseTreeElements.length; ++i) { |
1668 var database = /** @type {!WebInspector.IndexedDBModel.Database} */ (eve
nt.data); | 1597 if (this._idbDatabaseTreeElements[i]._databaseId.equals(databaseId) && |
1669 var model = /** @type {!WebInspector.IndexedDBModel} */ (event.target); | 1598 this._idbDatabaseTreeElements[i]._model === model) { |
1670 | 1599 index = i; |
1671 var idbDatabaseTreeElement = this._idbDatabaseTreeElement(model, databas
e.databaseId); | 1600 break; |
1672 if (!idbDatabaseTreeElement) | 1601 } |
1673 return; | 1602 } |
1674 | 1603 if (index !== -1) |
1675 idbDatabaseTreeElement.update(database); | 1604 return this._idbDatabaseTreeElements[i]; |
1676 }, | 1605 return null; |
1677 | 1606 } |
1678 /** | 1607 }; |
1679 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId | 1608 |
1680 * @param {!WebInspector.IndexedDBModel} model | 1609 /** |
1681 * @return {?WebInspector.IDBDatabaseTreeElement} | 1610 * @unrestricted |
1682 */ | 1611 */ |
1683 _idbDatabaseTreeElement: function(model, databaseId) | 1612 WebInspector.IDBDatabaseTreeElement = class extends WebInspector.BaseStorageTree
Element { |
1684 { | 1613 /** |
1685 var index = -1; | 1614 * @param {!WebInspector.ResourcesPanel} storagePanel |
1686 for (var i = 0; i < this._idbDatabaseTreeElements.length; ++i) { | 1615 * @param {!WebInspector.IndexedDBModel} model |
1687 if (this._idbDatabaseTreeElements[i]._databaseId.equals(databaseId)
&& this._idbDatabaseTreeElements[i]._model === model) { | 1616 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId |
1688 index = i; | 1617 */ |
1689 break; | 1618 constructor(storagePanel, model, databaseId) { |
1690 } | 1619 super( |
1691 } | 1620 storagePanel, databaseId.name + ' - ' + databaseId.securityOrigin, |
1692 if (index !== -1) | 1621 ['database-tree-item', 'resource-tree-item']); |
1693 return this._idbDatabaseTreeElements[i]; | |
1694 return null; | |
1695 }, | |
1696 | |
1697 __proto__: WebInspector.StorageCategoryTreeElement.prototype | |
1698 }; | |
1699 | |
1700 /** | |
1701 * @constructor | |
1702 * @extends {WebInspector.BaseStorageTreeElement} | |
1703 * @param {!WebInspector.ResourcesPanel} storagePanel | |
1704 * @param {!WebInspector.IndexedDBModel} model | |
1705 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId | |
1706 */ | |
1707 WebInspector.IDBDatabaseTreeElement = function(storagePanel, model, databaseId) | |
1708 { | |
1709 WebInspector.BaseStorageTreeElement.call(this, storagePanel, databaseId.name
+ " - " + databaseId.securityOrigin, ["database-tree-item", "resource-tree-item
"]); | |
1710 this._model = model; | 1622 this._model = model; |
1711 this._databaseId = databaseId; | 1623 this._databaseId = databaseId; |
1712 this._idbObjectStoreTreeElements = {}; | 1624 this._idbObjectStoreTreeElements = {}; |
1713 }; | 1625 } |
1714 | 1626 |
1715 WebInspector.IDBDatabaseTreeElement.prototype = { | 1627 get itemURL() { |
1716 get itemURL() | 1628 return 'indexedDB://' + this._databaseId.securityOrigin + '/' + this._databa
seId.name; |
1717 { | 1629 } |
1718 return "indexedDB://" + this._databaseId.securityOrigin + "/" + this._da
tabaseId.name; | 1630 |
1719 }, | 1631 /** |
1720 | 1632 * @override |
1721 onattach: function() | 1633 */ |
1722 { | 1634 onattach() { |
1723 WebInspector.BaseStorageTreeElement.prototype.onattach.call(this); | 1635 super.onattach(); |
1724 this.listItemElement.addEventListener("contextmenu", this._handleContext
MenuEvent.bind(this), true); | 1636 this.listItemElement.addEventListener('contextmenu', this._handleContextMenu
Event.bind(this), true); |
1725 }, | 1637 } |
1726 | 1638 |
1727 _handleContextMenuEvent: function(event) | 1639 _handleContextMenuEvent(event) { |
1728 { | 1640 var contextMenu = new WebInspector.ContextMenu(event); |
1729 var contextMenu = new WebInspector.ContextMenu(event); | 1641 contextMenu.appendItem(WebInspector.UIString('Refresh IndexedDB'), this._ref
reshIndexedDB.bind(this)); |
1730 contextMenu.appendItem(WebInspector.UIString("Refresh IndexedDB"), this.
_refreshIndexedDB.bind(this)); | 1642 contextMenu.show(); |
1731 contextMenu.show(); | 1643 } |
1732 }, | 1644 |
1733 | 1645 _refreshIndexedDB() { |
1734 _refreshIndexedDB: function() | 1646 this._model.refreshDatabaseNames(); |
1735 { | 1647 } |
1736 this._model.refreshDatabaseNames(); | 1648 |
1737 }, | 1649 /** |
1738 | 1650 * @param {!WebInspector.IndexedDBModel.Database} database |
1739 /** | 1651 */ |
1740 * @param {!WebInspector.IndexedDBModel.Database} database | 1652 update(database) { |
1741 */ | 1653 this._database = database; |
1742 update: function(database) | 1654 var objectStoreNames = {}; |
1743 { | 1655 for (var objectStoreName in this._database.objectStores) { |
1744 this._database = database; | 1656 var objectStore = this._database.objectStores[objectStoreName]; |
1745 var objectStoreNames = {}; | 1657 objectStoreNames[objectStore.name] = true; |
1746 for (var objectStoreName in this._database.objectStores) { | 1658 if (!this._idbObjectStoreTreeElements[objectStore.name]) { |
1747 var objectStore = this._database.objectStores[objectStoreName]; | 1659 var idbObjectStoreTreeElement = |
1748 objectStoreNames[objectStore.name] = true; | 1660 new WebInspector.IDBObjectStoreTreeElement(this._storagePanel, this.
_model, this._databaseId, objectStore); |
1749 if (!this._idbObjectStoreTreeElements[objectStore.name]) { | 1661 this._idbObjectStoreTreeElements[objectStore.name] = idbObjectStoreTreeE
lement; |
1750 var idbObjectStoreTreeElement = new WebInspector.IDBObjectStoreT
reeElement(this._storagePanel, this._model, this._databaseId, objectStore); | 1662 this.appendChild(idbObjectStoreTreeElement); |
1751 this._idbObjectStoreTreeElements[objectStore.name] = idbObjectSt
oreTreeElement; | 1663 } |
1752 this.appendChild(idbObjectStoreTreeElement); | 1664 this._idbObjectStoreTreeElements[objectStore.name].update(objectStore); |
1753 } | 1665 } |
1754 this._idbObjectStoreTreeElements[objectStore.name].update(objectStor
e); | 1666 for (var objectStoreName in this._idbObjectStoreTreeElements) { |
1755 } | 1667 if (!objectStoreNames[objectStoreName]) |
1756 for (var objectStoreName in this._idbObjectStoreTreeElements) { | 1668 this._objectStoreRemoved(objectStoreName); |
1757 if (!objectStoreNames[objectStoreName]) | 1669 } |
1758 this._objectStoreRemoved(objectStoreName); | 1670 |
1759 } | 1671 if (this._view) |
1760 | 1672 this._view.update(database); |
1761 if (this._view) | 1673 |
1762 this._view.update(database); | 1674 this._updateTooltip(); |
1763 | 1675 } |
1764 this._updateTooltip(); | 1676 |
1765 }, | 1677 _updateTooltip() { |
1766 | 1678 this.tooltip = WebInspector.UIString('Version') + ': ' + this._database.vers
ion; |
1767 _updateTooltip: function() | 1679 } |
1768 { | 1680 |
1769 this.tooltip = WebInspector.UIString("Version") + ": " + this._database.
version; | 1681 /** |
1770 }, | 1682 * @override |
1771 | 1683 * @return {boolean} |
1772 /** | 1684 */ |
1773 * @override | 1685 onselect(selectedByUser) { |
1774 * @return {boolean} | 1686 super.onselect(selectedByUser); |
1775 */ | 1687 if (!this._view) |
1776 onselect: function(selectedByUser) | 1688 this._view = new WebInspector.IDBDatabaseView(this._database); |
1777 { | 1689 |
1778 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1690 this._storagePanel._innerShowView(this._view); |
1779 if (!this._view) | 1691 return false; |
1780 this._view = new WebInspector.IDBDatabaseView(this._database); | 1692 } |
1781 | 1693 |
1782 this._storagePanel._innerShowView(this._view); | 1694 /** |
1783 return false; | 1695 * @param {string} objectStoreName |
1784 }, | 1696 */ |
1785 | 1697 _objectStoreRemoved(objectStoreName) { |
1786 /** | 1698 var objectStoreTreeElement = this._idbObjectStoreTreeElements[objectStoreNam
e]; |
1787 * @param {string} objectStoreName | 1699 objectStoreTreeElement.clear(); |
1788 */ | 1700 this.removeChild(objectStoreTreeElement); |
1789 _objectStoreRemoved: function(objectStoreName) | 1701 delete this._idbObjectStoreTreeElements[objectStoreName]; |
1790 { | 1702 } |
1791 var objectStoreTreeElement = this._idbObjectStoreTreeElements[objectStor
eName]; | 1703 |
1792 objectStoreTreeElement.clear(); | 1704 clear() { |
1793 this.removeChild(objectStoreTreeElement); | 1705 for (var objectStoreName in this._idbObjectStoreTreeElements) |
1794 delete this._idbObjectStoreTreeElements[objectStoreName]; | 1706 this._objectStoreRemoved(objectStoreName); |
1795 }, | 1707 } |
1796 | 1708 }; |
1797 clear: function() | 1709 |
1798 { | 1710 /** |
1799 for (var objectStoreName in this._idbObjectStoreTreeElements) | 1711 * @unrestricted |
1800 this._objectStoreRemoved(objectStoreName); | 1712 */ |
1801 }, | 1713 WebInspector.IDBObjectStoreTreeElement = class extends WebInspector.BaseStorageT
reeElement { |
1802 | 1714 /** |
1803 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1715 * @param {!WebInspector.ResourcesPanel} storagePanel |
1804 }; | 1716 * @param {!WebInspector.IndexedDBModel} model |
1805 | 1717 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId |
1806 /** | 1718 * @param {!WebInspector.IndexedDBModel.ObjectStore} objectStore |
1807 * @constructor | 1719 */ |
1808 * @extends {WebInspector.BaseStorageTreeElement} | 1720 constructor(storagePanel, model, databaseId, objectStore) { |
1809 * @param {!WebInspector.ResourcesPanel} storagePanel | 1721 super(storagePanel, objectStore.name, ['table-tree-item', 'resource-tree-ite
m']); |
1810 * @param {!WebInspector.IndexedDBModel} model | |
1811 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId | |
1812 * @param {!WebInspector.IndexedDBModel.ObjectStore} objectStore | |
1813 */ | |
1814 WebInspector.IDBObjectStoreTreeElement = function(storagePanel, model, databaseI
d, objectStore) | |
1815 { | |
1816 WebInspector.BaseStorageTreeElement.call(this, storagePanel, objectStore.nam
e, ["table-tree-item", "resource-tree-item"]); | |
1817 this._model = model; | 1722 this._model = model; |
1818 this._databaseId = databaseId; | 1723 this._databaseId = databaseId; |
1819 this._idbIndexTreeElements = {}; | 1724 this._idbIndexTreeElements = {}; |
1820 }; | 1725 } |
1821 | 1726 |
1822 WebInspector.IDBObjectStoreTreeElement.prototype = { | 1727 get itemURL() { |
1823 get itemURL() | 1728 return 'indexedDB://' + this._databaseId.securityOrigin + '/' + this._databa
seId.name + '/' + |
1824 { | 1729 this._objectStore.name; |
1825 return "indexedDB://" + this._databaseId.securityOrigin + "/" + this._da
tabaseId.name + "/" + this._objectStore.name; | 1730 } |
1826 }, | 1731 |
1827 | 1732 /** |
1828 onattach: function() | 1733 * @override |
1829 { | 1734 */ |
1830 WebInspector.BaseStorageTreeElement.prototype.onattach.call(this); | 1735 onattach() { |
1831 this.listItemElement.addEventListener("contextmenu", this._handleContext
MenuEvent.bind(this), true); | 1736 super.onattach(); |
1832 }, | 1737 this.listItemElement.addEventListener('contextmenu', this._handleContextMenu
Event.bind(this), true); |
1833 | 1738 } |
1834 _handleContextMenuEvent: function(event) | 1739 |
1835 { | 1740 _handleContextMenuEvent(event) { |
1836 var contextMenu = new WebInspector.ContextMenu(event); | 1741 var contextMenu = new WebInspector.ContextMenu(event); |
1837 contextMenu.appendItem(WebInspector.UIString("Clear"), this._clearObject
Store.bind(this)); | 1742 contextMenu.appendItem(WebInspector.UIString('Clear'), this._clearObjectStor
e.bind(this)); |
1838 contextMenu.show(); | 1743 contextMenu.show(); |
1839 }, | 1744 } |
1840 | 1745 |
1841 _clearObjectStore: function() | 1746 _clearObjectStore() { |
1842 { | 1747 /** |
1843 /** | 1748 * @this {WebInspector.IDBObjectStoreTreeElement} |
1844 * @this {WebInspector.IDBObjectStoreTreeElement} | |
1845 */ | |
1846 function callback() { | |
1847 this.update(this._objectStore); | |
1848 } | |
1849 this._model.clearObjectStore(this._databaseId, this._objectStore.name, c
allback.bind(this)); | |
1850 }, | |
1851 | |
1852 /** | |
1853 * @param {!WebInspector.IndexedDBModel.ObjectStore} objectStore | |
1854 */ | 1749 */ |
1855 update: function(objectStore) | 1750 function callback() { |
1856 { | 1751 this.update(this._objectStore); |
1857 this._objectStore = objectStore; | 1752 } |
1858 | 1753 this._model.clearObjectStore(this._databaseId, this._objectStore.name, callb
ack.bind(this)); |
1859 var indexNames = {}; | 1754 } |
1860 for (var indexName in this._objectStore.indexes) { | 1755 |
1861 var index = this._objectStore.indexes[indexName]; | 1756 /** |
1862 indexNames[index.name] = true; | 1757 * @param {!WebInspector.IndexedDBModel.ObjectStore} objectStore |
1863 if (!this._idbIndexTreeElements[index.name]) { | 1758 */ |
1864 var idbIndexTreeElement = new WebInspector.IDBIndexTreeElement(t
his._storagePanel, this._model, this._databaseId, this._objectStore, index); | 1759 update(objectStore) { |
1865 this._idbIndexTreeElements[index.name] = idbIndexTreeElement; | 1760 this._objectStore = objectStore; |
1866 this.appendChild(idbIndexTreeElement); | 1761 |
1867 } | 1762 var indexNames = {}; |
1868 this._idbIndexTreeElements[index.name].update(index); | 1763 for (var indexName in this._objectStore.indexes) { |
1869 } | 1764 var index = this._objectStore.indexes[indexName]; |
1870 for (var indexName in this._idbIndexTreeElements) { | 1765 indexNames[index.name] = true; |
1871 if (!indexNames[indexName]) | 1766 if (!this._idbIndexTreeElements[index.name]) { |
1872 this._indexRemoved(indexName); | 1767 var idbIndexTreeElement = new WebInspector.IDBIndexTreeElement( |
1873 } | 1768 this._storagePanel, this._model, this._databaseId, this._objectStore
, index); |
1874 for (var indexName in this._idbIndexTreeElements) { | 1769 this._idbIndexTreeElements[index.name] = idbIndexTreeElement; |
1875 if (!indexNames[indexName]) { | 1770 this.appendChild(idbIndexTreeElement); |
1876 this.removeChild(this._idbIndexTreeElements[indexName]); | 1771 } |
1877 delete this._idbIndexTreeElements[indexName]; | 1772 this._idbIndexTreeElements[index.name].update(index); |
1878 } | 1773 } |
1879 } | 1774 for (var indexName in this._idbIndexTreeElements) { |
1880 | 1775 if (!indexNames[indexName]) |
1881 if (this.childCount()) | 1776 this._indexRemoved(indexName); |
1882 this.expand(); | 1777 } |
1883 | 1778 for (var indexName in this._idbIndexTreeElements) { |
1884 if (this._view) | 1779 if (!indexNames[indexName]) { |
1885 this._view.update(this._objectStore); | 1780 this.removeChild(this._idbIndexTreeElements[indexName]); |
1886 | |
1887 this._updateTooltip(); | |
1888 }, | |
1889 | |
1890 _updateTooltip: function() | |
1891 { | |
1892 | |
1893 var keyPathString = this._objectStore.keyPathString; | |
1894 var tooltipString = keyPathString !== null ? (WebInspector.UIString("Key
path: ") + keyPathString) : ""; | |
1895 if (this._objectStore.autoIncrement) | |
1896 tooltipString += "\n" + WebInspector.UIString("autoIncrement"); | |
1897 this.tooltip = tooltipString; | |
1898 }, | |
1899 | |
1900 /** | |
1901 * @override | |
1902 * @return {boolean} | |
1903 */ | |
1904 onselect: function(selectedByUser) | |
1905 { | |
1906 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | |
1907 if (!this._view) | |
1908 this._view = new WebInspector.IDBDataView(this._model, this._databas
eId, this._objectStore, null); | |
1909 | |
1910 this._storagePanel._innerShowView(this._view); | |
1911 return false; | |
1912 }, | |
1913 | |
1914 /** | |
1915 * @param {string} indexName | |
1916 */ | |
1917 _indexRemoved: function(indexName) | |
1918 { | |
1919 var indexTreeElement = this._idbIndexTreeElements[indexName]; | |
1920 indexTreeElement.clear(); | |
1921 this.removeChild(indexTreeElement); | |
1922 delete this._idbIndexTreeElements[indexName]; | 1781 delete this._idbIndexTreeElements[indexName]; |
1923 }, | 1782 } |
1924 | 1783 } |
1925 clear: function() | 1784 |
1926 { | 1785 if (this.childCount()) |
1927 for (var indexName in this._idbIndexTreeElements) | 1786 this.expand(); |
1928 this._indexRemoved(indexName); | 1787 |
1929 if (this._view) | 1788 if (this._view) |
1930 this._view.clear(); | 1789 this._view.update(this._objectStore); |
1931 }, | 1790 |
1932 | 1791 this._updateTooltip(); |
1933 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1792 } |
1934 }; | 1793 |
1935 | 1794 _updateTooltip() { |
1936 /** | 1795 var keyPathString = this._objectStore.keyPathString; |
1937 * @constructor | 1796 var tooltipString = keyPathString !== null ? (WebInspector.UIString('Key pat
h: ') + keyPathString) : ''; |
1938 * @extends {WebInspector.BaseStorageTreeElement} | 1797 if (this._objectStore.autoIncrement) |
1939 * @param {!WebInspector.ResourcesPanel} storagePanel | 1798 tooltipString += '\n' + WebInspector.UIString('autoIncrement'); |
1940 * @param {!WebInspector.IndexedDBModel} model | 1799 this.tooltip = tooltipString; |
1941 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId | 1800 } |
1942 * @param {!WebInspector.IndexedDBModel.ObjectStore} objectStore | 1801 |
1943 * @param {!WebInspector.IndexedDBModel.Index} index | 1802 /** |
1944 */ | 1803 * @override |
1945 WebInspector.IDBIndexTreeElement = function(storagePanel, model, databaseId, obj
ectStore, index) | 1804 * @return {boolean} |
1946 { | 1805 */ |
1947 WebInspector.BaseStorageTreeElement.call(this, storagePanel, index.name, ["i
ndex-tree-item", "resource-tree-item"]); | 1806 onselect(selectedByUser) { |
| 1807 super.onselect(selectedByUser); |
| 1808 if (!this._view) |
| 1809 this._view = new WebInspector.IDBDataView(this._model, this._databaseId, t
his._objectStore, null); |
| 1810 |
| 1811 this._storagePanel._innerShowView(this._view); |
| 1812 return false; |
| 1813 } |
| 1814 |
| 1815 /** |
| 1816 * @param {string} indexName |
| 1817 */ |
| 1818 _indexRemoved(indexName) { |
| 1819 var indexTreeElement = this._idbIndexTreeElements[indexName]; |
| 1820 indexTreeElement.clear(); |
| 1821 this.removeChild(indexTreeElement); |
| 1822 delete this._idbIndexTreeElements[indexName]; |
| 1823 } |
| 1824 |
| 1825 clear() { |
| 1826 for (var indexName in this._idbIndexTreeElements) |
| 1827 this._indexRemoved(indexName); |
| 1828 if (this._view) |
| 1829 this._view.clear(); |
| 1830 } |
| 1831 }; |
| 1832 |
| 1833 /** |
| 1834 * @unrestricted |
| 1835 */ |
| 1836 WebInspector.IDBIndexTreeElement = class extends WebInspector.BaseStorageTreeEle
ment { |
| 1837 /** |
| 1838 * @param {!WebInspector.ResourcesPanel} storagePanel |
| 1839 * @param {!WebInspector.IndexedDBModel} model |
| 1840 * @param {!WebInspector.IndexedDBModel.DatabaseId} databaseId |
| 1841 * @param {!WebInspector.IndexedDBModel.ObjectStore} objectStore |
| 1842 * @param {!WebInspector.IndexedDBModel.Index} index |
| 1843 */ |
| 1844 constructor(storagePanel, model, databaseId, objectStore, index) { |
| 1845 super(storagePanel, index.name, ['index-tree-item', 'resource-tree-item']); |
1948 this._model = model; | 1846 this._model = model; |
1949 this._databaseId = databaseId; | 1847 this._databaseId = databaseId; |
1950 this._objectStore = objectStore; | 1848 this._objectStore = objectStore; |
1951 this._index = index; | 1849 this._index = index; |
1952 }; | 1850 } |
1953 | 1851 |
1954 WebInspector.IDBIndexTreeElement.prototype = { | 1852 get itemURL() { |
1955 get itemURL() | 1853 return 'indexedDB://' + this._databaseId.securityOrigin + '/' + this._databa
seId.name + '/' + |
1956 { | 1854 this._objectStore.name + '/' + this._index.name; |
1957 return "indexedDB://" + this._databaseId.securityOrigin + "/" + this._da
tabaseId.name + "/" + this._objectStore.name + "/" + this._index.name; | 1855 } |
1958 }, | 1856 |
1959 | 1857 /** |
1960 /** | 1858 * @param {!WebInspector.IndexedDBModel.Index} index |
1961 * @param {!WebInspector.IndexedDBModel.Index} index | 1859 */ |
1962 */ | 1860 update(index) { |
1963 update: function(index) | 1861 this._index = index; |
1964 { | 1862 |
1965 this._index = index; | 1863 if (this._view) |
1966 | 1864 this._view.update(this._index); |
1967 if (this._view) | 1865 |
1968 this._view.update(this._index); | 1866 this._updateTooltip(); |
1969 | 1867 } |
1970 this._updateTooltip(); | 1868 |
1971 }, | 1869 _updateTooltip() { |
1972 | 1870 var tooltipLines = []; |
1973 _updateTooltip: function() | 1871 var keyPathString = this._index.keyPathString; |
1974 { | 1872 tooltipLines.push(WebInspector.UIString('Key path: ') + keyPathString); |
1975 var tooltipLines = []; | 1873 if (this._index.unique) |
1976 var keyPathString = this._index.keyPathString; | 1874 tooltipLines.push(WebInspector.UIString('unique')); |
1977 tooltipLines.push(WebInspector.UIString("Key path: ") + keyPathString); | 1875 if (this._index.multiEntry) |
1978 if (this._index.unique) | 1876 tooltipLines.push(WebInspector.UIString('multiEntry')); |
1979 tooltipLines.push(WebInspector.UIString("unique")); | 1877 this.tooltip = tooltipLines.join('\n'); |
1980 if (this._index.multiEntry) | 1878 } |
1981 tooltipLines.push(WebInspector.UIString("multiEntry")); | 1879 |
1982 this.tooltip = tooltipLines.join("\n"); | 1880 /** |
1983 }, | 1881 * @override |
1984 | 1882 * @return {boolean} |
1985 /** | 1883 */ |
1986 * @override | 1884 onselect(selectedByUser) { |
1987 * @return {boolean} | 1885 super.onselect(selectedByUser); |
1988 */ | 1886 if (!this._view) |
1989 onselect: function(selectedByUser) | 1887 this._view = new WebInspector.IDBDataView(this._model, this._databaseId, t
his._objectStore, this._index); |
1990 { | 1888 |
1991 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1889 this._storagePanel._innerShowView(this._view); |
1992 if (!this._view) | 1890 return false; |
1993 this._view = new WebInspector.IDBDataView(this._model, this._databas
eId, this._objectStore, this._index); | 1891 } |
1994 | 1892 |
1995 this._storagePanel._innerShowView(this._view); | 1893 clear() { |
1996 return false; | 1894 if (this._view) |
1997 }, | 1895 this._view.clear(); |
1998 | 1896 } |
1999 clear: function() | 1897 }; |
2000 { | 1898 |
2001 if (this._view) | 1899 /** |
2002 this._view.clear(); | 1900 * @unrestricted |
2003 }, | 1901 */ |
2004 | 1902 WebInspector.DOMStorageTreeElement = class extends WebInspector.BaseStorageTreeE
lement { |
2005 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1903 constructor(storagePanel, domStorage) { |
2006 }; | 1904 super( |
2007 | 1905 storagePanel, domStorage.securityOrigin ? domStorage.securityOrigin : We
bInspector.UIString('Local Files'), |
2008 /** | 1906 ['table-tree-item', 'resource-tree-item']); |
2009 * @constructor | |
2010 * @extends {WebInspector.BaseStorageTreeElement} | |
2011 */ | |
2012 WebInspector.DOMStorageTreeElement = function(storagePanel, domStorage) | |
2013 { | |
2014 WebInspector.BaseStorageTreeElement.call(this, storagePanel, domStorage.secu
rityOrigin ? domStorage.securityOrigin : WebInspector.UIString("Local Files"), [
"table-tree-item", "resource-tree-item"]); | |
2015 this._domStorage = domStorage; | 1907 this._domStorage = domStorage; |
2016 }; | 1908 } |
2017 | 1909 |
2018 WebInspector.DOMStorageTreeElement.prototype = { | 1910 get itemURL() { |
2019 get itemURL() | 1911 return 'storage://' + this._domStorage.securityOrigin + '/' + |
2020 { | 1912 (this._domStorage.isLocalStorage ? 'local' : 'session'); |
2021 return "storage://" + this._domStorage.securityOrigin + "/" + (this._dom
Storage.isLocalStorage ? "local" : "session"); | 1913 } |
2022 }, | 1914 |
2023 | 1915 /** |
2024 /** | 1916 * @override |
2025 * @override | 1917 * @return {boolean} |
2026 * @return {boolean} | 1918 */ |
2027 */ | 1919 onselect(selectedByUser) { |
2028 onselect: function(selectedByUser) | 1920 super.onselect(selectedByUser); |
2029 { | 1921 this._storagePanel._showDOMStorage(this._domStorage); |
2030 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1922 return false; |
2031 this._storagePanel._showDOMStorage(this._domStorage); | 1923 } |
2032 return false; | 1924 }; |
2033 }, | 1925 |
2034 | 1926 /** |
2035 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1927 * @unrestricted |
2036 }; | 1928 */ |
2037 | 1929 WebInspector.CookieTreeElement = class extends WebInspector.BaseStorageTreeEleme
nt { |
2038 /** | 1930 constructor(storagePanel, cookieDomain) { |
2039 * @constructor | 1931 super( |
2040 * @extends {WebInspector.BaseStorageTreeElement} | 1932 storagePanel, cookieDomain ? cookieDomain : WebInspector.UIString('Local
Files'), |
2041 */ | 1933 ['cookie-tree-item', 'resource-tree-item']); |
2042 WebInspector.CookieTreeElement = function(storagePanel, cookieDomain) | |
2043 { | |
2044 WebInspector.BaseStorageTreeElement.call(this, storagePanel, cookieDomain ?
cookieDomain : WebInspector.UIString("Local Files"), ["cookie-tree-item", "resou
rce-tree-item"]); | |
2045 this._cookieDomain = cookieDomain; | 1934 this._cookieDomain = cookieDomain; |
2046 }; | 1935 } |
2047 | 1936 |
2048 WebInspector.CookieTreeElement.prototype = { | 1937 get itemURL() { |
2049 get itemURL() | 1938 return 'cookies://' + this._cookieDomain; |
2050 { | 1939 } |
2051 return "cookies://" + this._cookieDomain; | 1940 |
2052 }, | 1941 /** |
2053 | 1942 * @override |
2054 onattach: function() | 1943 */ |
2055 { | 1944 onattach() { |
2056 WebInspector.BaseStorageTreeElement.prototype.onattach.call(this); | 1945 super.onattach(); |
2057 this.listItemElement.addEventListener("contextmenu", this._handleContext
MenuEvent.bind(this), true); | 1946 this.listItemElement.addEventListener('contextmenu', this._handleContextMenu
Event.bind(this), true); |
2058 }, | 1947 } |
2059 | 1948 |
2060 /** | 1949 /** |
2061 * @param {!Event} event | 1950 * @param {!Event} event |
2062 */ | 1951 */ |
2063 _handleContextMenuEvent: function(event) | 1952 _handleContextMenuEvent(event) { |
2064 { | 1953 var contextMenu = new WebInspector.ContextMenu(event); |
2065 var contextMenu = new WebInspector.ContextMenu(event); | 1954 contextMenu.appendItem(WebInspector.UIString('Clear'), this._clearCookies.bi
nd(this)); |
2066 contextMenu.appendItem(WebInspector.UIString("Clear"), this._clearCookie
s.bind(this)); | 1955 contextMenu.show(); |
2067 contextMenu.show(); | 1956 } |
2068 }, | 1957 |
2069 | 1958 /** |
2070 /** | 1959 * @param {string} domain |
2071 * @param {string} domain | 1960 */ |
2072 */ | 1961 _clearCookies(domain) { |
2073 _clearCookies: function(domain) | 1962 this._storagePanel.clearCookies(this._cookieDomain); |
2074 { | 1963 } |
2075 this._storagePanel.clearCookies(this._cookieDomain); | 1964 |
2076 }, | 1965 /** |
2077 | 1966 * @override |
2078 /** | 1967 * @return {boolean} |
2079 * @override | 1968 */ |
2080 * @return {boolean} | 1969 onselect(selectedByUser) { |
2081 */ | 1970 super.onselect(selectedByUser); |
2082 onselect: function(selectedByUser) | 1971 this._storagePanel.showCookies(this, this._cookieDomain); |
2083 { | 1972 return false; |
2084 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 1973 } |
2085 this._storagePanel.showCookies(this, this._cookieDomain); | 1974 }; |
2086 return false; | 1975 |
2087 }, | 1976 /** |
2088 | 1977 * @unrestricted |
2089 __proto__: WebInspector.BaseStorageTreeElement.prototype | 1978 */ |
2090 }; | 1979 WebInspector.ApplicationCacheManifestTreeElement = class extends WebInspector.Ba
seStorageTreeElement { |
2091 | 1980 constructor(storagePanel, manifestURL) { |
2092 /** | |
2093 * @constructor | |
2094 * @extends {WebInspector.BaseStorageTreeElement} | |
2095 */ | |
2096 WebInspector.ApplicationCacheManifestTreeElement = function(storagePanel, manife
stURL) | |
2097 { | |
2098 var title = new WebInspector.ParsedURL(manifestURL).displayName; | 1981 var title = new WebInspector.ParsedURL(manifestURL).displayName; |
2099 WebInspector.BaseStorageTreeElement.call(this, storagePanel, title, ["applic
ation-cache-storage-tree-item"]); | 1982 super(storagePanel, title, ['application-cache-storage-tree-item']); |
2100 this.tooltip = manifestURL; | 1983 this.tooltip = manifestURL; |
2101 this._manifestURL = manifestURL; | 1984 this._manifestURL = manifestURL; |
2102 }; | 1985 } |
2103 | 1986 |
2104 WebInspector.ApplicationCacheManifestTreeElement.prototype = { | 1987 get itemURL() { |
2105 get itemURL() | 1988 return 'appcache://' + this._manifestURL; |
2106 { | 1989 } |
2107 return "appcache://" + this._manifestURL; | 1990 |
2108 }, | 1991 get manifestURL() { |
2109 | 1992 return this._manifestURL; |
2110 get manifestURL() | 1993 } |
2111 { | 1994 |
2112 return this._manifestURL; | 1995 /** |
2113 }, | 1996 * @override |
2114 | 1997 * @return {boolean} |
2115 /** | 1998 */ |
2116 * @override | 1999 onselect(selectedByUser) { |
2117 * @return {boolean} | 2000 super.onselect(selectedByUser); |
2118 */ | 2001 this._storagePanel.showCategoryView(this._manifestURL); |
2119 onselect: function(selectedByUser) | 2002 return false; |
2120 { | 2003 } |
2121 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 2004 }; |
2122 this._storagePanel.showCategoryView(this._manifestURL); | 2005 |
2123 return false; | 2006 /** |
2124 }, | 2007 * @unrestricted |
2125 | 2008 */ |
2126 __proto__: WebInspector.BaseStorageTreeElement.prototype | 2009 WebInspector.ApplicationCacheFrameTreeElement = class extends WebInspector.BaseS
torageTreeElement { |
2127 }; | 2010 /** |
2128 | 2011 * @param {!WebInspector.ResourcesPanel} storagePanel |
2129 /** | 2012 * @param {!PageAgent.FrameId} frameId |
2130 * @constructor | 2013 * @param {string} manifestURL |
2131 * @extends {WebInspector.BaseStorageTreeElement} | 2014 */ |
2132 * @param {!WebInspector.ResourcesPanel} storagePanel | 2015 constructor(storagePanel, frameId, manifestURL) { |
2133 * @param {!PageAgent.FrameId} frameId | 2016 super(storagePanel, '', ['navigator-tree-item', 'navigator-folder-tree-item'
]); |
2134 * @param {string} manifestURL | |
2135 */ | |
2136 WebInspector.ApplicationCacheFrameTreeElement = function(storagePanel, frameId,
manifestURL) | |
2137 { | |
2138 WebInspector.BaseStorageTreeElement.call(this, storagePanel, "", ["navigator
-tree-item", "navigator-folder-tree-item"]); | |
2139 this._frameId = frameId; | 2017 this._frameId = frameId; |
2140 this._manifestURL = manifestURL; | 2018 this._manifestURL = manifestURL; |
2141 this._refreshTitles(); | 2019 this._refreshTitles(); |
2142 }; | 2020 } |
2143 | 2021 |
2144 WebInspector.ApplicationCacheFrameTreeElement.prototype = { | 2022 get itemURL() { |
2145 get itemURL() | 2023 return 'appcache://' + this._manifestURL + '/' + encodeURI(this.titleAsText(
)); |
2146 { | 2024 } |
2147 return "appcache://" + this._manifestURL + "/" + encodeURI(this.titleAsT
ext()); | 2025 |
2148 }, | 2026 get frameId() { |
2149 | 2027 return this._frameId; |
2150 get frameId() | 2028 } |
2151 { | 2029 |
2152 return this._frameId; | 2030 get manifestURL() { |
2153 }, | 2031 return this._manifestURL; |
2154 | 2032 } |
2155 get manifestURL() | 2033 |
2156 { | 2034 _refreshTitles() { |
2157 return this._manifestURL; | 2035 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(this._stor
agePanel._target); |
2158 }, | 2036 var frame = resourceTreeModel.frameForId(this._frameId); |
2159 | 2037 this.title = frame.displayName(); |
2160 _refreshTitles: function() | 2038 } |
2161 { | 2039 |
2162 var resourceTreeModel = WebInspector.ResourceTreeModel.fromTarget(this._
storagePanel._target); | 2040 frameNavigated() { |
2163 var frame = resourceTreeModel.frameForId(this._frameId); | 2041 this._refreshTitles(); |
2164 this.title = frame.displayName(); | 2042 } |
2165 }, | 2043 |
2166 | 2044 /** |
2167 frameNavigated: function() | 2045 * @override |
2168 { | 2046 * @return {boolean} |
2169 this._refreshTitles(); | 2047 */ |
2170 }, | 2048 onselect(selectedByUser) { |
2171 | 2049 super.onselect(selectedByUser); |
2172 /** | 2050 this._storagePanel.showApplicationCache(this._frameId); |
2173 * @override | 2051 return false; |
2174 * @return {boolean} | 2052 } |
2175 */ | 2053 }; |
2176 onselect: function(selectedByUser) | 2054 |
2177 { | 2055 /** |
2178 WebInspector.BaseStorageTreeElement.prototype.onselect.call(this, select
edByUser); | 2056 * @unrestricted |
2179 this._storagePanel.showApplicationCache(this._frameId); | 2057 */ |
2180 return false; | 2058 WebInspector.StorageCategoryView = class extends WebInspector.VBox { |
2181 }, | 2059 constructor() { |
2182 | 2060 super(); |
2183 __proto__: WebInspector.BaseStorageTreeElement.prototype | 2061 |
2184 }; | 2062 this.element.classList.add('storage-view'); |
2185 | 2063 this._emptyWidget = new WebInspector.EmptyWidget(''); |
2186 /** | |
2187 * @constructor | |
2188 * @extends {WebInspector.VBox} | |
2189 */ | |
2190 WebInspector.StorageCategoryView = function() | |
2191 { | |
2192 WebInspector.VBox.call(this); | |
2193 | |
2194 this.element.classList.add("storage-view"); | |
2195 this._emptyWidget = new WebInspector.EmptyWidget(""); | |
2196 this._emptyWidget.show(this.element); | 2064 this._emptyWidget.show(this.element); |
2197 }; | 2065 } |
2198 | 2066 |
2199 WebInspector.StorageCategoryView.prototype = { | 2067 setText(text) { |
2200 setText: function(text) | 2068 this._emptyWidget.text = text; |
2201 { | 2069 } |
2202 this._emptyWidget.text = text; | 2070 }; |
2203 }, | 2071 |
2204 | 2072 |
2205 __proto__: WebInspector.VBox.prototype | |
2206 }; | |
2207 | |
2208 /** | |
2209 * @return {!WebInspector.ResourcesPanel} | |
2210 */ | |
2211 WebInspector.ResourcesPanel._instance = function() | |
2212 { | |
2213 return /** @type {!WebInspector.ResourcesPanel} */ (self.runtime.sharedInsta
nce(WebInspector.ResourcesPanel)); | |
2214 }; | |
OLD | NEW |