mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-08 19:04:45 +00:00
Bug 1017420 - Add support for certified apps to get the list of apps matching an activity request r=sicking
This commit is contained in:
parent
d02f773020
commit
e090f17324
@ -11,6 +11,10 @@ const Ci = Components.interfaces;
|
||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||
Cu.import("resource://gre/modules/Services.jsm");
|
||||
Cu.import("resource://gre/modules/IndexedDBHelper.jsm");
|
||||
Cu.import("resource://gre/modules/AppsUtils.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "DOMApplicationRegistry",
|
||||
"resource://gre/modules/Webapps.jsm");
|
||||
|
||||
XPCOMUtils.defineLazyModuleGetter(this, "ActivitiesServiceFilter",
|
||||
"resource://gre/modules/ActivitiesServiceFilter.jsm");
|
||||
@ -276,9 +280,43 @@ let Activities = {
|
||||
}
|
||||
};
|
||||
|
||||
let glue = Cc["@mozilla.org/dom/activities/ui-glue;1"]
|
||||
.createInstance(Ci.nsIActivityUIGlue);
|
||||
glue.chooseActivity(aMsg.options, aResults.options, getActivityChoice);
|
||||
let caller = Activities.callers[aMsg.id];
|
||||
if (aMsg.getFilterResults === true &&
|
||||
caller.mm.assertAppHasStatus(Ci.nsIPrincipal.APP_STATUS_CERTIFIED)) {
|
||||
// Certified apps can ask to just get the picker data.
|
||||
|
||||
// We want to return the manifest url, icon url and app name.
|
||||
// The app name needs to be picked up from the localized manifest.
|
||||
let reg = DOMApplicationRegistry;
|
||||
let ids = aResults.options.map((aItem) => {
|
||||
return { id: reg._appIdForManifestURL(aItem.manifest) }
|
||||
});
|
||||
|
||||
reg._readManifests(ids).then((aManifests) => {
|
||||
let results = [];
|
||||
aManifests.forEach((aManifest, i) => {
|
||||
let manifestURL = aResults.options[i].manifest;
|
||||
let helper = new ManifestHelper(aManifest.manifest, manifestURL);
|
||||
results.push({
|
||||
manifestURL: manifestURL,
|
||||
iconURL: aResults.options[i].icon,
|
||||
appName: helper.name
|
||||
});
|
||||
});
|
||||
|
||||
// Now fire success with the array of choices.
|
||||
caller.mm.sendAsyncMessage("Activity:FireSuccess",
|
||||
{
|
||||
"id": aMsg.id,
|
||||
"result": results
|
||||
});
|
||||
delete Activities.callers[aMsg.id];
|
||||
});
|
||||
} else {
|
||||
let glue = Cc["@mozilla.org/dom/activities/ui-glue;1"]
|
||||
.createInstance(Ci.nsIActivityUIGlue);
|
||||
glue.chooseActivity(aMsg.options, aResults.options, getActivityChoice);
|
||||
}
|
||||
};
|
||||
|
||||
let errorCb = function errorCb(aError) {
|
||||
|
@ -52,16 +52,28 @@ ActivityProxy.prototype = {
|
||||
appId != Ci.nsIScriptSecurityManager.UNKNOWN_APP_ID)
|
||||
? DOMApplicationRegistry.getManifestURLByLocalId(appId)
|
||||
: null;
|
||||
cpmm.sendAsyncMessage("Activity:Start", { id: this.id,
|
||||
options: {
|
||||
name: aOptions.name,
|
||||
data: aOptions.data
|
||||
},
|
||||
manifestURL: manifestURL,
|
||||
pageURL: aWindow.document.location.href });
|
||||
|
||||
// Only let certified apps enumerate providers for this filter.
|
||||
if (aOptions.getFilterResults === true &&
|
||||
principal.appStatus != Ci.nsIPrincipal.APP_STATUS_CERTIFIED) {
|
||||
Services.DOMRequest.fireError(this.activity, "SecurityError");
|
||||
Services.obs.notifyObservers(null, "Activity:Error", null);
|
||||
return;
|
||||
}
|
||||
|
||||
cpmm.addMessageListener("Activity:FireSuccess", this);
|
||||
cpmm.addMessageListener("Activity:FireError", this);
|
||||
|
||||
cpmm.sendAsyncMessage("Activity:Start",
|
||||
{
|
||||
id: this.id,
|
||||
options: {
|
||||
name: aOptions.name,
|
||||
data: aOptions.data
|
||||
},
|
||||
getFilterResults: aOptions.getFilterResults,
|
||||
manifestURL: manifestURL,
|
||||
pageURL: aWindow.document.location.href });
|
||||
},
|
||||
|
||||
receiveMessage: function actProxy_receiveMessage(aMessage) {
|
||||
|
@ -7,6 +7,7 @@
|
||||
dictionary ActivityOptions {
|
||||
DOMString name = "";
|
||||
any data = null;
|
||||
boolean getFilterResults = false;
|
||||
};
|
||||
|
||||
[Pref="dom.sysmsg.enabled",
|
||||
|
Loading…
Reference in New Issue
Block a user