mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-13 18:27:35 +00:00
163 lines
4.5 KiB
JavaScript
163 lines
4.5 KiB
JavaScript
/* 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 { interfaces: Ci, utils: Cu, classes: Cc } = Components;
|
|
|
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
|
Cu.import("resource://gre/modules/ContentRequestHelper.jsm");
|
|
Cu.import("resource://gre/modules/MobileIdentityCommon.jsm");
|
|
Cu.import("resource://gre/modules/MobileIdentityUIGlueCommon.jsm");
|
|
Cu.import("resource://gre/modules/Promise.jsm");
|
|
|
|
XPCOMUtils.defineLazyServiceGetter(this, "uuidgen",
|
|
"@mozilla.org/uuid-generator;1",
|
|
"nsIUUIDGenerator");
|
|
|
|
XPCOMUtils.defineLazyModuleGetter(this, "SystemAppProxy",
|
|
"resource://gre/modules/SystemAppProxy.jsm");
|
|
|
|
const CHROME_EVENT = "mozMobileIdChromeEvent";
|
|
const CONTENT_EVENT = "mozMobileIdContentEvent";
|
|
const UNSOLICITED_CONTENT_EVENT = "mozMobileIdUnsolContentEvent";
|
|
|
|
function MobileIdentityUIGlue() {
|
|
SystemAppProxy.addEventListener(UNSOLICITED_CONTENT_EVENT, this);
|
|
}
|
|
|
|
MobileIdentityUIGlue.prototype = {
|
|
|
|
__proto__: ContentRequestHelper.prototype,
|
|
|
|
_sendChromeEvent: function(aEventName, aData) {
|
|
SystemAppProxy._sendCustomEvent(CHROME_EVENT, {
|
|
eventName: aEventName,
|
|
id: uuidgen.generateUUID().toString(),
|
|
data: aData
|
|
});
|
|
},
|
|
|
|
_oncancel: null,
|
|
|
|
get oncancel() {
|
|
return this._oncancel;
|
|
},
|
|
|
|
set oncancel(aCallback) {
|
|
this._oncancel = aCallback;
|
|
},
|
|
|
|
_onresendcode: null,
|
|
|
|
get onresendcode() {
|
|
return this._onresendcode;
|
|
},
|
|
|
|
set onresendcode(aCallback) {
|
|
this._onresendcode = aCallback;
|
|
},
|
|
|
|
startFlow: function(aManifestURL, aIccInfo) {
|
|
let phoneNumberInfo;
|
|
if (aIccInfo) {
|
|
phoneNumberInfo = [];
|
|
for (var i = 0; i < aIccInfo.length; i++) {
|
|
let iccInfo = aIccInfo[i];
|
|
phoneNumberInfo.push({
|
|
primary: iccInfo.primary,
|
|
msisdn: iccInfo.msisdn,
|
|
operator: iccInfo.operator,
|
|
external: iccInfo.external,
|
|
serviceId: iccInfo.serviceId,
|
|
mcc: iccInfo.mcc
|
|
});
|
|
}
|
|
}
|
|
|
|
return this.contentRequest(CONTENT_EVENT,
|
|
CHROME_EVENT,
|
|
"onpermissionrequest",
|
|
{ phoneNumberInfo: phoneNumberInfo || [],
|
|
manifestURL: aManifestURL })
|
|
.then(
|
|
(result) => {
|
|
if (!result || !result.phoneNumber && !result.serviceId) {
|
|
return Promise.reject(ERROR_INVALID_PROMPT_RESULT);
|
|
}
|
|
|
|
let promptResult = new MobileIdentityUIGluePromptResult(
|
|
result.phoneNumber || null,
|
|
result.prefix || null,
|
|
result.mcc || null,
|
|
result.serviceId || null
|
|
);
|
|
return promptResult;
|
|
}
|
|
);
|
|
},
|
|
|
|
verificationCodePrompt: function(aRetriesLeft, aTimeout, aTimeLeft) {
|
|
return this.contentRequest(CONTENT_EVENT,
|
|
CHROME_EVENT,
|
|
"onverificationcode",
|
|
{ retriesLeft: aRetriesLeft,
|
|
verificationTimeout: aTimeout,
|
|
verificationTimeoutLeft: aTimeLeft })
|
|
.then(
|
|
(result) => {
|
|
if (!result || !result.verificationCode) {
|
|
return Promise.reject(ERROR_INVALID_VERIFICATION_CODE);
|
|
}
|
|
|
|
return result.verificationCode;
|
|
}
|
|
);
|
|
},
|
|
|
|
error: function(aError) {
|
|
log.error("UI error " + aError);
|
|
this._sendChromeEvent("onerror", {
|
|
error: aError
|
|
});
|
|
},
|
|
|
|
verify: function() {
|
|
this._sendChromeEvent("verify");
|
|
},
|
|
|
|
verified: function(aVerifiedPhoneNumber) {
|
|
this._sendChromeEvent("onverified", {
|
|
verifiedPhoneNumber: aVerifiedPhoneNumber
|
|
});
|
|
},
|
|
|
|
handleEvent: function(aEvent) {
|
|
let msg = aEvent.detail;
|
|
if (!msg) {
|
|
log.warning("Got invalid event");
|
|
return;
|
|
}
|
|
log.debug("Got content event ${}", msg);
|
|
|
|
switch(msg.eventName) {
|
|
case 'cancel':
|
|
this.oncancel();
|
|
break;
|
|
case 'resendcode':
|
|
this.onresendcode();
|
|
break;
|
|
default:
|
|
log.warning("Invalid event name");
|
|
break;
|
|
}
|
|
},
|
|
|
|
classID: Components.ID("{83dbe26a-81f3-4a75-9541-3d0b7ca496b5}"),
|
|
|
|
QueryInterface: XPCOMUtils.generateQI([Ci.nsIMobileIdentityUIGlue])
|
|
};
|
|
|
|
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([MobileIdentityUIGlue]);
|