mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-09 11:25:00 +00:00
Bug 791911 - Listen for our child message managers dying and remove them from our list of managers to 'broadcast' to. r=gwagner
--HG-- extra : rebase_source : 407eb90d797c410db1a80a59ca2e52b42b68af87
This commit is contained in:
parent
068ee6378f
commit
a2b7792d24
@ -112,8 +112,6 @@ DOMWifiManager.prototype = {
|
|||||||
this._onConnectionInfoUpdate = null;
|
this._onConnectionInfoUpdate = null;
|
||||||
this._onEnabled = null;
|
this._onEnabled = null;
|
||||||
this._onDisabled = null;
|
this._onDisabled = null;
|
||||||
|
|
||||||
this._mm.sendAsyncMessage("WifiManager:managerFinished");
|
|
||||||
},
|
},
|
||||||
|
|
||||||
_sendMessageForRequest: function(name, data, request) {
|
_sendMessageForRequest: function(name, data, request) {
|
||||||
|
@ -1385,7 +1385,7 @@ function WifiWorker() {
|
|||||||
"WifiManager:associate", "WifiManager:forget",
|
"WifiManager:associate", "WifiManager:forget",
|
||||||
"WifiManager:wps", "WifiManager:getState",
|
"WifiManager:wps", "WifiManager:getState",
|
||||||
"WifiManager:setPowerSavingMode",
|
"WifiManager:setPowerSavingMode",
|
||||||
"WifiManager:managerFinished"];
|
"child-process-shutdown"];
|
||||||
|
|
||||||
messages.forEach((function(msgName) {
|
messages.forEach((function(msgName) {
|
||||||
this._mm.addMessageListener(msgName, this);
|
this._mm.addMessageListener(msgName, this);
|
||||||
@ -1996,15 +1996,10 @@ WifiWorker.prototype = {
|
|||||||
|
|
||||||
_domManagers: [],
|
_domManagers: [],
|
||||||
_fireEvent: function(message, data) {
|
_fireEvent: function(message, data) {
|
||||||
// TODO (bug 791911): Managers don't correctly tell us when they're getting
|
this._domManagers.forEach(function(manager) {
|
||||||
// destroyed, so prune dead managers here.
|
// Note: We should never have a dead message manager here because we
|
||||||
this._domManagers = this._domManagers.filter(function(obj) {
|
// observe our child message managers shutting down, below.
|
||||||
try {
|
manager.sendAsyncMessage("WifiManager:" + message, data);
|
||||||
obj.manager.sendAsyncMessage("WifiManager:" + message, data);
|
|
||||||
return true;
|
|
||||||
} catch(e) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
|
|
||||||
@ -2014,12 +2009,24 @@ WifiWorker.prototype = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
receiveMessage: function MessageManager_receiveMessage(aMessage) {
|
receiveMessage: function MessageManager_receiveMessage(aMessage) {
|
||||||
if (!aMessage.target.assertPermission("wifi-manage")) {
|
let msg = aMessage.data || {};
|
||||||
|
msg.manager = aMessage.target;
|
||||||
|
|
||||||
|
// Note: By the time we receive child-process-shutdown, the child process
|
||||||
|
// has already forgotten its permissions so we do this before the
|
||||||
|
// permissions check.
|
||||||
|
if (aMessage.name === "child-process-shutdown") {
|
||||||
|
let i;
|
||||||
|
if ((i = this._domManagers.indexOf(msg.manager)) != -1) {
|
||||||
|
this._domManagers.splice(i, 1);
|
||||||
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
let msg = aMessage.json || {};
|
if (!aMessage.target.assertPermission("wifi-manage")) {
|
||||||
msg.manager = aMessage.target;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
switch (aMessage.name) {
|
switch (aMessage.name) {
|
||||||
case "WifiManager:getNetworks":
|
case "WifiManager:getNetworks":
|
||||||
@ -2041,39 +2048,18 @@ WifiWorker.prototype = {
|
|||||||
this.setPowerSavingMode(msg);
|
this.setPowerSavingMode(msg);
|
||||||
break;
|
break;
|
||||||
case "WifiManager:getState": {
|
case "WifiManager:getState": {
|
||||||
let net = this.currentNetwork ? netToDOM(this.currentNetwork) : null;
|
|
||||||
let i;
|
let i;
|
||||||
for (i = 0; i < this._domManagers.length; ++i) {
|
if ((i = this._domManagers.indexOf(msg.manager)) === -1) {
|
||||||
let obj = this._domManagers[i];
|
this._domManagers.push(msg.manager);
|
||||||
if (obj.manager === msg.manager) {
|
|
||||||
obj.count++;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (i === this._domManagers.length) {
|
|
||||||
this._domManagers.push({ manager: msg.manager, count: 1 });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let net = this.currentNetwork ? netToDOM(this.currentNetwork) : null;
|
||||||
return { network: net,
|
return { network: net,
|
||||||
connectionInfo: this._lastConnectionInfo,
|
connectionInfo: this._lastConnectionInfo,
|
||||||
enabled: WifiManager.enabled,
|
enabled: WifiManager.enabled,
|
||||||
status: translateState(WifiManager.state),
|
status: translateState(WifiManager.state),
|
||||||
macAddress: this.macAddress };
|
macAddress: this.macAddress };
|
||||||
}
|
}
|
||||||
case "WifiManager:managerFinished": {
|
|
||||||
for (let i = 0; i < this._domManagers.length; ++i) {
|
|
||||||
let obj = this._domManagers[i];
|
|
||||||
if (obj.manager === msg.manager) {
|
|
||||||
if (--obj.count === 0) {
|
|
||||||
this._domManagers.splice(i, 1);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user