Bug 1367425 - Use DevToolsShim in webextensions codebase;r=mixedpuppy

Use DevToolsShim to access devtools APIs from webextensions code.
For webextensions tests using DevTools, tests are accessing DevToolsShim.gDevTools
which is fine for test purposes.

MozReview-Commit-ID: 66gFV98xvpf

--HG--
extra : rebase_source : 05734afae4368c5d7e4682b5fae1b8f3e4417220
This commit is contained in:
Julian Descottes 2017-05-26 15:48:15 +02:00
parent e5fa0b8e06
commit a7015fc300
7 changed files with 36 additions and 35 deletions

View File

@ -13,8 +13,8 @@
* and the implementation of the `devtools_page`. * and the implementation of the `devtools_page`.
*/ */
XPCOMUtils.defineLazyModuleGetter(this, "gDevTools", XPCOMUtils.defineLazyModuleGetter(this, "DevToolsShim",
"resource://devtools/client/framework/gDevTools.jsm"); "chrome://devtools-shim/content/DevToolsShim.jsm");
Cu.import("resource://gre/modules/ExtensionParent.jsm"); Cu.import("resource://gre/modules/ExtensionParent.jsm");
@ -142,7 +142,7 @@ class DevToolsPage extends HiddenExtensionPage {
extensions.emit("extension-browser-inserted", this.browser, { extensions.emit("extension-browser-inserted", this.browser, {
devtoolsToolboxInfo: { devtoolsToolboxInfo: {
inspectedWindowTabId: getTargetTabIdForToolbox(this.toolbox), inspectedWindowTabId: getTargetTabIdForToolbox(this.toolbox),
themeName: gDevTools.getTheme(), themeName: DevToolsShim.getTheme(),
}, },
}); });
@ -220,7 +220,7 @@ class DevToolsPageDefinition {
// If this is the first DevToolsPage, subscribe to the theme-changed event // If this is the first DevToolsPage, subscribe to the theme-changed event
if (this.devtoolsPageForTarget.size === 0) { if (this.devtoolsPageForTarget.size === 0) {
gDevTools.on("theme-changed", this.onThemeChanged); DevToolsShim.on("theme-changed", this.onThemeChanged);
} }
this.devtoolsPageForTarget.set(toolbox.target, devtoolsPage); this.devtoolsPageForTarget.set(toolbox.target, devtoolsPage);
@ -240,7 +240,7 @@ class DevToolsPageDefinition {
// If this was the last DevToolsPage, unsubscribe from the theme-changed event // If this was the last DevToolsPage, unsubscribe from the theme-changed event
if (this.devtoolsPageForTarget.size === 0) { if (this.devtoolsPageForTarget.size === 0) {
gDevTools.off("theme-changed", this.onThemeChanged); DevToolsShim.off("theme-changed", this.onThemeChanged);
} }
} }
} }
@ -272,7 +272,7 @@ initDevTools = function() {
/* eslint-disable mozilla/balanced-listeners */ /* eslint-disable mozilla/balanced-listeners */
// Create a devtools page context for a new opened toolbox, // Create a devtools page context for a new opened toolbox,
// based on the registered devtools_page definitions. // based on the registered devtools_page definitions.
gDevTools.on("toolbox-created", (evt, toolbox) => { DevToolsShim.on("toolbox-created", (evt, toolbox) => {
if (!toolbox.target.isLocalTab) { if (!toolbox.target.isLocalTab) {
// Only local tabs are currently supported (See Bug 1304378 for additional details // Only local tabs are currently supported (See Bug 1304378 for additional details
// related to remote targets support). // related to remote targets support).
@ -294,7 +294,7 @@ initDevTools = function() {
// Destroy a devtools page context for a destroyed toolbox, // Destroy a devtools page context for a destroyed toolbox,
// based on the registered devtools_page definitions. // based on the registered devtools_page definitions.
gDevTools.on("toolbox-destroy", (evt, target) => { DevToolsShim.on("toolbox-destroy", (evt, target) => {
if (!target.isLocalTab) { if (!target.isLocalTab) {
// Only local tabs are currently supported (See Bug 1304378 for additional details // Only local tabs are currently supported (See Bug 1304378 for additional details
// related to remote targets support). // related to remote targets support).

View File

@ -2,10 +2,8 @@
/* vim: set sts=2 sw=2 et tw=80: */ /* vim: set sts=2 sw=2 et tw=80: */
"use strict"; "use strict";
XPCOMUtils.defineLazyModuleGetter(this, "gDevTools", const {DevToolsShim} = Cu.import("chrome://devtools-shim/content/DevToolsShim.jsm", {});
"resource://devtools/client/framework/gDevTools.jsm"); const {gDevTools} = DevToolsShim;
XPCOMUtils.defineLazyModuleGetter(this, "devtools",
"resource://devtools/shared/Loader.jsm");
/** /**
* this test file ensures that: * this test file ensures that:
@ -91,7 +89,7 @@ add_task(async function test_devtools_inspectedWindow_tabId() {
let backgroundPageCurrentTabId = await extension.awaitMessage("current-tab-id"); let backgroundPageCurrentTabId = await extension.awaitMessage("current-tab-id");
let target = devtools.TargetFactory.forTab(tab); let target = gDevTools.getTargetForTab(tab);
await gDevTools.showToolbox(target, "webconsole"); await gDevTools.showToolbox(target, "webconsole");
info("developer toolbox opened"); info("developer toolbox opened");
@ -159,7 +157,7 @@ add_task(async function test_devtools_inspectedWindow_eval() {
await extension.startup(); await extension.startup();
let target = devtools.TargetFactory.forTab(tab); let target = gDevTools.getTargetForTab(tab);
await gDevTools.showToolbox(target, "webconsole"); await gDevTools.showToolbox(target, "webconsole");
info("developer toolbox opened"); info("developer toolbox opened");

View File

@ -6,10 +6,8 @@
// on debug test slave, it takes about 50s to run the test. // on debug test slave, it takes about 50s to run the test.
requestLongerTimeout(4); requestLongerTimeout(4);
XPCOMUtils.defineLazyModuleGetter(this, "gDevTools", const {DevToolsShim} = Cu.import("chrome://devtools-shim/content/DevToolsShim.jsm", {});
"resource://devtools/client/framework/gDevTools.jsm"); const {gDevTools} = DevToolsShim;
XPCOMUtils.defineLazyModuleGetter(this, "devtools",
"resource://devtools/shared/Loader.jsm");
// Small helper which provides the common steps to the following reload test cases. // Small helper which provides the common steps to the following reload test cases.
async function runReloadTestCase({urlParams, background, devtoolsPage, testCase}) { async function runReloadTestCase({urlParams, background, devtoolsPage, testCase}) {
@ -39,7 +37,7 @@ async function runReloadTestCase({urlParams, background, devtoolsPage, testCase}
await extension.startup(); await extension.startup();
let target = devtools.TargetFactory.forTab(tab); let target = gDevTools.getTargetForTab(tab);
await gDevTools.showToolbox(target, "webconsole"); await gDevTools.showToolbox(target, "webconsole");
info("developer toolbox opened"); info("developer toolbox opened");

View File

@ -2,10 +2,8 @@
/* vim: set sts=2 sw=2 et tw=80: */ /* vim: set sts=2 sw=2 et tw=80: */
"use strict"; "use strict";
XPCOMUtils.defineLazyModuleGetter(this, "devtools", const {DevToolsShim} = Cu.import("chrome://devtools-shim/content/DevToolsShim.jsm", {});
"resource://devtools/shared/Loader.jsm"); const {gDevTools} = DevToolsShim;
XPCOMUtils.defineLazyModuleGetter(this, "gDevTools",
"resource://devtools/client/framework/gDevTools.jsm");
add_task(async function test_devtools_network_on_navigated() { add_task(async function test_devtools_network_on_navigated() {
let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "http://mochi.test:8888/"); let tab = await BrowserTestUtils.openNewForegroundTab(gBrowser, "http://mochi.test:8888/");
@ -65,7 +63,7 @@ add_task(async function test_devtools_network_on_navigated() {
await extension.startup(); await extension.startup();
await extension.awaitMessage("ready"); await extension.awaitMessage("ready");
let target = devtools.TargetFactory.forTab(tab); let target = gDevTools.getTargetForTab(tab);
await gDevTools.showToolbox(target, "webconsole"); await gDevTools.showToolbox(target, "webconsole");
info("Developer toolbox opened."); info("Developer toolbox opened.");

View File

@ -2,10 +2,8 @@
/* vim: set sts=2 sw=2 et tw=80: */ /* vim: set sts=2 sw=2 et tw=80: */
"use strict"; "use strict";
XPCOMUtils.defineLazyModuleGetter(this, "gDevTools", const {DevToolsShim} = Cu.import("chrome://devtools-shim/content/DevToolsShim.jsm", {});
"resource://devtools/client/framework/gDevTools.jsm"); const {gDevTools} = DevToolsShim;
XPCOMUtils.defineLazyModuleGetter(this, "devtools",
"resource://devtools/shared/Loader.jsm");
/** /**
* This test file ensures that: * This test file ensures that:
@ -67,7 +65,7 @@ add_task(async function test_devtools_page_runtime_api_messaging() {
await extension.startup(); await extension.startup();
let target = devtools.TargetFactory.forTab(tab); let target = gDevTools.getTargetForTab(tab);
await gDevTools.showToolbox(target, "webconsole"); await gDevTools.showToolbox(target, "webconsole");
info("developer toolbox opened"); info("developer toolbox opened");

View File

@ -2,13 +2,12 @@
/* vim: set sts=2 sw=2 et tw=80: */ /* vim: set sts=2 sw=2 et tw=80: */
"use strict"; "use strict";
XPCOMUtils.defineLazyModuleGetter(this, "devtools",
"resource://devtools/shared/Loader.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "gDevTools",
"resource://devtools/client/framework/gDevTools.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Preferences", XPCOMUtils.defineLazyModuleGetter(this, "Preferences",
"resource://gre/modules/Preferences.jsm"); "resource://gre/modules/Preferences.jsm");
const {DevToolsShim} = Cu.import("chrome://devtools-shim/content/DevToolsShim.jsm", {});
const {gDevTools} = DevToolsShim;
const DEVTOOLS_THEME_PREF = "devtools.theme"; const DEVTOOLS_THEME_PREF = "devtools.theme";
/** /**
@ -76,7 +75,7 @@ add_task(async function test_theme_name_no_panel() {
await extension.startup(); await extension.startup();
let target = devtools.TargetFactory.forTab(tab); let target = gDevTools.getTargetForTab(tab);
await gDevTools.showToolbox(target, "webconsole"); await gDevTools.showToolbox(target, "webconsole");
info("developer toolbox opened"); info("developer toolbox opened");
@ -195,7 +194,7 @@ add_task(async function test_devtools_page_panels_create() {
await extension.startup(); await extension.startup();
let target = devtools.TargetFactory.forTab(tab); let target = gDevTools.getTargetForTab(tab);
const toolbox = await gDevTools.showToolbox(target, "webconsole"); const toolbox = await gDevTools.showToolbox(target, "webconsole");
info("developer toolbox opened"); info("developer toolbox opened");

View File

@ -214,7 +214,17 @@ let addonSdkMethods = [
"showToolbox", "showToolbox",
]; ];
for (let method of addonSdkMethods) { /**
* Compatibility layer for webextensions.
*
* Those methods are called only after a DevTools webextension was loaded in DevTools,
* therefore DevTools should always be available when they are called.
*/
let webExtensionsMethods = [
"getTheme",
];
for (let method of [...addonSdkMethods, ...webExtensionsMethods]) {
this.DevToolsShim[method] = function () { this.DevToolsShim[method] = function () {
if (!this.isInstalled()) { if (!this.isInstalled()) {
throw new Error(`Method ${method} unavailable if DevTools are not installed`); throw new Error(`Method ${method} unavailable if DevTools are not installed`);