gecko-dev/b2g/components/InterAppCommUIGlue.js

92 lines
3.2 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 Cc = Components.classes;
const Ci = Components.interfaces;
const Cu = Components.utils;
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
Cu.import("resource://gre/modules/Services.jsm");
Cu.import("resource://gre/modules/Promise.jsm");
XPCOMUtils.defineLazyModuleGetter(this, "SystemAppProxy",
"resource://gre/modules/SystemAppProxy.jsm");
const DEBUG = false;
function debug(aMsg) {
dump("-- InterAppCommUIGlue: " + Date.now() + ": " + aMsg + "\n");
}
function InterAppCommUIGlue() {
// This matrix is to store the callerID (a random UUID) / deferral binding.
// An example of the object literal is shown below:
//
// {
// "callerID1" : deferred1,
// "callerID2" : deferred2
// }
this._deferreds = {};
// Listen to the result of selected apps from front-end.
SystemAppProxy.addEventListener ("mozIACContentEvent", function (aEvent) {
let detail = aEvent.detail;
if (detail.type != "inter-app-comm-permission") {
return;
}
if (DEBUG) {
debug("mozIACContentEvent: " + JSON.stringify(detail));
}
let callerID = detail.chromeEventID;
let deferred = this._deferreds[callerID];
if (!deferred) {
if (DEBUG) {
debug("Error! Cannot find the deferred for callerID: " + callerID);
}
return;
}
delete this._deferreds[callerID];
deferred.resolve({ callerID: callerID,
keyword: detail.keyword,
manifestURL: detail.manifestURL,
selectedApps: detail.peers });
}.bind(this));
}
InterAppCommUIGlue.prototype = {
selectApps: function(aCallerID, aPubAppManifestURL, aKeyword, aAppsToSelect) {
let deferred = Promise.defer();
this._deferreds[aCallerID] = deferred;
SystemAppProxy._sendCustomEvent("mozIACChromeEvent",
{ type: "inter-app-comm-permission",
chromeEventID: aCallerID,
manifestURL: aPubAppManifestURL,
keyword: aKeyword,
peers: aAppsToSelect });
// TODO Bug 897169 Simulate the return of the app-selected result by
// the prompt, which always allows the connection. This dummy codes
// will be removed when the UX/UI for the prompt is ready.
SystemAppProxy._sendCustomEvent("mozIACContentEvent",
{ type: "inter-app-comm-permission",
chromeEventID: aCallerID,
manifestURL: aPubAppManifestURL,
keyword: aKeyword,
peers: aAppsToSelect });
return deferred.promise;
},
classID: Components.ID("{879ee66c-e246-11e3-9910-74d02b97e723}"),
QueryInterface: XPCOMUtils.generateQI([Ci.nsIInterAppCommUIGlue])
};
this.NSGetFactory = XPCOMUtils.generateNSGetFactory([InterAppCommUIGlue]);