Title: [93605] trunk
Revision
93605
Author
[email protected]
Date
2011-08-23 08:35:58 -0700 (Tue, 23 Aug 2011)

Log Message

Web Inspector: [Extensions API] provide access to page resources
https://bugs.webkit.org/show_bug.cgi?id=66767

Reviewed by Pavel Feldman.

Source/WebCore:

Test: inspector/extensions/extensions-resources.html

* inspector/front-end/ExtensionAPI.js:
(WebInspector.injectedExtensionAPI.EventSinkImpl.prototype.addListener):
(WebInspector.injectedExtensionAPI):
(WebInspector.injectedExtensionAPI.RequestImpl.prototype.getContent):
(WebInspector.injectedExtensionAPI.InspectedWindow.resourceDispatch):
(WebInspector.injectedExtensionAPI.InspectedWindow.resourceContentDispatch):
(WebInspector.injectedExtensionAPI.InspectedWindow):
(WebInspector.injectedExtensionAPI.InspectedWindow.prototype.eval):
(WebInspector.injectedExtensionAPI.InspectedWindow.prototype.getResources):
(WebInspector.injectedExtensionAPI.InspectedWindow.prototype.getResources.callbackWrapper):
(WebInspector.injectedExtensionAPI.ResourceImpl.prototype.get url):
(WebInspector.injectedExtensionAPI.ResourceImpl.prototype.get type):
(WebInspector.injectedExtensionAPI.ResourceImpl.prototype.getContent):
(WebInspector.injectedExtensionAPI.ResourceImpl.prototype.setContent):
* inspector/front-end/ExtensionServer.js:
(WebInspector.ExtensionServer):
(WebInspector.ExtensionServer.prototype._notifyResourceAdded):
(WebInspector.ExtensionServer.prototype.notifyResourceContentCommitted):
(WebInspector.ExtensionServer.prototype._makeResource):
(WebInspector.ExtensionServer.prototype._onGetPageResources):
(WebInspector.ExtensionServer.prototype._getResourceContent):
(WebInspector.ExtensionServer.prototype._onGetRequestContent):
(WebInspector.ExtensionServer.prototype._onGetResourceContent):
(WebInspector.ExtensionServer.prototype._onSetResourceContent):
(WebInspector.ExtensionServer.prototype.initExtensions):
* inspector/front-end/Resource.js:
(WebInspector.Resource.prototype.addRevision):

LayoutTests:

* http/tests/inspector/resources/extension-main.js:
(trimURL):
* inspector/extensions/extensions-api-expected.txt:
* inspector/extensions/extensions-network-expected.txt:
* inspector/extensions/extensions-network.html:
* inspector/extensions/extensions-resources-expected.txt: Added.
* inspector/extensions/extensions-resources.html: Added.
* inspector/extensions/resources/Ahem.ttf:
* inspector/extensions/resources/test-script.js: Added.
(__test_function):

Modified Paths

Added Paths

Property Changed

Diff

Modified: trunk/LayoutTests/ChangeLog (93604 => 93605)


--- trunk/LayoutTests/ChangeLog	2011-08-23 15:08:14 UTC (rev 93604)
+++ trunk/LayoutTests/ChangeLog	2011-08-23 15:35:58 UTC (rev 93605)
@@ -1,3 +1,21 @@
+2011-08-23  Andrey Kosyakov  <[email protected]>
+
+        Web Inspector: [Extensions API] provide access to page resources
+        https://bugs.webkit.org/show_bug.cgi?id=66767
+
+        Reviewed by Pavel Feldman.
+
+        * http/tests/inspector/resources/extension-main.js:
+        (trimURL):
+        * inspector/extensions/extensions-api-expected.txt:
+        * inspector/extensions/extensions-network-expected.txt:
+        * inspector/extensions/extensions-network.html:
+        * inspector/extensions/extensions-resources-expected.txt: Added.
+        * inspector/extensions/extensions-resources.html: Added.
+        * inspector/extensions/resources/Ahem.ttf:
+        * inspector/extensions/resources/test-script.js: Added.
+        (__test_function):
+
 2011-08-23  Csaba Osztrogonác  <[email protected]>
 
         [Qt] Unreviewed gardening. Remove a non-existent test from the skipped list.

Modified: trunk/LayoutTests/http/tests/inspector/resources/extension-main.js (93604 => 93605)


--- trunk/LayoutTests/http/tests/inspector/resources/extension-main.js	2011-08-23 15:08:14 UTC (rev 93604)
+++ trunk/LayoutTests/http/tests/inspector/resources/extension-main.js	2011-08-23 15:35:58 UTC (rev 93605)
@@ -1,3 +1,10 @@
+function trimURL(url)
+{
+    if (/^data:/.test(url))
+        return url.replace(/;.*$/, "...");
+    return url.replace(/.*\//, ".../");
+}
+
 function dumpObject(object, nondeterministicProps, prefix, firstLinePrefix)
 {
     prefix = prefix || "";
@@ -6,9 +13,10 @@
     for (var prop in object) {
         var prefixWithName = prefix + "    " + prop + " : ";
         var propValue = object[prop];
-        if (nondeterministicProps && prop in nondeterministicProps)
-            output(prefixWithName + "<" + typeof propValue + ">");
-        else if (propValue === null)
+        if (nondeterministicProps && prop in nondeterministicProps) {
+            var value = nondeterministicProps[prop] === "url" ? trimURL(propValue) : "<" + typeof propValue + ">";
+            output(prefixWithName + value);
+        } else if (propValue === null)
             output(prefixWithName + "null");
         else if (typeof propValue === "object")
             dumpObject(propValue, nondeterministicProps, prefix + "    ", prefixWithName);

Modified: trunk/LayoutTests/inspector/extensions/extensions-api-expected.txt (93604 => 93605)


--- trunk/LayoutTests/inspector/extensions/extensions-api-expected.txt	2011-08-23 15:08:14 UTC (rev 93604)
+++ trunk/LayoutTests/inspector/extensions/extensions-api-expected.txt	2011-08-23 15:35:58 UTC (rev 93605)
@@ -8,8 +8,17 @@
         addCategory : <function>
     }
     inspectedWindow : {
+        onResourceAdded : {
+            addListener : <function>
+            removeListener : <function>
+        }
+        onResourceContentCommitted : {
+            addListener : <function>
+            removeListener : <function>
+        }
         reload : <function>
         eval : <function>
+        getResources : <function>
     }
     panels : {
         elements : {
@@ -42,10 +51,6 @@
             addListener : <function>
             removeListener : <function>
         }
-        onContentEdited : {
-            addListener : <function>
-            removeListener : <function>
-        }
         getHAR : <function>
         addRequestHeaders : <function>
     }
@@ -62,10 +67,6 @@
             addListener : <function>
             removeListener : <function>
         }
-        onContentEdited : {
-            addListener : <function>
-            removeListener : <function>
-        }
         getHAR : <function>
         addRequestHeaders : <function>
     }

Modified: trunk/LayoutTests/inspector/extensions/extensions-network-expected.txt (93604 => 93605)


--- trunk/LayoutTests/inspector/extensions/extensions-network-expected.txt	2011-08-23 15:08:14 UTC (rev 93604)
+++ trunk/LayoutTests/inspector/extensions/extensions-network-expected.txt	2011-08-23 15:35:58 UTC (rev 93605)
@@ -28,7 +28,5 @@
 }
 RUNNING TEST: extension_testRequestNotification
 Request finished: .../inspector/extensions/extensions-network.html
-RUNNING TEST: extension_testResourceContentEdited
-content for resource .../extensions/resources/audits-style1.css edited: body { background-color: black; }
 All tests done.
 

Modified: trunk/LayoutTests/inspector/extensions/extensions-network.html (93604 => 93605)


--- trunk/LayoutTests/inspector/extensions/extensions-network.html	2011-08-23 15:08:14 UTC (rev 93604)
+++ trunk/LayoutTests/inspector/extensions/extensions-network.html	2011-08-23 15:35:58 UTC (rev 93605)
@@ -76,30 +76,6 @@
     });
 }
 
-function extension_testResourceContentEdited(nextTest)
-{
-    function onContentEdited(url, content)
-    {
-        webInspector.network.onContentEdited.removeListener(onContentEdited);
-        var urlTail = url.replace(/.*((\/[^/]*){3}$)/,"...$1");
-        output("content for resource " + urlTail + " edited: " + content);
-        nextTest();
-    }   
-    webInspector.network.onContentEdited.addListener(onContentEdited);
-
-    function findAndEditResource()
-    {
-        var resources = WebInspector.networkLog.resources;
-        for (var i = 0; i < resources.length; ++i) {
-            if (/audits-style1.css$/.test(resources[i].url)) {
-                resources[i].setContent("body { background-color: black; }", true);
-                break;
-            }
-        }
-    }
-    evaluateOnFrontend("(" + findAndEditResource + ")()");
-}
-
 var test = function()
 {
     InspectorTest.reloadPage(InspectorTest.runExtensionTests);

Added: trunk/LayoutTests/inspector/extensions/extensions-resources-expected.txt (0 => 93605)


--- trunk/LayoutTests/inspector/extensions/extensions-resources-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/inspector/extensions/extensions-resources-expected.txt	2011-08-23 15:35:58 UTC (rev 93605)
@@ -0,0 +1,74 @@
+CONSOLE MESSAGE: line 1: ReferenceError: Can't find variable: application
+Tests resource-related methods of WebInspector extension API
+
+
+Started extension.
+Running tests...
+RUNNING TEST: extension_testGetAllResources
+page resources:
+{
+    0 : {
+        0 : {
+            url : .../extensions-resources.html
+            type : "document"
+            getContent : <function>
+            setContent : <function>
+        }
+        1 : {
+            url : .../extensions-test.js
+            type : "script"
+            getContent : <function>
+            setContent : <function>
+        }
+        2 : {
+            url : .../test-script.js
+            type : "script"
+            getContent : <function>
+            setContent : <function>
+        }
+        3 : {
+            url : .../inspector-test.js
+            type : "script"
+            getContent : <function>
+            setContent : <function>
+        }
+        4 : {
+            url : .../audits-style1.css
+            type : "stylesheet"
+            getContent : <function>
+            setContent : <function>
+        }
+        5 : {
+            url : .../abe.png
+            type : "image"
+            getContent : <function>
+            setContent : <function>
+        }
+    }
+}
+RUNNING TEST: extension_testGetResourceContent
+{
+    0 : "function __test_function()
+{
+}
+
+"
+    1 : ""
+}
+RUNNING TEST: extension_testOnContentCommitted
+log: Extension server error: Operation failed: Resource is not editable
+content committed for resource file:///usr/local/google/home/caseq/src/chromium/src/third_party/WebKit/LayoutTests/inspector/extensions/resources/audits-style1.css (type: stylesheet), new content: div.test { width: 220px; height: 42px; }
+RUNNING TEST: extension_testOnResourceAdded
+resource added:
+{
+    0 : {
+        url : data:application/_javascript_...
+        type : "script"
+        getContent : <function>
+        setContent : <function>
+    }
+}
+RUNNING TEST: extension_testSetResourceContent
+div.test width after stylesheet edited (should be 126): 126
+All tests done.
+
Property changes on: trunk/LayoutTests/inspector/extensions/extensions-resources-expected.txt
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/inspector/extensions/extensions-resources.html (0 => 93605)


--- trunk/LayoutTests/inspector/extensions/extensions-resources.html	                        (rev 0)
+++ trunk/LayoutTests/inspector/extensions/extensions-resources.html	2011-08-23 15:35:58 UTC (rev 93605)
@@ -0,0 +1,120 @@
+<html>
+<head>
+<script src=""
+<script src=""
+<link rel="stylesheet" href="" type="text/css">
+<script type="text/_javascript_" src=""
+
+<script type="text/_javascript_">
+
+function extension_testGetAllResources(nextTest)
+{
+    function callback(resources)
+    {
+        function compareResources(a, b)
+        {
+            return trimURL(a.url).localeCompare(trimURL(b.url));
+        }
+        resources.sort(compareResources);
+        output("page resources:");
+        dumpObject(Array.prototype.slice.call(arguments), { url: "url" });
+    }
+    webInspector.inspectedWindow.getResources(callbackAndNextTest(callback, nextTest));
+}
+
+function extension_runWithResource(regexp, callback)
+{
+    function onResources(resources)
+    {
+       for (var i = 0; i < resources.length; ++i) {
+           if (regexp.test(resources[i].url)) {
+               callback(resources[i])
+               return;
+           }
+       }
+       throw "Failed to find a resource: " + regexp.toString();
+    }
+    webInspector.inspectedWindow.getResources(onResources);
+}
+
+function extension_testGetResourceContent(nextTest)
+{
+    function onContent()
+    {
+        dumpObject(Array.prototype.slice.call(arguments));
+    }
+    extension_runWithResource(/test-script\.js$/, function(resource) {
+        resource.getContent(callbackAndNextTest(onContent, nextTest));
+    });
+}
+
+function extension_testSetResourceContent(nextTest)
+{
+    function callback()
+    {
+        webInspector.inspectedWindow.eval("document.getElementById('test-div').clientWidth", function(result) {
+            output("div.test width after stylesheet edited (should be 126): " + result);
+            nextTest();
+        });
+    }
+    extension_runWithResource(/audits-style1\.css$/, function(resource) {
+        resource.setContent("div.test { width: 126px; height: 42px; }", false, callback);
+    });
+}
+
+function extension_testOnContentCommitted(nextTest)
+{
+    var expected_content = "div.test { width: 220px; height: 42px; }";
+
+    function onContentCommitted(resource, content)
+    {
+        output("content committed for resource " + trimURL(resource.url) + " (type: " + resource.type + "), new content: " + content);
+        if (!/audits-style1\.css$/.test(resource.url) || content !== expected_content)
+            output("FAIL: stray onContentEdited event");
+        webInspector.inspectedWindow.onResourceContentCommitted.removeListener(onContentCommitted);
+        nextTest();
+    }
+    webInspector.inspectedWindow.onResourceContentCommitted.addListener(onContentCommitted);
+    extension_runWithResource(/audits-style1\.css$/, function(resource) {
+        resource.setContent("div.test { width: 140px; height: 42px; }", false);
+    });
+    // The next step is going to produce a console message that will be logged, so synchronize the output now.
+    evaluateOnFrontend("InspectorTest.runAfterPendingDispatches(reply)", function() {
+        extension_runWithResource(/test-script\.js$/, function(resource) {
+            resource.setContent("function function1(){}", true);
+        });
+        extension_runWithResource(/audits-style1\.css$/, function(resource) {
+            resource.setContent(expected_content, true);
+        });
+    });
+}
+
+function extension_testOnResourceAdded(nextTest)
+{
+    function onResourceAdded(resource)
+    {
+        output("resource added:");
+        dumpObject(Array.prototype.slice.call(arguments), { url: "url" });
+        webInspector.inspectedWindow.onResourceAdded.removeListener(onResourceAdded);
+
+        nextTest();
+    }
+    webInspector.inspectedWindow.onResourceAdded.addListener(onResourceAdded);
+    webInspector.inspectedWindow.eval("addResource()");
+}
+
+function addResource()
+{
+    var script = document.createElement("script");
+    script.src = "" test_func(){}";
+    document.head.appendChild(script);
+}
+
+</script>
+</head>
+<body _onload_="runTest()">
+<p>Tests resource-related methods of WebInspector extension API</p>
+<img src=""
+<div id="test-div" class="test"></div>
+</body>
+</html>
Property changes on: trunk/LayoutTests/inspector/extensions/extensions-resources.html
___________________________________________________________________

Added: svn:eol-style

Property changes: trunk/LayoutTests/inspector/extensions/resources/Ahem.ttf


Deleted: svn:executable

Added: trunk/LayoutTests/inspector/extensions/resources/test-script.js (0 => 93605)


--- trunk/LayoutTests/inspector/extensions/resources/test-script.js	                        (rev 0)
+++ trunk/LayoutTests/inspector/extensions/resources/test-script.js	2011-08-23 15:35:58 UTC (rev 93605)
@@ -0,0 +1,4 @@
+function __test_function()
+{
+}
+
Property changes on: trunk/LayoutTests/inspector/extensions/resources/test-script.js
___________________________________________________________________

Added: svn:eol-style

Modified: trunk/Source/WebCore/ChangeLog (93604 => 93605)


--- trunk/Source/WebCore/ChangeLog	2011-08-23 15:08:14 UTC (rev 93604)
+++ trunk/Source/WebCore/ChangeLog	2011-08-23 15:35:58 UTC (rev 93605)
@@ -1,3 +1,40 @@
+2011-08-23  Andrey Kosyakov  <[email protected]>
+
+        Web Inspector: [Extensions API] provide access to page resources
+        https://bugs.webkit.org/show_bug.cgi?id=66767
+
+        Reviewed by Pavel Feldman.
+
+        Test: inspector/extensions/extensions-resources.html
+
+        * inspector/front-end/ExtensionAPI.js:
+        (WebInspector.injectedExtensionAPI.EventSinkImpl.prototype.addListener):
+        (WebInspector.injectedExtensionAPI):
+        (WebInspector.injectedExtensionAPI.RequestImpl.prototype.getContent):
+        (WebInspector.injectedExtensionAPI.InspectedWindow.resourceDispatch):
+        (WebInspector.injectedExtensionAPI.InspectedWindow.resourceContentDispatch):
+        (WebInspector.injectedExtensionAPI.InspectedWindow):
+        (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.eval):
+        (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.getResources):
+        (WebInspector.injectedExtensionAPI.InspectedWindow.prototype.getResources.callbackWrapper):
+        (WebInspector.injectedExtensionAPI.ResourceImpl.prototype.get url):
+        (WebInspector.injectedExtensionAPI.ResourceImpl.prototype.get type):
+        (WebInspector.injectedExtensionAPI.ResourceImpl.prototype.getContent):
+        (WebInspector.injectedExtensionAPI.ResourceImpl.prototype.setContent):
+        * inspector/front-end/ExtensionServer.js:
+        (WebInspector.ExtensionServer):
+        (WebInspector.ExtensionServer.prototype._notifyResourceAdded):
+        (WebInspector.ExtensionServer.prototype.notifyResourceContentCommitted):
+        (WebInspector.ExtensionServer.prototype._makeResource):
+        (WebInspector.ExtensionServer.prototype._onGetPageResources):
+        (WebInspector.ExtensionServer.prototype._getResourceContent):
+        (WebInspector.ExtensionServer.prototype._onGetRequestContent):
+        (WebInspector.ExtensionServer.prototype._onGetResourceContent):
+        (WebInspector.ExtensionServer.prototype._onSetResourceContent):
+        (WebInspector.ExtensionServer.prototype.initExtensions):
+        * inspector/front-end/Resource.js:
+        (WebInspector.Resource.prototype.addRevision):
+
 2011-08-23  Pavel Feldman  <[email protected]>
 
         Not reviewed: fixing build. One line drive-by typo fix in the inspector shortcut (Esc -> Backspace).

Modified: trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js (93604 => 93605)


--- trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js	2011-08-23 15:08:14 UTC (rev 93604)
+++ trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js	2011-08-23 15:35:58 UTC (rev 93605)
@@ -48,7 +48,7 @@
     addListener: function(callback)
     {
         if (typeof callback != "function")
-            throw new "addListener: callback is not a function";
+            throw "addListener: callback is not a function";
         if (this._listeners.length === 0)
             extensionServer.sendRequest({ command: "subscribe", type: this._type });
         this._listeners.push(callback);
@@ -115,7 +115,6 @@
     this._onRequestFinished_ = new EventSink("network-request-finished", requestDispatch);
     defineDeprecatedProperty(this, "network", "onFinished", "onRequestFinished");
     this._onNavigated_ = new EventSink("inspectedURLChanged");
-    this._onContentEdited_ = new EventSink("resource-content-edited");
 }
 
 Network.prototype = {
@@ -151,7 +150,7 @@
         {
             callback(response.content, response.encoding);
         }
-        extensionServer.sendRequest({ command: "getResourceContent", id: this._id }, callback && callbackWrapper);
+        extensionServer.sendRequest({ command: "getRequestContent", id: this._id }, callback && callbackWrapper);
     }
 };
 
@@ -358,6 +357,16 @@
 
 function InspectedWindow()
 {
+    function resourceDispatch(message)
+    {
+        this._fire(new Resource(message.arguments[0]));
+    }
+    function resourceContentDispatch(message)
+    {
+        this._fire(new Resource(message.arguments[0]), message.arguments[1]);
+    }
+    this._onResourceAdded_ = new EventSink("resource-added", resourceDispatch);
+    this._onResourceContentCommitted_ = new EventSink("resource-content-committed", resourceContentDispatch);
 }
 
 InspectedWindow.prototype = {
@@ -376,9 +385,55 @@
             callback(value, result.isException);
         }
         return extensionServer.sendRequest({ command: "evaluateOnInspectedPage", _expression_: _expression_ }, callback && callbackWrapper);
+    },
+
+    getResources: function(callback)
+    {
+        function wrapResource(resourceData)
+        {
+            return new Resource(resourceData);
+        }
+        function callbackWrapper(resources)
+        {
+            callback(resources.map(wrapResource));
+        }
+        return extensionServer.sendRequest({ command: "getPageResources" }, callback && callbackWrapper);
     }
 }
 
+function ResourceImpl(resourceData)
+{
+    this._url = resourceData.url
+    this._type = resourceData.type;
+}
+
+ResourceImpl.prototype = {
+    get url()
+    {
+        return this._url;
+    },
+
+    get type()
+    {
+        return this._type;
+    },
+
+    getContent: function(callback)
+    {
+        function callbackWrapper(response)
+        {
+            callback(response.content, response.encoding);
+        }
+
+        return extensionServer.sendRequest({ command: "getResourceContent", url: this._url }, callback && callbackWrapper);
+    },
+
+    setContent: function(content, commit, callback)
+    {
+        return extensionServer.sendRequest({ command: "setResourceContent", url: this._url, content: content, commit: commit }, callback);
+    }
+};
+
 function TimelineImpl()
 {
     this._onEventRecorded_ = new EventSink("timeline-event-recorded");
@@ -455,9 +510,18 @@
     for (var member in implementation) {
         if (member.charAt(0) === "_")
             continue;
-        var value = implementation[member];
-        interface[member] = typeof value === "function" ? bind(value, implementation)
-            : interface[member] = implementation[member];
+        var descriptor = null;
+        // Traverse prototype chain until we find the owner.
+        for (var owner = implementation; owner && !descriptor; owner = owner.__proto__)
+            descriptor = Object.getOwnPropertyDescriptor(owner, member);
+        if (!descriptor)
+            continue;
+        if (typeof descriptor.value === "function")
+            interface[member] = bind(descriptor.value, implementation);
+        else if (typeof descriptor.get === "function")
+            interface.__defineGetter__(member, bind(descriptor.get, implementation));
+        else
+            Object.defineProperty(interface, member, descriptor);
     }
 }
 
@@ -492,6 +556,7 @@
 var Panel = declareInterfaceClass(PanelImpl);
 var PanelWithSidebar = declareInterfaceClass(PanelWithSidebarImpl);
 var Request = declareInterfaceClass(RequestImpl);
+var Resource = declareInterfaceClass(ResourceImpl);
 var Timeline = declareInterfaceClass(TimelineImpl);
 
 var extensionServer = new ExtensionServerClient();

Modified: trunk/Source/WebCore/inspector/front-end/ExtensionServer.js (93604 => 93605)


--- trunk/Source/WebCore/inspector/front-end/ExtensionServer.js	2011-08-23 15:08:14 UTC (rev 93604)
+++ trunk/Source/WebCore/inspector/front-end/ExtensionServer.js	2011-08-23 15:35:58 UTC (rev 93605)
@@ -48,9 +48,12 @@
     this._registerHandler("createSidebarPane", this._onCreateSidebarPane.bind(this));
     this._registerHandler("evaluateOnInspectedPage", this._onEvaluateOnInspectedPage.bind(this));
     this._registerHandler("getHAR", this._onGetHAR.bind(this));
+    this._registerHandler("getPageResources", this._onGetPageResources.bind(this));
+    this._registerHandler("getRequestContent", this._onGetRequestContent.bind(this));
     this._registerHandler("getResourceContent", this._onGetResourceContent.bind(this));
     this._registerHandler("log", this._onLog.bind(this));
     this._registerHandler("reload", this._onReload.bind(this));
+    this._registerHandler("setResourceContent", this._onSetResourceContent.bind(this));
     this._registerHandler("setSidebarHeight", this._onSetSidebarHeight.bind(this));
     this._registerHandler("setSidebarContent", this._onSetSidebarContent.bind(this));
     this._registerHandler("setSidebarPage", this._onSetSidebarPage.bind(this));
@@ -117,11 +120,17 @@
         delete this._clientObjects[auditRun.id];
     },
 
-    notifyResourceContentEdited: function(url, content)
+    _notifyResourceAdded: function(event)
     {
-        this._postNotification("resource-content-edited", url, content);
+        var resource = event.data;
+        this._postNotification("resource-added", this._makeResource(resource));
     },
 
+    notifyResourceContentCommitted: function(resource, content)
+    {
+        this._postNotification("resource-content-committed", this._makeResource(resource), content);
+    },
+
     _notifyRequestFinished: function(event)
     {
         var request = event.data;
@@ -310,8 +319,27 @@
         return harLog;
     },
 
-    _onGetResourceContent: function(message, port)
+    _makeResource: function(resource)
     {
+        return {
+            url: resource.url,
+            type: WebInspector.Resource.Type.toString(resource.type)
+        };
+    },
+
+    _onGetPageResources: function()
+    {
+        var resources = [];
+        function pushResourceData(resource)
+        {
+            resources.push(this._makeResource(resource));
+        }
+        WebInspector.resourceTreeModel.forAllResources(pushResourceData.bind(this));
+        return resources;
+    },
+
+    _getResourceContent: function(resource, message, port)
+    {
         function onContentAvailable(content, encoded)
         {
             var response = {
@@ -320,12 +348,38 @@
             };
             this._dispatchCallback(message.requestId, port, response);
         }
+        resource.requestContent(onContentAvailable.bind(this));
+    },
+
+    _onGetRequestContent: function(message, port)
+    {
         var request = this._requestById(message.id);
         if (!request)
             return this._status.E_NOTFOUND(message.id);
-        request.requestContent(onContentAvailable.bind(this));
+        this._getResourceContent(request, message, port);
     },
 
+    _onGetResourceContent: function(message, port)
+    {
+        var resource = WebInspector.resourceTreeModel.resourceForURL(message.url);
+        if (!resource)
+            return this._status.E_NOTFOUND(message.url);
+        this._getResourceContent(resource, message, port);
+    },
+
+    _onSetResourceContent: function(message, port)
+    {
+        function callbackWrapper(error)
+        {
+            var response = error ? this._status.E_FAILED(error) : this._status.OK();
+            this._dispatchCallback(message.requestId, port, response);
+        }
+        var resource = WebInspector.resourceTreeModel.resourceForURL(message.url);
+        if (!resource)
+            return this._status.E_NOTFOUND(message.url);
+        resource.setContent(message.content, message.commit, callbackWrapper.bind(this));
+    },
+
     _requestId: function(request)
     {
         if (!request._extensionRequestId) {
@@ -375,6 +429,7 @@
         // The networkManager is normally created after the ExtensionServer is constructed, but before initExtensions() is called.
         WebInspector.networkManager.addEventListener(WebInspector.NetworkManager.EventTypes.ResourceFinished, this._notifyRequestFinished, this);
         WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.InspectedURLChanged, this._inspectedURLChanged, this);
+        WebInspector.resourceTreeModel.addEventListener(WebInspector.ResourceTreeModel.EventTypes.ResourceAdded, this._notifyResourceAdded, this);
         WebInspector.timelineManager.addEventListener(WebInspector.TimelineManager.EventTypes.TimelineEventRecorded, this._addRecordToTimeline, this);
 
         InspectorExtensionRegistry.getExtensionsAsync();
@@ -501,6 +556,7 @@
     E_BADARGTYPE: "Invalid type for argument %s: got %s, expected %s",
     E_NOTFOUND: "Object not found: %s",
     E_NOTSUPPORTED: "Object does not support requested operation: %s",
+    E_FAILED: "Operation failed: %s"
 }
 
 WebInspector.ExtensionStatus = function()

Modified: trunk/Source/WebCore/inspector/front-end/Resource.js (93604 => 93605)


--- trunk/Source/WebCore/inspector/front-end/Resource.js	2011-08-23 15:08:14 UTC (rev 93604)
+++ trunk/Source/WebCore/inspector/front-end/Resource.js	2011-08-23 15:35:58 UTC (rev 93605)
@@ -833,7 +833,7 @@
 
         if (!restoringHistory)
             this._persistRevision();
-        WebInspector.extensionServer.notifyResourceContentEdited(this.url, newContent);
+        WebInspector.extensionServer.notifyResourceContentCommitted(this, newContent);
     },
 
     _persistRevision: function()
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to