Bug 1295082 - BaseContext.extensionId -> BaseContext.extension.id draft
authorRob Wu <rob@robwu.nl>
Tue, 16 Aug 2016 14:29:52 -0700
changeset 402851 5cd13b548e7f59a03a842d351db35bb21ed7ba4d
parent 402850 33ea5b2dcca6840058ee493a23db146bb8cb5881
child 402852 13aac7cebc1b0798039faaaf9e385a9c2dab2bb9
push id26766
push userbmo:rob@robwu.nl
push dateThu, 18 Aug 2016 20:59:39 +0000
bugs1295082
milestone51.0a1
Bug 1295082 - BaseContext.extensionId -> BaseContext.extension.id MozReview-Commit-ID: 2tFVUwjyJQu
toolkit/components/extensions/ExtensionContent.jsm
toolkit/components/extensions/ExtensionUtils.jsm
toolkit/components/extensions/ext-runtime.js
toolkit/components/extensions/test/mochitest/file_teardown_test.js
--- a/toolkit/components/extensions/ExtensionContent.jsm
+++ b/toolkit/components/extensions/ExtensionContent.jsm
@@ -70,23 +70,24 @@ function isWhenBeforeOrSame(when1, when2
 var api = context => {
   return {
     runtime: {
       connect: function(extensionId, connectInfo) {
         if (!connectInfo) {
           connectInfo = extensionId;
           extensionId = null;
         }
+        extensionId = extensionId || context.extension.id;
         let name = connectInfo && connectInfo.name || "";
-        let recipient = extensionId ? {extensionId} : {extensionId: context.extensionId};
+        let recipient = {extensionId};
         return context.messenger.connect(context.messageManager, name, recipient);
       },
 
       get id() {
-        return context.extensionId;
+        return context.extension.id;
       },
 
       get lastError() {
         return context.lastError;
       },
 
       getManifest: function() {
         return Cu.cloneInto(context.extension.manifest, context.cloneScope);
@@ -105,18 +106,19 @@ var api = context => {
         let extensionId, message, responseCallback;
         if (args.length == 1) {
           message = args[0];
         } else if (args.length == 2) {
           [message, responseCallback] = args;
         } else {
           [extensionId, message, options, responseCallback] = args;
         }
+        extensionId = extensionId || context.extension.id;
 
-        let recipient = extensionId ? {extensionId} : {extensionId: context.extensionId};
+        let recipient = {extensionId};
         return context.messenger.sendMessage(context.messageManager, message, recipient, responseCallback);
       },
     },
 
     extension: {
       getURL: function(url) {
         return context.extension.baseURI.resolve(url);
       },
@@ -331,31 +333,31 @@ class ExtensionContext extends BaseConte
 
     let prin;
     let contentPrincipal = contentWindow.document.nodePrincipal;
     let ssm = Services.scriptSecurityManager;
 
     // copy origin attributes from the content window origin attributes to
     // preserve the user context id. overwrite the addonId.
     let attrs = contentPrincipal.originAttributes;
-    attrs.addonId = this.extensionId;
+    attrs.addonId = this.extension.id;
     let extensionPrincipal = ssm.createCodebasePrincipal(this.extension.baseURI, attrs);
     Object.defineProperty(this, "principal",
                           {value: extensionPrincipal, enumerable: true, configurable: true});
 
     if (ssm.isSystemPrincipal(contentPrincipal)) {
       // Make sure we don't hand out the system principal by accident.
       // also make sure that the null principal has the right origin attributes
       prin = ssm.createNullPrincipal(attrs);
     } else {
       prin = [contentPrincipal, extensionPrincipal];
     }
 
     if (isExtensionPage) {
-      if (ExtensionManagement.getAddonIdForWindow(this.contentWindow) != this.extensionId) {
+      if (ExtensionManagement.getAddonIdForWindow(this.contentWindow) != this.extension.id) {
         throw new Error("Invalid target window for this extension context");
       }
       // This is an iframe with content script API enabled and its principal should be the
       // contentWindow itself. (we create a sandbox with the contentWindow as principal and with X-rays disabled
       // because it enables us to create the APIs object in this sandbox object and then copying it
       // into the iframe's window, see Bug 1214658 for rationale)
       this.sandbox = Cu.Sandbox(contentWindow, {
         sandboxPrototype: contentWindow,
@@ -393,17 +395,17 @@ class ExtensionContext extends BaseConte
       },
     };
 
     let url = contentWindow.location.href;
     // The |sender| parameter is passed directly to the extension.
     let sender = {id: this.extension.uuid, frameId, url};
     // Properties in |filter| must match those in the |recipient|
     // parameter of sendMessage.
-    let filter = {extensionId: this.extensionId, frameId};
+    let filter = {extensionId: this.extension.id, frameId};
     this.messenger = new Messenger(this, [mm], sender, filter, delegate);
 
     this.chromeObj = Cu.createObjectIn(this.sandbox, {defineAs: "browser"});
 
     // Sandboxes don't get Xrays for some weird compatibility
     // reason. However, we waive here anyway in case that changes.
     Cu.waiveXrays(this.sandbox).chrome = this.chromeObj;
 
@@ -698,17 +700,17 @@ DocumentManager = {
       if (context) {
         context.close();
         extensions.delete(extensionId);
       }
     }
 
     // Clean up iframe extension page contexts on extension shutdown.
     for (let [winId, context] of this.extensionPageWindows) {
-      if (context.extensionId == extensionId) {
+      if (context.extension.id == extensionId) {
         context.close();
         this.extensionPageWindows.delete(winId);
       }
     }
 
     MessageChannel.abortResponses({extensionId});
 
     this.extensionCount--;
--- a/toolkit/components/extensions/ExtensionUtils.jsm
+++ b/toolkit/components/extensions/ExtensionUtils.jsm
@@ -164,17 +164,16 @@ let gContextId = 0;
 class BaseContext {
   constructor(extension) {
     this.onClose = new Set();
     this.checkedLastError = false;
     this._lastError = null;
     this.contextId = `${++gContextId}-${Services.appinfo.uniqueProcessID}`;
     this.unloaded = false;
     this.extension = extension;
-    this.extensionId = extension.id;
     this.jsonSandbox = null;
     this.active = true;
 
     this.docShell = null;
     this.contentWindow = null;
     this.innerWindowID = 0;
   }
 
@@ -440,17 +439,17 @@ class BaseContext {
       });
     }
   }
 
   unload() {
     this.unloaded = true;
 
     MessageChannel.abortResponses({
-      extensionId: this.extensionId,
+      extensionId: this.extension.id,
       contextId: this.contextId,
     });
 
     for (let obj of this.onClose) {
       obj.close();
     }
   }
 }
--- a/toolkit/components/extensions/ext-runtime.js
+++ b/toolkit/components/extensions/ext-runtime.js
@@ -60,32 +60,34 @@ extensions.registerSchemaAPI("runtime", 
           AddonManager.getAddonByID(extension.id, addon => {
             addon.reload();
           });
         }
       },
 
       connect: function(extensionId, connectInfo) {
         let name = connectInfo !== null && connectInfo.name || "";
-        let recipient = extensionId !== null ? {extensionId} : {extensionId: extension.id};
+        extensionId = extensionId || extension.id;
+        let recipient = {extensionId};
 
         return context.messenger.connect(Services.cpmm, name, recipient);
       },
 
       sendMessage: function(...args) {
         let options; // eslint-disable-line no-unused-vars
         let extensionId, message, responseCallback;
         if (args.length == 1) {
           message = args[0];
         } else if (args.length == 2) {
           [message, responseCallback] = args;
         } else {
           [extensionId, message, options, responseCallback] = args;
         }
-        let recipient = {extensionId: extensionId ? extensionId : extension.id};
+        extensionId = extensionId || extension.id;
+        let recipient = {extensionId};
 
         if (!GlobalManager.extensionMap.has(recipient.extensionId)) {
           return context.wrapPromise(Promise.reject({message: "Invalid extension ID"}),
                                      responseCallback);
         }
         return context.messenger.sendMessage(Services.cpmm, message, recipient, responseCallback);
       },
 
--- a/toolkit/components/extensions/test/mochitest/file_teardown_test.js
+++ b/toolkit/components/extensions/test/mochitest/file_teardown_test.js
@@ -1,17 +1,17 @@
 "use strict";
 
 /* globals addMessageListener */
 let {Management} = Components.utils.import("resource://gre/modules/Extension.jsm", {});
 let events = [];
 function record(type, extensionContext) {
   let eventType = type == "page-load" ? "load" : "unload";
   let url = extensionContext.uri.spec;
-  let {extensionId} = extensionContext;
+  let extensionId = extensionContext.extension.id;
   events.push({eventType, url, extensionId});
 }
 
 Management.on("page-load", record);
 Management.on("page-unload", record);
 addMessageListener("cleanup", () => {
   Management.off("page-load", record);
   Management.off("page-unload", record);