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

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

Issue 2712043002: [DevTools] Separate frames and resources handling (Closed)
Patch Set: [DevTools] Separate frames and resources handling Created 3 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 /* 1 /*
2 * Copyright (C) 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
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
81 var cacheTreeElement = this._addSidebarSection(Common.UIString('Cache')); 81 var cacheTreeElement = this._addSidebarSection(Common.UIString('Cache'));
82 this.cacheStorageListTreeElement = new Resources.ServiceWorkerCacheTreeEleme nt(this); 82 this.cacheStorageListTreeElement = new Resources.ServiceWorkerCacheTreeEleme nt(this);
83 cacheTreeElement.appendChild(this.cacheStorageListTreeElement); 83 cacheTreeElement.appendChild(this.cacheStorageListTreeElement);
84 this.applicationCacheListTreeElement = 84 this.applicationCacheListTreeElement =
85 new Resources.StorageCategoryTreeElement(this, Common.UIString('Applicat ion Cache'), 'ApplicationCache'); 85 new Resources.StorageCategoryTreeElement(this, Common.UIString('Applicat ion Cache'), 'ApplicationCache');
86 var applicationCacheIcon = UI.Icon.create('mediumicon-table', 'resource-tree -item'); 86 var applicationCacheIcon = UI.Icon.create('mediumicon-table', 'resource-tree -item');
87 this.applicationCacheListTreeElement.setLeadingIcons([applicationCacheIcon]) ; 87 this.applicationCacheListTreeElement.setLeadingIcons([applicationCacheIcon]) ;
88 88
89 cacheTreeElement.appendChild(this.applicationCacheListTreeElement); 89 cacheTreeElement.appendChild(this.applicationCacheListTreeElement);
90 90
91 this.resourcesListTreeElement = this._addSidebarSection(Common.UIString('Fra mes')); 91 this._resourcesSection = new Resources.ResourcesSection(this, this._addSideb arSection(Common.UIString('Frames')));
92 92
93 var mainContainer = new UI.VBox(); 93 var mainContainer = new UI.VBox();
94 this.storageViews = mainContainer.element.createChild('div', 'vbox flex-auto '); 94 this.storageViews = mainContainer.element.createChild('div', 'vbox flex-auto ');
95 this._storageViewToolbar = new UI.Toolbar('resources-toolbar', mainContainer .element); 95 this._storageViewToolbar = new UI.Toolbar('resources-toolbar', mainContainer .element);
96 this.splitWidget().setMainWidget(mainContainer); 96 this.splitWidget().setMainWidget(mainContainer);
97 97
98 /** @type {!Map.<!Resources.Database, !Object.<string, !Resources.DatabaseTa bleView>>} */ 98 /** @type {!Map.<!Resources.Database, !Object.<string, !Resources.DatabaseTa bleView>>} */
99 this._databaseTableViews = new Map(); 99 this._databaseTableViews = new Map();
100 /** @type {!Map.<!Resources.Database, !Resources.DatabaseQueryView>} */ 100 /** @type {!Map.<!Resources.Database, !Resources.DatabaseQueryView>} */
101 this._databaseQueryViews = new Map(); 101 this._databaseQueryViews = new Map();
102 /** @type {!Map.<!Resources.Database, !Resources.DatabaseTreeElement>} */ 102 /** @type {!Map.<!Resources.Database, !Resources.DatabaseTreeElement>} */
103 this._databaseTreeElements = new Map(); 103 this._databaseTreeElements = new Map();
104 /** @type {!Map.<!Resources.DOMStorage, !Resources.DOMStorageTreeElement>} * / 104 /** @type {!Map.<!Resources.DOMStorage, !Resources.DOMStorageTreeElement>} * /
105 this._domStorageTreeElements = new Map(); 105 this._domStorageTreeElements = new Map();
106 /** @type {!Object.<string, boolean>} */ 106 /** @type {!Object.<string, boolean>} */
107 this._domains = {}; 107 this._domains = {};
108 108
109 /** @type {?Resources.DOMStorageItemsView} */ 109 /** @type {?Resources.DOMStorageItemsView} */
110 this._domStorageView = null; 110 this._domStorageView = null;
111 /** @type {?Resources.CookieItemsView} */ 111 /** @type {?Resources.CookieItemsView} */
112 this._cookieView = null; 112 this._cookieView = null;
113 113
114 this.panelSidebarElement().addEventListener('mousemove', this._onmousemove.b ind(this), false); 114 this.panelSidebarElement().addEventListener('mousemove', this._onmousemove.b ind(this), false);
115 this.panelSidebarElement().addEventListener('mouseleave', this._onmouseleave .bind(this), false); 115 this.panelSidebarElement().addEventListener('mouseleave', this._onmouseleave .bind(this), false);
116 116
117 SDK.targetManager.observeTargets(this); 117 SDK.targetManager.observeTargets(this);
118 SDK.targetManager.addModelListener(
119 SDK.ResourceTreeModel, SDK.ResourceTreeModel.Events.FrameNavigated, this ._frameNavigated, this);
118 } 120 }
119 121
120 /** 122 /**
121 * @return {!Resources.ResourcesPanel} 123 * @return {!Resources.ResourcesPanel}
122 */ 124 */
123 static _instance() { 125 static _instance() {
124 return /** @type {!Resources.ResourcesPanel} */ (self.runtime.sharedInstance (Resources.ResourcesPanel)); 126 return /** @type {!Resources.ResourcesPanel} */ (self.runtime.sharedInstance (Resources.ResourcesPanel));
125 } 127 }
126 128
127 /** 129 /**
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 } 186 }
185 187
186 /** 188 /**
187 * @override 189 * @override
188 */ 190 */
189 focus() { 191 focus() {
190 this._sidebarTree.focus(); 192 this._sidebarTree.focus();
191 } 193 }
192 194
193 _initialize() { 195 _initialize() {
196 for (var frame of SDK.ResourceTreeModel.frames())
197 this._addCookieDocument(frame);
194 this._databaseModel.enable(); 198 this._databaseModel.enable();
195 199
196 var indexedDBModel = Resources.IndexedDBModel.fromTarget(this._target); 200 var indexedDBModel = Resources.IndexedDBModel.fromTarget(this._target);
197 if (indexedDBModel) 201 if (indexedDBModel)
198 indexedDBModel.enable(); 202 indexedDBModel.enable();
199 203
200 var cacheStorageModel = SDK.ServiceWorkerCacheModel.fromTarget(this._target) ; 204 var cacheStorageModel = SDK.ServiceWorkerCacheModel.fromTarget(this._target) ;
201 if (cacheStorageModel) 205 if (cacheStorageModel)
202 cacheStorageModel.enable(); 206 cacheStorageModel.enable();
203 var resourceTreeModel = SDK.ResourceTreeModel.fromTarget(this._target); 207 var resourceTreeModel = SDK.ResourceTreeModel.fromTarget(this._target);
204 if (resourceTreeModel) { 208 if (resourceTreeModel)
205 this._populateResourceTree(resourceTreeModel);
206 this._populateApplicationCacheTree(resourceTreeModel); 209 this._populateApplicationCacheTree(resourceTreeModel);
207 }
208 var domStorageModel = Resources.DOMStorageModel.fromTarget(this._target); 210 var domStorageModel = Resources.DOMStorageModel.fromTarget(this._target);
209 if (domStorageModel) 211 if (domStorageModel)
210 this._populateDOMStorageTree(domStorageModel); 212 this._populateDOMStorageTree(domStorageModel);
211 this.indexedDBListTreeElement._initialize(); 213 this.indexedDBListTreeElement._initialize();
212 this.cacheStorageListTreeElement._initialize(); 214 this.cacheStorageListTreeElement._initialize();
213 this._initDefaultSelection(); 215 this._initDefaultSelection();
214 } 216 }
215 217
216 _initDefaultSelection() { 218 _initDefaultSelection() {
217 var itemURL = this._resourcesLastSelectedItemSetting.get(); 219 var itemURL = this._resourcesLastSelectedItemSetting.get();
218 if (itemURL) { 220 if (itemURL) {
219 var rootElement = this._sidebarTree.rootElement(); 221 var rootElement = this._sidebarTree.rootElement();
220 for (var treeElement = rootElement.firstChild(); treeElement; 222 for (var treeElement = rootElement.firstChild(); treeElement;
221 treeElement = treeElement.traverseNextTreeElement(false, rootElement, true)) { 223 treeElement = treeElement.traverseNextTreeElement(false, rootElement, true)) {
222 if (treeElement.itemURL === itemURL) { 224 if (treeElement.itemURL === itemURL) {
223 treeElement.revealAndSelect(true); 225 treeElement.revealAndSelect(true);
224 return; 226 return;
225 } 227 }
226 } 228 }
227 } 229 }
228 this._manifestTreeElement.select(); 230 this._manifestTreeElement.select();
229 } 231 }
230 232
231 _resetWithFrames() { 233 _resetWithFrames() {
232 this.resourcesListTreeElement.removeChildren(); 234 this._resourcesSection.reset();
233 this._treeElementForFrameId = {};
234 this._reset(); 235 this._reset();
235 } 236 }
236 237
237 _resetWebSQL() { 238 _resetWebSQL() {
238 if (this.visibleView instanceof Resources.DatabaseQueryView || 239 if (this.visibleView instanceof Resources.DatabaseQueryView ||
239 this.visibleView instanceof Resources.DatabaseTableView) { 240 this.visibleView instanceof Resources.DatabaseTableView) {
240 this.visibleView.detach(); 241 this.visibleView.detach();
241 delete this.visibleView; 242 delete this.visibleView;
242 } 243 }
243 244
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 this.visibleView.detach(); 301 this.visibleView.detach();
301 delete this.visibleView; 302 delete this.visibleView;
302 } 303 }
303 304
304 this._storageViewToolbar.removeToolbarItems(); 305 this._storageViewToolbar.removeToolbarItems();
305 306
306 if (this._sidebarTree.selectedTreeElement) 307 if (this._sidebarTree.selectedTreeElement)
307 this._sidebarTree.selectedTreeElement.deselect(); 308 this._sidebarTree.selectedTreeElement.deselect();
308 } 309 }
309 310
310 /**
311 * @param {!SDK.ResourceTreeModel} resourceTreeModel
312 */
313 _populateResourceTree(resourceTreeModel) {
314 this._treeElementForFrameId = {};
315 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameAdded, this._frameAdded, this);
316 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameNavigat ed, this._frameNavigated, this);
317 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.FrameDetache d, this._frameDetached, this);
318 resourceTreeModel.addEventListener(SDK.ResourceTreeModel.Events.ResourceAdde d, this._resourceAdded, this);
319
320 /**
321 * @param {!SDK.ResourceTreeFrame} frame
322 * @this {Resources.ResourcesPanel}
323 */
324 function populateFrame(frame) {
325 this._frameAdded({data: frame});
326 for (var i = 0; i < frame.childFrames.length; ++i)
327 populateFrame.call(this, frame.childFrames[i]);
328
329 var resources = frame.resources();
330 for (var i = 0; i < resources.length; ++i)
331 this._resourceAdded({data: resources[i]});
332 }
333 populateFrame.call(this, resourceTreeModel.mainFrame);
334 }
335
336 _frameAdded(event) {
337 var frame = event.data;
338 var parentFrame = frame.parentFrame;
339
340 var parentTreeElement = parentFrame ? this._treeElementForFrameId[parentFram e.id] : this.resourcesListTreeElement;
341 if (!parentTreeElement) {
342 console.warn('No frame to route ' + frame.url + ' to.');
343 return;
344 }
345
346 var frameTreeElement = new Resources.FrameTreeElement(this, frame);
347 this._treeElementForFrameId[frame.id] = frameTreeElement;
348 parentTreeElement.appendChild(frameTreeElement);
349 }
350
351 _frameDetached(event) {
352 var frame = event.data;
353 var frameTreeElement = this._treeElementForFrameId[frame.id];
354 if (!frameTreeElement)
355 return;
356
357 delete this._treeElementForFrameId[frame.id];
358 if (frameTreeElement.parent)
359 frameTreeElement.parent.removeChild(frameTreeElement);
360 }
361
362 _resourceAdded(event) {
363 var resource = event.data;
364 var frameId = resource.frameId;
365
366 if (resource.statusCode >= 301 && resource.statusCode <= 303)
367 return;
368
369 var frameTreeElement = this._treeElementForFrameId[frameId];
370 if (!frameTreeElement) {
371 // This is a frame's main resource, it will be retained
372 // and re-added by the resource manager;
373 return;
374 }
375
376 frameTreeElement.appendResource(resource);
377 }
378
379 _frameNavigated(event) { 311 _frameNavigated(event) {
380 var frame = event.data; 312 var frame = event.data;
381 313
382 if (!frame.parentFrame) 314 if (!frame.parentFrame)
383 this._reset(); 315 this._reset();
384 316
385 var frameId = frame.id; 317 var applicationCacheFrameTreeElement = this._applicationCacheFrameElements[f rame.id];
386 var frameTreeElement = this._treeElementForFrameId[frameId];
387 if (frameTreeElement)
388 frameTreeElement.frameNavigated(frame);
389
390 var applicationCacheFrameTreeElement = this._applicationCacheFrameElements[f rameId];
391 if (applicationCacheFrameTreeElement) 318 if (applicationCacheFrameTreeElement)
392 applicationCacheFrameTreeElement.frameNavigated(frame); 319 applicationCacheFrameTreeElement.frameNavigated(frame);
320 this._addCookieDocument(frame);
393 } 321 }
394 322
395 /** 323 /**
396 * @param {!Resources.DatabaseModel.DatabaseAddedEvent} event 324 * @param {!Resources.DatabaseModel.DatabaseAddedEvent} event
397 */ 325 */
398 _databaseAdded(event) { 326 _databaseAdded(event) {
399 var databaseTreeElement = new Resources.DatabaseTreeElement(this, event.data base); 327 var databaseTreeElement = new Resources.DatabaseTreeElement(this, event.data base);
400 this._databaseTreeElements.set(event.database, databaseTreeElement); 328 this._databaseTreeElements.set(event.database, databaseTreeElement);
401 this.databasesListTreeElement.appendChild(databaseTreeElement); 329 this.databasesListTreeElement.appendChild(databaseTreeElement);
402 } 330 }
403 331
404 /** 332 /**
405 * @param {!SDK.ResourceTreeFrame} frame 333 * @param {!SDK.ResourceTreeFrame} frame
406 */ 334 */
407 addCookieDocument(frame) { 335 _addCookieDocument(frame) {
408 var parsedURL = frame.url.asParsedURL(); 336 var parsedURL = frame.url.asParsedURL();
409 if (!parsedURL || (parsedURL.scheme !== 'http' && parsedURL.scheme !== 'http s' && parsedURL.scheme !== 'file')) 337 if (!parsedURL || (parsedURL.scheme !== 'http' && parsedURL.scheme !== 'http s' && parsedURL.scheme !== 'file'))
410 return; 338 return;
411 339
412 var domain = parsedURL.securityOrigin(); 340 var domain = parsedURL.securityOrigin();
413 if (!this._domains[domain]) { 341 if (!this._domains[domain]) {
414 this._domains[domain] = true; 342 this._domains[domain] = true;
415 var cookieDomainTreeElement = new Resources.CookieTreeElement(this, frame, domain); 343 var cookieDomainTreeElement = new Resources.CookieTreeElement(this, frame, domain);
416 this.cookieListTreeElement.appendChild(cookieDomainTreeElement); 344 this.cookieListTreeElement.appendChild(cookieDomainTreeElement);
417 } 345 }
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
482 } 410 }
483 } 411 }
484 412
485 /** 413 /**
486 * @param {!SDK.Resource} resource 414 * @param {!SDK.Resource} resource
487 * @param {number=} line 415 * @param {number=} line
488 * @param {number=} column 416 * @param {number=} column
489 * @return {boolean} 417 * @return {boolean}
490 */ 418 */
491 showResource(resource, line, column) { 419 showResource(resource, line, column) {
492 var resourceTreeElement = this._findTreeElementForResource(resource); 420 var resourceTreeElement = Resources.FrameResourceTreeElement.forResource(res ource);
493 if (resourceTreeElement) 421 if (resourceTreeElement)
494 resourceTreeElement.revealAndSelect(true); 422 resourceTreeElement.revealAndSelect(true);
495 423
496 if (typeof line === 'number') { 424 if (typeof line === 'number') {
497 var resourceSourceFrame = this._resourceSourceFrameViewForResource(resourc e); 425 var resourceSourceFrame = this._resourceSourceFrameViewForResource(resourc e);
498 if (resourceSourceFrame) 426 if (resourceSourceFrame)
499 resourceSourceFrame.revealPosition(line, column, true); 427 resourceSourceFrame.revealPosition(line, column, true);
500 } 428 }
501 return true; 429 return true;
502 } 430 }
503 431
504 _showResourceView(resource) {
505 var view = this._resourceViewForResource(resource);
506 if (!view) {
507 this.visibleView.detach();
508 return;
509 }
510 this._innerShowView(view);
511 }
512
513 /**
514 * @param {!SDK.Resource} resource
515 * @return {?UI.Widget}
516 */
517 _resourceViewForResource(resource) {
518 if (resource.hasTextContent()) {
519 var treeElement = this._findTreeElementForResource(resource);
520 if (!treeElement)
521 return null;
522 return treeElement.sourceView();
523 }
524
525 switch (resource.resourceType()) {
526 case Common.resourceTypes.Image:
527 return new SourceFrame.ImageView(resource.mimeType, resource);
528 case Common.resourceTypes.Font:
529 return new SourceFrame.FontView(resource.mimeType, resource);
530 default:
531 return new UI.EmptyWidget(resource.url);
532 }
533 }
534
535 /** 432 /**
536 * @param {!SDK.Resource} resource 433 * @param {!SDK.Resource} resource
537 * @return {?SourceFrame.ResourceSourceFrame} 434 * @return {?SourceFrame.ResourceSourceFrame}
538 */ 435 */
539 _resourceSourceFrameViewForResource(resource) { 436 _resourceSourceFrameViewForResource(resource) {
540 var resourceView = this._resourceViewForResource(resource); 437 var resourceView = Resources.FrameResourceTreeElement.resourceViewForResourc e(resource);
541 if (resourceView && resourceView instanceof SourceFrame.ResourceSourceFrame) 438 if (resourceView && resourceView instanceof SourceFrame.ResourceSourceFrame)
542 return /** @type {!SourceFrame.ResourceSourceFrame} */ (resourceView); 439 return /** @type {!SourceFrame.ResourceSourceFrame} */ (resourceView);
543 return null; 440 return null;
544 } 441 }
545 442
546 /** 443 /**
547 * @param {!Resources.Database} database 444 * @param {!Resources.Database} database
548 * @param {string=} tableName 445 * @param {string=} tableName
549 */ 446 */
550 _showDatabase(database, tableName) { 447 _showDatabase(database, tableName) {
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after
773 this._applicationCacheViews[frameId].updateStatus(status); 670 this._applicationCacheViews[frameId].updateStatus(status);
774 } 671 }
775 672
776 _applicationCacheNetworkStateChanged(event) { 673 _applicationCacheNetworkStateChanged(event) {
777 var isNowOnline = event.data; 674 var isNowOnline = event.data;
778 675
779 for (var manifestURL in this._applicationCacheViews) 676 for (var manifestURL in this._applicationCacheViews)
780 this._applicationCacheViews[manifestURL].updateNetworkState(isNowOnline); 677 this._applicationCacheViews[manifestURL].updateNetworkState(isNowOnline);
781 } 678 }
782 679
783 _findTreeElementForResource(resource) {
784 return resource[Resources.FrameResourceTreeElement._symbol];
785 }
786
787 showView(view) { 680 showView(view) {
788 if (view) 681 if (view)
789 this.showResource(view.resource); 682 this.showResource(view.resource);
790 } 683 }
791 684
792 _onmousemove(event) { 685 _onmousemove(event) {
793 var nodeUnderMouse = event.target; 686 var nodeUnderMouse = event.target;
794 if (!nodeUnderMouse) 687 if (!nodeUnderMouse)
795 return; 688 return;
796 689
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
858 * @return {boolean} 751 * @return {boolean}
859 */ 752 */
860 onselect(selectedByUser) { 753 onselect(selectedByUser) {
861 if (!selectedByUser) 754 if (!selectedByUser)
862 return false; 755 return false;
863 var itemURL = this.itemURL; 756 var itemURL = this.itemURL;
864 if (itemURL) 757 if (itemURL)
865 this._storagePanel._resourcesLastSelectedItemSetting.set(itemURL); 758 this._storagePanel._resourcesLastSelectedItemSetting.set(itemURL);
866 return false; 759 return false;
867 } 760 }
761
762 /**
763 * @protected
764 * @param {?UI.Widget} view
765 */
766 showView(view) {
767 if (!view) {
768 this._storagePanel.visibleView.detach();
769 return;
770 }
771 this._storagePanel._innerShowView(view);
772 }
868 }; 773 };
869 774
870 /** 775 /**
871 * @unrestricted 776 * @unrestricted
872 */ 777 */
873 Resources.StorageCategoryTreeElement = class extends Resources.BaseStorageTreeEl ement { 778 Resources.StorageCategoryTreeElement = class extends Resources.BaseStorageTreeEl ement {
874 /** 779 /**
875 * @param {!Resources.ResourcesPanel} storagePanel 780 * @param {!Resources.ResourcesPanel} storagePanel
876 * @param {string} categoryName 781 * @param {string} categoryName
877 * @param {string} settingsKey 782 * @param {string} settingsKey
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
924 * @override 829 * @override
925 */ 830 */
926 oncollapse() { 831 oncollapse() {
927 this._expandedSetting.set(false); 832 this._expandedSetting.set(false);
928 } 833 }
929 }; 834 };
930 835
931 /** 836 /**
932 * @unrestricted 837 * @unrestricted
933 */ 838 */
934 Resources.FrameTreeElement = class extends Resources.BaseStorageTreeElement {
935 /**
936 * @param {!Resources.ResourcesPanel} storagePanel
937 * @param {!SDK.ResourceTreeFrame} frame
938 */
939 constructor(storagePanel, frame) {
940 super(storagePanel, '', false);
941 this._frame = frame;
942 this.frameNavigated(frame);
943
944 var icon = UI.Icon.create('largeicon-navigator-frame', 'navigator-tree-item' );
945 icon.classList.add('navigator-frame-tree-item');
946 this.setLeadingIcons([icon]);
947 }
948
949 frameNavigated(frame) {
950 this.removeChildren();
951 this._frameId = frame.id;
952 this.title = frame.displayName();
953 this._categoryElements = {};
954 this._treeElementForResource = {};
955
956 this._storagePanel.addCookieDocument(frame);
957 }
958
959 get itemURL() {
960 return 'frame://' + encodeURI(this.titleAsText());
961 }
962
963 /**
964 * @override
965 * @return {boolean}
966 */
967 onselect(selectedByUser) {
968 super.onselect(selectedByUser);
969 this._storagePanel.showCategoryView(this.titleAsText());
970
971 this.listItemElement.classList.remove('hovered');
972 SDK.DOMModel.hideDOMNodeHighlight();
973 return false;
974 }
975
976 set hovered(hovered) {
977 if (hovered) {
978 this.listItemElement.classList.add('hovered');
979 var domModel = SDK.DOMModel.fromTarget(this._frame.target());
980 if (domModel)
981 domModel.highlightFrame(this._frameId);
982 } else {
983 this.listItemElement.classList.remove('hovered');
984 SDK.DOMModel.hideDOMNodeHighlight();
985 }
986 }
987
988 /**
989 * @param {!SDK.Resource} resource
990 */
991 appendResource(resource) {
992 var resourceType = resource.resourceType();
993 var categoryName = resourceType.name();
994 var categoryElement = resourceType === Common.resourceTypes.Document ? this : this._categoryElements[categoryName];
995 if (!categoryElement) {
996 categoryElement = new Resources.StorageCategoryTreeElement(
997 this._storagePanel, resource.resourceType().category().title, category Name);
998 this._categoryElements[resourceType.name()] = categoryElement;
999 this._insertInPresentationOrder(this, categoryElement);
1000 }
1001 var resourceTreeElement = new Resources.FrameResourceTreeElement(this._stora gePanel, resource);
1002 this._insertInPresentationOrder(categoryElement, resourceTreeElement);
1003 this._treeElementForResource[resource.url] = resourceTreeElement;
1004 }
1005
1006 /**
1007 * @param {string} url
1008 * @return {?SDK.Resource}
1009 */
1010 resourceByURL(url) {
1011 var treeElement = this._treeElementForResource[url];
1012 return treeElement ? treeElement._resource : null;
1013 }
1014
1015 /**
1016 * @override
1017 */
1018 appendChild(treeElement) {
1019 this._insertInPresentationOrder(this, treeElement);
1020 }
1021
1022 _insertInPresentationOrder(parentTreeElement, childTreeElement) {
1023 // Insert in the alphabetical order, first frames, then resources. Document resource goes last.
1024 function typeWeight(treeElement) {
1025 if (treeElement instanceof Resources.StorageCategoryTreeElement)
1026 return 2;
1027 if (treeElement instanceof Resources.FrameTreeElement)
1028 return 1;
1029 return 3;
1030 }
1031
1032 function compare(treeElement1, treeElement2) {
1033 var typeWeight1 = typeWeight(treeElement1);
1034 var typeWeight2 = typeWeight(treeElement2);
1035
1036 var result;
1037 if (typeWeight1 > typeWeight2)
1038 result = 1;
1039 else if (typeWeight1 < typeWeight2)
1040 result = -1;
1041 else
1042 result = treeElement1.titleAsText().localeCompare(treeElement2.titleAsTe xt());
1043 return result;
1044 }
1045
1046 var childCount = parentTreeElement.childCount();
1047 var i;
1048 for (i = 0; i < childCount; ++i) {
1049 if (compare(childTreeElement, parentTreeElement.childAt(i)) < 0)
1050 break;
1051 }
1052 parentTreeElement.insertChild(childTreeElement, i);
1053 }
1054 };
1055
1056 /**
1057 * @unrestricted
1058 */
1059 Resources.FrameResourceTreeElement = class extends Resources.BaseStorageTreeElem ent {
1060 /**
1061 * @param {!Resources.ResourcesPanel} storagePanel
1062 * @param {!SDK.Resource} resource
1063 */
1064 constructor(storagePanel, resource) {
1065 super(storagePanel, resource.displayName, false);
1066 /** @type {!SDK.Resource} */
1067 this._resource = resource;
1068 this.tooltip = resource.url;
1069 this._resource[Resources.FrameResourceTreeElement._symbol] = this;
1070
1071 var icon = UI.Icon.create('largeicon-navigator-file', 'navigator-tree-item') ;
1072 icon.classList.add('navigator-file-tree-item');
1073 icon.classList.add('navigator-' + resource.resourceType().name() + '-tree-it em');
1074 this.setLeadingIcons([icon]);
1075 }
1076
1077 get itemURL() {
1078 return this._resource.url;
1079 }
1080
1081 /**
1082 * @override
1083 * @return {boolean}
1084 */
1085 onselect(selectedByUser) {
1086 super.onselect(selectedByUser);
1087 this._storagePanel._showResourceView(this._resource);
1088 return false;
1089 }
1090
1091 /**
1092 * @override
1093 * @return {boolean}
1094 */
1095 ondblclick(event) {
1096 InspectorFrontendHost.openInNewTab(this._resource.url);
1097 return false;
1098 }
1099
1100 /**
1101 * @override
1102 */
1103 onattach() {
1104 super.onattach();
1105 this.listItemElement.draggable = true;
1106 this.listItemElement.addEventListener('dragstart', this._ondragstart.bind(th is), false);
1107 this.listItemElement.addEventListener('contextmenu', this._handleContextMenu Event.bind(this), true);
1108 }
1109
1110 /**
1111 * @param {!MouseEvent} event
1112 * @return {boolean}
1113 */
1114 _ondragstart(event) {
1115 event.dataTransfer.setData('text/plain', this._resource.content || '');
1116 event.dataTransfer.effectAllowed = 'copy';
1117 return true;
1118 }
1119
1120 _handleContextMenuEvent(event) {
1121 var contextMenu = new UI.ContextMenu(event);
1122 contextMenu.appendApplicableItems(this._resource);
1123 contextMenu.show();
1124 }
1125
1126 /**
1127 * @return {!SourceFrame.ResourceSourceFrame}
1128 */
1129 sourceView() {
1130 if (!this._sourceView) {
1131 var sourceFrame = new SourceFrame.ResourceSourceFrame(this._resource);
1132 sourceFrame.setHighlighterType(this._resource.canonicalMimeType());
1133 this._sourceView = sourceFrame;
1134 }
1135 return this._sourceView;
1136 }
1137 };
1138
1139 Resources.FrameResourceTreeElement._symbol = Symbol('treeElement');
1140
1141 /**
1142 * @unrestricted
1143 */
1144 Resources.DatabaseTreeElement = class extends Resources.BaseStorageTreeElement { 839 Resources.DatabaseTreeElement = class extends Resources.BaseStorageTreeElement {
1145 /** 840 /**
1146 * @param {!Resources.ResourcesPanel} storagePanel 841 * @param {!Resources.ResourcesPanel} storagePanel
1147 * @param {!Resources.Database} database 842 * @param {!Resources.Database} database
1148 */ 843 */
1149 constructor(storagePanel, database) { 844 constructor(storagePanel, database) {
1150 super(storagePanel, database.name, true); 845 super(storagePanel, database.name, true);
1151 this._database = database; 846 this._database = database;
1152 847
1153 var icon = UI.Icon.create('mediumicon-database', 'resource-tree-item'); 848 var icon = UI.Icon.create('mediumicon-database', 'resource-tree-item');
(...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after
1375 1070
1376 /** 1071 /**
1377 * @override 1072 * @override
1378 * @return {boolean} 1073 * @return {boolean}
1379 */ 1074 */
1380 onselect(selectedByUser) { 1075 onselect(selectedByUser) {
1381 super.onselect(selectedByUser); 1076 super.onselect(selectedByUser);
1382 if (!this._view) 1077 if (!this._view)
1383 this._view = new Resources.ServiceWorkerCacheView(this._model, this._cache ); 1078 this._view = new Resources.ServiceWorkerCacheView(this._model, this._cache );
1384 1079
1385 this._storagePanel._innerShowView(this._view); 1080 this.showView(this._view);
1386 return false; 1081 return false;
1387 } 1082 }
1388 1083
1389 clear() { 1084 clear() {
1390 if (this._view) 1085 if (this._view)
1391 this._view.clear(); 1086 this._view.clear();
1392 } 1087 }
1393 }; 1088 };
1394 1089
1395 /** 1090 /**
(...skipping 17 matching lines...) Expand all
1413 } 1108 }
1414 1109
1415 /** 1110 /**
1416 * @override 1111 * @override
1417 * @return {boolean} 1112 * @return {boolean}
1418 */ 1113 */
1419 onselect(selectedByUser) { 1114 onselect(selectedByUser) {
1420 super.onselect(selectedByUser); 1115 super.onselect(selectedByUser);
1421 if (!this._view) 1116 if (!this._view)
1422 this._view = new Resources.ServiceWorkersView(); 1117 this._view = new Resources.ServiceWorkersView();
1423 this._storagePanel._innerShowView(this._view); 1118 this.showView(this._view);
1424 return false; 1119 return false;
1425 } 1120 }
1426 }; 1121 };
1427 1122
1428 /** 1123 /**
1429 * @unrestricted 1124 * @unrestricted
1430 */ 1125 */
1431 Resources.AppManifestTreeElement = class extends Resources.BaseStorageTreeElemen t { 1126 Resources.AppManifestTreeElement = class extends Resources.BaseStorageTreeElemen t {
1432 /** 1127 /**
1433 * @param {!Resources.ResourcesPanel} storagePanel 1128 * @param {!Resources.ResourcesPanel} storagePanel
(...skipping 12 matching lines...) Expand all
1446 } 1141 }
1447 1142
1448 /** 1143 /**
1449 * @override 1144 * @override
1450 * @return {boolean} 1145 * @return {boolean}
1451 */ 1146 */
1452 onselect(selectedByUser) { 1147 onselect(selectedByUser) {
1453 super.onselect(selectedByUser); 1148 super.onselect(selectedByUser);
1454 if (!this._view) 1149 if (!this._view)
1455 this._view = new Resources.AppManifestView(); 1150 this._view = new Resources.AppManifestView();
1456 this._storagePanel._innerShowView(this._view); 1151 this.showView(this._view);
1457 return false; 1152 return false;
1458 } 1153 }
1459 }; 1154 };
1460 1155
1461 /** 1156 /**
1462 * @unrestricted 1157 * @unrestricted
1463 */ 1158 */
1464 Resources.ClearStorageTreeElement = class extends Resources.BaseStorageTreeEleme nt { 1159 Resources.ClearStorageTreeElement = class extends Resources.BaseStorageTreeEleme nt {
1465 /** 1160 /**
1466 * @param {!Resources.ResourcesPanel} storagePanel 1161 * @param {!Resources.ResourcesPanel} storagePanel
(...skipping 12 matching lines...) Expand all
1479 } 1174 }
1480 1175
1481 /** 1176 /**
1482 * @override 1177 * @override
1483 * @return {boolean} 1178 * @return {boolean}
1484 */ 1179 */
1485 onselect(selectedByUser) { 1180 onselect(selectedByUser) {
1486 super.onselect(selectedByUser); 1181 super.onselect(selectedByUser);
1487 if (!this._view) 1182 if (!this._view)
1488 this._view = new Resources.ClearStorageView(this._storagePanel); 1183 this._view = new Resources.ClearStorageView(this._storagePanel);
1489 this._storagePanel._innerShowView(this._view); 1184 this.showView(this._view);
1490 return false; 1185 return false;
1491 } 1186 }
1492 }; 1187 };
1493 1188
1494 /** 1189 /**
1495 * @unrestricted 1190 * @unrestricted
1496 */ 1191 */
1497 Resources.IndexedDBTreeElement = class extends Resources.StorageCategoryTreeElem ent { 1192 Resources.IndexedDBTreeElement = class extends Resources.StorageCategoryTreeElem ent {
1498 /** 1193 /**
1499 * @param {!Resources.ResourcesPanel} storagePanel 1194 * @param {!Resources.ResourcesPanel} storagePanel
(...skipping 187 matching lines...) Expand 10 before | Expand all | Expand 10 after
1687 1382
1688 /** 1383 /**
1689 * @override 1384 * @override
1690 * @return {boolean} 1385 * @return {boolean}
1691 */ 1386 */
1692 onselect(selectedByUser) { 1387 onselect(selectedByUser) {
1693 super.onselect(selectedByUser); 1388 super.onselect(selectedByUser);
1694 if (!this._view) 1389 if (!this._view)
1695 this._view = new Resources.IDBDatabaseView(this._model, this._database); 1390 this._view = new Resources.IDBDatabaseView(this._model, this._database);
1696 1391
1697 this._storagePanel._innerShowView(this._view); 1392 this.showView(this._view);
1698 return false; 1393 return false;
1699 } 1394 }
1700 1395
1701 /** 1396 /**
1702 * @param {string} objectStoreName 1397 * @param {string} objectStoreName
1703 */ 1398 */
1704 _objectStoreRemoved(objectStoreName) { 1399 _objectStoreRemoved(objectStoreName) {
1705 var objectStoreTreeElement = this._idbObjectStoreTreeElements[objectStoreNam e]; 1400 var objectStoreTreeElement = this._idbObjectStoreTreeElements[objectStoreNam e];
1706 objectStoreTreeElement.clear(); 1401 objectStoreTreeElement.clear();
1707 this.removeChild(objectStoreTreeElement); 1402 this.removeChild(objectStoreTreeElement);
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
1810 1505
1811 /** 1506 /**
1812 * @override 1507 * @override
1813 * @return {boolean} 1508 * @return {boolean}
1814 */ 1509 */
1815 onselect(selectedByUser) { 1510 onselect(selectedByUser) {
1816 super.onselect(selectedByUser); 1511 super.onselect(selectedByUser);
1817 if (!this._view) 1512 if (!this._view)
1818 this._view = new Resources.IDBDataView(this._model, this._databaseId, this ._objectStore, null); 1513 this._view = new Resources.IDBDataView(this._model, this._databaseId, this ._objectStore, null);
1819 1514
1820 this._storagePanel._innerShowView(this._view); 1515 this.showView(this._view);
1821 return false; 1516 return false;
1822 } 1517 }
1823 1518
1824 /** 1519 /**
1825 * @param {string} indexName 1520 * @param {string} indexName
1826 */ 1521 */
1827 _indexRemoved(indexName) { 1522 _indexRemoved(indexName) {
1828 var indexTreeElement = this._idbIndexTreeElements[indexName]; 1523 var indexTreeElement = this._idbIndexTreeElements[indexName];
1829 indexTreeElement.clear(); 1524 indexTreeElement.clear();
1830 this.removeChild(indexTreeElement); 1525 this.removeChild(indexTreeElement);
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
1888 1583
1889 /** 1584 /**
1890 * @override 1585 * @override
1891 * @return {boolean} 1586 * @return {boolean}
1892 */ 1587 */
1893 onselect(selectedByUser) { 1588 onselect(selectedByUser) {
1894 super.onselect(selectedByUser); 1589 super.onselect(selectedByUser);
1895 if (!this._view) 1590 if (!this._view)
1896 this._view = new Resources.IDBDataView(this._model, this._databaseId, this ._objectStore, this._index); 1591 this._view = new Resources.IDBDataView(this._model, this._databaseId, this ._objectStore, this._index);
1897 1592
1898 this._storagePanel._innerShowView(this._view); 1593 this.showView(this._view);
1899 return false; 1594 return false;
1900 } 1595 }
1901 1596
1902 clear() { 1597 clear() {
1903 if (this._view) 1598 if (this._view)
1904 this._view.clear(); 1599 this._view.clear();
1905 } 1600 }
1906 }; 1601 };
1907 1602
1908 /** 1603 /**
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
2085 1780
2086 this.element.classList.add('storage-view'); 1781 this.element.classList.add('storage-view');
2087 this._emptyWidget = new UI.EmptyWidget(''); 1782 this._emptyWidget = new UI.EmptyWidget('');
2088 this._emptyWidget.show(this.element); 1783 this._emptyWidget.show(this.element);
2089 } 1784 }
2090 1785
2091 setText(text) { 1786 setText(text) {
2092 this._emptyWidget.text = text; 1787 this._emptyWidget.text = text;
2093 } 1788 }
2094 }; 1789 };
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698