Bug 1351381 - Provide a console API object in experiments API sandbox. draft
authorLuca Greco <lgreco@mozilla.com>
Tue, 28 Mar 2017 09:51:31 -0700
changeset 552614 8302175fb12aff0135cc1f4fc55b15ab43db9eca
parent 552445 d4af7ec6cfcd9b81cd1f433a00b412de61e95b62
child 621869 ee81c897b5b048d82f7342fbfd19956959187c0d
push id51413
push userluca.greco@alcacoop.it
push dateTue, 28 Mar 2017 19:55:51 +0000
bugs1351381
milestone55.0a1
Bug 1351381 - Provide a console API object in experiments API sandbox. MozReview-Commit-ID: CNPgru9jVLO
toolkit/components/extensions/ExtensionAPI.jsm
toolkit/components/extensions/test/xpcshell/test_ext_experiments.js
--- 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);
               }
             }
           }
         }
       }
     `,