Changeset 208012 in webkit
- Timestamp:
- Oct 27, 2016 3:25:24 PM (8 years ago)
- Location:
- trunk
- Files:
-
- 5 added
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r208011 r208012 1 2016-10-27 Devin Rousso <dcrousso+webkit@gmail.com> 2 3 Web Inspector: Create general model object Collection class 4 https://bugs.webkit.org/show_bug.cgi?id=163995 5 6 Reviewed by Joseph Pecoraro. 7 8 * inspector/debugger/resources/log-pause-location.js: 9 (TestPage.registerInitializer.window.findScript): 10 Change name of getter to support WebInspector.Collection. 11 12 * inspector/unit-tests/collection-expected.txt: Added. 13 * inspector/unit-tests/collection.html: Added. 14 * inspector/unit-tests/resource-collection-expected.txt: Added. 15 * inspector/unit-tests/resource-collection.html: Added. 16 Created tests for WebInspector.Collection and WebInspector.ResourceCollection. 17 1 18 2016-10-27 Joseph Pecoraro <pecoraro@apple.com> 2 19 -
trunk/LayoutTests/inspector/debugger/resources/log-pause-location.js
r206693 r208012 17 17 18 18 window.findScript = function(regex) { 19 let resources = WebInspector.frameResourceManager.mainFrame.resource s;19 let resources = WebInspector.frameResourceManager.mainFrame.resourceCollection.items; 20 20 for (let resource of resources) { 21 21 if (regex.test(resource.url)) -
trunk/Source/WebInspectorUI/ChangeLog
r208010 r208012 1 2016-10-27 Devin Rousso <dcrousso+webkit@gmail.com> 2 3 Web Inspector: Create general model object Collection class 4 https://bugs.webkit.org/show_bug.cgi?id=163995 5 6 Reviewed by Joseph Pecoraro. 7 8 * UserInterface/Models/Collection.js: Added. 9 (WebInspector.Collection): 10 (WebInspector.Collection.prototype.get items): 11 (WebInspector.Collection.prototype.get typeVerifier): 12 (WebInspector.Collection.prototype.add): 13 (WebInspector.Collection.prototype.remove): 14 (WebInspector.Collection.prototype.clear): 15 (WebInspector.Collection.prototype.toArray): 16 (WebInspector.Collection.prototype.toJSON): 17 (WebInspector.Collection.prototype.itemAdded): 18 (WebInspector.Collection.prototype.itemRemoved): 19 (WebInspector.Collection.prototype.itemsCleared): 20 Class that holds multiple model objects. It can be limited to a specific type by supplying 21 a "typeVerifier", which is a function that accepts a single argument (the model object) and 22 returns true/false depending on if that argument matches the "type" of the collection. 23 24 * UserInterface/Main.html: 25 * UserInterface/Test.html: 26 * UserInterface/Models/Frame.js: 27 * UserInterface/Views/CookieStorageContentView.js: 28 * UserInterface/Views/DebuggerSidebarPanel.js: 29 * UserInterface/Views/FrameTreeElement.js: 30 * UserInterface/Views/OpenResourceDialog.js: 31 Add support for WebInspector.Collection. 32 33 * UserInterface/Models/ResourceCollection.js: 34 (WebInspector.ResourceCollection): 35 (WebInspector.ResourceCollection.verifierForType): 36 (WebInspector.ResourceCollection.prototype.resourceCollectionForType): 37 (WebInspector.ResourceCollection.prototype.clear): 38 (WebInspector.ResourceCollection.prototype.itemAdded): 39 (WebInspector.ResourceCollection.prototype.itemRemoved): 40 (WebInspector.ResourceCollection.prototype.itemsCleared): 41 (WebInspector.ResourceCollection.prototype._associateWithResource): 42 (WebInspector.ResourceCollection.prototype._disassociateWithResource): 43 (WebInspector.ResourceCollection.prototype._resourceURLDidChange): 44 (WebInspector.ResourceCollection.prototype._resourceTypeDidChange): 45 (WebInspector.ResourceCollection.prototype.get resources): Deleted. 46 (WebInspector.ResourceCollection.prototype.resourcesWithType): Deleted. 47 (WebInspector.ResourceCollection.prototype.addResource): Deleted. 48 (WebInspector.ResourceCollection.prototype.removeResource): Deleted. 49 (WebInspector.ResourceCollection.prototype.removeAllResources): Deleted. 50 Now a subclass of WebInspector.Collection. Retrieving WebInspector.Resource objects by type 51 and URL is still supported, but requesting by type now returns another instance of 52 WebInspector.ResourceCollection that is configured to only accept the requested type. 53 1 54 2016-10-27 Joseph Pecoraro <pecoraro@apple.com> 2 55 -
trunk/Source/WebInspectorUI/UserInterface/Main.html
r208009 r208012 302 302 <script src="Models/CSSStyleSheet.js"></script> 303 303 <script src="Models/CallFrame.js"></script> 304 <script src="Models/Collection.js"></script> 304 305 <script src="Models/CollectionEntry.js"></script> 305 306 <script src="Models/CollectionEntryPreview.js"></script> -
trunk/Source/WebInspectorUI/UserInterface/Models/Frame.js
r205426 r208012 42 42 43 43 this._childFrames = []; 44 this._childFrameIdentifierMap = {};44 this._childFrameIdentifierMap = new Map; 45 45 46 46 this._parentFrame = null; … … 56 56 57 57 // Public 58 59 get resourceCollection() { return this._resourceCollection; } 58 60 59 61 initialize(name, securityOrigin, loaderIdentifier, mainResource) … … 100 102 this._provisionalLoaderIdentifier = provisionalMainResource.loaderIdentifier; 101 103 102 this._provisionalResourceCollection. removeAllResources();104 this._provisionalResourceCollection.clear(); 103 105 104 106 this.dispatchEventToListeners(WebInspector.Frame.Event.ProvisionalLoadStarted); … … 151 153 this._provisionalLoaderIdentifier = null; 152 154 this._provisionalMainResource = null; 153 this._provisionalResourceCollection. removeAllResources();155 this._provisionalResourceCollection.clear(); 154 156 155 157 if (!skipProvisionalLoadClearedEvent) … … 290 292 childFrameForIdentifier(frameId) 291 293 { 292 return this._childFrameIdentifierMap [frameId]|| null;294 return this._childFrameIdentifierMap.get(frameId) || null; 293 295 } 294 296 … … 306 308 307 309 this._childFrames.push(frame); 308 this._childFrameIdentifierMap [frame._id] = frame;310 this._childFrameIdentifierMap.set(frame._id, frame); 309 311 310 312 frame._parentFrame = this; … … 333 335 334 336 this._childFrames.remove(childFrame); 335 delete this._childFrameIdentifierMap[childFrame._id];337 this._childFrameIdentifierMap.delete(childFrame._id); 336 338 337 339 childFrame._detachFromParentFrame(); … … 348 350 349 351 this._childFrames = []; 350 this._childFrameIdentifierMap = {};352 this._childFrameIdentifierMap.clear(); 351 353 352 354 this.dispatchEventToListeners(WebInspector.Frame.Event.AllChildFramesRemoved); 353 }354 355 get resources()356 {357 return this._resourceCollection.resources;358 355 } 359 356 … … 384 381 } 385 382 386 resource sWithType(type)387 { 388 return this._resourceCollection.resource sWithType(type);383 resourceCollectionForType(type) 384 { 385 return this._resourceCollection.resourceCollectionForType(type); 389 386 } 390 387 … … 399 396 400 397 if (resource.parentFrame) 401 resource.parentFrame.remove Resource(resource);398 resource.parentFrame.remove(resource); 402 399 403 400 this._associateWithResource(resource); 404 401 405 402 if (this._isProvisionalResource(resource)) { 406 this._provisionalResourceCollection.add Resource(resource);403 this._provisionalResourceCollection.add(resource); 407 404 this.dispatchEventToListeners(WebInspector.Frame.Event.ProvisionalResourceWasAdded, {resource}); 408 405 } else { 409 this._resourceCollection.add Resource(resource);406 this._resourceCollection.add(resource); 410 407 this.dispatchEventToListeners(WebInspector.Frame.Event.ResourceWasAdded, {resource}); 411 408 } … … 416 413 // This does not remove provisional resources. 417 414 418 var resource = this._resourceCollection.remove Resource(resourceOrURL);415 var resource = this._resourceCollection.remove(resourceOrURL); 419 416 if (!resource) 420 417 return; … … 429 426 // This does not remove provisional resources, use clearProvisionalLoad for that. 430 427 431 var resources = this.resources;432 if (!resources. length)433 return; 434 435 for ( var i = 0; i < resources.length; ++i)436 this._disassociateWithResource(resource s[i]);437 438 this._resourceCollection. removeAllResources();428 let resources = this._resourceCollection.items; 429 if (!resources.size) 430 return; 431 432 for (let resource of resources) 433 this._disassociateWithResource(resource); 434 435 this._resourceCollection.clear(); 439 436 440 437 this.dispatchEventToListeners(WebInspector.Frame.Event.AllResourcesRemoved); -
trunk/Source/WebInspectorUI/UserInterface/Models/ResourceCollection.js
r181769 r208012 1 1 /* 2 2 * Copyright (C) 2013 Apple Inc. All rights reserved. 3 * Copyright (C) 2016 Devin Rousso <dcrousso+webkit@gmail.com>. All rights reserved. 3 4 * 4 5 * Redistribution and use in source and binary forms, with or without … … 24 25 */ 25 26 26 WebInspector.ResourceCollection = class ResourceCollection extends WebInspector. Object27 WebInspector.ResourceCollection = class ResourceCollection extends WebInspector.Collection 27 28 { 28 constructor( )29 constructor(resourceType) 29 30 { 30 super( );31 super(WebInspector.ResourceCollection.verifierForType(resourceType)); 31 32 32 this._resource s = [];33 this._resourceType = resourceType || null; 33 34 this._resourceURLMap = new Map; 34 35 this._resourcesTypeMap = new Map; 35 36 } 36 37 38 // Static 39 40 static verifierForType(type) { 41 switch (type) { 42 case WebInspector.Resource.Type.Document: 43 return WebInspector.ResourceCollection.TypeVerifier.Document; 44 case WebInspector.Resource.Type.Stylesheet: 45 return WebInspector.ResourceCollection.TypeVerifier.Stylesheet; 46 case WebInspector.Resource.Type.Image: 47 return WebInspector.ResourceCollection.TypeVerifier.Image; 48 case WebInspector.Resource.Type.Font: 49 return WebInspector.ResourceCollection.TypeVerifier.Font; 50 case WebInspector.Resource.Type.Script: 51 return WebInspector.ResourceCollection.TypeVerifier.Script; 52 case WebInspector.Resource.Type.XHR: 53 return WebInspector.ResourceCollection.TypeVerifier.XHR; 54 case WebInspector.Resource.Type.WebSocket: 55 return WebInspector.ResourceCollection.TypeVerifier.WebSocket; 56 case WebInspector.Resource.Type.Other: 57 return WebInspector.ResourceCollection.TypeVerifier.Other; 58 default: 59 return WebInspector.Collection.TypeVerifier.Resource; 60 } 61 } 62 37 63 // Public 38 39 get resources()40 {41 return this._resources;42 }43 64 44 65 resourceForURL(url) … … 47 68 } 48 69 49 resource sWithType(type)70 resourceCollectionForType(type) 50 71 { 51 return this._resourcesTypeMap.get(type) || []; 72 if (this._resourceType) { 73 console.assert(type === this._resourceType); 74 return this; 75 } 76 77 let resourcesCollectionForType = this._resourcesTypeMap.get(type); 78 if (!resourcesCollectionForType) { 79 resourcesCollectionForType = new WebInspector.ResourceCollection(type); 80 this._resourcesTypeMap.set(type, resourcesCollectionForType); 81 } 82 83 return resourcesCollectionForType; 52 84 } 53 85 54 addResource(resource)86 clear() 55 87 { 56 console.assert(resource instanceof WebInspector.Resource); 57 if (!(resource instanceof WebInspector.Resource)) 58 return; 88 super.clear(); 59 89 60 this._associateWithResource(resource); 90 this._resourceURLMap.clear(); 91 92 if (!this._resourceType) 93 this._resourcesTypeMap.clear(); 61 94 } 62 95 63 removeResource(resourceOrURL) 96 // Protected 97 98 itemAdded(item) 64 99 { 65 console.assert(resourceOrURL); 66 67 if (resourceOrURL instanceof WebInspector.Resource) 68 var url = resourceOrURL.url; 69 else 70 var url = resourceOrURL; 71 72 // Fetch the resource by URL even if we were passed a WebInspector.Resource. 73 // We do this incase the WebInspector.Resource is a new object that isn't in _resources, 74 // but the URL is a valid resource. 75 var resource = this.resourceForURL(url); 76 console.assert(resource instanceof WebInspector.Resource); 77 if (!(resource instanceof WebInspector.Resource)) 78 return null; 79 80 this._disassociateWithResource(resource); 81 82 return resource; 100 this._associateWithResource(item); 83 101 } 84 102 85 removeAllResources()103 itemRemoved(item) 86 104 { 87 if (!this._resources.length)88 return;105 this._disassociateWithResource(item); 106 } 89 107 90 for (var i = 0; i < this._resources.length; ++i) 91 this._disassociateWithResource(this._resources[i], true); 108 itemsCleared(items) 109 { 110 const skipRemoval = true; 92 111 93 this._resources = []; 94 this._resourceURLMap.clear(); 95 this._resourcesTypeMap.clear(); 112 for (let item of items) 113 this._disassociateWithResource(item, skipRemoval); 96 114 } 97 115 … … 100 118 _associateWithResource(resource) 101 119 { 102 this._resources.push(resource);103 120 this._resourceURLMap.set(resource.url, resource); 104 121 105 if (!this._resource sTypeMap.has(resource.type))106 this._resourcesTypeMap.set(resource.type, [resource]);107 else108 this._resourcesTypeMap.get(resource.type).push(resource);122 if (!this._resourceType) { 123 let resourcesCollectionForType = this.resourceCollectionForType(resource.type); 124 resourcesCollectionForType.add(resource); 125 } 109 126 110 127 resource.addEventListener(WebInspector.Resource.Event.URLDidChange, this._resourceURLDidChange, this); … … 114 131 _disassociateWithResource(resource, skipRemoval) 115 132 { 116 if (skipRemoval) { 117 this._resources.remove(resource); 118 if (this._resourcesTypeMap.has(resource.type)) 119 this._resourcesTypeMap.get(resource.type).remove(resource); 120 this._resourceURLMap.delete(resource.url); 133 resource.removeEventListener(WebInspector.Resource.Event.URLDidChange, this._resourceURLDidChange, this); 134 resource.removeEventListener(WebInspector.Resource.Event.TypeDidChange, this._resourceTypeDidChange, this); 135 136 if (skipRemoval) 137 return; 138 139 if (!this._resourceType) { 140 let resourcesCollectionForType = this.resourceCollectionForType(resource.type); 141 resourcesCollectionForType.remove(resource); 121 142 } 122 143 123 resource.removeEventListener(WebInspector.Resource.Event.URLDidChange, this._resourceURLDidChange, this); 124 resource.removeEventListener(WebInspector.Resource.Event.TypeDidChange, this._resourceTypeDidChange, this); 144 this._resourceURLMap.delete(resource.url); 125 145 } 126 146 127 147 _resourceURLDidChange(event) 128 148 { 129 varresource = event.target;149 let resource = event.target; 130 150 console.assert(resource instanceof WebInspector.Resource); 131 151 if (!(resource instanceof WebInspector.Resource)) 132 152 return; 133 153 134 varoldURL = event.data.oldURL;154 let oldURL = event.data.oldURL; 135 155 console.assert(oldURL); 136 156 if (!oldURL) … … 143 163 _resourceTypeDidChange(event) 144 164 { 145 varresource = event.target;165 let resource = event.target; 146 166 console.assert(resource instanceof WebInspector.Resource); 147 167 if (!(resource instanceof WebInspector.Resource)) 148 168 return; 149 169 150 var oldType = event.data.oldType; 170 if (this._resourceType) { 171 console.assert(resource.type !== this._resourceType); 172 this.remove(resource); 173 return; 174 } 175 176 let oldType = event.data.oldType; 151 177 console.assert(oldType); 152 178 if (!oldType) 153 179 return; 154 180 155 if (!this._resourcesTypeMap.has(resource.type)) 156 this._resourcesTypeMap.set(resource.type, [resource]); 157 else 158 this._resourcesTypeMap.get(resource.type).push(resource); 181 let resourcesWithNewType = this.resourceCollectionForType(resource.type); 182 resourcesWithNewType.add(resource); 159 183 160 if (this._resourcesTypeMap.has(oldType))161 this._resourcesTypeMap.get(oldType).remove(resource);184 let resourcesWithOldType = this.resourceCollectionForType(oldType); 185 resourcesWithOldType.remove(resource); 162 186 } 163 187 }; 188 189 WebInspector.ResourceCollection.TypeVerifier = { 190 Document: (object) => WebInspector.Collection.TypeVerifier.Resource(object) && object.type === WebInspector.Resource.Type.Document, 191 Stylesheet: (object) => WebInspector.Collection.TypeVerifier.Resource(object) && object.type === WebInspector.Resource.Type.Stylesheet, 192 Image: (object) => WebInspector.Collection.TypeVerifier.Resource(object) && object.type === WebInspector.Resource.Type.Image, 193 Font: (object) => WebInspector.Collection.TypeVerifier.Resource(object) && object.type === WebInspector.Resource.Type.Font, 194 Script: (object) => WebInspector.Collection.TypeVerifier.Resource(object) && object.type === WebInspector.Resource.Type.Script, 195 XHR: (object) => WebInspector.Collection.TypeVerifier.Resource(object) && object.type === WebInspector.Resource.Type.XHR, 196 WebSocket: (object) => WebInspector.Collection.TypeVerifier.Resource(object) && object.type === WebInspector.Resource.Type.WebSocket, 197 Other: (object) => WebInspector.Collection.TypeVerifier.Resource(object) && object.type === WebInspector.Resource.Type.Other, 198 }; -
trunk/Source/WebInspectorUI/UserInterface/Test.html
r208009 r208012 103 103 <script src="Models/CallingContextTree.js"></script> 104 104 <script src="Models/CallingContextTreeNode.js"></script> 105 <script src="Models/Collection.js"></script> 105 106 <script src="Models/CollectionEntry.js"></script> 106 107 <script src="Models/CollectionEntryPreview.js"></script> -
trunk/Source/WebInspectorUI/UserInterface/Views/CookieStorageContentView.js
r205425 r208012 161 161 // The main resource isn't in the list of resources, so add it as a candidate. 162 162 allResources.push(frame.mainResource); 163 allResources = allResources.concat(frame.resource s);163 allResources = allResources.concat(frame.resourceCollection.toArray()); 164 164 } 165 165 -
trunk/Source/WebInspectorUI/UserInterface/Views/DebuggerSidebarPanel.js
r207444 r208012 420 420 this._addResource(frame.mainResource); 421 421 422 for ( var resource of frame.resources)422 for (let resource of frame.resourceCollection.items) 423 423 this._addResource(resource); 424 424 -
trunk/Source/WebInspectorUI/UserInterface/Views/FrameTreeElement.js
r207838 r208012 76 76 function makeChildCountCallback(frame, resourceType) { 77 77 return function() { 78 return frame.resource sWithType(resourceType).length;78 return frame.resourceCollectionForType(resourceType).items.size; 79 79 }; 80 80 } … … 182 182 this.addChildForRepresentedObject(this._frame.childFrames[i]); 183 183 184 for ( var i = 0; i < this._frame.resources.length; ++i)185 this.addChildForRepresentedObject( this._frame.resources[i]);184 for (let resource of this._frame.resourceCollection.items) 185 this.addChildForRepresentedObject(resource); 186 186 187 187 var sourceMaps = this.resource && this.resource.sourceMaps; -
trunk/Source/WebInspectorUI/UserInterface/Views/OpenResourceDialog.js
r205426 r208012 269 269 while (frames.length) { 270 270 let currentFrame = frames.shift(); 271 let resources = [currentFrame.mainResource].concat( currentFrame.resources);271 let resources = [currentFrame.mainResource].concat(Array.from(currentFrame.resourceCollection.items)); 272 272 for (let resource of resources) 273 273 this._addResource(resource, suppressFilterUpdate);
Note: See TracChangeset
for help on using the changeset viewer.