2014-06-25 05:12:07 +00:00
|
|
|
/* -*- js-indent-level: 2; indent-tabs-mode: nil -*- */
|
2014-06-07 17:30:18 +00:00
|
|
|
/* vim: set ft=javascript ts=2 et sw=2 tw=80: */
|
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
|
|
|
|
"use strict"
|
|
|
|
|
|
|
|
const {classes: Cc, interfaces: Ci, utils: Cu} = Components;
|
|
|
|
|
|
|
|
Cu.import("resource://gre/modules/DOMRequestHelper.jsm");
|
|
|
|
Cu.import("resource://gre/modules/MobileIdentityCommon.jsm");
|
|
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
|
|
|
|
|
|
const MOBILEIDSERVICE_CID =
|
|
|
|
Components.ID("{6ec1806c-d61f-4724-9495-68c26d46dc53}");
|
|
|
|
|
|
|
|
const IPC_MSG_NAMES = ["MobileId:GetAssertion:Return:OK",
|
|
|
|
"MobileId:GetAssertion:Return:KO"];
|
|
|
|
|
|
|
|
XPCOMUtils.defineLazyServiceGetter(this, "cpmm",
|
|
|
|
"@mozilla.org/childprocessmessagemanager;1",
|
|
|
|
"nsIMessageSender");
|
|
|
|
|
|
|
|
function MobileIdentityService() {
|
|
|
|
}
|
|
|
|
|
|
|
|
MobileIdentityService.prototype = {
|
|
|
|
__proto__: DOMRequestIpcHelper.prototype,
|
|
|
|
|
|
|
|
// TODO: this should be handled by DOMRequestIpcHelper. Bug 1020582
|
|
|
|
_windows: {},
|
|
|
|
|
2014-06-26 23:18:21 +00:00
|
|
|
getMobileIdAssertion: function(aWindow, aOptions) {
|
2014-06-07 17:30:18 +00:00
|
|
|
log.debug("getMobileIdAssertion");
|
|
|
|
|
|
|
|
if (!this.init) {
|
|
|
|
this.initDOMRequestHelper(aWindow, IPC_MSG_NAMES);
|
|
|
|
this.init = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
return new aWindow.Promise(
|
|
|
|
(resolve, reject) => {
|
|
|
|
let promiseId = this.getPromiseResolverId({
|
|
|
|
resolve: resolve,
|
|
|
|
reject: reject
|
|
|
|
});
|
|
|
|
|
|
|
|
this._windows[promiseId] = aWindow;
|
|
|
|
|
|
|
|
cpmm.sendAsyncMessage("MobileId:GetAssertion", {
|
2014-06-26 23:18:21 +00:00
|
|
|
promiseId: promiseId,
|
|
|
|
options: aOptions
|
2014-06-07 17:30:18 +00:00
|
|
|
}, null, aWindow.document.nodePrincipal);
|
|
|
|
}
|
|
|
|
);
|
|
|
|
},
|
|
|
|
|
|
|
|
receiveMessage: function(aMessage) {
|
|
|
|
let name = aMessage.name;
|
|
|
|
let msg = aMessage.json;
|
|
|
|
|
|
|
|
log.debug("Received message " + name + ": " + JSON.stringify(msg));
|
|
|
|
|
|
|
|
let promiseId = msg.promiseId || msg.requestID;
|
|
|
|
let promise = this.takePromiseResolver(promiseId);
|
|
|
|
if (!promise) {
|
|
|
|
log.error("Promise not found");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
let _window = this._windows[promiseId];
|
|
|
|
delete this._windows[promiseId];
|
|
|
|
if (!_window) {
|
|
|
|
log.error("No window object found");
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
switch (name) {
|
|
|
|
case "MobileId:GetAssertion:Return:OK":
|
|
|
|
if (!msg.result) {
|
|
|
|
promise.reject(new _window.DOMError(ERROR_INTERNAL_UNEXPECTED));
|
|
|
|
}
|
|
|
|
|
|
|
|
// Return the assertion
|
|
|
|
promise.resolve(msg.result);
|
|
|
|
break;
|
|
|
|
case "MobileId:GetAssertion:Return:KO":
|
|
|
|
promise.reject(new _window.DOMError(msg.error || ERROR_UNKNOWN));
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
},
|
|
|
|
|
|
|
|
classID: MOBILEIDSERVICE_CID,
|
|
|
|
|
|
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIMobileIdentityService,
|
|
|
|
Ci.nsISupportsWeakReference,
|
|
|
|
Ci.nsIObserver]),
|
|
|
|
|
|
|
|
classInfo: XPCOMUtils.generateCI({
|
|
|
|
classID: MOBILEIDSERVICE_CID,
|
|
|
|
contractID: "@mozilla.org/mobileidentity-service;1",
|
|
|
|
interfaces: [Ci.nsIMobileIdentityService],
|
|
|
|
flags: Ci.nsIClassInfo.SINGLETON
|
|
|
|
})
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([MobileIdentityService]);
|