Title: [101777] trunk/Source/WebCore
Revision
101777
Author
[email protected]
Date
2011-12-02 03:37:26 -0800 (Fri, 02 Dec 2011)

Log Message

Web Inspector: introduce backend stub generation from JSON for the standalone development / remote front-ends.
https://bugs.webkit.org/show_bug.cgi?id=73636

Reviewed by Yury Semikhatsky.

* inspector/front-end/DOMStorage.js:
* inspector/front-end/Database.js:
* inspector/front-end/InspectorBackend.js:
(InspectorBackendClass):
(InspectorBackendClass.prototype.registerCommand):
(InspectorBackendClass.prototype.registerEvent):
(InspectorBackendClass.prototype.runAfterPendingDispatches):
(InspectorBackendClass.prototype.loadFromJSONIfNeeded):
* inspector/front-end/TimelineManager.js:
* inspector/front-end/inspector.js:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (101776 => 101777)


--- trunk/Source/WebCore/ChangeLog	2011-12-02 11:19:13 UTC (rev 101776)
+++ trunk/Source/WebCore/ChangeLog	2011-12-02 11:37:26 UTC (rev 101777)
@@ -1,3 +1,21 @@
+2011-12-02  Pavel Feldman  <[email protected]>
+
+        Web Inspector: introduce backend stub generation from JSON for the standalone development / remote front-ends.
+        https://bugs.webkit.org/show_bug.cgi?id=73636
+
+        Reviewed by Yury Semikhatsky.
+
+        * inspector/front-end/DOMStorage.js:
+        * inspector/front-end/Database.js:
+        * inspector/front-end/InspectorBackend.js:
+        (InspectorBackendClass):
+        (InspectorBackendClass.prototype.registerCommand):
+        (InspectorBackendClass.prototype.registerEvent):
+        (InspectorBackendClass.prototype.runAfterPendingDispatches):
+        (InspectorBackendClass.prototype.loadFromJSONIfNeeded):
+        * inspector/front-end/TimelineManager.js:
+        * inspector/front-end/inspector.js:
+
 2011-12-02  MORITA Hajime  <[email protected]>
 
         Unreviewed, another attempt to build fix for r101751:

Modified: trunk/Source/WebCore/inspector/front-end/DOMStorage.js (101776 => 101777)


--- trunk/Source/WebCore/inspector/front-end/DOMStorage.js	2011-12-02 11:19:13 UTC (rev 101776)
+++ trunk/Source/WebCore/inspector/front-end/DOMStorage.js	2011-12-02 11:37:26 UTC (rev 101777)
@@ -91,5 +91,3 @@
         WebInspector.panels.resources.updateDOMStorage(storageId);
     }
 }
-
-InspectorBackend.registerDOMStorageDispatcher(new WebInspector.DOMStorageDispatcher());

Modified: trunk/Source/WebCore/inspector/front-end/Database.js (101776 => 101777)


--- trunk/Source/WebCore/inspector/front-end/Database.js	2011-12-02 11:19:13 UTC (rev 101776)
+++ trunk/Source/WebCore/inspector/front-end/Database.js	2011-12-02 11:37:26 UTC (rev 101777)
@@ -149,5 +149,3 @@
              callback(errorObj);
     }
 }
-
-InspectorBackend.registerDatabaseDispatcher(new WebInspector.DatabaseDispatcher());

Modified: trunk/Source/WebCore/inspector/front-end/InspectorBackend.js (101776 => 101777)


--- trunk/Source/WebCore/inspector/front-end/InspectorBackend.js	2011-12-02 11:19:13 UTC (rev 101776)
+++ trunk/Source/WebCore/inspector/front-end/InspectorBackend.js	2011-12-02 11:37:26 UTC (rev 101777)
@@ -42,6 +42,7 @@
 
     this.dumpInspectorTimeStats = false;
     this.dumpInspectorProtocolMessages = false;
+    this._initialized = false;
 }
 
 InspectorBackendClass.prototype = {
@@ -69,11 +70,15 @@
         window[agentName][domainAndMethod[1]] = this._sendMessageToBackend.bind(this, method, signature);
         window[agentName][domainAndMethod[1]]["invoke"] = this._invoke.bind(this, method, signature);
         this._replyArgs[method] = replyArgs;
+
+        this._initialized = true;
     },
 
     registerEvent: function(eventName, params)
     {
         this._eventArgs[eventName] = params;
+
+        this._initialized = true;
     },
 
     _invoke: function(method, signature, args, callback)
@@ -275,6 +280,79 @@
             for (var id = 0; id < scripts.length; ++id)
                  scripts[id].call(this);
         }
+    },
+
+    loadFromJSONIfNeeded: function()
+    {
+        if (this._initialized)
+            return;
+
+        var xhr = new XMLHttpRequest();
+        xhr.open("GET", "../Inspector.json", false);
+        xhr.send(null);
+    
+        var schema = JSON.parse(xhr.responseText);
+        var jsTypes = { integer: "number", array: "object" };
+        var rawTypes = {};
+    
+        var domains = schema["domains"];
+        for (var i = 0; i < domains.length; ++i) {
+            var domain = domains[i];
+            for (var j = 0; domain.types && j < domain.types.length; ++j) {
+                var type = domain.types[j];
+                rawTypes[domain.domain + "." + type.id] = jsTypes[type.type] || type.type;
+            }
+        }
+    
+        var result = [];
+        for (var i = 0; i < domains.length; ++i) {
+            var domain = domains[i];
+
+            var commands = domain["commands"] || [];    
+            for (var j = 0; j < commands.length; ++j) {
+                var command = commands[j];
+                var parameters = command["parameters"];
+                var paramsText = [];
+                for (var k = 0; parameters && k < parameters.length; ++k) {
+                    var parameter = parameters[k];
+    
+                    var type;
+                    if (parameter.type)
+                        type = jsTypes[parameter.type] || parameter.type;
+                    else {
+                        var ref = parameter["$ref"];
+                        if (ref.indexOf(".") !== -1)
+                            type = rawTypes[ref];
+                        else
+                            type = rawTypes[domain.domain + "." + ref];
+                    }
+    
+                    var text = "{\"name\": \"" + parameter.name + "\", \"type\": \"" + type + "\", \"optional\": " + (parameter.optional ? "true" : "false") + "}";
+                    paramsText.push(text);
+                }
+    
+                var returnsText = [];
+                var returns = command["returns"] || [];
+                for (var k = 0; k < returns.length; ++k) {
+                    var parameter = returns[k];
+                    returnsText.push("\"" + parameter.name + "\"");
+                }
+                result.push("InspectorBackend.registerCommand(\"" + domain.domain + "." + command.name + "\", [" + paramsText.join(", ") + "], [" + returnsText.join(", ") + "]);");
+            }
+    
+            for (var j = 0; domain.events && j < domain.events.length; ++j) {
+                var event = domain.events[j];
+                var paramsText = [];
+                for (var k = 0; event.parameters && k < event.parameters.length; ++k) {
+                    var parameter = event.parameters[k];
+                    paramsText.push("\"" + parameter.name + "\"");
+                }
+                result.push("InspectorBackend.registerEvent(\"" + domain.domain + "." + event.name + "\", [" + paramsText.join(", ") + "]);");
+            }
+    
+            result.push("InspectorBackend.register" + domain.domain + "Dispatcher = InspectorBackend.registerDomainDispatcher.bind(InspectorBackend, \"" + domain.domain + "\");");
+        }
+        eval(result.join("\n"));
     }
 }
 

Modified: trunk/Source/WebCore/inspector/front-end/TimelineManager.js (101776 => 101777)


--- trunk/Source/WebCore/inspector/front-end/TimelineManager.js	2011-12-02 11:19:13 UTC (rev 101776)
+++ trunk/Source/WebCore/inspector/front-end/TimelineManager.js	2011-12-02 11:37:26 UTC (rev 101777)
@@ -46,6 +46,9 @@
 }
 
 WebInspector.TimelineManager.prototype = {
+    /**
+     * @param {number=} maxCallStackDepth
+     */
     start: function(maxCallStackDepth)
     {
         this._enablementCount++;
@@ -94,4 +97,7 @@
     }
 }
 
-WebInspector.timelineManager = new WebInspector.TimelineManager();
+/**
+ * @type {WebInspector.TimelineManager}
+ */
+WebInspector.timelineManager;

Modified: trunk/Source/WebCore/inspector/front-end/inspector.js (101776 => 101777)


--- trunk/Source/WebCore/inspector/front-end/inspector.js	2011-12-02 11:19:13 UTC (rev 101776)
+++ trunk/Source/WebCore/inspector/front-end/inspector.js	2011-12-02 11:37:26 UTC (rev 101777)
@@ -307,6 +307,7 @@
 
 WebInspector.loaded = function()
 {
+    InspectorBackend.loadFromJSONIfNeeded();
     if ("page" in WebInspector.queryParamsObject) {
         var page = WebInspector.queryParamsObject.page;
         var host = "host" in WebInspector.queryParamsObject ? WebInspector.queryParamsObject.host : window.location.host;
@@ -371,6 +372,9 @@
     InspectorBackend.registerInspectorDispatcher(this);
 
     this.cssModel = new WebInspector.CSSStyleModel();
+    this.timelineManager = new WebInspector.TimelineManager();
+    InspectorBackend.registerDatabaseDispatcher(new WebInspector.DatabaseDispatcher());
+    InspectorBackend.registerDOMStorageDispatcher(new WebInspector.DOMStorageDispatcher());
 
     this.searchController = new WebInspector.SearchController();
     this.advancedSearchController = new WebInspector.AdvancedSearchController();
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to