Changeset 93605 in webkit
- Timestamp:
- Aug 23, 2011 8:35:58 AM (13 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r93598 r93605 1 2011-08-23 Andrey Kosyakov <caseq@chromium.org> 2 3 Web Inspector: [Extensions API] provide access to page resources 4 https://bugs.webkit.org/show_bug.cgi?id=66767 5 6 Reviewed by Pavel Feldman. 7 8 * http/tests/inspector/resources/extension-main.js: 9 (trimURL): 10 * inspector/extensions/extensions-api-expected.txt: 11 * inspector/extensions/extensions-network-expected.txt: 12 * inspector/extensions/extensions-network.html: 13 * inspector/extensions/extensions-resources-expected.txt: Added. 14 * inspector/extensions/extensions-resources.html: Added. 15 * inspector/extensions/resources/Ahem.ttf: 16 * inspector/extensions/resources/test-script.js: Added. 17 (__test_function): 18 1 19 2011-08-23 Csaba Osztrogonác <ossy@webkit.org> 2 20 -
trunk/LayoutTests/http/tests/inspector/resources/extension-main.js
r89659 r93605 1 function trimURL(url) 2 { 3 if (/^data:/.test(url)) 4 return url.replace(/;.*$/, "..."); 5 return url.replace(/.*\//, ".../"); 6 } 7 1 8 function dumpObject(object, nondeterministicProps, prefix, firstLinePrefix) 2 9 { … … 7 14 var prefixWithName = prefix + " " + prop + " : "; 8 15 var propValue = object[prop]; 9 if (nondeterministicProps && prop in nondeterministicProps) 10 output(prefixWithName + "<" + typeof propValue + ">"); 11 else if (propValue === null) 16 if (nondeterministicProps && prop in nondeterministicProps) { 17 var value = nondeterministicProps[prop] === "url" ? trimURL(propValue) : "<" + typeof propValue + ">"; 18 output(prefixWithName + value); 19 } else if (propValue === null) 12 20 output(prefixWithName + "null"); 13 21 else if (typeof propValue === "object") -
trunk/LayoutTests/inspector/extensions/extensions-api-expected.txt
r93312 r93605 9 9 } 10 10 inspectedWindow : { 11 onResourceAdded : { 12 addListener : <function> 13 removeListener : <function> 14 } 15 onResourceContentCommitted : { 16 addListener : <function> 17 removeListener : <function> 18 } 11 19 reload : <function> 12 20 eval : <function> 21 getResources : <function> 13 22 } 14 23 panels : { … … 43 52 removeListener : <function> 44 53 } 45 onContentEdited : {46 addListener : <function>47 removeListener : <function>48 }49 54 getHAR : <function> 50 55 addRequestHeaders : <function> … … 60 65 } 61 66 onNavigated : { 62 addListener : <function>63 removeListener : <function>64 }65 onContentEdited : {66 67 addListener : <function> 67 68 removeListener : <function> -
trunk/LayoutTests/inspector/extensions/extensions-network-expected.txt
r93312 r93605 29 29 RUNNING TEST: extension_testRequestNotification 30 30 Request finished: .../inspector/extensions/extensions-network.html 31 RUNNING TEST: extension_testResourceContentEdited32 content for resource .../extensions/resources/audits-style1.css edited: body { background-color: black; }33 31 All tests done. 34 32 -
trunk/LayoutTests/inspector/extensions/extensions-network.html
r93312 r93605 77 77 } 78 78 79 function extension_testResourceContentEdited(nextTest)80 {81 function onContentEdited(url, content)82 {83 webInspector.network.onContentEdited.removeListener(onContentEdited);84 var urlTail = url.replace(/.*((\/[^/]*){3}$)/,"...$1");85 output("content for resource " + urlTail + " edited: " + content);86 nextTest();87 }88 webInspector.network.onContentEdited.addListener(onContentEdited);89 90 function findAndEditResource()91 {92 var resources = WebInspector.networkLog.resources;93 for (var i = 0; i < resources.length; ++i) {94 if (/audits-style1.css$/.test(resources[i].url)) {95 resources[i].setContent("body { background-color: black; }", true);96 break;97 }98 }99 }100 evaluateOnFrontend("(" + findAndEditResource + ")()");101 }102 103 79 var test = function() 104 80 { -
trunk/LayoutTests/inspector/extensions/resources/Ahem.ttf
- Property svn:executable deleted
-
trunk/Source/WebCore/ChangeLog
r93604 r93605 1 2011-08-23 Andrey Kosyakov <caseq@chromium.org> 2 3 Web Inspector: [Extensions API] provide access to page resources 4 https://bugs.webkit.org/show_bug.cgi?id=66767 5 6 Reviewed by Pavel Feldman. 7 8 Test: inspector/extensions/extensions-resources.html 9 10 * inspector/front-end/ExtensionAPI.js: 11 (WebInspector.injectedExtensionAPI.EventSinkImpl.prototype.addListener): 12 (WebInspector.injectedExtensionAPI): 13 (WebInspector.injectedExtensionAPI.RequestImpl.prototype.getContent): 14 (WebInspector.injectedExtensionAPI.InspectedWindow.resourceDispatch): 15 (WebInspector.injectedExtensionAPI.InspectedWindow.resourceContentDispatch): 16 (WebInspector.injectedExtensionAPI.InspectedWindow): 17 (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.eval): 18 (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.getResources): 19 (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.getResources.callbackWrapper): 20 (WebInspector.injectedExtensionAPI.ResourceImpl.prototype.get url): 21 (WebInspector.injectedExtensionAPI.ResourceImpl.prototype.get type): 22 (WebInspector.injectedExtensionAPI.ResourceImpl.prototype.getContent): 23 (WebInspector.injectedExtensionAPI.ResourceImpl.prototype.setContent): 24 * inspector/front-end/ExtensionServer.js: 25 (WebInspector.ExtensionServer): 26 (WebInspector.ExtensionServer.prototype._notifyResourceAdded): 27 (WebInspector.ExtensionServer.prototype.notifyResourceContentCommitted): 28 (WebInspector.ExtensionServer.prototype._makeResource): 29 (WebInspector.ExtensionServer.prototype._onGetPageResources): 30 (WebInspector.ExtensionServer.prototype._getResourceContent): 31 (WebInspector.ExtensionServer.prototype._onGetRequestContent): 32 (WebInspector.ExtensionServer.prototype._onGetResourceContent): 33 (WebInspector.ExtensionServer.prototype._onSetResourceContent): 34 (WebInspector.ExtensionServer.prototype.initExtensions): 35 * inspector/front-end/Resource.js: 36 (WebInspector.Resource.prototype.addRevision): 37 1 38 2011-08-23 Pavel Feldman <pfeldman@google.com> 2 39 -
trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js
r93312 r93605 49 49 { 50 50 if (typeof callback != "function") 51 throw new"addListener: callback is not a function";51 throw "addListener: callback is not a function"; 52 52 if (this._listeners.length === 0) 53 53 extensionServer.sendRequest({ command: "subscribe", type: this._type }); … … 116 116 defineDeprecatedProperty(this, "network", "onFinished", "onRequestFinished"); 117 117 this.onNavigated = new EventSink("inspectedURLChanged"); 118 this.onContentEdited = new EventSink("resource-content-edited");119 118 } 120 119 … … 152 151 callback(response.content, response.encoding); 153 152 } 154 extensionServer.sendRequest({ command: "getRe sourceContent", id: this._id }, callback && callbackWrapper);153 extensionServer.sendRequest({ command: "getRequestContent", id: this._id }, callback && callbackWrapper); 155 154 } 156 155 }; … … 359 358 function InspectedWindow() 360 359 { 360 function resourceDispatch(message) 361 { 362 this._fire(new Resource(message.arguments[0])); 363 } 364 function resourceContentDispatch(message) 365 { 366 this._fire(new Resource(message.arguments[0]), message.arguments[1]); 367 } 368 this.onResourceAdded = new EventSink("resource-added", resourceDispatch); 369 this.onResourceContentCommitted = new EventSink("resource-content-committed", resourceContentDispatch); 361 370 } 362 371 … … 377 386 } 378 387 return extensionServer.sendRequest({ command: "evaluateOnInspectedPage", expression: expression }, callback && callbackWrapper); 379 } 380 } 388 }, 389 390 getResources: function(callback) 391 { 392 function wrapResource(resourceData) 393 { 394 return new Resource(resourceData); 395 } 396 function callbackWrapper(resources) 397 { 398 callback(resources.map(wrapResource)); 399 } 400 return extensionServer.sendRequest({ command: "getPageResources" }, callback && callbackWrapper); 401 } 402 } 403 404 function ResourceImpl(resourceData) 405 { 406 this._url = resourceData.url 407 this._type = resourceData.type; 408 } 409 410 ResourceImpl.prototype = { 411 get url() 412 { 413 return this._url; 414 }, 415 416 get type() 417 { 418 return this._type; 419 }, 420 421 getContent: function(callback) 422 { 423 function callbackWrapper(response) 424 { 425 callback(response.content, response.encoding); 426 } 427 428 return extensionServer.sendRequest({ command: "getResourceContent", url: this._url }, callback && callbackWrapper); 429 }, 430 431 setContent: function(content, commit, callback) 432 { 433 return extensionServer.sendRequest({ command: "setResourceContent", url: this._url, content: content, commit: commit }, callback); 434 } 435 }; 381 436 382 437 function TimelineImpl() … … 456 511 if (member.charAt(0) === "_") 457 512 continue; 458 var value = implementation[member]; 459 interface[member] = typeof value === "function" ? bind(value, implementation) 460 : interface[member] = implementation[member]; 513 var descriptor = null; 514 // Traverse prototype chain until we find the owner. 515 for (var owner = implementation; owner && !descriptor; owner = owner.__proto__) 516 descriptor = Object.getOwnPropertyDescriptor(owner, member); 517 if (!descriptor) 518 continue; 519 if (typeof descriptor.value === "function") 520 interface[member] = bind(descriptor.value, implementation); 521 else if (typeof descriptor.get === "function") 522 interface.__defineGetter__(member, bind(descriptor.get, implementation)); 523 else 524 Object.defineProperty(interface, member, descriptor); 461 525 } 462 526 } … … 493 557 var PanelWithSidebar = declareInterfaceClass(PanelWithSidebarImpl); 494 558 var Request = declareInterfaceClass(RequestImpl); 559 var Resource = declareInterfaceClass(ResourceImpl); 495 560 var Timeline = declareInterfaceClass(TimelineImpl); 496 561 -
trunk/Source/WebCore/inspector/front-end/ExtensionServer.js
r93312 r93605 49 49 this._registerHandler("evaluateOnInspectedPage", this._onEvaluateOnInspectedPage.bind(this)); 50 50 this._registerHandler("getHAR", this._onGetHAR.bind(this)); 51 this._registerHandler("getPageResources", this._onGetPageResources.bind(this)); 52 this._registerHandler("getRequestContent", this._onGetRequestContent.bind(this)); 51 53 this._registerHandler("getResourceContent", this._onGetResourceContent.bind(this)); 52 54 this._registerHandler("log", this._onLog.bind(this)); 53 55 this._registerHandler("reload", this._onReload.bind(this)); 56 this._registerHandler("setResourceContent", this._onSetResourceContent.bind(this)); 54 57 this._registerHandler("setSidebarHeight", this._onSetSidebarHeight.bind(this)); 55 58 this._registerHandler("setSidebarContent", this._onSetSidebarContent.bind(this)); … … 118 121 }, 119 122 120 notifyResourceContentEdited: function(url, content) 121 { 122 this._postNotification("resource-content-edited", url, content); 123 _notifyResourceAdded: function(event) 124 { 125 var resource = event.data; 126 this._postNotification("resource-added", this._makeResource(resource)); 127 }, 128 129 notifyResourceContentCommitted: function(resource, content) 130 { 131 this._postNotification("resource-content-committed", this._makeResource(resource), content); 123 132 }, 124 133 … … 311 320 }, 312 321 313 _onGetResourceContent: function(message, port) 322 _makeResource: function(resource) 323 { 324 return { 325 url: resource.url, 326 type: WebInspector.Resource.Type.toString(resource.type) 327 }; 328 }, 329 330 _onGetPageResources: function() 331 { 332 var resources = []; 333 function pushResourceData(resource) 334 { 335 resources.push(this._makeResource(resource)); 336 } 337 WebInspector.resourceTreeModel.forAllResources(pushResourceData.bind(this)); 338 return resources; 339 }, 340 341 _getResourceContent: function(resource, message, port) 314 342 { 315 343 function onContentAvailable(content, encoded) … … 321 349 this._dispatchCallback(message.requestId, port, response); 322 350 } 351 resource.requestContent(onContentAvailable.bind(this)); 352 }, 353 354 _onGetRequestContent: function(message, port) 355 { 323 356 var request = this._requestById(message.id); 324 357 if (!request) 325 358 return this._status.E_NOTFOUND(message.id); 326 request.requestContent(onContentAvailable.bind(this)); 359 this._getResourceContent(request, message, port); 360 }, 361 362 _onGetResourceContent: function(message, port) 363 { 364 var resource = WebInspector.resourceTreeModel.resourceForURL(message.url); 365 if (!resource) 366 return this._status.E_NOTFOUND(message.url); 367 this._getResourceContent(resource, message, port); 368 }, 369 370 _onSetResourceContent: function(message, port) 371 { 372 function callbackWrapper(error) 373 { 374 var response = error ? this._status.E_FAILED(error) : this._status.OK(); 375 this._dispatchCallback(message.requestId, port, response); 376 } 377 var resource = WebInspector.resourceTreeModel.resourceForURL(message.url); 378 if (!resource) 379 return this._status.E_NOTFOUND(message.url); 380 resource.setContent(message.content, message.commit, callbackWrapper.bind(this)); 327 381 }, 328 382 … … 376 430 WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceFinished, this._notifyRequestFinished, this); 377 431 WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.InspectedURLChanged, this._inspectedURLChanged, this); 432 WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.ResourceAdded, this._notifyResourceAdded, this); 378 433 WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.EventTypes.TimelineEventRecorded, this._addRecordToTimeline, this); 379 434 … … 502 557 E_NOTFOUND: "Object not found: %s", 503 558 E_NOTSUPPORTED: "Object does not support requested operation: %s", 559 E_FAILED: "Operation failed: %s" 504 560 } 505 561 -
trunk/Source/WebCore/inspector/front-end/Resource.js
r92953 r93605 834 834 if (!restoringHistory) 835 835 this._persistRevision(); 836 WebInspector.extensionServer.notifyResourceContent Edited(this.url, newContent);836 WebInspector.extensionServer.notifyResourceContentCommitted(this, newContent); 837 837 }, 838 838
Note: See TracChangeset
for help on using the changeset viewer.