guix_mirror_bot pushed a commit to branch gnuzilla-updates in repository guix.
commit 287c9564a4a17e016e6940c1fa23b87014600145 Author: Maxim Cournoyer <[email protected]> AuthorDate: Tue Aug 26 22:31:26 2025 +0900 gnu: icecat: Update to 140.2.0 [security fixes]. For Firefox/IceCat, this fixes at least CVE-2025-6427, CVE-2025-6428, CVE-2025-6431, CVE-2025-6432, CVE-2025-6433, CVE-2025-6434, CVE-2025-6435 and CVE-2025-6436. For Thunderbird/IceDove, this fixes too many CVEs to be named here. Consult <https://www.mozilla.org/en-US/security/known-vulnerabilities/thunderbird> to read the details. * gnu/packages/image.scm (libpng-apng-for-librewolf): Rename to... (libpng-apng-next): ... this. * gnu/packages/librewolf.scm (librewolf) [inputs]: Adjust accordingly. * gnu/packages/gnuzilla.scm (icecat-minimal): Update to 140.2.0. [#:configure-flags]: Add --disable-fhs. Remove --enable-official-branding. [#:phases] {apply-guix-specific-patches}: Apply icecat-fhs-configure-option.patch. {remove-cargo-frozen-flag}: Remove --frozen from rust.mk. {install}: Also install a policies.json file to disable the Sync feature. {install-desktop-entry}: Adjust and streamline. {install-icons}: Use the 'unofficial' branding directory. [inputs]: Replace libpng-apng with libpng-apng-next. [native-search-paths]: Replace ICECAT_SYSTEM_DIR with MOZILLA_SYSTEM_DIR. (icecat-source): Remove obsolete cleanups. Switch tarball compression to zstd. (make-l10n-package): No longer set GUIX_PYTHONPATH. [#:phases] {build}: Register the "tb_common" mach site. [native-inputs]: Replace python-wrapper with python. Add python-aiohttp, python-async-timeout and python-dateutil. (mozilla-115-compare-locales, mozilla-115-locale, mozilla-115-locales) (update-mozilla-115-locales, all-mozilla-115-locales, %icecat-115-base-version) (%icecat-115-version, %icecat-115-build-id (icecat-115-source): Delete variables. (mozilla-l10n): Update to correct changeset. (format-locales): New procedure. (%icecat-locales): Update. (%icecat-base-version): Set to the version of mozjs. (%icecat-build-id): Bump. (%icedove-build-id): Bump. (%icedove-version): Set to 140.2.0. (thunderbird-comm-source): Update accordingly. [patches]: New field. (comm-source->locales+changeset): Delete variable. (%icedove-locales): Regenerate. (thunderbird-comm-l10n): Adjust URI. (icedove-source): Compress resulting tarball via zstd. Adjust patching based on changed file names and content. Make "comm" files writable. Patch MOZ_APP_NAME in "devtools/startup/DevToolsStartup.sys.mjs". Adjust services.settings.server value to avoid a warning. (icedove-minimal) [#:phases] {configure}: Do not set PYTHON. Add 'ac_add_options --enable-rust-simd' flag. {do-not-verify-vendored-rust-dependencies}: New phase. {patch-cargo-checksums}: Sync with IceCat, add "comm" directory. {remove-cargo-frozen-flag}: Sync phase with that of IceCat. [inputs]: Sort. Add ffmpeg. Remove gtk+-2. Replace nss with nss-rapid. [native-inputs]: Replace clang-15 with clang-20, llvm-15 with llvm-20. Replace rust-cbindgen-0.24 with rust-cbindgen. * gnu/packages/patches/icecat-makeicecat-update.patch: New file. * gnu/packages/patches/icedove-observer-fix.patch: Likewise. * gnu/local.mk (dist_patch_DATA): Register them. * gnu/packages/patches/icecat-compare-paths.patch: Update. * gnu/packages/patches/icecat-use-system-wide-dir.patch: Rework, with the goal to of upstreaming it. Change-Id: Ib420388b9e7c7b59baa74920951afbda99cfe5a2 --- gnu/local.mk | 2 + gnu/packages/gnuzilla.scm | 794 +++++++-------- gnu/packages/image.scm | 59 +- gnu/packages/librewolf.scm | 2 +- gnu/packages/patches/icecat-compare-paths.patch | 17 +- .../patches/icecat-fhs-configure-option.patch | 38 + .../patches/icecat-makeicecat-update.patch | 1070 ++++++++++++++++++++ .../patches/icecat-use-system-wide-dir.patch | 58 +- gnu/packages/patches/icedove-observer-fix.patch | 35 + 9 files changed, 1564 insertions(+), 511 deletions(-) diff --git a/gnu/local.mk b/gnu/local.mk index a25d0c015e..bab931cc58 100644 --- a/gnu/local.mk +++ b/gnu/local.mk @@ -1600,11 +1600,13 @@ dist_patch_DATA = \ %D%/packages/patches/hwloc-1-test-btrfs.patch \ %D%/packages/patches/i7z-gcc-10.patch \ %D%/packages/patches/icecat-makeicecat.patch \ + %D%/packages/patches/icecat-makeicecat-update.patch \ %D%/packages/patches/icecat-avoid-bundled-libraries.patch \ %D%/packages/patches/icecat-compare-paths.patch \ %D%/packages/patches/icecat-use-system-graphite2+harfbuzz.patch \ %D%/packages/patches/icecat-use-system-media-libs.patch \ %D%/packages/patches/icecat-use-system-wide-dir.patch \ + %D%/packages/patches/icedove-observer-fix.patch \ %D%/packages/patches/icedtea-7-hotspot-aarch64-use-c++98.patch \ %D%/packages/patches/icedtea-7-hotspot-pointer-comparison.patch \ %D%/packages/patches/icu4c-icu-22132-fix-vtimezone.patch \ diff --git a/gnu/packages/gnuzilla.scm b/gnu/packages/gnuzilla.scm index 23362e0d87..1546e78ac1 100644 --- a/gnu/packages/gnuzilla.scm +++ b/gnu/packages/gnuzilla.scm @@ -41,6 +41,8 @@ #:use-module ((srfi srfi-1) #:hide (zip)) #:use-module (ice-9 format) #:use-module (ice-9 match) + #:autoload (ice-9 pretty-print) (pretty-print) + #:autoload (ice-9 textual-ports) (get-string-all) #:use-module (gnu packages) #:use-module ((guix licenses) #:prefix license:) #:use-module (guix packages) @@ -74,6 +76,7 @@ #:use-module (gnu packages linux) #:use-module (gnu packages perl) #:use-module (gnu packages pkg-config) + #:use-module (gnu packages python-web) #:use-module (gnu packages compression) #:use-module (gnu packages fontutils) #:use-module (gnu packages fonts) @@ -100,7 +103,7 @@ #:use-module (gnu packages xdisorg) #:use-module (gnu packages readline) #:use-module (gnu packages sqlite) - #:autoload (json parser) (json->scm)) + #:use-module (gnu packages time)) (define-public mozjs (package @@ -372,330 +375,14 @@ fractional-second-digits-append-item.js") (inputs (list icu4c-73 readline zlib)))) - -;;; -;;; Localization helper procedures. -;;; -(define mozilla-115-compare-locales - (origin - (method hg-fetch) - (uri (hg-reference - (url "https://hg.mozilla.org/l10n/compare-locales/") - (changeset "RELEASE_8_1_0"))) - (file-name "mozilla-compare-locales") - (sha256 (base32 "00bpkaqf2ng1nn9ajyb5mli0jq58q5fm2n3yy90jy0hp4q2gbs50")))) - -(define (mozilla-115-locale locale changeset hash-string) - (origin - (method hg-fetch) - (uri (hg-reference - (url (string-append "https://hg.mozilla.org/l10n-central/" - locale)) - (changeset changeset))) - (file-name (string-append "mozilla-locale-" locale)) - (sha256 (base32 hash-string)))) - -(define-syntax-rule (mozilla-115-locales (hash-string changeset locale) ...) - (list (mozilla-115-locale locale changeset hash-string) - ...)) - -(define (update-mozilla-115-locales changesets.json) - "Output a new list of Mozilla locales, to update the ALL-MOZILLA-115-LOCALES -variable defined below. It requires guile-json to be installed." - (match (call-with-input-file changesets.json json->scm) - (((lang ("revision" . revision) platforms pin) ...) - (let ((data (reverse (map (lambda (rev lang) - `(,(list->string (make-list 40 #\0)) - ,(string-take rev 12) ,lang)) - revision lang)))) - (format #t "~{~s~%~}" data) - data)))) - -(define-public all-mozilla-115-locales - (mozilla-115-locales - ;; sha256 changeset locale - ;;--------------------------------------------------------------------------- - ("152dc3nxbsjhawq8wm040hbnhq96l039j3k8ll4q93qm93msj507" "de9eb6a1e3e0" "ach") - ("0rfbzyv87x5d4qspjaiwsvqcf57g0d93daibj4rc4xsq3g2gw45v" "45b72420bf17" "af") - ("13lfl3nq0nr3zvh1zddpnyk8x054784yz08nkprmqhzyvfv3i5wq" "babed417b5e8" "an") - ("07fjh9wvl9jgvyqbvsd7l4pq895y4sv725fd8fr274s6l4x7pzz0" "7df35a519b47" "ar") - ("04zmfr15a3zhalj66ydpcrh3nxk1q7wb2gckfqsq55q72i3hvkcy" "fd0068a8989f" "ast") - ("1x2hnsa1nfmysd7w53ly14bp8hk1vbgfj1016wapcshvf1kap3mr" "4df6d5edc74d" "az") - ("1synmbnng6ai8gmz8srxdgf3qgadjvymb66inp3g2lww0c98c4qn" "97829729f043" "be") - ("1zank8f4145v4fv28y47ssknn55zrpyll3kxhha2h54za4zkn4p1" "4f568ae49cf3" "bg") - ("00wdllmdmzg11x6dcj3f2i047y3bgab1qw2zjaa92i36d5nd2hdr" "a634f8559ffd" "bn") - ("0b5f50ar7zj2z1jjvhv8841rabx5a2ylcl0rma3qiz5i6r41lgli" "4ca046b16e37" "br") - ("1g1qh8b496psq9yknjzi7drzqzhd5g50xl5qiwd6pr61xyqfvnkx" "690960700526" "bs") - ("1wd463lfhdybx0nz0dqvhrsi7f9xl5qd7mvshpgqxlj5x1nhamzy" "58714a456fd6" "ca") - ("1s9ls2fh9xfgb8q9vay5lkszfhh0k99lrp28m3fi83b5vv8qj8fq" "12760eef74bc" "cak") - ("0abwslv88hda2wfsnkyi7si9v16923gf4xfbq3h0a6mpxf1mylhs" "703352c2a9b4" "ca-valencia") - ("05pfacr2kk0sxrpw3s15c8rvchkzxgvsy1njp5q72b270sw98i7h" "6a7eef3982fb" "cs") - ("0cidwylb4s7n1hdw4yjqj89bl2qsscf3b1vnfl7hsxf68lj2lzaj" "9c30e4ec1dde" "cy") - ("10d7mn2qq0nvw3073ga4garwnvpk5xqkgn3dgw1az2g5pncclhfk" "668cf42570ef" "da") - ("0nfb3nf47gavafb35mm4ghl82kpylyj0r1vqc47nz151mjj2mnli" "c968a5118cda" "de") - ("1qjf12aymz1x281chv7sqyarbz6f8w7nxsli3b4srsar12l5f0lb" "27dd7f4a3f3f" "dsb") - ("040165lwplyj0cv9ccagdjwigy527rli3qda6b633bqrpx6310sw" "920e28aa6758" "el") - ("1h5zk58rmrqnbfhxyiwcn0385v6r5ayfkblpwqkji80p135n74sa" "b0e55a5a6413" "en-CA") - ("1w5q4b1a9ysgc76dg45cr2q55y4djdcrj2qzs0imq61sjrvih2fv" "9aae743f32df" "en-GB") - ("0mxsp5ipg36jdpphwrdra877z9vz1ifbhas988awhc3i9byx7zbh" "3c825be76f39" "eo") - ("1nxscjmk80wh359lv4cxgh1y85f8qw522dppy292pkqnqnsrfnq1" "ffac56bd3aef" "es-AR") - ("02353n524fy5icp2myjn198n511lzb03hcd4a61bgd7f26cpkhy5" "77e209bb2114" "es-CL") - ("1863d4zy2745hfw2kgw5z0625znvzkqwlwbvcj8cw6nv3r6dxgdv" "215ced58e499" "es-ES") - ("0asrcxvig4i75r4kpkmcfsc1kzjl8cbaz11an5kny2slcy63av7i" "d748a2a91643" "es-MX") - ("1p40zmf29mq81blssjh6gs8fih925mia3l1gya9vzgyp5i4dvln6" "66edf9863a04" "et") - ("1hr4q01856j8jmjia39586mxfbv5ijkq7i6cyxz1r422gqivv13v" "752b6aa2225e" "eu") - ("0d6vgd6anz237ckgc3a30nzdxa98fw33rc1r2wkr4y3yfvd2bidc" "4a57be1cf783" "fa") - ("1kjb8k55vkgn7fpzgvayahzx7cbx7vryyv89kynp2lv052smhh01" "e42c0149059c" "ff") - ("0d392s3fh1cl491b72cxlj7la6in84mfxbcn862f0sr63iz0q7wn" "0a2a3e96367c" "fi") - ("10rvxinl9as9wdd9yrhsskjwsklzxd35j4b1ygr4jlvslcrmdhpn" "119b009eba98" "fr") - ("1x0bfp7gaplnwcmfvv8c87znxp9fxsa99nl88j87qxn45h9kz8q6" "475065215d5c" "fur") - ("0p20jlm8vxlzixm446wcqjs5sz7m9x7v4zgqczvriwyspad7d8xp" "6909c0c42a2e" "fy-NL") - ("1rh8mvlamawzdfis0ah8rgnjk30mzpxhgh1yx8rxppps7l5n2hpj" "2f350c9ba505" "ga-IE") - ("1n2dxvv0q77azg2cz4nasq47pbsh1l6fngphy3lzz1wj4x3s8z7g" "3fe4a6bcac31" "gd") - ("15x51q3lsr67lklci13cqlxmgjyk8px12qc3qfrfdv2dk68znwmq" "0482da4a3d5b" "gl") - ("1zx7a0l781hyi9k6bi0m9ghgzcb116cqy88q7bf9sm0gar85yxwi" "bb255fc733c3" "gn") - ("1p6ycyjp7qsv1fk19yca5bwvyg72y3v87fr3wmhq7xzmdz6994fm" "dd3707daa411" "gu-IN") - ("02r68v2yhxxdfms9l2yq8pk7rarg1ysv67mbny04gaws6k5fv3an" "c247293030ae" "he") - ("116s9qgcwb0j1mzwy5napq5ww9cs5hcj41xiq2k6kz4gjxw4jazl" "e9c1a1fe1b79" "hi-IN") - ("1kg7xiw75ks490kiay2gndlc2akkg4bxdx4q7ysaxf6kpgisakxg" "068c00ca7cae" "hr") - ("1xjqvqn65nyb0dlchy3bikpf0g3qjba7i5g68jcicz0hcyrfagvd" "5fd424d1061b" "hsb") - ("1j81cv599h3iv26yzzdf8m5vkdw9kdhrlls8c6zd3fslpd91yn5q" "0ef89daff942" "hu") - ("0wwjyjpqcxvjsw7md6sz2zxncay3wk066qiv4p2vpqv5sw9z1sdh" "771fd65bc781" "hy-AM") - ("0pxjvzkkhls3d28c1656y3fc78snhc90f0mj5jx9rhh7l6hg0801" "6cfa8fc01f2a" "ia") - ("1xh93qkj7y4ad10sqyldr9hymsbffnq7kya0smvci1nwmnndd8bk" "ae863f3cd230" "id") - ("1npyaz5zyk6yr8z8sj2gbd0ahynglxmalw27rcdb57h81n0520y7" "d465499a6600" "is") - ("14hhl050vzbrwwppvpyicqfcqazpvyaygnr8hgrz0jgyb30lfvhw" "a8ac50410815" "it") - ("1jz9i0x22qig74gwrrrvnwc7s50h1x18sl797lr678xiw4f6p0ar" "13abbdd8abdf" "ja") - ("04k53mnskapqv968gphpmzhxbg1m0jxbzf24z9g0lgspnhcgwpx9" "1f388ad7f0e9" "ja-JP-mac") - ("1n9ayc6l72fy08zdqpwag54rh6j5aagj7y7976gyvjl1ssz745fs" "ed774dd2eff3" "ka") - ("09bw4sk8g7bmx9xxxiy8y9p8zhf3h3gvaddlx86zdk12k44iqmnc" "c9cfab9734b4" "kab") - ("0lmwsq72vk424nlrgnq46apdbgivzrmx303rvng8h03wrp9qjz1m" "4797db4a0fcb" "kk") - ("0al453bmiq85kkkfaba11iwnx0dy9f3dl9hlz0j38ysgcipwap5l" "f312da458d8b" "km") - ("1rjf875nwcqnlbfgk92vpa8msy3vp2xcgfasj7kksr37rxcbwa8m" "a30ac878de56" "kn") - ("0v5a1v0a6xziwhspfqpdccl00h0b4j4k4vwmmijld44cdmj208v9" "6f5e9c8eb029" "ko") - ("0kx0hz0dp9bdgf0r0m9qsip2ybrc4dwmry3kp488z2pig0asai7x" "dcdf4bf4482b" "lij") - ("1iawv3hbl0wab1xzhhihxiqsz2i6icf64ipmjrpm9srlg6kaxgg5" "913770b70ead" "lt") - ("15ppml5b0f78ycdswff0yqr27d649fr2rggv5dnxqxxm2bx5hzw6" "6351f7efe4d7" "lv") - ("0crbysr0raqh90ayb5rq73d3cddfryfaj4bdbzijk2j2rpdlwv1m" "6acffb2c66ee" "mk") - ("0b5dw5a904w5ibd7yz1839a0cv2hmnlv2bz0kpsr6xf52jv20g6a" "942eca4c76b6" "mr") - ("0fr83kiq7xmw1kyrjrmm3iirlfcp94dyacdkkj9df6gr5qp6wn7i" "de00ab4bb6fe" "ms") - ("011y1yyl97avjawja3gmwwa74kxcvm2g2wn47yv01xqy74wbbss7" "2ce7138cd126" "my") - ("0f6ffh76g31df9kfj6azip2qy0b14s287isgm7sxnclch4jwq83s" "5cc51d238790" "nb-NO") - ("193nw6l0z7vlcd7flb72bc8h7vd9vjj8xlz5lhf7irmfr2bldj0r" "db205a4fd15a" "ne-NP") - ("14qizkrcs1avd78ci4i4hr7v3bz3m51if1jc5wxydkx9n0yb8cgn" "1abc02acab91" "nl") - ("1cjglsaf8ynm4wgzpbcf68gj8jhvnzldrnjlni4c4vvl0bfxnxa2" "b4ff1a7885c2" "nn-NO") - ("0jpdq7zpqs3gnyzz1xvccvjqbzwga35sj85z52vprm6zcxd8gm0m" "1c7d5471dba9" "oc") - ("14apl3vhxkqcy8l5a0ny71f9dkmbb5fakvkpngqv5xgbbl0byfk3" "cf3fd8eb605b" "pa-IN") - ("1aglsx0w3xgbn1dhdbzwcqn8sdkp4bncl5bj7nlick56rbkicj9j" "3c9c3c67830a" "pl") - ("10hqfd0fjbcbgdsj0jxdfvm9abiya05lw2bpy0cz6h61mgjywqiz" "68bf2b7c6f25" "pt-BR") - ("1vvs0kkvnnnsxn1d5fnma55fizzs1bbx5sv5k2w4164k6h7fhxfv" "fae18b48519f" "pt-PT") - ("0c8dl12n5fjdd3bjaf8idyaxsf8ppbma132vdw8bk2wqnh4cv69a" "92110fd6e211" "rm") - ("0mxxy56kj0k5jhjxjv8v4zz57pha819mz7j803lcilax7w52wgca" "5eeba1f64743" "ro") - ("0jrd95n108r4sxdwgy39zjynm5nlzzmiijsfpxxfwj7886wl4faz" "47131134e349" "ru") - ("1lwm5jv3hvjp84a70186x2083nhr3mfcl7kpmw5in9amaflfi41b" "a5cd6d3d67ee" "sat") - ("1q6pn3iixzcas9blf61bhvwgppbsh0am0wdz6a6p9f9978894d73" "880b7986692a" "sc") - ("0xndsph4v725q3xcpmxxjb9vxv19sssqnng82m9215cdsv9klgpb" "bf5f6e362f6f" "sco") - ("0l70n8817mbmbc09fsnn2aqjj9k9dhad2gmzgphmiilf9mqm2dpf" "1f705c926a99" "si") - ("19bqjazazww08chd1qc08dsnr2521088jq5jd4j3185yb1ypm3nr" "c1bd10d70325" "sk") - ("12q1nv6z4bk8yaw3vhl9xs41i7kpx1415mwg635v76fx8h94ycl3" "00eaf8d9e83b" "skr") - ("11nmjmy2j249588ahg4mh9lxdqr476jbh28a07qxxibfa76j9vk3" "44be3cbf69b6" "sl") - ("1ww35141nixg2s03kfmmq9fk6m3qiz2vg7p5a85shjp7i89pyj1d" "800576ff8ef9" "son") - ("1q7nfybwc8mxdwi9fpvfhayq18mykzygkpakr5ngfz2316k8lf5r" "4de8638ac27f" "sq") - ("06wr7zx6kvaxsly5f3ci7kb2zaqlwjjbg1vrimp0jcqs4l5x6wpl" "ec560d96370c" "sr") - ("01n1ly9lihnznrab3kcby2i93k0qwg99c9fh55xpi90vkyq77gmq" "c5754f9325a1" "sv-SE") - ("09kk9bj2139j34md26zysaaf8cqyh5nmf861vxnc2vdsd37nr4x4" "c3fa195a8edf" "szl") - ("1vpr88vj9n7pm87dynyqyyiv1v2igd3w0f3a65g8rirknh3wfw44" "755763981e95" "ta") - ("19qwvi642fpg7zyhlcj9fgnm0bbkvqby6apr7iijayammg2vnyx3" "3a34078388af" "te") - ("1lh3m1d8rblas50g990qwcr2qv2nk5m6isjvi0gr57zhc4l9a4lw" "24c3a61f463c" "tg") - ("0sr0wa886a5gwrgn7rmn08sn6qz4p58037wx9gskacclhrzs53aw" "6dad5f8774df" "th") - ("19cvf42lmi9996mxlmplpk1b65p1fh4ja36xprs115z2n1iky9y5" "befaa7917b35" "tl") - ("04p50pd380hdalizz09qix7camipazkjyyi97f3sl04h6i67vz17" "66c8bc5e9da6" "tr") - ("0lqbaxkdvi8hjns8myssmv6bxymh53glf0w2nfpj72zh40rr1n09" "9e86caeded11" "trs") - ("13qmsji7gyad0d23ac7lx4181zhm3kb9xym82z786f7k271jq7kl" "bd5e0aad5f0b" "uk") - ("0m52xl2vy0paj5kcfk8jy70hhck5bgdg8lb6cvjqm2mhl5sli0ka" "040d506ed663" "ur") - ("1n0gdgjwwwd5yd69ylr05hskjxasydnkqw33rncpx7491x3nf4kf" "7e4e5290c700" "uz") - ("140lnl9dq82azlw1qic386h4z0xbilcf3jvjy93qid67mvnmwqqm" "b8196f646583" "vi") - ("07yc91645aiks3fxzx16kw4kzvksyrj36n9iz59wn9wppzlampx6" "ef98e07b4b9e" "xh") - ("1c1sfaincridbdp66bzgwgxgp5gqpvzkf10m9yafm9bgkif18vwy" "f614d8a31562" "zh-CN") - ("0s9chi76476gznrxjcn6slhgsznjnaps0h29kck6ijb0x3yx98xi" "ab22459ceb2f" "zh-TW"))) - (define computed-origin-method (@@ (guix packages) computed-origin-method)) -(define %icecat-115-base-version "115.24.0") -(define %icecat-115-version (string-append %icecat-115-base-version "-guix1")) -(define %icecat-115-build-id "20250527000000") ;must be of the form YYYYMMDDhhmmss - -(define icecat-115-source - (let* ((major-version (first (string-split %icecat-115-base-version #\.))) - (minor-version (second (string-split %icecat-115-base-version #\.))) - (sub-version (third (string-split %icecat-115-base-version #\.))) - - (upstream-firefox-version (string-append %icecat-115-base-version "esr")) - (upstream-firefox-source - (origin - (method url-fetch) - (uri (string-append - "https://ftp.mozilla.org/pub/firefox/releases/" - upstream-firefox-version "/source/" - "firefox-" upstream-firefox-version ".source.tar.xz")) - (sha256 - (base32 - "00229s39xidjzf7afpkyai9jz6ffqqcghn2wniraxyqa2rc5mfc1")))) - - ;; The upstream-icecat-base-version may be older than the - ;; %icecat-base-version. - (upstream-icecat-base-version "115.24.0") - (gnuzilla-commit "b1da0f01591182b43e179451ce2484d0fee88dd8") - (gnuzilla-source - (origin - (method git-fetch) - (uri (git-reference - (url "git://git.savannah.gnu.org/gnuzilla.git") - (commit gnuzilla-commit))) - (file-name (git-file-name "gnuzilla" - ;;upstream-icecat-base-version - (string-take gnuzilla-commit 8))) - (sha256 - (base32 - "1nrswd5g75wq8z997dilh2mxd0ssjrp1kp7v7l6x2gqmfiwa8r7h")))) - - ;; 'search-patch' returns either a valid file name or #f, so wrap it - ;; in 'assume-valid-file-name' to avoid 'local-file' warnings. - (makeicecat-patch - (local-file (assume-valid-file-name - (search-patch "icecat-makeicecat.patch"))))) - - (origin - (method computed-origin-method) - (file-name (string-append "icecat-" %icecat-115-version ".tar.xz")) - (sha256 #f) - (uri - (delay - (with-imported-modules '((guix build utils)) - #~(begin - (use-modules (guix build utils)) - (let ((firefox-dir - (string-append "firefox-" #$%icecat-115-base-version)) - (icecat-dir - (string-append "icecat-" #$%icecat-115-version))) - - (set-path-environment-variable - "PATH" '("bin") - (list #+python - #+(canonical-package bash) - #+(canonical-package coreutils) - #+(canonical-package findutils) - #+(canonical-package patch) - #+(canonical-package xz) - #+(canonical-package sed) - #+(canonical-package grep) - #+(canonical-package bzip2) - #+(canonical-package gzip) - #+(canonical-package tar))) - - (set-path-environment-variable - "PYTHONPATH" - (list #+(format #f "lib/python~a/site-packages" - (version-major+minor - (package-version python)))) - '#+(cons python-jsonschema - (map second - (package-transitive-propagated-inputs - python-jsonschema)))) - - ;; We copy the gnuzilla source directory because it is - ;; read-only in 'gnuzilla-source', and the makeicecat script - ;; uses "cp -a" to copy parts of it and assumes that the - ;; copies will be writable. - (copy-recursively #+gnuzilla-source "/tmp/gnuzilla" - #:log (%make-void-port "w")) - - (with-directory-excursion "/tmp/gnuzilla" - (make-file-writable "makeicecat") - (invoke "patch" "--force" "--no-backup-if-mismatch" - "-p1" "--input" #+makeicecat-patch) - (patch-shebang "makeicecat") - (substitute* "makeicecat" - (("^readonly FFMAJOR=(.*)" all ffmajor) - (unless (string=? #$major-version - (string-trim-both ffmajor)) - ;; The makeicecat script cannot be expected to work - ;; properly on a different version of Firefox, even if - ;; no errors occur during execution. - (error "makeicecat major version mismatch")) - (string-append "readonly FFMAJOR=" #$major-version "\n")) - (("^readonly FFMINOR=.*") - (string-append "readonly FFMINOR=" #$minor-version "\n")) - (("^readonly FFSUB=.*") - (string-append "readonly FFSUB=" #$sub-version "\n")) - (("^readonly DATADIR=.*") - "readonly DATADIR=/tmp/gnuzilla/data\n") - (("^readonly SOURCEDIR=.*") - (string-append "readonly SOURCEDIR=" icecat-dir "\n")) - (("/bin/sed") - #+(file-append (canonical-package sed) "/bin/sed")))) - - (format #t "Unpacking upstream firefox tarball...~%") - (force-output) - (invoke "tar" "xf" #+upstream-firefox-source) - (rename-file firefox-dir icecat-dir) - - (with-directory-excursion icecat-dir - (format #t "Populating l10n directory...~%") - (force-output) - (mkdir "l10n") - (with-directory-excursion "l10n" - (for-each - (lambda (locale-dir) - (let ((locale - (string-drop (basename locale-dir) - (+ 32 ; length of hash - (string-length "-mozilla-locale-"))))) - (format #t " ~a~%" locale) - (force-output) - (copy-recursively locale-dir locale - #:log (%make-void-port "w")) - (for-each make-file-writable (find-files locale)) - (with-directory-excursion locale - (when (file-exists? ".hgtags") - (delete-file ".hgtags")) - (mkdir-p "browser/chrome/browser/preferences") - (call-with-output-file - "browser/chrome/browser/preferences/advanced-scripts.dtd" - (lambda (port) #f))))) - '#+all-mozilla-115-locales) - (copy-recursively #+mozilla-115-compare-locales - "compare-locales" - #:log (%make-void-port "w")) - (delete-file "compare-locales/.gitignore") - (delete-file "compare-locales/.hgignore") - (delete-file "compare-locales/.hgtags"))) - - (format #t "Running makeicecat script...~%") - (force-output) - (invoke "bash" "/tmp/gnuzilla/makeicecat") - - (format #t "Packing IceCat source tarball...~%") - (force-output) - (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args))) - (invoke "tar" "cfa" #$output - ;; Avoid non-determinism in the archive. We set the - ;; mtime of files in the archive to early 1980 because - ;; the build process fails if the mtime of source - ;; files is pre-1980, due to the creation of zip - ;; archives. - "--mtime=@315619200" ; 1980-01-02 UTC - "--owner=root:0" - "--group=root:0" - "--sort=name" - icecat-dir))))))))) - (define mozilla-compare-locales (origin (method git-fetch) (uri (git-reference (url "https://github.com/mozilla/compare-locales") - (commit "RELEASE_9_0_4"))) + (commit "RELEASE_9_0_4"))) ;use the latest release (file-name "mozilla-compare-locales") (sha256 (base32 "13qn983j0pgs2550fgd5gvnl4lq6ywqjvgbyx850jwg79w8b0ifz")))) @@ -703,25 +390,143 @@ variable defined below. It requires guile-json to be installed." (origin (method git-fetch) (uri (git-reference - (url "https://github.com/mozilla-l10n/firefox-l10n") - (commit "fcd0300e8478d1ec4d1c097a073ddb8e1e0351e3"))) + (url "https://github.com/mozilla-l10n/firefox-l10n") + ;; Use the revision specified in the + ;; browser/locales/l10n-changesets.json file of the used firefox + ;; source (all the languages normally use the same revision). + (commit "a0c1ffda4ed19c0399e4175610361179e09829de"))) (file-name "mozilla-l10n") - (sha256 (base32 "1pzw65852ix6a6qb3wwhg5vrkz8337cs6lznk2vj0md5cvf2rrc4")))) - + (sha256 (base32 "1gqphgj4qzhmc2aqj3r1hzwnshcjsrkyws3lbrcqn0yzwvzc8b73")))) + +(define (format-locales all-locales-file) + "Format a Scheme list of all the locales string found in ALL-LOCALES-FILE. +In the case of Thunderbird, that file is comm/mail/locales/all-locales, while +in the case of Firefox, it is browser/locales/all-locales." + (pretty-print (string-split + (string-trim-right + (call-with-input-file all-locales-file + get-string-all)) + #\newline))) + +;;; To regenerate, use the above `format-locales' procedure. (define %icecat-locales - '("ach" "af" "an" "ar" "ast" "az" "be" "bg" "bn" "br" "bs" "ca" "cak" - "ca-valencia" "cs" "cy" "da" "de" "dsb" "el" "en-CA" "en-GB" "eo" - "es-AR" "es-CL" "es-ES" "es-MX" "et" "eu" "fa" "ff" "fi" "fr" "fur" - "fy-NL" "ga-IE" "gd" "gl" "gn" "gu-IN" "he" "hi-IN" "hr" "hsb" "hu" - "hy-AM" "ia" "id" "is" "it" "ja" "ja-JP-mac" "ka" "kab" "kk" "km" - "kn" "ko" "lij" "lt" "lv" "mk" "mr" "ms" "my" "nb-NO" "ne-NP" "nl" - "nn-NO" "oc" "pa-IN" "pl" "pt-BR" "pt-PT" "rm" "ro" "ru" "sat" "sc" - "sco" "si" "sk" "skr" "sl" "son" "sq" "sr" "sv-SE" "szl" "ta" "te" - "tg" "th" "tl" "tr" "trs" "uk" "ur" "uz" "vi" "xh" "zh-CN" "zh-TW")) - -(define %icecat-base-version "128.14.0") + '("ach" + "af" + "an" + "ar" + "ast" + "az" + "be" + "bg" + "bn" + "bo" + "br" + "brx" + "bs" + "ca" + "ca-valencia" + "cak" + "ckb" + "cs" + "cy" + "da" + "de" + "dsb" + "el" + "en-CA" + "en-GB" + "eo" + "es-AR" + "es-CL" + "es-ES" + "es-MX" + "et" + "eu" + "fa" + "ff" + "fi" + "fr" + "fur" + "fy-NL" + "ga-IE" + "gd" + "gl" + "gn" + "gu-IN" + "he" + "hi-IN" + "hr" + "hsb" + "hu" + "hy-AM" + "hye" + "ia" + "id" + "is" + "it" + "ja" + "ja-JP-mac" + "ka" + "kab" + "kk" + "km" + "kn" + "ko" + "lij" + "lo" + "lt" + "ltg" + "lv" + "meh" + "mk" + "ml" + "mr" + "ms" + "my" + "nb-NO" + "ne-NP" + "nl" + "nn-NO" + "oc" + "pa-IN" + "pl" + "pt-BR" + "pt-PT" + "rm" + "ro" + "ru" + "sat" + "sc" + "scn" + "sco" + "si" + "sk" + "skr" + "sl" + "son" + "sq" + "sr" + "sv-SE" + "szl" + "ta" + "te" + "tg" + "th" + "tl" + "tr" + "trs" + "uk" + "ur" + "uz" + "vi" + "wo" + "xh" + "zh-CN" + "zh-TW")) + +(define %icecat-base-version (package-version mozjs)) (define %icecat-version (string-append %icecat-base-version "-gnu1")) -(define %icecat-build-id "20250819000000") ;must be of the form YYYYMMDDhhmmss +(define %icecat-build-id "20250826000000") ;must be of the form YYYYMMDDhhmmss ;; 'icecat-source' is a "computed" origin that generates an IceCat tarball ;; from the corresponding upstream Firefox ESR tarball, using the 'makeicecat' @@ -732,16 +537,7 @@ variable defined below. It requires guile-json to be installed." (sub-version (third (string-split %icecat-base-version #\.))) (upstream-firefox-version (string-append %icecat-base-version "esr")) - (upstream-firefox-source - (origin - (method url-fetch) - (uri (string-append - "https://ftp.mozilla.org/pub/firefox/releases/" - upstream-firefox-version "/source/" - "firefox-" upstream-firefox-version ".source.tar.xz")) - (sha256 - (base32 - "0lwsn1y988naxs9031sbzsh9b0x7c6zmpf89y4pv477l55ifzfck")))) + (upstream-firefox-source (package-source mozjs)) (gnuzilla-commit "ba161be3de71bb556be951ac4dbb81c807f68770") (gnuzilla-source @@ -760,11 +556,14 @@ variable defined below. It requires guile-json to be installed." ;; in 'assume-valid-file-name' to avoid 'local-file' warnings. (makeicecat-patch (local-file (assume-valid-file-name - (search-patch "icecat-makeicecat.patch"))))) + (search-patch "icecat-makeicecat.patch")))) + (makeicecat-update-patch + (local-file (assume-valid-file-name + (search-patch "icecat-makeicecat-update.patch"))))) (origin (method computed-origin-method) - (file-name (string-append "icecat-" %icecat-version ".tar.xz")) + (file-name (string-append "icecat-" %icecat-version ".tar.zst")) (sha256 #f) (uri (delay @@ -784,6 +583,7 @@ variable defined below. It requires guile-json to be installed." #+(canonical-package findutils) #+(canonical-package patch) #+(canonical-package xz) + #+(canonical-package zstd) #+(canonical-package sed) #+(canonical-package grep) #+(canonical-package bzip2) @@ -811,6 +611,8 @@ variable defined below. It requires guile-json to be installed." (make-file-writable "makeicecat") (invoke "patch" "--force" "--no-backup-if-mismatch" "-p1" "--input" #+makeicecat-patch) + (invoke "patch" "--force" "--no-backup-if-mismatch" + "-p1" "--input" #+makeicecat-update-patch) (patch-shebang "makeicecat") (substitute* "makeicecat" (("^readonly FFMAJOR=(.*)" all ffmajor) @@ -844,27 +646,23 @@ variable defined below. It requires guile-json to be installed." (with-directory-excursion "l10n" (for-each (lambda (locale) - (let ((locale-dir - (string-append #+mozilla-l10n "/" locale))) + (let ((locale-dir (string-append #+mozilla-l10n "/" + locale))) (format #t " ~a~%" locale) (force-output) (copy-recursively locale-dir locale #:log (%make-void-port "w")) (for-each make-file-writable (find-files locale)) (with-directory-excursion locale - (when (file-exists? ".hgtags") - (delete-file ".hgtags")) (mkdir-p "browser/chrome/browser/preferences") - (call-with-output-file - "browser/chrome/browser/preferences/advanced-scripts.dtd" + (call-with-output-file "browser/chrome/browser/\ +preferences/advanced-scripts.dtd" (lambda (port) #f))))) '#+%icecat-locales) (copy-recursively #+mozilla-compare-locales "compare-locales" #:log (%make-void-port "w")) - (delete-file "compare-locales/.gitignore") - (delete-file "compare-locales/.hgignore") - (delete-file "compare-locales/.hgtags"))) + (delete-file "compare-locales/.gitignore"))) (format #t "Running makeicecat script...~%") (force-output) @@ -872,7 +670,7 @@ variable defined below. It requires guile-json to be installed." (format #t "Packing IceCat source tarball...~%") (force-output) - (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args))) + (setenv "ZSTD_NBTHREADS" (number->string (parallel-job-count))) (invoke "tar" "cfa" #$output ;; Avoid non-determinism in the archive. We set the ;; mtime of files in the archive to early 1980 because @@ -909,7 +707,7 @@ variable defined below. It requires guile-json to be installed." libcanberra libgnome libjpeg-turbo - libpng-apng + libpng-apng-next ;; UNBUNDLE-ME! libogg ;; UNBUNDLE-ME! libtheora ; wants theora-1.2, not yet released ;; UNBUNDLE-ME! libvorbis @@ -974,6 +772,7 @@ variable defined below. It requires guile-json to be installed." #:configure-flags #~(list + "--disable-fhs" "--enable-application=browser" "--with-distribution-id=org.gnu" "--enable-geckodriver" @@ -1011,8 +810,6 @@ variable defined below. It requires guile-json to be installed." (dirname (search-input-file %build-inputs "lib/libclang.so"))) - "--enable-official-branding" - ;; TODO: Add support for wasm sandboxed libraries. "--without-wasm-sandboxed-libraries" @@ -1058,7 +855,9 @@ variable defined below. It requires guile-json to be installed." '(#$(local-file (search-patch "icecat-compare-paths.patch")) #$(local-file - (search-patch "icecat-use-system-wide-dir.patch")))))) + (search-patch "icecat-use-system-wide-dir.patch")) + #$(local-file + (search-patch "icecat-fhs-configure-option.patch")))))) (add-after 'apply-guix-specific-patches 'remove-bundled-libraries (lambda _ ;; Remove bundled libraries that we don't use, since they may @@ -1176,7 +975,9 @@ variable defined below. It requires guile-json to be installed." ;; complain that it's not able to change Cargo.lock. ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373 (substitute* "build/RunCbindgen.py" - (("args.append\\(\"--frozen\"\\)") "pass")))) + (("args.append\\(\"--frozen\"\\)") "pass")) + (substitute* "config/makefiles/rust.mk" + (("cargo_build_flags \\+= --frozen") "")))) (delete 'bootstrap) (replace 'configure ;; configure does not work followed by both "SHELL=..." and @@ -1255,7 +1056,28 @@ variable defined below. It requires guile-json to be installed." ;; reason. Use 'find-files' to avoid having to deal with the ;; system/architecture-specific file name. (install-file (first (find-files "." "geckodriver")) - (string-append #$output "/bin")))) + (string-append #$output "/bin")) + ;; Install a policies.json file as an extra step to ensure + ;; IceCat does not call home. The available policies can be + ;; found at <https://mozilla.github.io/policy-templates/>. + + ;; TODO: Disable remote settings feature when it becomes + ;; possible to do so (see: + ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1988070>). + (let ((policies.json (string-append + #$output + "/lib/icecat/distribution/policies.json"))) + (mkdir-p (dirname policies.json)) + (call-with-output-file policies.json + (lambda (p) + (format p "\ +{ + \"policies\": { + \"DisableFirefoxAccounts\": true, + \"DisableTelemetry\": true, + \"DisablePocket\": true + } +}~%")))))) (add-after 'install 'wrap-program (lambda* (#:key inputs #:allow-other-keys) (let* ((lib (string-append #$output "/lib")) @@ -1287,20 +1109,24 @@ variable defined below. It requires guile-json to be installed." (add-after 'wrap-program 'install-desktop-entry (lambda _ ;; Install the '.desktop' file. - (let* ((desktop-file "taskcluster/docker/icecat-snap/icecat.desktop") + (let* ((desktop-file (string-append "toolkit/mozapps/installer" + "/linux/rpm/mozilla.desktop")) (applications (string-append #$output "/share/applications"))) (substitute* desktop-file - (("^Exec=icecat") (string-append "Exec=" #$output "/bin/icecat")) - (("IceCat") "GNU IceCat") - (("Icon=.*") "Icon=icecat\n") - (("NewWindow") "new-window") - (("NewPrivateWindow") "new-private-window") - (("StartupNotify=true") - "StartupNotify=true\nStartupWMClass=Icecat")) - (install-file desktop-file applications)))) + (("@MOZ_APP_NAME@") + "icecat") + (("^Exec=icecat") + (string-append "Exec=" #$output "/bin/icecat")) + (("@MOZ_APP_DISPLAYNAME@") + "GNU IceCat") + (("@MOZ_APP_REMOTINGNAME@") + "Icecat")) + (mkdir-p applications) + (copy-file desktop-file + (string-append applications "/icecat.desktop"))))) (add-after 'install-desktop-entry 'install-icons (lambda _ - (with-directory-excursion "browser/branding/official" + (with-directory-excursion "browser/branding/unofficial" (for-each (lambda (file) (let* ((size (string-filter char-numeric? file)) @@ -1309,13 +1135,13 @@ variable defined below. It requires guile-json to be installed." (mkdir-p icons) (copy-file file (string-append icons "/icecat.png")))) '("default16.png" "default22.png" "default24.png" - "default32.png" "default48.png" "content/icon64.png" - "mozicon128.png" "default256.png")))))))) + "default32.png" "default48.png" "default256.png" + "content/icon64.png" "mozicon128.png" )))))))) (native-search-paths (list (search-path-specification - (variable "ICECAT_SYSTEM_DIR") - (separator #f) ;single entry - (files '("lib/icecat"))))) + (variable "MOZILLA_SYSTEM_DIR") + (separator #f) ;single entry + (files '("lib/icecat"))))) (home-page "https://www.gnu.org/software/gnuzilla/") (synopsis "Entirely free browser derived from Mozilla Firefox") (description @@ -1330,57 +1156,110 @@ testing.") (cpe-name . "firefox_esr") (cpe-version . ,(first (string-split version #\-))))))) -(define %icedove-build-id "20241119000000") ;must be of the form YYYYMMDDhhmmss -(define %icedove-version "115.16.3") +(define %icedove-build-id "20250901000000") ;must be of the form YYYYMMDDhhmmss +(define %icedove-version "140.2.0") ;; Provides the "comm" folder which is inserted into the icecat source. -;; Avoids the duplication of Icecat's source tarball. +;; Avoids the duplication of Icecat's source tarball. Pick the changeset that +;; matches the most recent tag of the form 'THUNDERBIRD_140_2_0esr_RELEASE'. (define thunderbird-comm-source (origin (method hg-fetch) (uri (hg-reference - (url "https://hg.mozilla.org/releases/comm-esr115") - (changeset "8ab43355c97d91f5adaae732fb8c9f5ca210fe8b"))) + (url "https://hg.mozilla.org/releases/comm-esr140") + (changeset "8414dffeb4d53578bd90c11d4a2dd933bdc08b85"))) (file-name (string-append "thunderbird-" %icedove-version "-checkout")) (sha256 (base32 - "1fax5sdc087ly62fh2g4yvi7v80vrhn94hpzdr98a4m3psdgglh0")))) - -(define (comm-source->locales+changeset source) - "Given SOURCE, a checkout of the Thunderbird 'comm' component, return the -list of languages supported as well as the currently used changeset." - (match (update-mozilla-115-locales - (string-append source "/mail/locales/l10n-changesets.json")) - (((_ changeset locale) ...) - (values locale (first changeset))))) + "0w12dc5h9bp8sx8qcgy5krd2y74x35hh1jwg9i1gjm9fidh4x64r")) + (patches (search-patches "icedove-observer-fix.patch")))) -;;; Generated with comm-source->locales+changeset. +;;; To regenerate, see the `format-locales' helper defined above. (define %icedove-locales - '("af" "ar" "ast" "be" "bg" "br" "ca" "cak" "cs" "cy" "da" "de" "dsb" "el" - "en-CA" "en-GB" "es-AR" "es-ES" "es-MX" "et" "eu" "fi" "fr" "fy-NL" "ga-IE" - "gd" "gl" "he" "hr" "hsb" "hu" "hy-AM" "id" "is" "it" "ja" "ja-JP-mac" "ka" - "kab" "kk" "ko" "lt" "lv" "ms" "nb-NO" "nl" "nn-NO" "pa-IN" "pl" "pt-BR" - "pt-PT" "rm" "ro" "ru" "sk" "sl" "sq" "sr" "sv-SE" "th" "tr" "uk" "uz" "vi" - "zh-CN" "zh-TW")) + '("af" + "ar" + "ast" + "be" + "bg" + "br" + "ca" + "cak" + "cs" + "cy" + "da" + "de" + "dsb" + "el" + "en-CA" + "en-GB" + "es-AR" + "es-ES" + "es-MX" + "et" + "eu" + "fi" + "fr" + "fy-NL" + "ga-IE" + "gd" + "gl" + "he" + "hr" + "hsb" + "hu" + "hy-AM" + "id" + "is" + "it" + "ja" + "ja-JP-mac" + "ka" + "kab" + "kk" + "ko" + "lt" + "lv" + "mk" + "ms" + "nb-NO" + "nl" + "nn-NO" + "pa-IN" + "pl" + "pt-BR" + "pt-PT" + "rm" + "ro" + "ru" + "sk" + "sl" + "sq" + "sr" + "sv-SE" + "th" + "tr" + "uk" + "uz" + "vi" + "zh-CN" + "zh-TW")) (define thunderbird-comm-l10n (origin (method url-fetch) (uri (string-append "https://ftp.mozilla.org/pub/thunderbird/releases/" - %icedove-version - "/source/thunderbird-" - %icedove-version - ".strings_all.tar.zst")) + %icedove-version "esr/source/thunderbird-" + %icedove-version "esr.strings_all.tar.zst")) (sha256 (base32 - "1nnvnfhbb7174898i62a9sy1zxc5qw3nhmf9agy1p6jvldn5nb8z")))) + "0aaxpp165nvw3kqz9d7lgn0vsdxdn6mzz0s86llp72wmb06kp7ip")))) (define icedove-source (let ((name (string-append "icedove-" %icedove-version))) (origin (method computed-origin-method) - (file-name (string-append name ".tar.xz")) + (file-name (string-append name ".tar.zst")) (sha256 #f) (uri (delay @@ -1392,13 +1271,12 @@ list of languages supported as well as the currently used changeset." (set-path-environment-variable "PATH" '("bin") (list #+(canonical-package tar) - #+(canonical-package xz) #+(canonical-package zstd))) ;; Extract the base Icecat tarball, renaming its top-level ;; directory. (invoke "tar" "--transform" (string-append "s,[^/]*," #$name ",") - "-xf" #$icecat-115-source) + "-xf" #$icecat-source) (chdir #$name) ;; *Replace* the l10n directory with that of Thunderbird. @@ -1407,17 +1285,16 @@ list of languages supported as well as the currently used changeset." (invoke "tar" "--extract" "--file" #$thunderbird-comm-l10n "--strip-components=1" "--directory" "l10n/") - ;; Add the Thunderbird-specific "comm" directory.. + ;; Add the Thunderbird-specific "comm" directory. (mkdir "comm") (copy-recursively #$thunderbird-comm-source "comm") + (for-each make-file-writable (find-files "comm")) (delete-file "sourcestamp.txt") ;; Adjust the application name. - (substitute* "comm/mail/confvars.sh" - (("MOZ_APP_NAME=thunderbird") - "MOZ_APP_NAME=icedove") - (("MOZ_UPDATER=1") - "MOZ_UPDATER=0")) + (substitute* "comm/mail/moz.configure" + (("\"MOZ_APP_NAME\", \"thunderbird\"") + "\"MOZ_APP_NAME\", \"icedove\"")) ;; Remove branding to comply with Mozilla's trademark policy (with-directory-excursion "comm/mail/branding/nightly" @@ -1445,7 +1322,7 @@ list of languages supported as well as the currently used changeset." (substitute* '("overrides/app-license-name.html") (("Thunderbird") "Icedove"))) (with-directory-excursion "comm/mail/components/" - (substitute* '("MailGlue.jsm" + (substitute* '("MailGlue.sys.mjs" "extensions/schemas/addressBook.json" "extensions/schemas/tabs.json" "extensions/schemas/cloudFile.json" @@ -1457,7 +1334,8 @@ list of languages supported as well as the currently used changeset." "enterprisepolicies/helpers/moz.build" "enterprisepolicies/schemas/moz.build") (("Thunderbird") "Icedove"))) - (substitute* '("comm/mailnews/base/prefs/content/accountUtils.js" + (substitute* '("devtools/startup/DevToolsStartup.sys.mjs" + "comm/mailnews/base/prefs/content/accountUtils.js" "comm/mail/base/content/customizeToolbar.js" "comm/suite/components/customizeToolbar.js") (("AppConstants.MOZ_APP_NAME (.)= \"thunderbird" _ e) @@ -1475,6 +1353,8 @@ list of languages supported as well as the currently used changeset." (string-append m ", false);")) (("(pref\\(\"lightweightThemes.update.enabled\").*" _ m) (string-append m ", false);")) + (("(pref\\(\"services.settings.server\").*" _ m) + (string-append m ", \"\");")) ;; XXX: The autoDisableScopes is tweaked by the makeicecat ;; script, but it doesn't know about Thunderbird. This is @@ -1489,11 +1369,21 @@ list of languages supported as well as the currently used changeset." (string-append anchor "pref(\"intl.locale.requested\", \"\");\n"))) + ;; Fix more discrepancies caused by the fact that the + ;; makeicecat script didn't run on the Thunderbird sources. + (substitute* '("Cargo.lock" + "comm/rust/Cargo.lock" + "comm/rust/Cargo.toml" + "gfx/qcms/Cargo.toml" + "toolkit/library/rust/shared/Cargo.toml") + (("IceCatGraphics") "FirefoxGraphics") + (("firefox-on-glean") "icecat-on-glean")) + ;; Step out of the directory and create the tarball. (chdir "..") (format #t "Packing Icedove source tarball...~%") (force-output) - (setenv "XZ_DEFAULTS" (string-join (%xz-parallel-args))) + (setenv "ZSTD_NBTHREADS" (number->string (parallel-job-count))) (invoke "tar" "cfa" #$output "--mtime=@315619200" ;1980-01-02 UTC "--owner=root:0" @@ -1519,6 +1409,11 @@ list of languages supported as well as the currently used changeset." ,@%default-gnu-modules) #:phases #~(modify-phases %standard-phases + (add-after 'unpack 'do-not-verify-vendored-rust-dependencies + (lambda _ + (substitute* "comm/python/rocbuild/rocbuild/rust.py" + (("result = check_vendored_dependencies\\(topsrcdir)") + "sys.exit(0)")))) (add-after 'patch-source-shebangs 'patch-cargo-checksums (lambda _ (use-modules (guix build cargo-utils)) @@ -1531,15 +1426,35 @@ ca495991b7852b855")) (string-append "checksum = \"" null-hash "\"")))) (find-files "." "Cargo.lock$")) (for-each generate-all-checksums - '("third_party/rust" - "toolkit/library/rust"))))) + '("services" + "js" + "third_party/rust" + "dom/media" + "dom/webauthn" + "toolkit" + "gfx" + "storage" + "modules" + "xpcom/rust" + "media" + "mozglue/static/rust" + "netwerk" + "remote" + "intl" + "servo" + "security/manager/ssl" + "build" + ;; Thunderbird-specific. + "comm"))))) (add-after 'patch-cargo-checksums 'remove-cargo-frozen-flag (lambda _ ;; Remove --frozen flag from cargo invocation, otherwise it'll ;; complain that it's not able to change Cargo.lock. ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1726373 (substitute* "build/RunCbindgen.py" - (("\"--frozen\",") "")))) + (("args.append\\(\"--frozen\"\\)") "pass")) + (substitute* "config/makefiles/rust.mk" + (("cargo_build_flags \\+= --frozen") "")))) ;; Fixes issue where each installation directory generates its own ;; profile (see: ;; https://trac.torproject.org/projects/tor/ticket/31457). @@ -1589,8 +1504,6 @@ ca495991b7852b855")) (setenv "MOZ_NOSPAM" "1") (setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system") - (setenv "PYTHON" - (search-input-file inputs "/bin/python")) (setenv "GUIX_PYTHONPATH" (string-append (getcwd) "/obj-x86_64-pc-linux-gnu/_virtualenvs/build")) @@ -1624,6 +1537,7 @@ ca495991b7852b855")) "ac_add_options --enable-optimize\n" "ac_add_options --enable-pulseaudio\n" "ac_add_options --enable-release\n" + "ac_add_options --enable-rust-simd\n" "ac_add_options --enable-strip\n" "ac_add_options --enable-system-ffi\n" "ac_add_options --enable-system-pixman\n" @@ -1723,14 +1637,13 @@ ca495991b7852b855")) cairo cups dbus-glib - ;; Support for FFmpeg 6 was only added in version 112 (see: - ;; https://bugzilla.mozilla.org/show_bug.cgi?id=1819374). + eudev + ffmpeg freetype gdk-pixbuf glib gpgme gtk+ - gtk+-2 hunspell icu4c libcanberra @@ -1740,31 +1653,29 @@ ca495991b7852b855")) libjpeg-turbo libnotify libpng-apng + libva libvpx libxcomposite libxft libxinerama libxscrnsaver libxt - libva mesa mit-krb5 nspr - nss + nss-rapid pango pciutils pixman pulseaudio sqlite startup-notification - eudev unzip zip zlib)) (native-inputs - (list `(,rust "cargo") - clang-15 - llvm-15 + (list clang-20 + llvm-20 m4 nasm node-lts @@ -1772,7 +1683,8 @@ ca495991b7852b855")) pkg-config python-wrapper rust - rust-cbindgen-0.24 + `(,rust "cargo") + rust-cbindgen which yasm)) (home-page "https://www.thunderbird.net") @@ -1833,9 +1745,6 @@ their corresponding VERSION, SOURCE and LOCALES variables." (string-append (getcwd) "/mach_state")) (setenv "MOZCONFIG" (string-append (getcwd) "/.mozconfig")) (setenv "MACH_BUILD_PYTHON_NATIVE_PACKAGE_SOURCE" "system") - (setenv "GUIX_PYTHONPATH" - (string-append (getcwd) - "/obj/_virtualenvs/build/lib/python3.11/site-packages")) (setenv "BUILD_BACKENDS" "FasterMake,RecursiveMake"))) (replace 'build ;build and install data files (lambda* (#:key outputs #:allow-other-keys) @@ -1845,6 +1754,13 @@ their corresponding VERSION, SOURCE and LOCALES variables." (error "could not find file in dir" name dir)) (car files))) + ;; Register "tb_common" as a valid site, to please the mach + ;; virtualenv machinery (see: + ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1986420>). + (substitute* "python/mach/mach/site.py" + (("\"mach\", \"build\", \"common\"" all) + (string-append all ", \"tb_common\""))) + (for-each (lambda (l) (let* ((out (assoc-ref outputs l)) @@ -1868,10 +1784,9 @@ their corresponding VERSION, SOURCE and LOCALES variables." 'thunderbird '#$project)))) (format #t "processing locale `~a'...~%" l) - ;; XXX: For some reasons, on version 115, there are some - ;; parsing errors that cause the build system to - ;; return an unclean exit code; use system* to ignore - ;; errors. + ;; TODO: Revert to use 'invoke' here, after + ;; <https://bugzilla.mozilla.org/show_bug.cgi?id=1988069> + ;; is fixed. (system* "./mach" "build" (string-append "langpack-" l)) (mkdir-p ext-dir) (let ((xpi (find-file "obj" (string-append @@ -1886,7 +1801,10 @@ their corresponding VERSION, SOURCE and LOCALES variables." (native-inputs (list m4 perl - python-wrapper + python + python-aiohttp + python-async-timeout + python-dateutil node-lts unzip)) (home-page "https://www.mozilla.org/") diff --git a/gnu/packages/image.scm b/gnu/packages/image.scm index 1b3327d74b..fac99ed9da 100644 --- a/gnu/packages/image.scm +++ b/gnu/packages/image.scm @@ -332,36 +332,35 @@ APNG patch provides APNG support to libpng.") ;; Temporary, until 76798 merges into core-packages-team, and that merges into ;; master. -(define-public libpng-apng-for-librewolf - (hidden-package - (package - (inherit libpng-apng) - (version "1.6.46") - (source - (origin - (method url-fetch) - (uri (list (string-append "mirror://sourceforge/libpng/libpng16/" - version "/libpng-" version ".tar.xz") - (string-append - "ftp://ftp.simplesystems.org/pub/libpng/png/src" - "/libpng16/libpng-" version ".tar.xz") - (string-append - "ftp://ftp.simplesystems.org/pub/libpng/png/src/history" - "/libpng16/libpng-" version ".tar.xz"))) - (sha256 - (base32 - "1cbwf20zlm4gcv8rpjivkngrjgl5366w21lr9qmbk2lr0dq8papk")))) - (inputs - (modify-inputs (package-inputs libpng-apng) - (replace "apng" - (origin - (method url-fetch) - (uri - (string-append "mirror://sourceforge/libpng-apng/libpng16/" - version "/libpng-" version "-apng.patch.gz")) - (sha256 - (base32 - "00ykl1bzb79xsjwrq7dl0yz9dz5g3zwj0lry5zam3vs6s3gw5gi9"))))))))) +(define-public libpng-apng-next + (package + (inherit libpng-apng) + (version "1.6.46") + (source + (origin + (method url-fetch) + (uri (list (string-append "mirror://sourceforge/libpng/libpng16/" + version "/libpng-" version ".tar.xz") + (string-append + "ftp://ftp.simplesystems.org/pub/libpng/png/src" + "/libpng16/libpng-" version ".tar.xz") + (string-append + "ftp://ftp.simplesystems.org/pub/libpng/png/src/history" + "/libpng16/libpng-" version ".tar.xz"))) + (sha256 + (base32 + "1cbwf20zlm4gcv8rpjivkngrjgl5366w21lr9qmbk2lr0dq8papk")))) + (inputs + (modify-inputs (package-inputs libpng-apng) + (replace "apng" + (origin + (method url-fetch) + (uri + (string-append "mirror://sourceforge/libpng-apng/libpng16/" + version "/libpng-" version "-apng.patch.gz")) + (sha256 + (base32 + "00ykl1bzb79xsjwrq7dl0yz9dz5g3zwj0lry5zam3vs6s3gw5gi9")))))))) (define-public pngcrush (package diff --git a/gnu/packages/librewolf.scm b/gnu/packages/librewolf.scm index 346249f504..4531b0b9ad 100644 --- a/gnu/packages/librewolf.scm +++ b/gnu/packages/librewolf.scm @@ -641,7 +641,7 @@ libjpeg-turbo libnotify libpciaccess - libpng-apng-for-librewolf + libpng-apng-next libva libvpx libwebp diff --git a/gnu/packages/patches/icecat-compare-paths.patch b/gnu/packages/patches/icecat-compare-paths.patch index 87a49d58fa..6c3f503f35 100644 --- a/gnu/packages/patches/icecat-compare-paths.patch +++ b/gnu/packages/patches/icecat-compare-paths.patch @@ -2,20 +2,11 @@ See comment in gnu/build/icecat-extension.scm. --- a/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs +++ b/toolkit/mozapps/extensions/internal/XPIDatabase.sys.mjs -@@ -3613,6 +3613,7 @@ const XPIDatabaseReconcile = { +@@ -3753,6 +3753,7 @@ if ( newAddon || oldAddon.updateDate != xpiState.mtime || + oldAddon.path != xpiState.path || - (aUpdateCompatibility && this.isAppBundledLocation(installLocation)) - ) { - newAddon = this.updateMetadata( -@@ -3621,8 +3622,6 @@ const XPIDatabaseReconcile = { - xpiState, - newAddon - ); -- } else if (oldAddon.path != xpiState.path) { -- newAddon = this.updatePath(installLocation, oldAddon, xpiState); - } else if (aUpdateCompatibility || aSchemaChange) { - newAddon = this.updateCompatibility( - installLocation, + (aUpdateCompatibility && this.isAppBundledLocation(installLocation)) || + // update addon metadata if the addon in bundled into + // the omni jar and version or the resource URI pointing diff --git a/gnu/packages/patches/icecat-fhs-configure-option.patch b/gnu/packages/patches/icecat-fhs-configure-option.patch new file mode 100644 index 0000000000..6c1e4b8b83 --- /dev/null +++ b/gnu/packages/patches/icecat-fhs-configure-option.patch @@ -0,0 +1,38 @@ +Upstream-status: https://phabricator.services.mozilla.com/D263231 + +diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure +index 6162d68699dd..193272588caa 100644 +--- a/build/moz.configure/init.configure ++++ b/build/moz.configure/init.configure +@@ -1351,3 +1351,17 @@ option( + help="Object code libraries in DIR", + ) + set_config("libdir", depends("--libdir")(lambda ldir: ldir[0])) ++ ++# Support for using platform-specific standard (FHS-like) locations. ++option( ++ "--enable-fhs", ++ default=True, ++ help="Enable the search of standard platform-specific (FHS-like) locations", ++) ++ ++@depends("--enable-fhs") ++def use_fhs(value): ++ return bool(value) ++ ++set_config("USE_FHS", use_fhs) ++set_define("USE_FHS", use_fhs) +diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp +index 547cc4c255c4..79133c879be4 100644 +--- a/toolkit/xre/nsXREDirProvider.cpp ++++ b/toolkit/xre/nsXREDirProvider.cpp +@@ -295,6 +295,9 @@ static nsresult GetSystemParentDirectory(nsIFile** aFile) { + localDir.forget(aFile); + return rv; + } ++# ifndef USE_FHS ++ return rv; ++# endif + + // ... falling back to the conventional fixed location otherwise. + # if defined(XP_MACOSX) diff --git a/gnu/packages/patches/icecat-makeicecat-update.patch b/gnu/packages/patches/icecat-makeicecat-update.patch new file mode 100644 index 0000000000..2ce3f217dd --- /dev/null +++ b/gnu/packages/patches/icecat-makeicecat-update.patch @@ -0,0 +1,1070 @@ +Upstream-status: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=79355 + +diff --git a/data/branding/icecat/configure.sh b/data/branding/icecat/configure.sh +index 7481c2c..edcf9a8 100644 +--- a/data/branding/icecat/configure.sh ++++ b/data/branding/icecat/configure.sh +@@ -2,4 +2,4 @@ + # 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/. + +-MOZ_APP_DISPLAYNAME=IceCat ++MOZ_APP_DISPLAYNAME=GNU IceCat +diff --git a/data/extensions/jsr@javascriptrestrictor/update.js b/data/extensions/jsr@javascriptrestrictor/update.js +index 83ccbb8..df19c28 100644 +--- a/data/extensions/jsr@javascriptrestrictor/update.js ++++ b/data/extensions/jsr@javascriptrestrictor/update.js +@@ -21,10 +21,6 @@ + // along with this program. If not, see <https://www.gnu.org/licenses/>. + // + +-let defaultNbsWhitelistDomain = "duckduckgo.com"; +-let defaultNbsWhitelist = {}; +-defaultNbsWhitelist[defaultNbsWhitelistDomain] = true; +- + async function installUpdate() { + /** + * 0.3+ storage +@@ -367,7 +363,7 @@ async function installUpdate() { + }; + } + item.fpDetectionOn = true; +- item.nbsWhitelist = item.whitelistedHosts ? item.whitelistedHosts : defaultNbsWhitelist; ++ item.nbsWhitelist = item.whitelistedHosts ? item.whitelistedHosts : {}; + delete item.whitelistedHosts; + item.nbsSettings = { + notifications: 1 +@@ -482,7 +478,6 @@ async function installUpdate() { + l.wasm = 1; + } + } +- item.nbsWhitelist[defaultNbsWhitelistDomain] = true; + item.version = 7; + } + +@@ -529,7 +524,7 @@ async function checkAndSaveConfig(conf, check_default = true) { + conf.__default__ = "2"; + } + checkExistAndType("domains", "object", {}); +- checkExistAndType("nbsWhitelist", "object", defaultNbsWhitelist); ++ checkExistAndType("nbsWhitelist", "object", {}); + checkExistAndType("nbsSettings", "object", {}); + checkSettingRange("nbsSettings", "blocking", [0,1], 1); + checkSettingRange("nbsSettings", "notifications", [0,1], 1); +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/reddit.js b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/reddit.js +index e37972b..9e7846c 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/reddit.js ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/reddit.js +@@ -8,20 +8,22 @@ const targets = [ + ]; + const redirects = [ + // libreddit: privacy w/ modern UI +- "https://safereddit.com", +- "https://reddit.rtrace.io", +- "https://libreddit.privacydev.net", +- "https://l.opnxng.com", +- "https://libreddit.projectsegfau.lt", +- "https://discuss.whatever.social", +- "https://snoo.habedieeh.re", +- "https://redlib.pussthecat.org", +- "https://redlib.northboot.xyz", +- "https://redlib.kylrth.com", +- "https://red.artemislena.eu", ++ "https://libredd.it", ++ "https://libreddit.spike.codes", ++ "https://libreddit.kavin.rocks", ++ "https://libreddit.insanity.wtf", ++ "https://libreddit.dothq.co", ++ "https://libreddit.silkky.cloud", ++ "https://libreddit.himiko.cloud", ++ "https://reddit.artemislena.eu", ++ "https://reddit.git-bruh.duckdns.org", ++ // teddit: privacy w/ old UI ++ "https://teddit.net", ++ "https://teddit.ggc-project.de", ++ "https://teddit.kavin.rocks", + "https://old.reddit.com", // desktop +- "http://red.lpoaj7z2zkajuhgnlltpeqh3zyq7wk2iyeggqaduhgxhyajtdt2j7wad.onion", +- "http://snoo.habeehrhadazsw3izbrbilqajalfyqqln54mrja3iwpqxgcuxnus7eid.onion", ++ "https://i.reddit.com", // mobile ++ "https://snew.notabug.io", // anti-censorship + ]; + const bypassPaths = /\/(gallery\/poll\/rpan\/settings\/topics)/; + +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/twitter.js b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/twitter.js +index f57fb68..f520d76 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/twitter.js ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/twitter.js +@@ -4,8 +4,6 @@ + when updating this list: + */ + const targets = [ +- "x.com", +- "mobile.x.com", + "twitter.com", + "www.twitter.com", + "mobile.twitter.com", +@@ -18,10 +16,26 @@ const targets = [ + (const nitterInstances) when updating this list: + */ + const redirects = [ +- "https://nitter.privacydev.net", +- "https://xcancel.com", +- "http://nitter.pjsfkvpxlinjamtawaksbnnaqs2fc2mtvmozrzckxh7f3kis6yea25ad.onion", +- "http://nitter.g4c3eya4clenolymqbpgwz3q3tawoxw56yhzk4vugqrl6dtu3ejvhjid.onion", ++ "https://nitter.net", ++ "https://nitter.snopyta.org", ++ "https://nitter.42l.fr", ++ "https://nitter.nixnet.services", ++ "https://nitter.pussthecat.org", ++ "https://nitter.dark.fail", ++ "https://nitter.tedomum.net", ++ "https://nitter.cattube.org", ++ "https://nitter.fdn.fr", ++ "https://nitter.1d4.us", ++ "https://nitter.kavin.rocks", ++ "https://tweet.lambda.dance", ++ "https://nitter.cc", ++ "https://nitter.vxempire.xyz", ++ "https://nitter.unixfox.eu", ++ "https://bird.trom.tf", ++ "http://3nzoldnxplag42gqjs23xvghtzf6t6yzssrtytnntc6ppc7xxuoneoad.onion", ++ "http://nitter.l4qlywnpwqsluw65ts7md3khrivpirse744un3x7mlskqauz5pyuzgqd.onion", ++ "http://nitterlgj3n5fgwesu3vxc5h67ruku33nqaoeoocae2mvlzhsu6k7fqd.onion", ++ "http://npf37k3mtzwxreiw52ccs5ay4e6qt2fkcs2ndieurdyn2cuzzsfyfvid.onion", + ]; + + export default { +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/youtube.js b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/youtube.js +index 53aa099..df6dda4 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/youtube.js ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/helpers/youtube.js +@@ -8,7 +8,6 @@ const targets = [ + "youtu.be", + "s.ytimg.com", + "music.youtube.com", +- "piped.video", + ]; + /* + Please remember to also update the manifest.json file +@@ -16,8 +15,29 @@ const targets = [ + when updating this list: + */ + const redirects = [ +- "https://inv.nadeko.net", +- "http://inv.nadekonw7plitnjuawu6ytjsl7jlglk2t6pyq6eftptmiv3dvqndwvyd.onion", ++ "https://invidious.snopyta.org", ++ "https://invidious.xyz", ++ "https://invidious.kavin.rocks", ++ "https://tube.connect.cafe", ++ "https://invidious.zapashcanon.fr", ++ "https://invidiou.site", ++ "https://vid.mint.lgbt", ++ "https://invidious.site", ++ "https://yewtu.be", ++ "https://invidious.tube", ++ "https://invidious.silkky.cloud", ++ "https://invidious.himiko.cloud", ++ "https://inv.skyn3t.in", ++ "https://tube.incognet.io", ++ "https://invidious.tinfoil-hat.net", ++ "https://invidious.namazso.eu", ++ "https://vid.puffyan.us", ++ "https://dev.viewtube.io", ++ "https://invidious.048596.xyz", ++ "http://fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad.onion", ++ "http://qklhadlycap4cnod.onion", ++ "http://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion", ++ "http://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion", + ]; + + export default { +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/remove-twitter-sw.js b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/remove-twitter-sw.js +index f8d9e76..d431f1a 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/remove-twitter-sw.js ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/assets/javascripts/remove-twitter-sw.js +@@ -1,8 +1,22 @@ + "use strict"; + + const nitterInstances = [ +- "https://nitter.privacydev.net", +- "https://nitter.lucabased.xyz" ++ "https://nitter.net", ++ "https://nitter.snopyta.org", ++ "https://nitter.42l.fr", ++ "https://nitter.nixnet.services", ++ "https://nitter.pussthecat.org", ++ "https://nitter.dark.fail", ++ "https://nitter.tedomum.net", ++ "https://nitter.cattube.org", ++ "https://nitter.fdn.fr", ++ "https://nitter.1d4.us", ++ "https://nitter.kavin.rocks", ++ "https://tweet.lambda.dance", ++ "https://nitter.cc", ++ "https://nitter.vxempire.xyz", ++ "https://nitter.unixfox.eu", ++ "https://bird.trom.tf" + ]; + + let disableNitter; +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/manifest.json b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/manifest.json +index d3bcec2..856e0dc 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/manifest.json ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/manifest.json +@@ -33,8 +33,6 @@ + "content_scripts": [ + { + "matches": [ +- "*://x.com/*", +- "*://mobile.x.com/*", + "*://twitter.com/*", + "*://www.twitter.com/*", + "*://mobile.twitter.com/*", +@@ -48,8 +46,29 @@ + }, + { + "matches": [ +- "*://inv.nadeko.net/*", +- "*://inv.nadekonw7plitnjuawu6ytjsl7jlglk2t6pyq6eftptmiv3dvqndwvyd.onion/*" ++ "*://invidious.snopyta.org/*", ++ "*://invidious.xyz/*", ++ "*://invidious.kavin.rocks/*", ++ "*://tube.connect.cafe/*", ++ "*://invidious.zapashcanon.fr/*", ++ "*://invidiou.site/*", ++ "*://vid.mint.lgbt/*", ++ "*://invidious.site/*", ++ "*://yewtu.be/*", ++ "*://invidious.tube/*", ++ "*://invidious.silkky.cloud/*", ++ "*://invidious.himiko.cloud/*", ++ "*://inv.skyn3t.in/*", ++ "*://tube.incognet.io/*", ++ "*://invidious.tinfoil-hat.net/*", ++ "*://invidious.namazso.eu/*", ++ "*://vid.puffyan.us/*", ++ "*://dev.viewtube.io/*", ++ "*://invidious.048596.xyz/*", ++ "*://fz253lmuao3strwbfbmx46yu7acac2jz27iwtorgmbqlkurlclmancad.onion/*", ++ "*://qklhadlycap4cnod.onion/*", ++ "*://c7hqkpkpemu6e7emz5b4vyz7idjgdvgaaa3dyimmeojqbgpea3xqjoid.onion/*", ++ "*://w6ijuptxiku4xpnnaetxvnkc5vqcdu7mgns2u77qefoixi63vbvnpnqd.onion/*" + ], + "js": [ + "assets/javascripts/persist-invidious-prefs.js" +@@ -70,4 +89,4 @@ + "strict_min_version": "67.0" + } + } +-} ++} +\ No newline at end of file +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/background/background.js b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/background/background.js +index c08d7b4..9b8c3a1 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/background/background.js ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/background/background.js +@@ -595,17 +595,10 @@ browser.webRequest.onBeforeRequest.addListener( + redirect = { + redirectUrl: redirectTwitter(url, initiator), + }; +-// +-// Bibliogram has been discontinued. +-// See <https://cadence.moe/blog/2022-09-01-discontinuing-bibliogram> +-// We'll keep this code in case the project is resurrected, but for +-// now we disable Bibliogram redirects and hide the associated UI. +-// +-// } else if (instagramDomains.includes(url.host)) { +-// redirect = { +-// redirectUrl: redirectInstagram(url, initiator, details.type), +-// }; +-// ++ } else if (instagramDomains.includes(url.host)) { ++ redirect = { ++ redirectUrl: redirectInstagram(url, initiator, details.type), ++ }; + } else if (url.href.match(googleMapsRegex)) { + redirect = { + redirectUrl: redirectGoogleMaps(url, initiator), +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.html b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.html +index c5d0096..65f1e9a 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.html ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.html +@@ -76,7 +76,7 @@ + </tbody> + </table> + </section> +-<!-- <section class="settings-block"> ++ <section class="settings-block"> + <table class="option" aria-label="Toggle Bibliogram redirects"> + <tbody> + <tr> +@@ -97,7 +97,7 @@ + </tr> + </tbody> + </table> +- </section> --> ++ </section> + <section class="settings-block"> + <table class="option" aria-label="Toggle OpenStreetMap redirects"> + <tbody> +@@ -225,7 +225,7 @@ + /> + </div> + </section> +-<!-- <section class="settings-block"> ++ <section class="settings-block"> + <h1 data-localise="__MSG_bibliogramInstance__">Bibliogram Instance</h1> + <div class="autocomplete"> + <input +@@ -235,7 +235,7 @@ + placeholder="Random instance (none selected)" + /> + </div> +- </section> --> ++ </section> + <section class="settings-block"> + <h1 data-localise="__MSG_osmInstance__">OpenStreetMap Instance</h1> + <div class="autocomplete"> +@@ -252,7 +252,7 @@ + <input + id="reddit-instance" + type="url" +- placeholder="https://libreddit.de" ++ placeholder="https://libredd.it" + /> + </div> + </section> +@@ -543,7 +543,7 @@ + </section> + <hr> + </div> +-<!-- <button type="button" class="collapsible"> ++ <button type="button" class="collapsible"> + Bibliogram + </button> + <div class="collapsible-content"> +@@ -558,7 +558,7 @@ + /> + </section> + <hr> +- </div> --> ++ </div> + </div> + + <div id="exceptions" class="tabcontent"> +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.js b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.js +index 8309aab..91e7ac0 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.js ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/options/options.js +@@ -21,7 +21,7 @@ const wikipediaInstances = wikipediaHelper.redirects; + const autocompletes = [ + { id: "nitter-instance", instances: nitterInstances }, + { id: "invidious-instance", instances: invidiousInstances }, +-// { id: "bibliogram-instance", instances: bibliogramInstances }, ++ { id: "bibliogram-instance", instances: bibliogramInstances }, + { id: "osm-instance", instances: osmInstances }, + { id: "reddit-instance", instances: redditInstances }, + { +@@ -35,7 +35,7 @@ const domparser = new DOMParser(); + + let nitterInstance = document.getElementById("nitter-instance"); + let invidiousInstance = document.getElementById("invidious-instance"); +-// let bibliogramInstance = document.getElementById("bibliogram-instance"); ++let bibliogramInstance = document.getElementById("bibliogram-instance"); + let osmInstance = document.getElementById("osm-instance"); + let redditInstance = document.getElementById("reddit-instance"); + let searchEngineInstance = document.getElementById("search-engine-instance"); +@@ -45,7 +45,7 @@ let simplyTranslateInstance = document.getElementById( + let wikipediaInstance = document.getElementById("wikipedia-instance"); + let disableNitter = document.getElementById("disable-nitter"); + let disableInvidious = document.getElementById("disable-invidious"); +-// let disableBibliogram = document.getElementById("disable-bibliogram"); ++let disableBibliogram = document.getElementById("disable-bibliogram"); + let disableOsm = document.getElementById("disable-osm"); + let disableReddit = document.getElementById("disable-reddit"); + let disableSearchEngine = document.getElementById("disable-search-engine"); +@@ -67,7 +67,7 @@ let theme = document.getElementById("theme"); + let useFreeTube = document.getElementById("use-freetube"); + let nitterRandomPool = document.getElementById("nitter-random-pool"); + let invidiousRandomPool = document.getElementById("invidious-random-pool"); +-// let bibliogramRandomPool = document.getElementById("bibliogram-random-pool"); ++let bibliogramRandomPool = document.getElementById("bibliogram-random-pool"); + let exceptions; + + window.browser = window.browser || window.chrome; +@@ -136,7 +136,7 @@ browser.storage.sync.get( + if (result.theme) document.body.classList.add(result.theme); + nitterInstance.value = result.nitterInstance || ""; + invidiousInstance.value = result.invidiousInstance || ""; +-// bibliogramInstance.value = result.bibliogramInstance || ""; ++ bibliogramInstance.value = result.bibliogramInstance || ""; + osmInstance.value = result.osmInstance || ""; + redditInstance.value = result.redditInstance || ""; + searchEngineInstance.value = +@@ -145,7 +145,7 @@ browser.storage.sync.get( + wikipediaInstance.value = result.wikipediaInstance || ""; + disableNitter.checked = !result.disableNitter; + disableInvidious.checked = !result.disableInvidious; +-// disableBibliogram.checked = !result.disableBibliogram; ++ disableBibliogram.checked = !result.disableBibliogram; + disableOsm.checked = !result.disableOsm; + disableReddit.checked = !result.disableReddit; + disableSearchEngine.checked = !result.disableSearchEngine; +@@ -172,9 +172,9 @@ browser.storage.sync.get( + invidiousRandomPool.value = + result.invidiousRandomPool || + commonHelper.filterInstances(invidiousInstances); +-// bibliogramRandomPool.value = +-// result.bibliogramRandomPool || +-// commonHelper.filterInstances(bibliogramInstances); ++ bibliogramRandomPool.value = ++ result.bibliogramRandomPool || ++ commonHelper.filterInstances(bibliogramInstances); + } + ); + +@@ -284,14 +284,14 @@ const invidiousInstanceChange = debounce(() => { + }, 500); + invidiousInstance.addEventListener("input", invidiousInstanceChange); + +-// const bibliogramInstanceChange = debounce(() => { +-// if (bibliogramInstance.checkValidity()) { +-// browser.storage.sync.set({ +-// bibliogramInstance: parseURL(bibliogramInstance.value), +-// }); +-// } +-// }, 500); +-// bibliogramInstance.addEventListener("input", bibliogramInstanceChange); ++const bibliogramInstanceChange = debounce(() => { ++ if (bibliogramInstance.checkValidity()) { ++ browser.storage.sync.set({ ++ bibliogramInstance: parseURL(bibliogramInstance.value), ++ }); ++ } ++}, 500); ++bibliogramInstance.addEventListener("input", bibliogramInstanceChange); + + const osmInstanceChange = debounce(() => { + if (osmInstance.checkValidity()) { +@@ -357,9 +357,9 @@ disableInvidious.addEventListener("change", (event) => { + browser.storage.sync.set({ disableInvidious: !event.target.checked }); + }); + +-// disableBibliogram.addEventListener("change", (event) => { +-// browser.storage.sync.set({ disableBibliogram: !event.target.checked }); +-// }); ++disableBibliogram.addEventListener("change", (event) => { ++ browser.storage.sync.set({ disableBibliogram: !event.target.checked }); ++}); + + disableOsm.addEventListener("change", (event) => { + browser.storage.sync.set({ disableOsm: !event.target.checked }); +@@ -447,12 +447,12 @@ const invidiousRandomPoolChange = debounce(() => { + }, 500); + invidiousRandomPool.addEventListener("input", invidiousRandomPoolChange); + +-// const bibliogramRandomPoolChange = debounce(() => { +-// browser.storage.sync.set({ +-// bibliogramRandomPool: bibliogramRandomPool.value, +-// }); +-// }, 500); +-// bibliogramRandomPool.addEventListener("input", bibliogramRandomPoolChange); ++const bibliogramRandomPoolChange = debounce(() => { ++ browser.storage.sync.set({ ++ bibliogramRandomPool: bibliogramRandomPool.value, ++ }); ++}, 500); ++bibliogramRandomPool.addEventListener("input", bibliogramRandomPoolChange); + + theme.addEventListener("change", (event) => { + const value = event.target.options[theme.selectedIndex].value; +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.html b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.html +index 0f3792b..ada7e75 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.html ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.html +@@ -69,7 +69,7 @@ + </tbody> + </table> + </section> +-<!-- ++ + <section class="settings-block"> + <table class="option" aria-label="Toggle Bibliogram redirects"> + <tbody> +@@ -91,7 +91,7 @@ + </tr> + </tbody> + </table> +- </section> --> ++ </section> + + <section class="settings-block"> + <table class="option" aria-label="Toggle OpenStreetMap redirects"> +diff --git a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.js b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.js +index b4699ca..4309c60 100644 +--- a/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.js ++++ b/data/extensions/{b7f9d2cd-d772-4302-8c3f-eb941af36f76}/pages/popup/popup.js +@@ -2,7 +2,7 @@ + + let disableNitter = document.querySelector("#disable-nitter"); + let disableInvidious = document.querySelector("#disable-invidious"); +-// let disableBibliogram = document.querySelector("#disable-bibliogram"); ++let disableBibliogram = document.querySelector("#disable-bibliogram"); + let disableOsm = document.querySelector("#disable-osm"); + let disableReddit = document.querySelector("#disable-reddit"); + let disableSearchEngine = document.querySelector("#disable-searchEngine"); +@@ -28,7 +28,7 @@ browser.storage.sync.get( + if (result.theme) document.body.classList.add(result.theme); + disableNitter.checked = !result.disableNitter; + disableInvidious.checked = !result.disableInvidious; +-// disableBibliogram.checked = !result.disableBibliogram; ++ disableBibliogram.checked = !result.disableBibliogram; + disableOsm.checked = !result.disableOsm; + disableReddit.checked = !result.disableReddit; + disableSearchEngine.checked = !result.disableSearchEngine; +@@ -47,9 +47,9 @@ disableInvidious.addEventListener("change", (event) => { + browser.storage.sync.set({ disableInvidious: !event.target.checked }); + }); + +-// disableBibliogram.addEventListener("change", (event) => { +-// browser.storage.sync.set({ disableBibliogram: !event.target.checked }); +-// }); ++disableBibliogram.addEventListener("change", (event) => { ++ browser.storage.sync.set({ disableBibliogram: !event.target.checked }); ++}); + + disableOsm.addEventListener("change", (event) => { + browser.storage.sync.set({ disableOsm: !event.target.checked }); +diff --git a/data/patches/hide-firefox-view-button.patch b/data/patches/hide-firefox-view-button.patch +index ef24a34..52bad1c 100644 +--- a/data/patches/hide-firefox-view-button.patch ++++ b/data/patches/hide-firefox-view-button.patch +@@ -1,10 +1,10 @@ +---- a/browser/base/content/navigator-toolbox.inc.xhtml +-+++ b/browser/base/content/navigator-toolbox.inc.xhtml +-@@ -43,6 +43,7 @@ +- oncommand="FirefoxViewHandler.openTab();" +- onmousedown="FirefoxViewHandler.openToolbarMouseEvent(event);" +- cui-areatype="toolbar" +-+ hidden="true" +- removable="true"/> ++--- a/browser/base/content/navigator-toolbox.inc.xhtml 2025-08-12 02:31:44.000000000 +0900 +++++ b/browser/base/content/navigator-toolbox.inc.xhtml 2025-08-26 21:10:15.709368257 +0900 ++@@ -41,6 +41,7 @@ ++ role="button" ++ aria-pressed="false" ++ cui-areatype="toolbar" +++ hidden="true" ++ removable="true"/> + +- <tabs id="tabbrowser-tabs" ++ <tabs id="tabbrowser-tabs" +diff --git a/data/patches/hide-submit-feedback-menu-item.patch b/data/patches/hide-submit-feedback-menu-item.patch +index 402ba31..5278da7 100644 +--- a/data/patches/hide-submit-feedback-menu-item.patch ++++ b/data/patches/hide-submit-feedback-menu-item.patch +@@ -1,10 +1,10 @@ +---- a/browser/base/content/browser-menubar.inc +-+++ b/browser/base/content/browser-menubar.inc +-@@ -465,6 +465,7 @@ +- hidden="true" +- appmenu-data-l10n-id="menu-report-broken-site"/> ++--- a/browser/base/content/browser-menubar.inc 2025-08-26 21:16:57.929903122 +0900 +++++ b/browser/base/content/browser-menubar.inc 2025-08-26 21:17:09.257918204 +0900 ++@@ -431,6 +431,7 @@ ++ disabled="true" ++ appmenu-data-l10n-id="appmenuitem-report-broken-site"/> + <menuitem id="feedbackPage" + + hidden="true" +- oncommand="openFeedbackPage()" + data-l10n-id="menu-help-share-ideas" + appmenu-data-l10n-id="appmenu-help-share-ideas"/> ++ <menuitem id="helpSafeMode" +diff --git a/data/patches/icecat-about-dialog.patch b/data/patches/icecat-about-dialog.patch +index c7e77b0..87dc835 100644 +--- a/data/patches/icecat-about-dialog.patch ++++ b/data/patches/icecat-about-dialog.patch +@@ -1,16 +1,16 @@ +---- a/browser/base/content/aboutDialog.xhtml +-+++ b/browser/base/content/aboutDialog.xhtml +-@@ -148,7 +148,6 @@ ++--- a/browser/base/content/aboutDialog.xhtml 2025-08-26 21:23:08.866394736 +0900 +++++ b/browser/base/content/aboutDialog.xhtml 2025-08-26 21:23:19.986408921 +0900 ++@@ -139,7 +139,6 @@ + <hbox pack="center"> + <label is="text-link" class="bottom-link" useoriginprincipal="true" href="about:license" data-l10n-id="bottomLinks-license"/> +- <label is="text-link" class="bottom-link" useoriginprincipal="true" href="about:rights" data-l10n-id="bottomLinks-rights"/> +-- <label is="text-link" class="bottom-link" href="https://www.mozilla.org/privacy/?utm_source=firefox-browser&utm_medium=firefox-desktop&utm_campaign=about-dialog" data-l10n-id="bottomLinks-privacy"/> ++ <label is="text-link" class="bottom-link" href="https://www.mozilla.org/about/legal/terms/firefox/" data-l10n-id="bottom-links-terms"/> ++- <label is="text-link" class="bottom-link" href="https://www.mozilla.org/privacy/firefox/?utm_source=firefox-browser&utm_medium=firefox-desktop&utm_campaign=about-dialog" data-l10n-id="bottom-links-privacy"/> + </hbox> + <description id="trademark" data-l10n-id="trademarkInfo"></description> + </vbox> +---- a/browser/base/content/aboutDialog.css +-+++ b/browser/base/content/aboutDialog.css +-@@ -38,10 +38,9 @@ ++--- a/browser/base/content/aboutDialog.css 2025-08-26 21:26:43.618669160 +0900 +++++ b/browser/base/content/aboutDialog.css 2025-08-26 21:31:54.207067616 +0900 ++@@ -32,10 +32,9 @@ + #rightBox { + background-image: url("chrome://branding/content/about-wordmark.svg"); + background-repeat: no-repeat; +@@ -19,6 +19,9 @@ + padding-top: 38px; + - margin-top: 20px; + + margin-top: 60px; +- } +- ++ /* We don't want this box to contribute arbitrarily to the intrinsic size of ++ * the dialog, so set the width to a reasonable size, but let it flex to take ++ * all available space. */ ++--- a/browser/base/content/aboutDialog.css +++++ b/browser/base/content/aboutDialog.css + #rightBox:-moz-locale-dir(rtl) { +diff --git a/data/patches/icecat-preferences.patch b/data/patches/icecat-preferences.patch +index f8f00cd..5b3b24f 100644 +--- a/data/patches/icecat-preferences.patch ++++ b/data/patches/icecat-preferences.patch +@@ -1,6 +1,63 @@ ++diff --git a/browser/base/content/appmenu-viewcache.inc.xhtml b/browser/base/content/appmenu-viewcache.inc.xhtml ++index ec44a3b1a354..e469b754d93d 100644 ++--- a/browser/base/content/appmenu-viewcache.inc.xhtml +++++ b/browser/base/content/appmenu-viewcache.inc.xhtml ++@@ -139,6 +139,9 @@ ++ key="key_preferencesCmdMac" ++ #endif ++ /> +++ <toolbarbutton id="appMenu-icecatsettings-button" +++ class="subviewbutton" +++ data-l10n-id="appmenuitem-icecat-settings"/> ++ <toolbarbutton id="appMenu-more-button2" ++ class="subviewbutton subviewbutton-nav" ++ data-l10n-id="appmenuitem-more-tools" ++diff --git a/browser/base/content/browser-menubar.inc b/browser/base/content/browser-menubar.inc ++index 01bca4ecb0de..7c755439d1d5 100644 ++--- a/browser/base/content/browser-menubar.inc +++++ b/browser/base/content/browser-menubar.inc ++@@ -116,6 +116,8 @@ ++ /> ++ #endif ++ #endif +++ <menuitem id="menu_icecat_preferences" +++ data-l10n-id="appmenuitem-icecat-settings"/> ++ </menupopup> ++ </menu> ++ ++diff --git a/browser/base/content/browser-menubar.js b/browser/base/content/browser-menubar.js ++index 61ae54a0884c..6d4c315427bc 100644 ++--- a/browser/base/content/browser-menubar.js +++++ b/browser/base/content/browser-menubar.js ++@@ -16,6 +16,9 @@ document.addEventListener( ++ case "menu_preferences": ++ openPreferences(undefined); ++ break; +++ case "menu_icecat_preferences": +++ openPreferences("privacy-icecatPreferences"); +++ break; ++ ++ // == view-menu == ++ case "menu_pageStyleNoStyle": ++diff --git a/browser/components/customizableui/content/panelUI.js b/browser/components/customizableui/content/panelUI.js ++index 689205034d9d..a80bbcfe2926 100644 ++--- a/browser/components/customizableui/content/panelUI.js +++++ b/browser/components/customizableui/content/panelUI.js ++@@ -379,6 +379,9 @@ const PanelUI = { ++ case "appMenu-settings-button": ++ openPreferences(); ++ break; +++ case "appMenu-icecatsettings-button": +++ openPreferences("privacy-icecatPreferences"); +++ break; ++ case "appMenu-more-button2": ++ this.showMoreToolsPanel(target); ++ break; ++diff --git a/browser/components/preferences/privacy.inc.xhtml b/browser/components/preferences/privacy.inc.xhtml ++index 28e325c938de..fb7e669e07f6 100644 + --- a/browser/components/preferences/privacy.inc.xhtml + +++ b/browser/components/preferences/privacy.inc.xhtml +-@@ -705,6 +705,83 @@ ++@@ -691,6 +691,83 @@ + </hbox> + </groupbox> + +@@ -84,11 +141,13 @@ + <hbox id="permissionsCategory" + class="subcategory" + hidden="true" ++diff --git a/browser/components/preferences/privacy.js b/browser/components/preferences/privacy.js ++index 5722057a0665..3d825f40fa3b 100644 + --- a/browser/components/preferences/privacy.js + +++ b/browser/components/preferences/privacy.js +-@@ -155,6 +155,16 @@ +- { id: PREF_URLBAR_QUICKSUGGEST_BLOCKLIST, type: "string" }, +- { id: PREF_URLBAR_WEATHER_USER_ENABLED, type: "bool" }, ++@@ -156,6 +156,16 @@ Preferences.addAll([ ++ { id: "browser.urlbar.suggest.quicksuggest.sponsored", type: "bool" }, ++ { id: "browser.urlbar.quicksuggest.dataCollection.enabled", type: "bool" }, + + + // IceCat-specific + + { id: "javascript.enabled", type: "bool" }, +@@ -103,7 +162,7 @@ + // History + { id: "places.history.enabled", type: "bool" }, + { id: "browser.formfill.enable", type: "bool" }, +-@@ -1177,6 +1187,24 @@ ++@@ -1150,6 +1160,24 @@ var gPrivacyPane = { + setSyncFromPrefListener("enableOCSP", () => this.readEnableOCSP()); + setSyncToPrefListener("enableOCSP", () => this.writeEnableOCSP()); + +@@ -128,7 +187,7 @@ + if (AlertsServiceDND) { + let notificationsDoNotDisturbBox = document.getElementById( + "notificationsDoNotDisturbBox" +-@@ -1290,6 +1318,62 @@ ++@@ -1259,6 +1287,62 @@ var gPrivacyPane = { + SiteDataManager.updateSites(); + }, + +@@ -191,28 +250,3 @@ + // CONTENT BLOCKING + + /** +---- a/browser/base/content/appmenu-viewcache.inc.xhtml +-+++ b/browser/base/content/appmenu-viewcache.inc.xhtml +-@@ -126,6 +126,10 @@ +- key="key_preferencesCmdMac" +- #endif +- /> +-+ <toolbarbutton id="appMenu-icecatsettings-button" +-+ class="subviewbutton" +-+ data-l10n-id="appmenuitem-icecat-settings" +-+ oncommand="switchToTabHavingURI('about:preferences#privacy-icecatPreferences', true)"/> +- <toolbarbutton id="appMenu-more-button2" +- class="subviewbutton subviewbutton-nav" +- data-l10n-id="appmenuitem-more-tools" +---- a/browser/base/content/browser-menubar.inc +-+++ b/browser/base/content/browser-menubar.inc +-@@ -127,6 +127,9 @@ +- /> +- #endif +- #endif +-+ <menuitem id="menu_icecat_preferences" +-+ oncommand="switchToTabHavingURI('about:preferences#privacy-icecatPreferences', true)" +-+ data-l10n-id="appmenuitem-icecat-settings"/> +- </menupopup> +- </menu> +- +diff --git a/data/patches/moz-configure-changes.patch b/data/patches/moz-configure-changes.patch +index 6f0525e..9711a2f 100644 +--- a/data/patches/moz-configure-changes.patch ++++ b/data/patches/moz-configure-changes.patch +@@ -1,18 +1,43 @@ ++diff --git a/browser/moz.configure b/browser/moz.configure ++index e8b401a7dfb2..d5b3117ce3d8 100644 + --- a/browser/moz.configure + +++ b/browser/moz.configure +-@@ -5,11 +5,11 @@ ++@@ -5,16 +5,19 @@ + # file, You can obtain one at http://mozilla.org/MPL/2.0/. + + imply_option("MOZ_PLACES", True) + -imply_option("MOZ_SERVICES_HEALTHREPORT", True) +-+imply_option("MOZ_SERVICES_HEALTHREPORT", False) +- imply_option("MOZ_SERVICES_SYNC", True) ++-imply_option("MOZ_SERVICES_SYNC", True) + -imply_option("MOZ_DEDICATED_PROFILES", True) + -imply_option("MOZ_BLOCK_PROFILE_DOWNGRADE", True) + -imply_option("MOZ_NORMANDY", True) +++imply_option("MOZ_SERVICES_HEALTHREPORT", False) +++ # Disabling MOZ_SERVICES_SYNC would break runtime javascript, +++ # see <https://bugzilla.mozilla.org/show_bug.cgi?id=1816969>. +++imply_option("MOZ_SERVICES_SYNC", True) + +imply_option("MOZ_DEDICATED_PROFILES", False) + +imply_option("MOZ_BLOCK_PROFILE_DOWNGRADE", False) + +imply_option("MOZ_NORMANDY", False) ++ imply_option("MOZ_PROFILE_MIGRATOR", True) ++ ++ ++-imply_option("MOZ_APP_VENDOR", "Mozilla") +++imply_option("MOZ_APP_VENDOR", "GNU") ++ imply_option("MOZ_APP_ID", "{ec8030f7-c20a-464f-9b0e-13a3a9e97384}") +++imply_option("MOZ_APP_PROFILE", "mozilla/icecat") ++ # Include the DevTools client, not just the server (which is the default) ++ imply_option("MOZ_DEVTOOLS", "all") ++ imply_option("BROWSER_CHROME_URL", "chrome://browser/content/browser.xhtml") ++diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure ++index 193272588caa..da8a729548c8 100644 ++--- a/build/moz.configure/init.configure +++++ b/build/moz.configure/init.configure ++@@ -991,7 +991,7 @@ set_config("MOZ_BUILD_APP", build_project) ++ set_define("MOZ_BUILD_APP", build_project) ++ ++ ++-option(env="MOZILLA_OFFICIAL", help="Build an official release") +++option(env="MOZILLA_OFFICIAL", help="Build an official release", default=False) ++ + +- with only_when(target_has_linux_kernel & compile_environment): +- option(env="MOZ_NO_PIE_COMPAT", help="Enable non-PIE wrapper") ++ @depends("MOZILLA_OFFICIAL") +diff --git a/data/update-extensions.sh b/data/update-extensions.sh +old mode 100644 +new mode 100755 +index 66ea9ad..2c4db94 +--- a/data/update-extensions.sh ++++ b/data/update-extensions.sh +@@ -1,4 +1,4 @@ +-#!/bin/bash ++#!/usr/bin/env bash + + set -e + +diff --git a/makeicecat b/makeicecat +index fc0bb76..d7b75b2 100755 +--- a/makeicecat ++++ b/makeicecat +@@ -21,12 +21,13 @@ + + + # metadata +-readonly FFMAJOR=128 +-readonly FFMINOR=14 ++readonly FFMAJOR=140 ++readonly FFMINOR=2 + readonly FFSUB=0 + readonly FFBUILD=1 + readonly GNUVERSION=1 +-readonly SOURCEBALL_CHECKSUM='93b9ef6229f41cb22ff109b95bbf61a78395a0fe4b870192eeca22947cb09a53' ++# SHA-256 ++readonly SOURCEBALL_CHECKSUM='956dce675c3b706d563caf07ed3ca9af632ab830be710dfd4351da78a0a2ef55' + readonly SOURCEBALL_SIGNINGKEY='14F26682D0916CDD81E37B6D61B7B526D98F0353' + readonly FFVERSION=${FFMAJOR}.${FFMINOR}.${FFSUB} + readonly SOURCEBALL=firefox-${FFVERSION}esr.source.tar.xz +@@ -41,7 +42,7 @@ readonly LIST_URL=lists.gnu.org/mailman/listinfo/bug-gnuzilla + + # l10n + readonly L10N_URL=https://github.com/mozilla-l10n/firefox-l10n +-readonly L10N_REV=fcd0300e8478d1ec4d1c097a073ddb8e1e0351e3 ++readonly L10N_REV=a0c1ffda4ed19c0399e4175610361179e09829de + readonly L10N_CMP_URL=https://github.com/mozilla/compare-locales + readonly L10N_CMP_REV=RELEASE_9_0_4 + readonly L10N_PREFS_DIR=browser/chrome/browser/preferences +@@ -377,7 +378,7 @@ configure() + sed '/"datareporting\.healthreport\.uploadEnabled"/s/true/false/' -i modules/libpref/init/all.js + + # Custom privacy statement link +- sed "s|https://www\\.mozilla\\.org/legal/privacy/|https://${LEGALINFO_URL}|" -i ./browser/app/profile/firefox.js ./toolkit/content/aboutRights.xhtml ++ sed "s|https://www\\.mozilla\\.org/legal/privacy/|https://${LEGALINFO_URL}|" -i ./browser/app/profile/firefox.js + + # Sanitize lists + local plugin_file +@@ -393,8 +394,8 @@ configure() + # Disable activity-stream anti-features. + # These are not condensed into a single sed script so that it + # fails on individual commands that didn't change the source +- local activity_stream=browser/components/newtab/lib/ActivityStream.sys.mjs +- sed '/^const DEFAULT_SITES/,/^])\;/c const DEFAULT_SITES = new Map\([[""]]\);' -i browser/components/newtab/lib/DefaultSites.sys.mjs ++ local activity_stream=browser/extensions/newtab/lib/ActivityStream.sys.mjs ++ sed '/^const DEFAULT_SITES/,/^])\;/c const DEFAULT_SITES = new Map\([[""]]\);' -i browser/extensions/newtab/lib/DefaultSites.sys.mjs + sed '/"showSponsored"/,/value/s/value: true/value: false/' -i $activity_stream + sed '/ "telemetry"/,/value/s/value: true/value: false/' -i $activity_stream + sed '/"section\.highlights\.includePocket"/,/value/s/value: true/value: false/' -i $activity_stream +@@ -405,11 +406,10 @@ configure() + sed '/"telemetry\.structuredIngestion\.endpoint"/,/value/s/value: .*/value: "",/' -i $activity_stream + sed '/name: "telemetry"/,/value/s/value: true/value: false/' -i $activity_stream + sed '/name: "system\.topstories"/,/},/s/.*!!locales.*/false/' -i $activity_stream +- sed 's/Ubuntu, //' -i browser/components/newtab/css/activity-stream*.css + +- sed '/^]$/d' -i browser/components/newtab/data/content/tippytop/top_sites.json +- sed 's/}$/},/' -i browser/components/newtab/data/content/tippytop/top_sites.json +- cat << EOF >> browser/components/newtab/data/content/tippytop/top_sites.json ++ sed '/^]$/d' -i browser/components/topsites/content/tippytop/top_sites.json ++ sed 's/}$/},/' -i browser/components/topsites/content/tippytop/top_sites.json ++ cat << EOF >> browser/components/topsites/content/tippytop/top_sites.json + { + "domains": ["gnu.org"], + "image_url": "images/gnu.png", +@@ -505,8 +505,8 @@ EOF + } + EOF + +- cp "${DATADIR}"/newtab/*.ico browser/components/newtab/data/content/tippytop/favicons/ +- cp "${DATADIR}"/newtab/*.png browser/components/newtab/data/content/tippytop/images/ ++ cp "${DATADIR}"/newtab/*.ico browser/components/topsites/content/tippytop/favicons/ ++ cp "${DATADIR}"/newtab/*.png browser/components/topsites/content/tippytop/images/ + + # IceCat menu l10n + /bin/sed '/appmenuitem-settings/,+1s/\(.*.label = \)\(.*\)/\1\2\nappmenuitem-icecat-settings =\n\1IceCat \2/' -i ./l10n/*/browser/browser/appmenu.ftl ./browser/locales/en-US/browser/appmenu.ftl +@@ -541,7 +541,6 @@ configure_mobile() + + cat << EOF >> mobile/android/confvars.sh + # IceCat settings +-MOZ_APP_VENDOR=GNU + MOZ_APP_VERSION=${FFVERSION} + MOZ_PAY=0 + MOZ_SERVICES_HEALTHREPORT=0 +@@ -550,7 +549,6 @@ MOZ_SERVICES_FXACCOUNTS=0 + MOZ_SERVICES_METRICS=0 + MOZ_DATA_REPORTING=0 + MOZ_NORMANDY=0 +-MOZ_SERVICES_SYNC=0 + MOZ_DEVICES=0 + MOZ_ANDROID_GOOGLE_PLAY_SERVICES=0 + MOZ_ADDON_SIGNING=0 +@@ -606,15 +604,6 @@ apply_branding() + + # Custom legal about pages + find l10n -wholename '*/brand.ftl' | xargs /bin/sed 's/^trademarkInfo = .*/trademarkInfo = The IceCat logo is Copyright 2008-2015 Free Software Foundation, released under the terms of the GNU Lesser General Public License, version 3 or any later version./' -i +- local string +- for string in rights-intro-point-2 rights-intro-point-3 rights-intro-point-4 rights-intro-point-5 rights-intro-point-6 rights-webservices rights-safebrowsing +- do +- find -name aboutRights.ftl | xargs sed -i "s/^${string}.*/${string} = /" +- done +- for string in helpus community-2 community-exp +- do +- find -wholename '*/browser/aboutDialog.ftl' | xargs sed -i "s/^${string}.*/${string} = /" +- done + cp "${DATADIR}"/aboutRights.xhtml toolkit/content/aboutRights.xhtml + cp "${DATADIR}"/aboutRights.xhtml toolkit/content/aboutRights-unbranded.xhtml + sed -i 's|<a href="http://www\.mozilla\.org/">Mozilla Project</a>|<a href="http://www.gnu.org/">GNU Project</a>|g' browser/base/content/overrides/app-license.html +@@ -632,8 +621,10 @@ apply_branding() + + apply_batch_branding() + { +- find . -depth | grep -i fennec | rename_files -e s/fennec/icecatmobile/g -e s/Fennec/IceCatMobile/g +- find . -depth | grep -i firefox | rename_files -e s/firefox/icecat/g -e s/Firefox/IceCat/g ++ find . -depth | grep -i fennec | ++ rename_files -e s/fennec/icecatmobile/g -e s/Fennec/IceCatMobile/g ++ find . -depth | grep -i firefox | ++ rename_files -e s/firefox/icecat/g -e s/Firefox/IceCat/g + + echo "Running batch rebranding (this will take a while)" + local sed_script=" +@@ -672,7 +663,9 @@ s|https://www\\.mozilla\\.org/icecat/?utm_source=synceol|https://www.mozilla.org + + s|www\\.gnu\\.org/software/gnuzilla/icecat-help|libreplanet.org/wiki/Group:IceCat/Help|g; + " +- find . -type f -not -iregex '.*changelog.*' -not -iregex '.*copyright.*' -not -iregex '.*third_party/rust.*' -execdir /bin/sed --follow-symlinks -i "${sed_script}" '{}' ';' ++ find . -type f -not -iregex '.*changelog.*' -not -iregex '.*copyright.*' \ ++ -not -iregex '.*third_party/rust.*' \ ++ -execdir /bin/sed --follow-symlinks -i "${sed_script}" '{}' ';' + + find l10n -type f -execdir /bin/sed --follow-symlinks -i "s/from GNU/from Mozilla/g" '{}' ';' + +@@ -713,27 +706,18 @@ s/OpenSource/Free Software/g; + # Ditto for browser/modules/moz.build + sort_inner_list_in_file "EXTRA_JS_MODULES += [" "]" browser/modules/moz.build + ++ # Adjust the capitalization of IceCat to match the expected symbol ++ # names in build-time generated source files like TelemetryEventEnums.h. ++ sed 's/IceCatview/Icecatview/g' -i browser/components/icecatview/metrics.yaml ++ + # Copy js settings + cat "${DATADIR}"/settings.js >> browser/app/profile/icecat.js + + cat << EOF >> browser/confvars.sh + # IceCat settings + MOZ_APP_BASENAME=IceCat +-MOZ_APP_UA_NAME=Firefox +-MOZ_APP_VENDOR=GNU + MOZ_APP_VERSION=${FFVERSION} +-MOZ_APP_PROFILE=mozilla/icecat +-MOZ_PAY=0 +-MOZ_SERVICES_HEALTHREPORT=0 +-MOZ_SERVICES_HEALTHREPORTER=0 +-MOZ_SERVICES_FXACCOUNTS=0 +-MOZ_SERVICES_METRICS=0 + MOZ_DATA_REPORTING=0 +-MOZ_NORMANDY=0 +-MOZ_SERVICES_SYNC=0 +-MOZ_DEVICES=0 +-MOZ_ANDROID_GOOGLE_PLAY_SERVICES=0 +-MOZ_ADDON_SIGNING=0 + EOF + } + +diff --git a/tools/process-json-files.py b/tools/process-json-files.py +index d449057..2407fa9 100644 +--- a/tools/process-json-files.py ++++ b/tools/process-json-files.py +@@ -148,48 +148,6 @@ class Changes(RemoteSettings): + return File(cls.OUTPUT_PATH, changes) + + +-class SearchConfig(RemoteSettings): +- JSON_PATHS = ( +- RemoteSettings.DUMPS_PATH_ABSOLUTE / +- 'main/search-config.json', +- ) +- SCHEMA_PATH = arguments.MAIN_PATH / \ +- 'toolkit/components/search/schema/search-config-schema.json' +- OUTPUT_PATH = JSON_PATHS[0] +- +- _DUCKDUCKGO_SEARCH_ENGINE_ID = '[email protected]' +- +- @classmethod +- def should_drop_record(cls, search_engine): +- return search_engine['webExtension']['id'] not in ( +- cls._DUCKDUCKGO_SEARCH_ENGINE_ID, '[email protected]') +- +- @classmethod +- def process_record(cls, search_engine): +- [search_engine.pop(key, None) +- for key in ['extraParams', 'telemetryId']] +- +- general_specifier = {} +- for specifier in search_engine['appliesTo'].copy(): +- if 'application' in specifier: +- if 'distributions' in specifier['application']: +- search_engine['appliesTo'].remove(specifier) +- continue +- specifier['application'].pop('extraParams', None) +- +- if 'included' in specifier and 'everywhere' in specifier[ +- 'included'] and specifier['included']['everywhere']: +- general_specifier = specifier +- +- if not general_specifier: +- general_specifier = {'included': {'everywhere': True}} +- search_engine['appliesTo'].insert(0, general_specifier) +- if search_engine['webExtension']['id'] == cls._DUCKDUCKGO_SEARCH_ENGINE_ID: +- general_specifier['default'] = 'yes' +- +- return search_engine +- +- + class SearchConfigV2(RemoteSettings): + JSON_PATHS = ( + RemoteSettings.DUMPS_PATH_ABSOLUTE / +@@ -224,20 +182,6 @@ class SearchConfigV2(RemoteSettings): + return record + + +-class SearchConfigOverrides(RemoteSettings): +- JSON_PATHS = ( +- RemoteSettings.DUMPS_PATH_ABSOLUTE / +- 'main/search-config-overrides.json', +- ) +- SCHEMA_PATH = arguments.MAIN_PATH / \ +- 'toolkit/components/search/schema/search-config-overrides-schema.json' +- OUTPUT_PATH = JSON_PATHS[0] +- +- @classmethod +- def should_drop_record(cls, record): +- return True +- +- + class SearchConfigOverridesV2(RemoteSettings): + JSON_PATHS = ( + RemoteSettings.DUMPS_PATH_ABSOLUTE / +@@ -295,8 +239,7 @@ class TopSites(RemoteSettings): + + # To reflect the latest timestamps, Changes class should always come after + # all other RemoteSettings subclasses +-processors = (SearchConfig, SearchConfigOverrides, +- SearchConfigV2, SearchConfigOverridesV2, ++processors = (SearchConfigV2, SearchConfigOverridesV2, + Changes) + + for processor in processors: diff --git a/gnu/packages/patches/icecat-use-system-wide-dir.patch b/gnu/packages/patches/icecat-use-system-wide-dir.patch index 223467a9c1..c7454a72b9 100644 --- a/gnu/packages/patches/icecat-use-system-wide-dir.patch +++ b/gnu/packages/patches/icecat-use-system-wide-dir.patch @@ -1,36 +1,36 @@ -Replace "/usr/lib/mozilla" (the system-wide directory for extensions and -native manifests) with "$ICECAT_SYSTEM_DIR". +Upstream-status: https://bugzilla.mozilla.org/show_bug.cgi?id=1986219 +diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp +index 9c94cb8808aa..dfee051b302f 100644 --- a/toolkit/xre/nsXREDirProvider.cpp +++ b/toolkit/xre/nsXREDirProvider.cpp -@@ -296,24 +296,12 @@ nsresult nsXREDirProvider::GetBackgroundTasksProfilesRootDir( +@@ -276,11 +276,27 @@ nsresult nsXREDirProvider::GetBackgroundTasksProfilesRootDir( + * + * On OSX this is /Library/Application Support/Mozilla + * On Linux this is /usr/{lib,lib64}/mozilla +- * (for 32- and 64-bit systems respsectively) ++ * (for 32- and 64-bit systems respectively) ++ * ++ * The MOZILLA_SYSTEM_DIR environment variable can be used to override ++ * the system directory used. + */ static nsresult GetSystemParentDirectory(nsIFile** aFile) { - nsresult rv; +- nsresult rv; ++ nsresult rv = NS_ERROR_FAILURE; nsCOMPtr<nsIFile> localDir; --# if defined(XP_MACOSX) -- rv = GetOSXFolderType(kOnSystemDisk, kApplicationSupportFolderType, -- getter_AddRefs(localDir)); -- if (NS_SUCCEEDED(rv)) { -- rv = localDir->AppendNative("Mozilla"_ns); -- } --# else -- constexpr auto dirname = --# ifdef HAVE_USR_LIB64_DIR -- "/usr/lib64/mozilla"_ns --# elif defined(__OpenBSD__) || defined(__FreeBSD__) -- "/usr/local/lib/mozilla"_ns --# else -- "/usr/lib/mozilla"_ns --# endif -- ; -- rv = NS_NewNativeLocalFile(dirname, false, getter_AddRefs(localDir)); --# endif + -+ const char* systemParentDir = getenv("ICECAT_SYSTEM_DIR"); -+ if (!systemParentDir || !*systemParentDir) return NS_ERROR_FAILURE; ++ // Honor a the MOZILLA_SYSTEM_DIR environment variable first... ++ const char* systemParentDir = getenv("MOZILLA_SYSTEM_DIR"); ++ if (systemParentDir) { ++ rv = NS_NewNativeLocalFile(nsDependentCString(systemParentDir), ++ getter_AddRefs(localDir)); ++ } ++ if (NS_SUCCEEDED(rv)) { ++ localDir.forget(aFile); ++ return rv; ++ } + -+ rv = NS_NewNativeLocalFile(nsDependentCString(systemParentDir), false, -+ getter_AddRefs(localDir)); - - if (NS_SUCCEEDED(rv)) { - localDir.forget(aFile); ++ // ... falling back to the conventional fixed location otherwise. + # if defined(XP_MACOSX) + rv = GetOSXFolderType(kOnSystemDisk, kApplicationSupportFolderType, + getter_AddRefs(localDir)); diff --git a/gnu/packages/patches/icedove-observer-fix.patch b/gnu/packages/patches/icedove-observer-fix.patch new file mode 100644 index 0000000000..99645bf10d --- /dev/null +++ b/gnu/packages/patches/icedove-observer-fix.patch @@ -0,0 +1,35 @@ + +# HG changeset patch +# User Magnus Melin <[email protected]> +# Date 1757493192 0 +# Node ID 1cc168c9d0a5c55744d2886aa380f5a7bf712ef4 +# Parent 20980bc07105ebb761347e9c99937e572eedf03a +Bug 1987834 - Don't remove not added observer of AUTO_UPDATE_CHANGED_TOPIC when MOZ_UPDATER is off. r=john.bieling + +Differential Revision: https://phabricator.services.mozilla.com/D264376 + +diff --git a/mail/components/preferences/general.js b/mail/components/preferences/general.js +--- a/mail/components/preferences/general.js ++++ b/mail/components/preferences/general.js +@@ -2175,17 +2175,19 @@ var gGeneralPane = { + } + + return /^https?/.test(uri.scheme) ? uri.resolve("/favicon.ico") : ""; + }, + + destroy() { + window.removeEventListener("unload", this); + +- Services.obs.removeObserver(this, AUTO_UPDATE_CHANGED_TOPIC); ++ if (AppConstants.MOZ_UPDATER) { ++ Services.obs.removeObserver(this, AUTO_UPDATE_CHANGED_TOPIC); ++ } + Services.prefs.removeObserver("mailnews.tags.", this); + }, + + // nsISupports + + QueryInterface: ChromeUtils.generateQI(["nsIObserver"]), + + // nsIObserver +
