Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(390)

Unified Diff: third_party/WebKit/Source/devtools/front_end/extensions/ExtensionAPI.js

Issue 2374573002: DevTools: remove extra indirections from how extension API is built (Closed)
Patch Set: pass null instead of -1 when tab is not defined Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/devtools/front_end/extensions/ExtensionAPI.js
diff --git a/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionAPI.js b/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionAPI.js
index 62e4fac1d923e5feb10027f73a862e6820f46072..44756521a0616dcad3f8e0cc7008babb4153dae5 100644
--- a/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionAPI.js
+++ b/third_party/WebKit/Source/devtools/front_end/extensions/ExtensionAPI.js
@@ -96,11 +96,14 @@ function defineCommonExtensionSymbols(apiPrivate)
}
/**
+ * @param {!ExtensionDescriptor} extensionInfo
+ * @param {string} inspectedTabId
+ * @param {string} themeName
* @param {number} injectedScriptId
- * @return {!Object}
+ * @param {function(!Object, !Object)} testHook
* @suppressGlobalPropertiesCheck
*/
-function injectedExtensionAPI(injectedScriptId)
+function injectedExtensionAPI(extensionInfo, inspectedTabId, themeName, testHook, injectedScriptId)
{
var apiPrivate = {};
@@ -801,6 +804,11 @@ ResourceImpl.prototype = {
}
}
+function getTabId()
+{
+ return inspectedTabId;
+}
+
var keyboardEventRequestQueue = [];
var forwardTimer = null;
@@ -942,81 +950,58 @@ function populateInterfaceClass(interfaze, implementation)
}
}
-// extensionServer is a closure variable defined by the glue below -- make sure we fail if it's not there.
-if (!extensionServer)
- extensionServer = new ExtensionServerClient();
-
-return new InspectorExtensionAPI();
-}
-
-/**
- * @suppress {checkVars, checkTypes}
- */
-function platformExtensionAPI(coreAPI)
-{
- function getTabId()
- {
- return tabId;
- }
- var 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;
- chrome.devtools.panels.themeName = themeName;
-
- // 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]);
+var extensionServer = new ExtensionServerClient();
+var coreAPI = new InspectorExtensionAPI();
+
+var 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;
+chrome.devtools.panels.themeName = themeName;
+
+// 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]);
+ if (descriptor)
Object.defineProperty(chrome.experimental.devtools, properties[i], descriptor);
- }
- chrome.experimental.devtools.inspectedWindow = chrome.devtools.inspectedWindow;
}
- if (extensionInfo.exposeWebInspectorNamespace)
- window.webInspector = coreAPI;
+ chrome.experimental.devtools.inspectedWindow = chrome.devtools.inspectedWindow;
}
-/**
- * @param {!ExtensionDescriptor} extensionInfo
- * @param {string} inspectedTabId
- * @param {string} themeName
- * @return {string}
- */
-function buildPlatformExtensionAPI(extensionInfo, inspectedTabId, themeName)
-{
- return "var extensionInfo = " + JSON.stringify(extensionInfo) + ";" +
- "var tabId = " + inspectedTabId + ";" +
- "var themeName = '" + themeName + "';" +
- platformExtensionAPI.toString();
+if (extensionInfo.exposeWebInspectorNamespace)
+ window.webInspector = coreAPI;
+testHook(extensionServer, coreAPI);
}
/**
* @param {!ExtensionDescriptor} extensionInfo
* @param {string} inspectedTabId
* @param {string} themeName
+ * @param {function(!Object, !Object)|undefined} testHook
* @return {string}
*/
-function buildExtensionAPIInjectedScript(extensionInfo, inspectedTabId, themeName)
+function buildExtensionAPIInjectedScript(extensionInfo, inspectedTabId, themeName, testHook)
{
+ var argumentsJSON = [extensionInfo, inspectedTabId || null, themeName].map(_ => JSON.stringify(_)).join(",");
+ if (!testHook)
+ testHook = () => {};
return "(function(injectedScriptId){ " +
- "var extensionServer;" +
defineCommonExtensionSymbols.toString() + ";" +
- injectedExtensionAPI.toString() + ";" +
- buildPlatformExtensionAPI(extensionInfo, inspectedTabId, themeName) + ";" +
- "platformExtensionAPI(injectedExtensionAPI(injectedScriptId));" +
- "return {};" +
+ "(" + injectedExtensionAPI.toString() + ")(" + argumentsJSON + "," + testHook + ", injectedScriptId);" +
"})";
}

Powered by Google App Engine
This is Rietveld 408576698