Bug 917176 - 0002. DOM API implementation. r=mrbkap, r=briansmith

This commit is contained in:
Chuck Lee 2014-04-30 19:58:45 +08:00
parent 08dca0c901
commit 5ba363afb4
2 changed files with 70 additions and 0 deletions

View File

@ -95,6 +95,7 @@ DOMWifiManager.prototype = {
"WifiManager:setHttpProxy:Return:OK", "WifiManager:setHttpProxy:Return:NO",
"WifiManager:setStaticIpMode:Return:OK", "WifiManager:setStaticIpMode:Return:NO",
"WifiManager:importCert:Return:OK", "WifiManager:importCert:Return:NO",
"WifiManager:getImportedCerts:Return:OK", "WifiManager:getImportedCerts:Return:NO",
"WifiManager:wifiDown", "WifiManager:wifiUp",
"WifiManager:onconnecting", "WifiManager:onassociate",
"WifiManager:onconnect", "WifiManager:ondisconnect",
@ -175,6 +176,19 @@ DOMWifiManager.prototype = {
return info;
},
_convertWifiCertificateList: function(aList) {
let propList = {};
for (let k in aList) {
propList[k] = this._genReadonlyPropDesc(aList[k]);
}
let list = Cu.createObjectIn(this._window);
Object.defineProperties(list, propList);
Cu.makeObjectPropsNormal(list);
return list;
},
_sendMessageForRequest: function(name, data, request) {
let id = this.getRequestId(request);
this._mm.sendAsyncMessage(name, { data: data, rid: id, mid: this._id });
@ -266,6 +280,14 @@ DOMWifiManager.prototype = {
Services.DOMRequest.fireError(request, msg.data);
break;
case "WifiManager:getImportedCerts:Return:OK":
Services.DOMRequest.fireSuccess(request, this._convertWifiCertificateList(msg.data));
break;
case "WifiManager:getImportedCerts:Return:NO":
Services.DOMRequest.fireError(request, msg.data);
break;
case "WifiManager:wifiDown":
this._enabled = false;
this._currentNetwork = null;
@ -424,6 +446,12 @@ DOMWifiManager.prototype = {
return request;
},
getImportedCerts: function nsIDOMWifiManager_getImportedCerts() {
var request = this.createRequest();
this._sendMessageForRequest("WifiManager:getImportedCerts", null, request);
return request;
},
get enabled() {
return this._enabled;
},

View File

@ -1646,6 +1646,7 @@ function WifiWorker() {
"WifiManager:setHttpProxy",
"WifiManager:setStaticIpMode",
"WifiManager:importCert",
"WifiManager:getImportedCerts",
"child-process-shutdown"];
messages.forEach((function(msgName) {
@ -2601,6 +2602,9 @@ WifiWorker.prototype = {
case "WifiManager:importCert":
this.importCert(msg);
break;
case "WifiManager:getImportedCerts":
this.getImportedCerts(msg);
break;
case "WifiManager:getState": {
let i;
if ((i = this._domManagers.indexOf(msg.manager)) === -1) {
@ -3115,6 +3119,44 @@ WifiWorker.prototype = {
});
},
getImportedCerts: function getImportedCerts(msg) {
const message = "WifiManager:getImportedCerts:Return";
let self = this;
let certDB2 = Cc["@mozilla.org/security/x509certdb;1"]
.getService(Ci.nsIX509CertDB2);
if (!certDB2) {
self._sendMessage(message, false, "Failed to query NSS DB service", msg);
}
let certList = certDB2.getCerts();
if (!certList) {
self._sendMessage(message, false, "Failed to get certificate List", msg);
}
let certListEnum = certList.getEnumerator();
if (!certListEnum) {
self._sendMessage(message, false, "Failed to get certificate List enumerator", msg);
}
let importedCerts = {
ServerCert: [],
};
let UsageMapping = {
SERVERCERT: "ServerCert",
};
while (certListEnum.hasMoreElements()) {
let certInfo = certListEnum.getNext().QueryInterface(Ci.nsIX509Cert3);
let certNicknameInfo = /WIFI\_([A-Z]*)\_(.*)/.exec(certInfo.nickname);
if (!certNicknameInfo) {
continue;
}
importedCerts[UsageMapping[certNicknameInfo[1]]].push(certNicknameInfo[2]);
}
self._sendMessage(message, true, importedCerts, msg);
},
// This is a bit ugly, but works. In particular, this depends on the fact
// that RadioManager never actually tries to get the worker from us.
get worker() { throw "Not implemented"; },