Installing unsigned addons in Firefox stable
Quick heads-up: this doesn’t work anymore on Firefox 111.0.1 - not sure why
When developing a private addon, you don’t always want to use Mozilla services - it’s your browser, why should they care about your addons? Unfortunately, when looking at the documentation and forum posts, it doesn’t seem like you can install them on the stable version of Firefox… or can you?
(before you proceed, make sure your addon has the browser_specific_settings section; otherwise, it’s gonna show as corrupted to Firefox)
To achieve this, we’re gonna need a text editor and write access to your browser files (usually root/Administrator). These instructions are gonna target Linux with Firefox installed from your system package manager (so excluding Flatpak or Snap), but it should be possible to do this anywhere, as long as you can edit these files.
Firstly, locate the omni.ja
file in the browser files (usually /usr/lib/firefox
).
There’s two of them, one in the browser/
subdirectory - we’re gonna focus on the former.
There are three things we need to patch:
--- a/modules/AppConstants.jsm
+++ b/modules/AppConstants.jsm
@@ -203,3 +203,3 @@
MOZ_REQUIRE_SIGNING:
//@line 290 "$SRCDIR/toolkit/modules/AppConstants.jsm"
- true,
+ 0000,
--- a/modules/addons/XPIDatabase.jsm
+++ b/modules/addons/XPIDatabase.jsm
@@ -2366,7 +2366,7 @@
if (this.mustSign(aAddon.type) && !aAddon.isCorrectlySigned) {
logger.warn(`Add-on ${aAddon.id} is not correctly signed.`);
if (Services.prefs.getBoolPref(PREF_XPI_SIGNATURES_DEV_ROOT, false)) {
logger.warn(`Preference ${PREF_XPI_SIGNATURES_DEV_ROOT} is set.`);
}
- return false;
+ //return false;
}
--- a/modules/addons/XPIInstall.jsm
+++ b/modules/addons/XPIInstall.jsm
@@ -1609,4 +1609,4 @@
- if (lazy.XPIDatabase.mustSign(this.addon.type)) {
+ if (false /*Database.mustSign(this.addon.typ*/) {
if (this.addon.signedState <= AddonManager.SIGNEDSTATE_MISSING) {
// This add-on isn't properly signed by a signature that chains to the
// trusted root.
As the omni.ja
file is just a zip file, you can unpack it:
$ mkdir omni && cd omni
$ unzip ../omni.ja
Archive: ../omni.ja
warning [../omni.ja]: 29257828 extra bytes at beginning or within zipfile
(attempting to process anyway)
error [../omni.ja]: reported length of central directory is
-29257828 bytes too long (Atari STZip zipfile? J.H.Holm ZIPSPLIT 1.1
zipfile?). Compensating...
extracting: greprefs.js
extracting: chrome.manifest
extracting: chrome/chrome.manifest
...
It seems to complain about some stuff, but that doesn’t seem to be too much of an issue.
After editing, just repack:
$ zip -r -0 -FS omni.ja *
adding: actors/ (stored 0%)
adding: actors/WebChannelParent.jsm (stored 0%)
adding: actors/WebChannelChild.jsm (stored 0%)
adding: actors/ViewSourcePageParent.jsm (stored 0%)
...
and replace the original file with the modified one.
With all that done, restart Firefox, go to about:addons
and load your addon.
Depite the big red warning, the extension should now be loaded and usable.