Title: [103411] trunk
Revision
103411
Author
ca...@chromium.org
Date
2011-12-21 09:20:43 -0800 (Wed, 21 Dec 2011)

Log Message

Web Inspector: [Extension API] refactor extension API build code, expose experimental APIs conditionally in chromium
https://bugs.webkit.org/show_bug.cgi?id=74941

Reviewed by Pavel Feldman.

Source/WebCore:

* WebCore.gypi:
* inspector/front-end/ExtensionAPI.js:
(buildPlatformExtensionAPI.platformExtensionAPI):
(buildPlatformExtensionAPI):
(buildExtensionAPIInjectedScript):
* inspector/front-end/ExtensionServer.js:
(WebInspector.ExtensionServer.prototype._addExtensions):
(WebInspector.ExtensionServer.prototype._addExtension):
(window.addExtension):

Source/WebKit/chromium:

* WebKit.gyp:
* WebKit.gypi:
* scripts/concatenate_js_files.py:
(main):
* scripts/generate_devtools_extension_api.py:
(write_devtools_extension_api):
* src/js/DevTools.js:
():

LayoutTests:

* http/tests/inspector/extensions-test.js:
(initialize_ExtensionsTest.InspectorTest.runExtensionTests):
(initialize_ExtensionsTest):
* platform/chromium/inspector/extensions/extensions-api-expected.txt: Removed.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (103410 => 103411)


--- trunk/LayoutTests/ChangeLog	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/LayoutTests/ChangeLog	2011-12-21 17:20:43 UTC (rev 103411)
@@ -1,3 +1,15 @@
+2011-12-20  Andrey Kosyakov  <ca...@chromium.org>
+
+        Web Inspector: [Extension API] refactor extension API build code, expose experimental APIs conditionally in chromium
+        https://bugs.webkit.org/show_bug.cgi?id=74941
+
+        Reviewed by Pavel Feldman.
+
+        * http/tests/inspector/extensions-test.js:
+        (initialize_ExtensionsTest.InspectorTest.runExtensionTests):
+        (initialize_ExtensionsTest):
+        * platform/chromium/inspector/extensions/extensions-api-expected.txt: Removed.
+
 2011-12-12  Pavel Podivilov  <podivi...@chromium.org>
 
         Web Inspector: fix source map url resolving.

Modified: trunk/LayoutTests/http/tests/inspector/extensions-test.js (103410 => 103411)


--- trunk/LayoutTests/http/tests/inspector/extensions-test.js	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/LayoutTests/http/tests/inspector/extensions-test.js	2011-12-21 17:20:43 UTC (rev 103411)
@@ -50,7 +50,7 @@
             pageURL.replace(/^(https?:\/\/[^/]*\/).*$/,"$1") :
             pageURL.replace(/\/inspector\/extensions\/[^/]*$/, "/http/tests")) +
             "/inspector/resources/extension-main.html";
-        WebInspector.addExtensions([{ startPage: extensionURL, name: "test extension" }]);
+        WebInspector.addExtensions([{ startPage: extensionURL, name: "test extension", exposeWebInspectorNamespace: true }]);
     });
 }
 

Deleted: trunk/LayoutTests/platform/chromium/inspector/extensions/extensions-api-expected.txt (103410 => 103411)


--- trunk/LayoutTests/platform/chromium/inspector/extensions/extensions-api-expected.txt	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/LayoutTests/platform/chromium/inspector/extensions/extensions-api-expected.txt	2011-12-21 17:20:43 UTC (rev 103411)
@@ -1,95 +0,0 @@
-Tests public interface of WebInspector Extensions API
-
-Started extension.
-Running tests...
-RUNNING TEST: extension_testAPI
-{
-    audits : {
-        addCategory : <function>
-    }
-    inspectedWindow : {
-        onResourceAdded : {
-            addListener : <function>
-            removeListener : <function>
-        }
-        onResourceContentCommitted : {
-            addListener : <function>
-            removeListener : <function>
-        }
-        reload : <function>
-        eval : <function>
-        getResources : <function>
-        tabId : undefined
-    }
-    panels : {
-        elements : {
-            createSidebarPane : <function>
-            onSelectionChanged : {
-                addListener : <function>
-                removeListener : <function>
-            }
-        }
-        create : <function>
-        setOpenResourceHandler : <function>
-    }
-    network : {
-        onRequestFinished : {
-            addListener : <function>
-            removeListener : <function>
-        }
-        onFinished : {
-            addListener : <function>
-            removeListener : <function>
-        }
-        onNavigated : {
-            addListener : <function>
-            removeListener : <function>
-        }
-        getHAR : <function>
-        addRequestHeaders : <function>
-    }
-    resources : {
-        onRequestFinished : {
-            addListener : <function>
-            removeListener : <function>
-        }
-        onFinished : {
-            addListener : <function>
-            removeListener : <function>
-        }
-        onNavigated : {
-            addListener : <function>
-            removeListener : <function>
-        }
-        getHAR : <function>
-        addRequestHeaders : <function>
-    }
-    timeline : {
-        onEventRecorded : {
-            addListener : <function>
-            removeListener : <function>
-        }
-    }
-    console : {
-        onMessageAdded : {
-            addListener : <function>
-            removeListener : <function>
-        }
-        getMessages : <function>
-        addMessage : <function>
-        Severity : {
-            Tip : "tip"
-            Debug : "debug"
-            Log : "log"
-            Warning : "warning"
-            Error : "error"
-        }
-    }
-    onReset : {
-        addListener : <function>
-        removeListener : <function>
-    }
-    log : <function>
-}
-All tests done.
-

Modified: trunk/Source/WebCore/ChangeLog (103410 => 103411)


--- trunk/Source/WebCore/ChangeLog	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebCore/ChangeLog	2011-12-21 17:20:43 UTC (rev 103411)
@@ -1,3 +1,20 @@
+2011-12-20  Andrey Kosyakov  <ca...@chromium.org>
+
+        Web Inspector: [Extension API] refactor extension API build code, expose experimental APIs conditionally in chromium
+        https://bugs.webkit.org/show_bug.cgi?id=74941
+
+        Reviewed by Pavel Feldman.
+
+        * WebCore.gypi:
+        * inspector/front-end/ExtensionAPI.js:
+        (buildPlatformExtensionAPI.platformExtensionAPI):
+        (buildPlatformExtensionAPI):
+        (buildExtensionAPIInjectedScript):
+        * inspector/front-end/ExtensionServer.js:
+        (WebInspector.ExtensionServer.prototype._addExtensions):
+        (WebInspector.ExtensionServer.prototype._addExtension):
+        (window.addExtension):
+
 2011-12-12  Pavel Podivilov  <podivi...@chromium.org>
 
         Web Inspector: fix source map url resolving.

Modified: trunk/Source/WebCore/WebCore.gypi (103410 => 103411)


--- trunk/Source/WebCore/WebCore.gypi	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebCore/WebCore.gypi	2011-12-21 17:20:43 UTC (rev 103411)
@@ -6407,6 +6407,7 @@
             'inspector/front-end/ElementsTreeOutline.js',
             'inspector/front-end/EmptyView.js',
             'inspector/front-end/EventListenersSidebarPane.js',
+            'inspector/front-end/ExtensionAPI.js',
             'inspector/front-end/ExtensionAuditCategory.js',
             'inspector/front-end/ExtensionPanel.js',
             'inspector/front-end/ExtensionRegistryStub.js',
@@ -6516,7 +6517,6 @@
             'inspector/front-end/inspectorSyntaxHighlight.css',
             'inspector/front-end/popover.css',
             '<@(webinspector_standalone_css_files)',
-            '<@(webinspector_extension_api_files)',
         ],
         'webinspector_standalone_css_files': [
             'inspector/front-end/auditsPanel.css',
@@ -6536,9 +6536,6 @@
             'inspector/front-end/textViewer.css',
             'inspector/front-end/timelinePanel.css',
         ],
-        'webinspector_extension_api_files': [
-            'inspector/front-end/ExtensionAPI.js',
-        ],
         'webinspector_uglifyjs_files': [
             'inspector/front-end/UglifyJS/parse-js.js',
         ],

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


--- trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebCore/inspector/front-end/ExtensionAPI.js	2011-12-21 17:20:43 UTC (rev 103411)
@@ -806,19 +806,27 @@
 
 var extensionServer = new ExtensionServerClient();
 
-window.webInspector = new InspectorExtensionAPI();
-window.experimental = window.experimental || {};
-window.experimental.webInspector = window.webInspector;
+return new InspectorExtensionAPI();
+}
 
+// Default implementation; platforms will override.
+function buildPlatformExtensionAPI()
+{
+    function platformExtensionAPI(coreAPI)
+    {
+        window.webInspector = coreAPI;
+    }
+    return platformExtensionAPI.toString();
 }
 
-function buildExtensionAPIInjectedScript(platformAPI)
+
+function buildExtensionAPIInjectedScript(extensionInfo)
 {
     return "(function(injectedScriptHost, inspectedWindow, injectedScriptId){ " +
         defineCommonExtensionSymbols.toString() + ";" +
         injectedExtensionAPI.toString() + ";" +
-        "injectedExtensionAPI(injectedScriptId);" +
-        (platformAPI || "") + ";" +
+        buildPlatformExtensionAPI(extensionInfo) + ";" +
+        "platformExtensionAPI(injectedExtensionAPI(injectedScriptId));" +
         "return {};" +
         "})";
 }

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


--- trunk/Source/WebCore/inspector/front-end/ExtensionServer.js	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebCore/inspector/front-end/ExtensionServer.js	2011-12-21 17:20:43 UTC (rev 103411)
@@ -604,12 +604,14 @@
     _addExtensions: function(extensions)
     {
         for (var i = 0; i < extensions.length; ++i)
-            this._addExtension(extensions[i].startPage, extensions[i].name);
+            this._addExtension(extensions[i]);
     },
 
-    _addExtension: function(startPage, name)
+    _addExtension: function(extensionInfo)
     {
         const urlOriginRegExp = new RegExp("([^:]+:\/\/[^/]*)\/"); // Can't use regexp literal here, MinJS chokes on it.
+        var startPage = extensionInfo.startPage;
+        var name = extensionInfo.name;
 
         try {
             var originMatch = urlOriginRegExp.exec(startPage);
@@ -620,7 +622,7 @@
             var extensionOrigin = originMatch[1];
             if (!this._registeredExtensions[extensionOrigin]) {
                 // See ExtensionAPI.js and ExtensionCommon.js for details.
-                InspectorFrontendHost.setInjectedScriptForOrigin(extensionOrigin, this._buildExtensionAPIScript());
+                InspectorFrontendHost.setInjectedScriptForOrigin(extensionOrigin, buildExtensionAPIInjectedScript(extensionInfo));
                 this._registeredExtensions[extensionOrigin] = { name: name };
             }
             var iframe = document.createElement("iframe");
@@ -634,12 +636,6 @@
         return true;
     },
 
-    _buildExtensionAPIScript: function()
-    {
-        var platformAPI = WebInspector.buildPlatformExtensionAPI ? WebInspector.buildPlatformExtensionAPI() : "";
-        return buildExtensionAPIInjectedScript(platformAPI);
-    },
-
     _onWindowMessage: function(event)
     {
         if (event.data ="" "registerExtension")
@@ -752,4 +748,10 @@
 
 WebInspector.extensionServer = new WebInspector.ExtensionServer();
 
-window.addExtension = WebInspector.extensionServer._addExtension.bind(WebInspector.extensionServer);
+window.addExtension = function(page, name)
+{
+    WebInspector.extensionServer._addExtension({
+        startPage: page,
+        name: name,
+    });
+}

Modified: trunk/Source/WebKit/chromium/ChangeLog (103410 => 103411)


--- trunk/Source/WebKit/chromium/ChangeLog	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebKit/chromium/ChangeLog	2011-12-21 17:20:43 UTC (rev 103411)
@@ -1,3 +1,19 @@
+2011-12-20  Andrey Kosyakov  <ca...@chromium.org>
+
+        Web Inspector: [Extension API] refactor extension API build code, expose experimental APIs conditionally in chromium
+        https://bugs.webkit.org/show_bug.cgi?id=74941
+
+        Reviewed by Pavel Feldman.
+
+        * WebKit.gyp:
+        * WebKit.gypi:
+        * scripts/concatenate_js_files.py:
+        (main):
+        * scripts/generate_devtools_extension_api.py:
+        (write_devtools_extension_api):
+        * src/js/DevTools.js:
+        ():
+
 2011-12-20  Nate Chapin  <jap...@chromium.org>
 
         Revert code for r96912 and r101905, since they cause

Modified: trunk/Source/WebKit/chromium/WebKit.gyp (103410 => 103411)


--- trunk/Source/WebKit/chromium/WebKit.gyp	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebKit/chromium/WebKit.gyp	2011-12-21 17:20:43 UTC (rev 103411)
@@ -917,10 +917,10 @@
                 'script_name': 'scripts/generate_devtools_extension_api.py',
                 'inputs': [
                     '<@(_script_name)',
-                    '<@(webinspector_extension_api_files)',
+                    '<@(devtools_extension_api_files)',
                 ],
                 'outputs': ['<(PRODUCT_DIR)/resources/inspector/devtools_extension_api.js'],
-                'action': ['python', '<@(_script_name)', '<@(_outputs)', '<@(webinspector_extension_api_files)'],
+                'action': ['python', '<@(_script_name)', '<@(_outputs)', '<@(devtools_extension_api_files)'],
             }],
         },
         {
@@ -999,7 +999,7 @@
                     '<@(_workers_files)',
                     '<@(webinspector_image_files)',
                     '<@(devtools_image_files)',
-                    '<@(webinspector_extension_api_files)',
+                    '<@(devtools_extension_api_files)',
                 ],
                 'search_path': [
                     '../../WebCore/inspector/front-end',
@@ -1012,7 +1012,7 @@
                 'action': ['python', '<@(_script_name)', '<@(_inspector_html)',
                                      '--devtools-files', '<@(devtools_files)',
                                      '--workers-files', '<@(_workers_files)',
-                                     '--extension-api-files', '<@(webinspector_extension_api_files)',
+                                     '--extension-api-files', '<@(devtools_extension_api_files)',
                                      '--search-path', '<@(_search_path)',
                                      '--js-search-path', '<@(_js_search_path)',
                                      '--output', '<@(_outputs)'],

Modified: trunk/Source/WebKit/chromium/WebKit.gypi (103410 => 103411)


--- trunk/Source/WebKit/chromium/WebKit.gypi	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebKit/chromium/WebKit.gypi	2011-12-21 17:20:43 UTC (rev 103411)
@@ -34,11 +34,16 @@
         # for copying them to resource dir, and for generating 'devtools.html' file.
         'devtools_js_files': [
             'src/js/DevTools.js',
+            'src/js/DevToolsExtensionAPI.js',
             'src/js/Tests.js',
         ],
         'devtools_css_files': [
             'src/js/devTools.css',
         ],
+        'devtools_extension_api_files': [
+            '../../WebCore/inspector/front-end/ExtensionAPI.js',
+            'src/js/DevToolsExtensionAPI.js'
+        ],
         'devtools_image_files': [
             'src/js/Images/segmentChromium.png',
             'src/js/Images/segmentHoverChromium.png',

Modified: trunk/Source/WebKit/chromium/scripts/concatenate_js_files.py (103410 => 103411)


--- trunk/Source/WebKit/chromium/scripts/concatenate_js_files.py	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebKit/chromium/scripts/concatenate_js_files.py	2011-12-21 17:20:43 UTC (rev 103411)
@@ -87,6 +87,7 @@
     with open(input_order_file_name, 'r') as order_html:
         extractor = OrderedJSFilesExtractor(order_html.read())
     extractor.ordered_js_files.append('DevTools.js')
+    extractor.ordered_js_files.append('DevToolsExtensionAPI.js')
     extractor.ordered_js_files.append('Tests.js')
 
     expander = PathExpander(argv[2:])

Modified: trunk/Source/WebKit/chromium/scripts/generate_devtools_extension_api.py (103410 => 103411)


--- trunk/Source/WebKit/chromium/scripts/generate_devtools_extension_api.py	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebKit/chromium/scripts/generate_devtools_extension_api.py	2011-12-21 17:20:43 UTC (rev 103411)
@@ -39,17 +39,9 @@
         input = open(input_name, 'r')
         output.write(input.read())
     output.write("""
-        injectedExtensionAPI("remote-" + top.frames.length);
-
-        chrome = window.chrome || {};
-        chrome.experimental = chrome.experimental || {};
-        chrome.experimental.devtools = chrome.experimental.devtools || {};
-
-        var properties = Object.getOwnPropertyNames(webInspector);
-        for (var i = 0; i < properties.length; ++i) {
-            var descriptor = Object.getOwnPropertyDescriptor(webInspector, properties[i]);
-            Object.defineProperty(chrome.experimental.devtools, properties[i], descriptor);
-        }
+        var tabId;
+        var extensionInfo = {};
+        platformExtensionAPI(injectedExtensionAPI("remote-" + top.frames.length));
     })();""")
 
 

Modified: trunk/Source/WebKit/chromium/src/js/DevTools.js (103410 => 103411)


--- trunk/Source/WebKit/chromium/src/js/DevTools.js	2011-12-21 17:03:15 UTC (rev 103410)
+++ trunk/Source/WebKit/chromium/src/js/DevTools.js	2011-12-21 17:20:43 UTC (rev 103411)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2010 Google Inc. All rights reserved.
+ * Copyright (C) 2011 Google Inc. All rights reserved.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions are
@@ -42,29 +42,13 @@
     Preferences.exposeWorkersInspection = true;
 })();}
 
-WebInspector.platformExtensionAPI = function(tabId)
+function buildPlatformExtensionAPI(extensionInfo)
 {
-    function getTabId()
-    {
-        return tabId;
-    }
-    webInspector.inspectedWindow.__proto__.__defineGetter__("tabId", getTabId);
-    chrome = window.chrome || {};
-    chrome.experimental = chrome.experimental || {};
-    chrome.experimental.devtools = chrome.experimental.devtools || {};
-
-    var properties = Object.getOwnPropertyNames(webInspector);
-    for (var i = 0; i < properties.length; ++i) {
-        var descriptor = Object.getOwnPropertyDescriptor(webInspector, properties[i]);
-        Object.defineProperty(chrome.experimental.devtools, properties[i], descriptor);
-    }
+    return "var extensionInfo = " + JSON.stringify(extensionInfo) + ";" +
+       "var tabId = " + WebInspector._inspectedTabId + ";" +
+       platformExtensionAPI.toString();
 }
 
-WebInspector.buildPlatformExtensionAPI = function()
-{
-    return "(" + WebInspector.platformExtensionAPI + ")(" + WebInspector._inspectedTabId + ");";
-}
-
 WebInspector.setInspectedTabId = function(tabId)
 {
     WebInspector._inspectedTabId = tabId;

Added: trunk/Source/WebKit/chromium/src/js/DevToolsExtensionAPI.js (0 => 103411)


--- trunk/Source/WebKit/chromium/src/js/DevToolsExtensionAPI.js	                        (rev 0)
+++ trunk/Source/WebKit/chromium/src/js/DevToolsExtensionAPI.js	2011-12-21 17:20:43 UTC (rev 103411)
@@ -0,0 +1,65 @@
+/*
+ * Copyright (C) 2011 Google Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ *     * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following disclaimer
+ * in the documentation and/or other materials provided with the
+ * distribution.
+ *     * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived from
+ * this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+function platformExtensionAPI(coreAPI)
+{
+    function getTabId()
+    {
+        return tabId;
+    }
+    chrome = window.chrome || {};
+    // Override chrome.devtools as a workaround for a error-throwing getter being exposed
+    // in extension pages loaded into a non-extension process (only happens for remote client
+    // extensions)
+    var devtools_descriptor = Object.getOwnPropertyDescriptor(chrome, "devtools");
+    if (!devtools_descriptor || devtools_descriptor.get)
+        Object.defineProperty(chrome, "devtools", { value: {}, enumerable: true });
+    // Only expose tabId on chrome.devtools.inspectedWindow, not webInspector.inspectedWindow.
+    chrome.devtools.inspectedWindow = {};
+    chrome.devtools.inspectedWindow.__defineGetter__("tabId", getTabId);
+    chrome.devtools.inspectedWindow.__proto__ = coreAPI.inspectedWindow;
+    chrome.devtools.network = coreAPI.network;
+    chrome.devtools.panels = coreAPI.panels;
+
+    // default to expose experimental APIs for now.
+    if (extensionInfo.exposeExperimentalAPIs !== false) {
+        chrome.experimental = chrome.experimental || {};
+        chrome.experimental.devtools = chrome.experimental.devtools || {};
+
+        var properties = Object.getOwnPropertyNames(coreAPI);
+        for (var i = 0; i < properties.length; ++i) {
+            var descriptor = Object.getOwnPropertyDescriptor(coreAPI, properties[i]);
+            Object.defineProperty(chrome.experimental.devtools, properties[i], descriptor);
+        }
+        chrome.experimental.devtools.inspectedWindow = chrome.devtools.inspectedWindow;
+    }
+    if (extensionInfo.exposeWebInspectorNamespace)
+        window.webInspector = coreAPI;
+}
Property changes on: trunk/Source/WebKit/chromium/src/js/DevToolsExtensionAPI.js
___________________________________________________________________

Added: svn:eol-style

_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to