mirror of
https://gitlab.winehq.org/wine/wine-gecko.git
synced 2024-09-13 09:24:08 -07:00
92 lines
3.2 KiB
JavaScript
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]);
|