summaryrefslogtreecommitdiff
path: root/components/addons
diff options
context:
space:
mode:
Diffstat (limited to 'components/addons')
-rw-r--r--components/addons/content/extensions.js13
-rw-r--r--components/addons/content/extensions.xml16
-rw-r--r--components/addons/locale/extensions.properties6
-rw-r--r--components/addons/moz.build4
-rw-r--r--components/addons/src/AddonRepository.jsm10
-rw-r--r--components/addons/src/AddonUpdateChecker.jsm28
-rw-r--r--components/addons/src/XPIProvider.jsm36
-rw-r--r--components/addons/src/XPIProviderUtils.js3
8 files changed, 115 insertions, 1 deletions
diff --git a/components/addons/content/extensions.js b/components/addons/content/extensions.js
index 11c853524..7a65ac5c0 100644
--- a/components/addons/content/extensions.js
+++ b/components/addons/content/extensions.js
@@ -3028,6 +3028,19 @@ var gDetailView = {
errorLink.value = gStrings.ext.GetStringFromName("details.notification.vulnerableNoUpdate.link");
errorLink.href = this._addon.blocklistURL;
errorLink.hidden = false;
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ } else if (this._addon.native == false) {
+ this.node.setAttribute("notification", "warning");
+ this.node.setAttribute("native", "false");
+ document.getElementById("detail-warning").textContent = gStrings.ext.formatStringFromName(
+ "details.notification.compatibility",
+ [this._addon.name, gStrings.brandShortName], 2
+ );
+ var warningLink = document.getElementById("detail-warning-link");
+ warningLink.value = gStrings.ext.GetStringFromName("details.notification.compatibility.link");
+ warningLink.href = Services.urlFormatter.formatURLPref("extensions.compatibility.url");
+ warningLink.hidden = false;
+#endif
} else {
this.node.removeAttribute("notification");
}
diff --git a/components/addons/content/extensions.xml b/components/addons/content/extensions.xml
index 9ea6a50df..48be575ab 100644
--- a/components/addons/content/extensions.xml
+++ b/components/addons/content/extensions.xml
@@ -1330,6 +1330,22 @@
this._errorLink.hidden = false;
} else {
this.removeAttribute("notification");
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ if (this.mAddon.type == "extension") {
+ this.setAttribute("native", this.mAddon.native);
+ if (this.mAddon.native == false) {
+ this.setAttribute("notification", "warning");
+ this._warning.textContent = gStrings.ext.formatStringFromName(
+ "notification.compatibility",
+ [this.mAddon.name, gStrings.brandShortName], 2
+ );
+ this._warningLink.value = gStrings.ext.GetStringFromName("notification.compatibility.link");
+ this._warningLink.href = Services.urlFormatter.formatURLPref("extensions.compatibility.url");
+ this._warningLink.hidden = false;
+ this._warningBtn.hidden = true;
+ }
+ }
+#endif
}
}
diff --git a/components/addons/locale/extensions.properties b/components/addons/locale/extensions.properties
index 43ab02a47..0172cd0c6 100644
--- a/components/addons/locale/extensions.properties
+++ b/components/addons/locale/extensions.properties
@@ -30,6 +30,9 @@ notification.blocked.link=More Information
#LOCALIZATION NOTE (notification.softblocked) %1$S is the add-on name
notification.softblocked=%1$S is known to cause issues.
notification.softblocked.link=More Information
+#LOCALIZATION NOTE (notification.compatibility) %1$S is the add-on name, %2$S is brand name
+notification.compatibility=%1$S was not designed for %2$S. It may not function properly or cease to function.
+notification.compatibility.link=More Information
#LOCALIZATION NOTE (notification.outdated) %1$S is the add-on name
notification.outdated=An important update is available for %1$S.
notification.outdated.link=Update Now
@@ -79,6 +82,9 @@ details.notification.blocked.link=More Information
#LOCALIZATION NOTE (details.notification.softblocked) %1$S is the add-on name
details.notification.softblocked=%1$S is known to cause issues.
details.notification.softblocked.link=More Information
+#LOCALIZATION NOTE (details.notification.compatibility) %1$S is the add-on name, %2$S is brand name
+details.notification.compatibility=%1$S was not designed for %2$S. It may not function properly or cease to function.
+details.notification.compatibility.link=More Information
#LOCALIZATION NOTE (details.notification.outdated) %1$S is the add-on name
details.notification.outdated=An important update is available for %1$S.
details.notification.outdated.link=Update Now
diff --git a/components/addons/moz.build b/components/addons/moz.build
index 22193c1e7..a6cb84851 100644
--- a/components/addons/moz.build
+++ b/components/addons/moz.build
@@ -11,6 +11,10 @@ DEFINES['MOZ_EXTENSIONS_DB_SCHEMA'] = 16
if CONFIG['MOZ_EM_DEBUG']:
DEFINES['MOZ_EM_DEBUG'] = 1
+# Apperently this needs to be defined because it isn't picked up automagically any more
+if CONFIG['MOZ_PHOENIX_EXTENSIONS']:
+ DEFINES['MOZ_PHOENIX_EXTENSIONS'] = 1
+
XPIDL_SOURCES += [
'public/amIAddonManager.idl',
'public/amIAddonPathService.idl',
diff --git a/components/addons/src/AddonRepository.jsm b/components/addons/src/AddonRepository.jsm
index 8432886b6..ab06f03f6 100644
--- a/components/addons/src/AddonRepository.jsm
+++ b/components/addons/src/AddonRepository.jsm
@@ -63,7 +63,10 @@ const BLANK_DB = function() {
};
}
-const TOOLKIT_ID = "toolkit@mozilla.org";
+const TOOLKIT_ID = "toolkit@mozilla.org";
+#ifdef MOZ_PHOENIX_EXTENSIONS
+const FIREFOX_ID = "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
+#endif
Cu.import("resource://gre/modules/Log.jsm");
const LOGGER_ID = "addons.repository";
@@ -1251,7 +1254,12 @@ this.AddonRepository = {
let results = [];
function isSameApplication(aAppNode) {
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ if (self._getTextContent(aAppNode) == Services.appinfo.ID ||
+ self._getTextContent(aAppNode) == FIREFOX_ID) {
+#else
if (self._getTextContent(aAppNode) == Services.appinfo.ID) {
+#endif
return true;
}
return false;
diff --git a/components/addons/src/AddonUpdateChecker.jsm b/components/addons/src/AddonUpdateChecker.jsm
index b09c221a8..4a8e0f3e7 100644
--- a/components/addons/src/AddonUpdateChecker.jsm
+++ b/components/addons/src/AddonUpdateChecker.jsm
@@ -25,6 +25,7 @@ const XMLURI_PARSE_ERROR = "http://www.mozilla.org/newlayout/xml/pa
const TOOLKIT_ID = "toolkit@mozilla.org";
const FIREFOX_ID = "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}";
+const FIREFOX_APPCOMPATVERSION = "56.9";
const PREF_UPDATE_REQUIREBUILTINCERTS = "extensions.update.requireBuiltInCerts";
const PREF_EM_MIN_COMPAT_APP_VERSION = "extensions.minCompatibleAppVersion";
@@ -522,6 +523,18 @@ function parseJSONManifest(aId, aUpdateKey, aRequest, aManifestData) {
maxVersion: getRequiredProperty(app, "max_version", "string"),
}
}
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ else if (FIREFOX_ID in applications) {
+ logger.debug("update.json: Dual-GUID targetApplication");
+ app = getProperty(applications, FIREFOX_ID, "object");
+
+ appEntry = {
+ id: FIREFOX_ID,
+ minVersion: getRequiredProperty(app, "min_version", "string"),
+ maxVersion: getRequiredProperty(app, "max_version", "string"),
+ }
+ }
+#endif
else if (TOOLKIT_ID in applications) {
logger.debug("update.json: Toolkit targetApplication");
app = getProperty(applications, TOOLKIT_ID, "object");
@@ -545,7 +558,11 @@ function parseJSONManifest(aId, aUpdateKey, aRequest, aManifestData) {
id: TOOLKIT_ID,
minVersion: platformVersion,
#endif
+#if defined(MOZ_PHOENIX) && defined(MOZ_PHOENIX_EXTENSIONS)
+ maxVersion: FIREFOX_APPCOMPATVERSION,
+#else
maxVersion: '*',
+#endif
};
}
else {
@@ -808,6 +825,12 @@ function matchesVersions(aUpdate, aAppVersion, aPlatformVersion,
return (Services.vc.compare(aAppVersion, app.minVersion) >= 0) &&
(aIgnoreMaxVersion || (Services.vc.compare(aAppVersion, app.maxVersion) <= 0));
}
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ if (app.id == FIREFOX_ID) {
+ return (Services.vc.compare(aAppVersion, app.minVersion) >= 0) &&
+ (aIgnoreMaxVersion || (Services.vc.compare(aAppVersion, app.maxVersion) <= 0));
+ }
+#endif
if (app.id == TOOLKIT_ID) {
result = (Services.vc.compare(aPlatformVersion, app.minVersion) >= 0) &&
(aIgnoreMaxVersion || (Services.vc.compare(aPlatformVersion, app.maxVersion) <= 0));
@@ -865,7 +888,12 @@ this.AddonUpdateChecker = {
if (aIgnoreCompatibility) {
for (let targetApp of update.targetApplications) {
let id = targetApp.id;
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ if (id == Services.appinfo.ID || id == FIREFOX_ID ||
+ id == TOOLKIT_ID)
+#else
if (id == Services.appinfo.ID || id == TOOLKIT_ID)
+#endif
return update;
}
}
diff --git a/components/addons/src/XPIProvider.jsm b/components/addons/src/XPIProvider.jsm
index e9e556f99..7ef102751 100644
--- a/components/addons/src/XPIProvider.jsm
+++ b/components/addons/src/XPIProvider.jsm
@@ -134,6 +134,10 @@ const RDFURI_INSTALL_MANIFEST_ROOT = "urn:mozilla:install-manifest";
const PREFIX_NS_EM = "http://www.mozilla.org/2004/em-rdf#";
const TOOLKIT_ID = "toolkit@mozilla.org";
+#ifdef MOZ_PHOENIX_EXTENSIONS
+const FIREFOX_ID = "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}"
+const FIREFOX_APPCOMPATVERSION = "56.9"
+#endif
// The value for this is in Makefile.in
#expand const DB_SCHEMA = __MOZ_EXTENSIONS_DB_SCHEMA__;
@@ -6364,11 +6368,27 @@ AddonInternal.prototype = {
if (!aPlatformVersion)
aPlatformVersion = Services.appinfo.greVersion;
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ this.native = false;
+#endif
+
let version;
if (app.id == Services.appinfo.ID) {
version = aAppVersion;
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ this.native = true;
+ }
+ else if (app.id == FIREFOX_ID) {
+ version = FIREFOX_APPCOMPATVERSION;
+ if (this.type != "extension")
+ //Only allow -extensions- in Firefox compatibility mode
+ return false;
+#endif
}
else if (app.id == TOOLKIT_ID) {
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ this.native = true;
+#endif
version = aPlatformVersion;
}
@@ -6391,7 +6411,11 @@ AddonInternal.prototype = {
// Extremely old extensions should not be compatible by default.
let minCompatVersion;
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ if (app.id == Services.appinfo.ID || app.id == FIREFOX_ID)
+#else
if (app.id == Services.appinfo.ID)
+#endif
minCompatVersion = XPIProvider.minCompatibleAppVersion;
else if (app.id == TOOLKIT_ID)
minCompatVersion = XPIProvider.minCompatiblePlatformVersion;
@@ -6415,6 +6439,18 @@ AddonInternal.prototype = {
if (targetApp.id == TOOLKIT_ID)
app = targetApp;
}
+-#ifdef MOZ_PHOENIX_EXTENSIONS
+ // Special case: check for Firefox TargetApps. this has to be done AFTER
+ // the initial check to make sure appinfo.ID is preferred, even if
+ // Firefox is listed before it in the install manifest.
+ // Only do this for extensions. Other types should not be allowed.
+ if (this.type == "extension") {
+ for (let targetApp of this.targetApplications) {
+ if (targetApp.id == FIREFOX_ID) //Firefox GUID
+ return targetApp;
+ }
+ }
+#endif
// Return toolkit ID if toolkit.
return app;
},
diff --git a/components/addons/src/XPIProviderUtils.js b/components/addons/src/XPIProviderUtils.js
index 9f3273b1a..512479d76 100644
--- a/components/addons/src/XPIProviderUtils.js
+++ b/components/addons/src/XPIProviderUtils.js
@@ -71,6 +71,9 @@ const PROP_JSON_FIELDS = ["id", "syncGUID", "location", "version", "type",
"softDisabled", "foreignInstall", "hasBinaryComponents",
"strictCompatibility", "locales", "targetApplications",
"targetPlatforms", "multiprocessCompatible",
+#ifdef MOZ_PHOENIX_EXTENSIONS
+ "native"
+#endif
];
// Time to wait before async save of XPI JSON database, in milliseconds