Bug 1287626,1288279 - Make IDs unique across processes
MozReview-Commit-ID: 78xgt8wqbng
--- 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);