Bug 1287626,1288279 - Make IDs unique across processes draft
authorRob Wu <rob@robwu.nl>
Wed, 10 Aug 2016 16:23:56 -0700
changeset 399731 6d6680c931ec7bd3589979974fb5e5ac0c36e664
parent 399728 fb4247cf5198c67f9d10b93810ffcbc281f3a333
child 528043 20c262dafd5191844e3440f433dc564fa36c5a39
push id25964
push userbmo:rob@robwu.nl
push dateThu, 11 Aug 2016 23:02:50 +0000
bugs1287626, 1288279
milestone51.0a1
Bug 1287626,1288279 - Make IDs unique across processes MozReview-Commit-ID: 78xgt8wqbng
toolkit/components/extensions/ExtensionUtils.jsm
toolkit/components/extensions/MessageChannel.jsm
--- a/toolkit/components/extensions/ExtensionUtils.jsm
+++ b/toolkit/components/extensions/ExtensionUtils.jsm
@@ -144,17 +144,17 @@ class SpreadArgs extends Array {
 
 let gContextId = 0;
 
 class BaseContext {
   constructor(extensionId) {
     this.onClose = new Set();
     this.checkedLastError = false;
     this._lastError = null;
-    this.contextId = ++gContextId;
+    this.contextId = `${++gContextId}-${Services.appinfo.uniqueProcessID}`;
     this.unloaded = false;
     this.extensionId = extensionId;
     this.jsonSandbox = null;
     this.active = true;
   }
 
   get cloneScope() {
     throw new Error("Not implemented");
@@ -1269,18 +1269,17 @@ Messenger.prototype = {
       MessageChannel.addListener(this.messageManagers, "Extension:Message", listener);
       return () => {
         MessageChannel.removeListener(this.messageManagers, "Extension:Message", listener);
       };
     }).api();
   },
 
   connect(messageManager, name, recipient) {
-    // TODO(robwu): Use a process ID instead of the process type. bugzil.la/1287626
-    let portId = `${gNextPortId++}-${Services.appinfo.processType}`;
+    let portId = `${gNextPortId++}-${Services.appinfo.uniqueProcessID}`;
     let port = new Port(this.context, messageManager, name, portId, null);
     let msg = {name, portId};
     this._sendMessage(messageManager, "Extension:Connect", msg, recipient)
       .catch(e => port.disconnectByOtherEnd());
     return port.api();
   },
 
   onConnect(name) {
--- a/toolkit/components/extensions/MessageChannel.jsm
+++ b/toolkit/components/extensions/MessageChannel.jsm
@@ -492,17 +492,17 @@ this.MessageChannel = {
    *    contents for details.
    * @returns {Promise}
    */
   sendMessage(target, messageName, data, options = {}) {
     let sender = options.sender || {};
     let recipient = options.recipient || {};
     let responseType = options.responseType || this.RESPONSE_SINGLE;
 
-    let channelId = gChannelId++;
+    let channelId = `${gChannelId++}-${Services.appinfo.uniqueProcessID}`;
     let message = {messageName, channelId, sender, recipient, data, responseType};
 
     let deferred = PromiseUtils.defer();
     deferred.sender = recipient;
     deferred.messageManager = target;
 
     this._addPendingResponse(deferred);