Bug 1351381 - Provide a console API object in experiments API sandbox.
MozReview-Commit-ID: CNPgru9jVLO
--- a/toolkit/components/extensions/ExtensionAPI.jsm
+++ b/toolkit/components/extensions/ExtensionAPI.jsm
@@ -9,16 +9,18 @@ this.EXPORTED_SYMBOLS = ["ExtensionAPI",
/* exported ExtensionAPIs */
const {classes: Cc, interfaces: Ci, utils: Cu, results: Cr} = Components;
Cu.import("resource://gre/modules/ExtensionManagement.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
+XPCOMUtils.defineLazyModuleGetter(this, "ConsoleAPI",
+ "resource://gre/modules/Console.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "EventEmitter",
"resource://devtools/shared/event-emitter.js");
XPCOMUtils.defineLazyModuleGetter(this, "Schemas",
"resource://gre/modules/Schemas.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "Task",
"resource://gre/modules/Task.jsm");
const global = this;
@@ -53,16 +55,21 @@ var ExtensionAPIs = {
wantXrays: false,
sandboxName: script,
addonId,
metadata: {addonID: addonId},
});
api.sandbox.ExtensionAPI = ExtensionAPI;
+ // Create a console getter which lazily provide a ConsoleAPI instance.
+ XPCOMUtils.defineLazyGetter(api.sandbox, "console", () => {
+ return new ConsoleAPI({prefix: addonId});
+ });
+
Services.scriptloader.loadSubScript(script, api.sandbox, "UTF-8");
api.loadPromise = Schemas.load(schema).then(() => {
let API = Cu.evalInSandbox("API", api.sandbox);
API.prototype.namespace = apiName;
return API;
});
--- a/toolkit/components/extensions/test/xpcshell/test_ext_experiments.js
+++ b/toolkit/components/extensions/test/xpcshell/test_ext_experiments.js
@@ -50,16 +50,17 @@ add_task(function* test_experiments_api(
Services.obs.notifyObservers(null, "webext-api-loaded", "");
class API extends ExtensionAPI {
getAPI(context) {
return {
meh: {
hello(text) {
+ console.log('meh.hello API called', text);
Services.obs.notifyObservers(null, "webext-api-hello", text);
}
}
}
}
}
`,