зеркало из https://github.com/mozilla/gecko-dev.git
Bug 849988 - Implement support for a removable property for preinstalled apps to define if the app can be uninstalled or not. r=ferjm
This commit is contained in:
Родитель
39d7e6b890
Коммит
0d2eaabdc2
|
@ -103,6 +103,7 @@ this.DOMApplicationRegistry = {
|
||||||
debug("getAppFromObserverMessage " + aMessage);
|
debug("getAppFromObserverMessage " + aMessage);
|
||||||
return AppsUtils.getAppFromObserverMessage(this.webapps. aMessage);
|
return AppsUtils.getAppFromObserverMessage(this.webapps. aMessage);
|
||||||
},
|
},
|
||||||
|
|
||||||
getCoreAppsBasePath: function getCoreAppsBasePath() {
|
getCoreAppsBasePath: function getCoreAppsBasePath() {
|
||||||
debug("getCoreAppsBasePath() not yet supported on child!");
|
debug("getCoreAppsBasePath() not yet supported on child!");
|
||||||
return null;
|
return null;
|
||||||
|
@ -114,13 +115,8 @@ this.DOMApplicationRegistry = {
|
||||||
},
|
},
|
||||||
|
|
||||||
getAppInfo: function getAppInfo(aAppId) {
|
getAppInfo: function getAppInfo(aAppId) {
|
||||||
if (!this.webapps[aAppId]) {
|
return AppsUtils.getAppInfo(this.webapps, aAppId);
|
||||||
debug("No webapp for " + aAppId);
|
}
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return { "basePath": this.webapps[aAppId].basePath + "/",
|
|
||||||
"isCoreApp": !this.webapps[aAppId].removable };
|
|
||||||
},
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DOMApplicationRegistry.init();
|
DOMApplicationRegistry.init();
|
||||||
|
|
|
@ -11,6 +11,7 @@ const Cr = Components.results;
|
||||||
|
|
||||||
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
Cu.import("resource://gre/modules/XPCOMUtils.jsm");
|
||||||
Cu.import("resource://gre/modules/Services.jsm");
|
Cu.import("resource://gre/modules/Services.jsm");
|
||||||
|
Cu.import("resource://gre/modules/FileUtils.jsm");
|
||||||
|
|
||||||
XPCOMUtils.defineLazyGetter(this, "NetUtil", function() {
|
XPCOMUtils.defineLazyGetter(this, "NetUtil", function() {
|
||||||
return Cc["@mozilla.org/network/util;1"]
|
return Cc["@mozilla.org/network/util;1"]
|
||||||
|
@ -176,6 +177,34 @@ this.AppsUtils = {
|
||||||
return null;
|
return null;
|
||||||
},
|
},
|
||||||
|
|
||||||
|
getCoreAppsBasePath: function getCoreAppsBasePath() {
|
||||||
|
debug("getCoreAppsBasePath()");
|
||||||
|
try {
|
||||||
|
return FileUtils.getDir("coreAppsDir", ["webapps"], false).path;
|
||||||
|
} catch(e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
getAppInfo: function getAppInfo(aApps, aAppId) {
|
||||||
|
if (!aApps[aAppId]) {
|
||||||
|
debug("No webapp for " + aAppId);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We can have 3rd party apps that are non-removable,
|
||||||
|
// so we can't use the 'removable' property for isCoreApp
|
||||||
|
// Instead, we check if the app is installed under /system/b2g
|
||||||
|
let isCoreApp = false;
|
||||||
|
let app = aApps[aAppId];
|
||||||
|
#ifdef MOZ_WIDGET_GONK
|
||||||
|
isCoreApp = app.basePath == this.getCoreAppsBasePath();
|
||||||
|
#endif
|
||||||
|
debug(app.name + " isCoreApp: " + isCoreApp);
|
||||||
|
return { "basePath": app.basePath + "/",
|
||||||
|
"isCoreApp": isCoreApp };
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* From https://developer.mozilla.org/en/OpenWebApps/The_Manifest
|
* From https://developer.mozilla.org/en/OpenWebApps/The_Manifest
|
||||||
* Only the name property is mandatory.
|
* Only the name property is mandatory.
|
||||||
|
|
|
@ -21,11 +21,11 @@ EXTRA_PP_COMPONENTS = \
|
||||||
|
|
||||||
EXTRA_PP_JS_MODULES += \
|
EXTRA_PP_JS_MODULES += \
|
||||||
Webapps.jsm \
|
Webapps.jsm \
|
||||||
|
AppsUtils.jsm \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
EXTRA_JS_MODULES += \
|
EXTRA_JS_MODULES += \
|
||||||
AppsServiceChild.jsm \
|
AppsServiceChild.jsm \
|
||||||
AppsUtils.jsm \
|
|
||||||
OfflineCacheInstaller.jsm \
|
OfflineCacheInstaller.jsm \
|
||||||
PermissionsInstaller.jsm \
|
PermissionsInstaller.jsm \
|
||||||
PermissionsTable.jsm \
|
PermissionsTable.jsm \
|
||||||
|
|
|
@ -283,7 +283,6 @@ this.DOMApplicationRegistry = {
|
||||||
}
|
}
|
||||||
|
|
||||||
app.origin = "app://" + aId;
|
app.origin = "app://" + aId;
|
||||||
app.removable = true;
|
|
||||||
|
|
||||||
// Extract the manifest.webapp file from application.zip.
|
// Extract the manifest.webapp file from application.zip.
|
||||||
let zipFile = baseDir.clone();
|
let zipFile = baseDir.clone();
|
||||||
|
@ -861,12 +860,7 @@ this.DOMApplicationRegistry = {
|
||||||
},
|
},
|
||||||
|
|
||||||
getAppInfo: function getAppInfo(aAppId) {
|
getAppInfo: function getAppInfo(aAppId) {
|
||||||
if (!this.webapps[aAppId]) {
|
return AppsUtils.getAppInfo(this.webapps, aAppId);
|
||||||
debug("No webapp for " + aAppId);
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return { "basePath": this.webapps[aAppId].basePath + "/",
|
|
||||||
"isCoreApp": !this.webapps[aAppId].removable };
|
|
||||||
},
|
},
|
||||||
|
|
||||||
// Some messages can be listened by several content processes:
|
// Some messages can be listened by several content processes:
|
||||||
|
@ -2027,7 +2021,8 @@ this.DOMApplicationRegistry = {
|
||||||
}
|
}
|
||||||
|
|
||||||
// the manifest file used to be named manifest.json, so fallback on this.
|
// the manifest file used to be named manifest.json, so fallback on this.
|
||||||
let baseDir = (this.webapps[id].removable ? DIRECTORY_NAME : "coreAppsDir");
|
let baseDir = this.webapps[id].basePath == this.getCoreAppsBasePath()
|
||||||
|
? "coreAppsDir" : DIRECTORY_NAME;
|
||||||
let file = FileUtils.getFile(baseDir, ["webapps", id, "manifest.webapp"], true);
|
let file = FileUtils.getFile(baseDir, ["webapps", id, "manifest.webapp"], true);
|
||||||
if (!file.exists()) {
|
if (!file.exists()) {
|
||||||
file = FileUtils.getFile(baseDir, ["webapps", id, "update.webapp"], true);
|
file = FileUtils.getFile(baseDir, ["webapps", id, "update.webapp"], true);
|
||||||
|
@ -2661,7 +2656,7 @@ this.DOMApplicationRegistry = {
|
||||||
},
|
},
|
||||||
|
|
||||||
getCoreAppsBasePath: function() {
|
getCoreAppsBasePath: function() {
|
||||||
return FileUtils.getDir("coreAppsDir", ["webapps"], false).path;
|
return AppsUtils.getCoreAppsBasePath();
|
||||||
},
|
},
|
||||||
|
|
||||||
getWebAppsBasePath: function getWebAppsBasePath() {
|
getWebAppsBasePath: function getWebAppsBasePath() {
|
||||||
|
|
Загрузка…
Ссылка в новой задаче