$ git diff --patch-with-stat --summary 25113c132ab00b3dfe0d8bc9500d4408ab9c9fd2..62b11b9c87be120b8e40a7562d0b30c6bfbf8d0b
.abf.yml | 141 +-
firefox-93.0-kde.patch => firefox-99.0-kde.patch | 16 +-
firefox.spec | 43 +-
mozilla-94.0-kde.patch | 1489 ----------------------
mozilla-93.0-kde.patch => mozilla-99.0-kde.patch | 78 +-
5 files changed, 146 insertions(+), 1621 deletions(-)
rename firefox-93.0-kde.patch => firefox-99.0-kde.patch (96%)
delete mode 100644 mozilla-94.0-kde.patch
rename mozilla-93.0-kde.patch => mozilla-99.0-kde.patch (97%)
diff --git a/.abf.yml b/.abf.yml
index e3f732c..8a802db 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -1,72 +1,73 @@
sources:
- af.xpi: 3f2786a95a9f69b42f83c85485bc4a9ec4016591
- ar.xpi: d9c32aa96a884674af80baebecace8d74d21d7d0
- ast.xpi: 9a1c4ae79254cb985ecadc397dae729cdfb4c275
+ af.xpi: 71b441b23061bd3ab4d03e6f5bcf12d299cc458f
+ ar.xpi: d4f3855b10851140d9f715e3e80639df989fdca3
+ ast.xpi: 10de2eb94da86fc35d1c46ce5cac51ac2810b93c
be.xpi: d2ca74c120a8e42c40c5e5f1d193ee73b1dee572
- bg.xpi: e0bec96cc7f4768cb808b85056b877f5d63f3b27
- bn.xpi: f2e41dc9baeda4fc7cdcb71a4735e8a7b5cf5834
- br.xpi: 7ada0324aa236f5c17ac1924ae7b10c8bf89b35d
- bs.xpi: e4c4443334e9ae14460f1fe4314f0f66b3805d62
- ca.xpi: c96d3086cce13eddf0a8fc885c39922fa4718bd6
- cs.xpi: 3ac58986726110405af4a07cbd87ee91b6669afe
- cy.xpi: 85d7ccfe0c9b2bbeb092978f2131ad30f59ccab9
- da.xpi: 86a7f017c1121190509eaba4963c4716e2423c9d
- de.xpi: 82c381c062e8f4941e33d27cb899ff9de9a2b66d
- el.xpi: f3a8d490cc04925ad2223f354eb157400b616dcf
- en-GB.xpi: bcdf820f0d76f1d4b860a4c0ef0953ae39c88d45
- eo.xpi: 2097d6cfca71717d11cd4baf752cf47de4e7fdca
- es-AR.xpi: 8ef36a8589997534c403bc883c07f154e84fdd1f
- es-CL.xpi: 0cde1131d37d807852d1cb4d3c8ad2247d6c6021
- es-ES.xpi: afa2a027716675f9f194865a124f6e09466c078a
- es-MX.xpi: 81e5320e22a7f128c09b5c186b86aa0e4aa11798
- et.xpi: a0b0f98ce01d97a7421acacbbc17d24f2e6d5161
- eu.xpi: 0d391ac3d72798ddad95b1f60af01263b53cf6ae
- fa.xpi: c3dc56fc517eb13417f7e28039f5dd0f0cd4d675
- fi.xpi: 13328a3bf00cb1b9d28a2e47fdad199463d8e02f
- firefox-100.0.source.tar.xz: 5ccd3ee59d78650d010b8762af5c66ac2484176f
- fr.xpi: 40c643db43477822b6d1aea2244e149527eb4125
- fy-NL.xpi: f5943f257639b4bf5bba488438cbc11dff5d5a98
- ga-IE.xpi: d9a29dfc521a3a8270d45ca92e0e8fc06540ccac
- gd.xpi: d3cc353cd8e3dc1ec9c4fee4f8370c9b7d06b5db
- gl.xpi: 60cfa78282b6759ca647ff32190b32ea405297ff
- gu-IN.xpi: e93e129959ddd618790923d7b6bb793ae2891baa
- he.xpi: f32a2fc8a202d3c155985d16f607a95cc15e571f
- hi-IN.xpi: eb4372c59ba5f9c94ddd379c89b3b1ce6de434e5
- hr.xpi: 0939830b8ffd73184aba1265ef11cdd6690d567f
- hu.xpi: ac4de528660ae4ace81a9c019c1aa01dcdf09b4c
- hy-AM.xpi: cdaf105c393c5d7491e8d99fb209af896e21c755
- id.xpi: 59ccba08a71e4d3bab0fbced7fcd0d993143aa7a
- is.xpi: 216db249f530842d72cf51719592fb7e489b6646
- it.xpi: 77b74e0ea6aba3e1fc98c56b7fbd6630a9c3187a
- ja.xpi: d965fb326a3ad8369e89923e6cbcf73faa55ae8d
- kk.xpi: 20198fe34cc669da81d34b1dcee33bca146752f0
- km.xpi: 012e71190bcaa2b49cf78e92808b7d1819cb03a4
- kn.xpi: 603f432ce1091a01ff4308ef46a610333da13578
- ko.xpi: d5efb4058a266897b5f79255152b63ea080ecc04
- lt.xpi: 194f38ef34197ae2389323b6adad3cde16c5556b
- lv.xpi: c38da031a3b2be5ef13cd9d2cb19c6ec656ac10c
- mk.xpi: 16beb9933dc9f99df1f105ed3303f411081ef66e
- mr.xpi: eaede6f25f595d31d2c501d60f9c3e6873513ea8
- nb-NO.xpi: efde077d170911cc8fcc0436013bb97bc1c25f0f
- nl.xpi: 8f2518893c095bfe57505e209ed83b6d530e54ab
- nn-NO.xpi: 22cf2bc1af230cd178d60a996888e2ff63f9f0f8
- pa-IN.xpi: f1c2cb0563a80be2e52edf579b5c014d2e9d454b
- pl.xpi: 66bdb6d0828da18440b018e63de9ee2e112061ff
- pt-BR.xpi: e700823657fe51d946f4be4e6f5154576a3e5fd7
- pt-PT.xpi: 8cb0d4183116ab2916520082f3c4a7cf4844eeda
- ro.xpi: 761e832d99eede112dc8a980e83c36d67df4d4a7
- ru.xpi: 9dda097aad92761bf8c32cfa7324a57234632488
- si.xpi: 7cba371060f5064e6d438d22861f793f687557d3
- sk.xpi: 48b8756edd9dbf76ab048ac96bad54c51182d704
- sl.xpi: 2d1edc64f66f2e76937c31903edb550d64370ee4
- sq.xpi: e93eed6f4692dec43ee14d6bcadc8df130be7708
- sr.xpi: 9776d26ca45f7be0581382d2f90378ce015cb4a7
- sv-SE.xpi: 1f37db522947ae0ff523235def831b6d00cecf37
- ta.xpi: 53ef65c761050e0ae585d068a2d10dec5d2b7e52
- te.xpi: 7b30d7892fb55afccf528fa4071ea3075472f377
- th.xpi: 1248ba713a59a861b984508db8070d9099a3d660
- tr.xpi: 441ab5a7754aa6cfcc1df5c6f7cfe8e3349ade0f
- uk.xpi: dfc21f0322efcd0935c7b50cdd1012d7db24eed8
- vi.xpi: bfdd545d130a45509bf10e0122366a01fef4f9a8
- zh-CN.xpi: 1118e07794357180ad69551ec389d45a1e7c7683
- zh-TW.xpi: 626c18e14e0c14803059fb50dc412a433e6bf137
+ bg.xpi: 77a47d85cc4648205b6300e31f77b06355b952f8
+ bn.xpi: f2b70f5aa0b0533cc4eaae78564c2b071e616061
+ br.xpi: f6448365d7106819acc474c7a10be1271fc46728
+ bs.xpi: 1534aaa5712d20b7ec44c1024a135f021ecee562
+ ca.xpi: 3a4858dac04ba63025406c90c21cae36bb07d5f9
+ cbindgen-vendor.tar.xz: e5b896e6edab51fa5bb92c7ca4b7304cd7ac7cdf
+ cs.xpi: a9fc317e8fc49b1311f6b430762d626e19a5b517
+ cy.xpi: 80efeffa0b8fb28645349e755244bbad51d9978d
+ da.xpi: e954e45c6cbf5f9cb91185a38c60ce9e4679c247
+ de.xpi: 2adbc28543760702309d00121e529a2bff939d00
+ el.xpi: 4131313ffebc03aea7de5b0b2e82fc260f66e048
+ en-GB.xpi: 04e4167dfef5c3d6538a4938f98c6ff3d9b340e9
+ eo.xpi: 5f6c9d11f87e5fdb97386878cdf170cafdabfaf6
+ es-AR.xpi: 53d90929873d87cf6e8165dca7d2fe9ee8f1868a
+ es-CL.xpi: 504207f0b9fd68033ea93cc55d03d82025f07960
+ es-ES.xpi: 57d59a507fd70754d05e001dfdedca7392f143ed
+ es-MX.xpi: f5ba735df004fea7c0d07bd1b953c488a53fb41b
+ et.xpi: 9b1cb369d006d1f82625aae17971b107ffd377ea
+ eu.xpi: 68ef7b2224aa1c757470f446793a7483d3d90437
+ fa.xpi: be543c3f65bed7550a98c3104437085057dafd78
+ fi.xpi: 318c8c3ae55211bdb6f27a7625c84c9e8351acc9
+ firefox-101.0.source.tar.xz: b6551b114ee78ec221f19d5d512e4132ba2ecbbe
+ fr.xpi: 987455cad1b78946573cc016189eaf075e525a7a
+ fy-NL.xpi: 1a451fd7b0b64fc4dbee7a8ce5241bd4230080f7
+ ga-IE.xpi: 9079e94fe5c96dc996df332413cfcc4833cc7aaa
+ gd.xpi: 89fdd8c62737f7d25575834ebe1eb15d19eff4ba
+ gl.xpi: dc130d263d407028579c3be11fe45ef69c13aac9
+ gu-IN.xpi: 44ab83fd5d82340feee5d44433b03a3158c673a3
+ he.xpi: 28f1193de0fdb8f3eacdc99149aa28a93c8f05c0
+ hi-IN.xpi: 4fdddd47f5933198a42d15290641081769949ca5
+ hr.xpi: 1fcdc32c524da551befaf9758743757337596330
+ hu.xpi: f1fdf7d2ce1283785024a92775ec874f8c7ecf88
+ hy-AM.xpi: 686f5a1d9dc8cad13dc78c902dc9379e580d25f3
+ id.xpi: b782d1f990e3261b335514ef3954b7dc35feaad9
+ is.xpi: f9a3e5c88b33f32242a42d05d493934445178f88
+ it.xpi: beafe31dc90d7464b5974df4891121d1ba374ceb
+ ja.xpi: c676fbc470c08c6f319f572aad4dfbf3d476945d
+ kk.xpi: 23b47e84e44465827e1302bec497f584adc6dd74
+ km.xpi: 5ac39711db8c3c23a2dbf0a9588a924eb9874f51
+ kn.xpi: c67807832f94492efc3e2517bde556631147dcc1
+ ko.xpi: eb9267f585323bcbec54d3714ec7527260c28913
+ lt.xpi: 2b7beae406a700416ba58ce3d5828f81e9562d8b
+ lv.xpi: c0b8b7dc537df881955ac18560b76bf2887863c7
+ mk.xpi: 256ebeda1a2062c8ecd5a7e713b60ddc1747528f
+ mr.xpi: 806307c8790fc670a759de0e4a574f11f13692e1
+ nb-NO.xpi: 5a3b842dc1a96c5935710bfed487ed3f9897e466
+ nl.xpi: a3a7b3ff98a9a34c5cb6b0f40d8fd237a12be87e
+ nn-NO.xpi: e1a69e98fedb0210501b1f6fb4df356e0b6a39f0
+ pa-IN.xpi: ebe7d61d56e564a5a59a73c53fc46e25b91f066d
+ pl.xpi: 9fba27673080f2ac7517be0e7fe20a569b0feffa
+ pt-BR.xpi: bcbf5cce40c303e9c6d7932cb00f1481a74e79e7
+ pt-PT.xpi: a60df3768653dda1393f092d4776bb700dde3265
+ ro.xpi: 0f93257019ba140796a4b004bbb9e2b41def8d19
+ ru.xpi: 412aa8f6cd88fcdfafaf1ae1158c70f60a3f5e2d
+ si.xpi: 6052a6c14000b05f0eaa8dd1919304733f6818f0
+ sk.xpi: 31504fd36230ecb0223648d4a7a359eb1c1a70d6
+ sl.xpi: 32bfd42c9b09926e8aaa9d581fb452d227848ce3
+ sq.xpi: 8d14d4a4257f0363b383efbaeee9ad5ab2b5db4f
+ sr.xpi: 98775cfaf6c18849e7deeeeebfd084ed14d3e82f
+ sv-SE.xpi: 0174e09049f2f8db336b3964f7a58624d1eb8d54
+ ta.xpi: 75ee7357a118f520e67792a2aee46014ca2d7cf8
+ te.xpi: 368e12e00868bb61600fb4ab96dfad85ce9a10cd
+ th.xpi: a2321e49a87b3449e21f6d43e8a7339f7d4ea1e8
+ tr.xpi: 68ae36324e678403a17fb23153ca600f58982ba7
+ uk.xpi: 73331996037f09c2cd3c802ec04e453856fa9204
+ vi.xpi: 3c6329225cbca9f5d6d6b510b004c6a56d6f40a3
+ zh-CN.xpi: 51c2da04c66739a5b6fc92c9ffb762ac48722313
+ zh-TW.xpi: 35d1137620f9c814d619099a9368c567319afc24
diff --git a/firefox-93.0-kde.patch b/firefox-99.0-kde.patch
similarity index 96%
rename from firefox-93.0-kde.patch
rename to firefox-99.0-kde.patch
index 29d7e78..e1521ef 100644
--- a/firefox-93.0-kde.patch
+++ b/firefox-99.0-kde.patch
@@ -3,7 +3,7 @@
# Date 1559300151 -7200
# Fri May 31 12:55:51 2019 +0200
# Node ID 54d41b0033b8d649d842a1f862c6fed8b9874dec
-# Parent 856ef9c699423b1cd35e4df8745e78c409c8dbae
+# Parent 23d64c5753fda6f201477fe1f2f6cf1fb1657ccc
How to apply this patch:
1. Import and apply it
2. cp browser/base/content/browser.xul browser/base/content/browser-kde.xul
@@ -14,7 +14,7 @@ How to apply this patch:
diff --git a/browser/components/preferences/main.js b/browser/components/preferences/main.js
--- a/browser/components/preferences/main.js
+++ b/browser/components/preferences/main.js
-@@ -338,16 +338,23 @@ var gMainPane = {
+@@ -353,16 +353,23 @@ var gMainPane = {
}, backoffTimes[this._backoffIndex + 1 < backoffTimes.length ? this._backoffIndex++ : backoffTimes.length - 1]);
};
@@ -38,7 +38,7 @@ diff --git a/browser/components/preferences/main.js b/browser/components/prefere
);
let performanceSettingsUrl =
Services.urlFormatter.formatURLPref("app.support.baseURL") +
-@@ -1313,16 +1320,27 @@ var gMainPane = {
+@@ -1365,16 +1372,27 @@ var gMainPane = {
this._backoffIndex = 0;
let shellSvc = getShellService();
@@ -69,7 +69,7 @@ diff --git a/browser/components/preferences/main.js b/browser/components/prefere
diff --git a/browser/components/shell/moz.build b/browser/components/shell/moz.build
--- a/browser/components/shell/moz.build
+++ b/browser/components/shell/moz.build
-@@ -32,16 +32,18 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "coco
+@@ -31,16 +31,18 @@ if CONFIG["MOZ_WIDGET_TOOLKIT"] == "coco
]
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
XPIDL_SOURCES += [
@@ -92,7 +92,7 @@ diff --git a/browser/components/shell/nsKDEShellService.cpp b/browser/components
new file mode 100644
--- /dev/null
+++ b/browser/components/shell/nsKDEShellService.cpp
-@@ -0,0 +1,103 @@
+@@ -0,0 +1,109 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -196,6 +196,12 @@ new file mode 100644
+ return NS_ERROR_NOT_IMPLEMENTED;
+}
+
++NS_IMETHODIMP
++nsKDEShellService::IsDefaultForScheme(nsTSubstring<char> const& aScheme, bool* aIsDefaultBrowser)
++{
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
diff --git a/browser/components/shell/nsKDEShellService.h b/browser/components/shell/nsKDEShellService.h
new file mode 100644
--- /dev/null
diff --git a/firefox.spec b/firefox.spec
index 32d6cfe..2b47840 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -30,6 +30,10 @@
# (and not LLVM bytecode)
%define _disable_lto 1
+# use bundled cbindgen
+# currently enabled as updating all rust deps would take eons
+%global use_bundled_cbindgen 1
+
%bcond_with pgo
# this seems fragile, so require the exact version or later (#58754)
@@ -225,12 +229,15 @@ Name: firefox
Epoch: 0
# IMPORTANT: When updating, you MUST also update the l10n files by running
# download.sh after editing the version number
-Version: 100.0
+Version: 101.0
Release: %{?beta:0.%{beta}.}1
License: MPLv1+
Group: Networking/WWW
Url: http://www.mozilla.com/firefox/
Source0: http://ftp.mozilla.org/pub/%{name}/releases/%{version}%{?beta:%{beta}}/source/%{name}-%{version}%{?beta:%{beta}}.source.tar.xz
+%if 0%{?use_bundled_cbindgen}
+Source2: cbindgen-vendor.tar.xz
+%endif
Source4: %{name}.desktop
Source5: firefox-searchengines-jamendo.xml
Source6: firefox-searchengines-exalead.xml
@@ -252,8 +259,8 @@ Source100: firefox.rpmlintrc
}
# Patches for kde integration of FF from http://www.rosenauer.org/hg/mozilla/
-Patch11: firefox-93.0-kde.patch
-Patch12: mozilla-94.0-kde.patch
+#Patch11: firefox-99.0-kde.patch
+#Patch12: mozilla-99.0-kde.patch
Patch14: build-aarch64-skia.patch
Patch15: build-arm-libopus.patch
@@ -304,7 +311,7 @@ BuildRequires: pkgconfig(glib-2.0)
BuildRequires: pkgconfig(gl)
BuildRequires: pkgconfig(libdrm)
BuildRequires: pkgconfig(gtk+-3.0)
-BuildRequires: pkgconfig(icu-i18n)
+BuildRequires: pkgconfig(icu-i18n) >= 71.1
BuildRequires: pkgconfig(hunspell)
BuildRequires: pkgconfig(libffi)
BuildRequires: pkgconfig(libIDL-2.0)
@@ -314,7 +321,7 @@ BuildRequires: pkgconfig(libproxy-1.0)
BuildRequires: pkgconfig(libpulse)
BuildRequires: pkgconfig(libstartup-notification-1.0)
BuildRequires: pkgconfig(nspr) >= 4.32.0
-BuildRequires: pkgconfig(nss) >= 3.75
+BuildRequires: pkgconfig(nss) >= 3.78
BuildRequires: pkgconfig(ogg)
BuildRequires: pkgconfig(opus)
BuildRequires: pkgconfig(libpulse)
@@ -326,7 +333,9 @@ BuildRequires: pkgconfig(xinerama)
BuildRequires: pkgconfig(xscrnsaver)
BuildRequires: pkgconfig(xt)
BuildRequires: pkgconfig(zlib)
-BuildRequires: cbindgen >= 0.19.0
+%if !0%{?use_bundled_cbindgen}
+BuildRequires: cbindgen >= 0.23.0
+%endif
BuildRequires: nss-static-devel
BuildRequires: clang-devel
BuildRequires: llvm-devel
@@ -337,8 +346,8 @@ BuildRequires: pkgconfig(valgrind)
BuildRequires: yasm >= 1.0.1
BuildRequires: nasm
%endif
-BuildRequires: rust >= 1.53.0
-BuildRequires: cargo >= 1.53.0
+BuildRequires: rust >= 1.59.0
+BuildRequires: cargo >= 1.59.0
BuildRequires: nodejs >= 10.19
BuildRequires: pkgconfig(jemalloc)
%if %{with pgo}
@@ -499,6 +508,24 @@ export CC=gcc
# because compile will fail of missing -fPIC :)
%set_build_flags
+%if 0%{?use_bundled_cbindgen}
+mkdir -p my_rust_vendor
+cd my_rust_vendor
+%{__tar} xf %{SOURCE2}
+mkdir -p .cargo
+cat > .cargo/config <<EOL
+[source.crates-io]
+replace-with = "vendored-sources"
+
+[source.vendored-sources]
+directory = "`pwd`"
+EOL
+
+env CARGO_HOME=.cargo cargo install cbindgen
+export PATH=`pwd`/.cargo/bin:$PATH
+cd -
+%endif
+
# Show the config just for debugging
export MOZCONFIG=$(pwd)/mozconfig
cat $MOZCONFIG
diff --git a/mozilla-94.0-kde.patch b/mozilla-94.0-kde.patch
deleted file mode 100644
index 7bd0de4..0000000
--- a/mozilla-94.0-kde.patch
+++ /dev/null
@@ -1,1489 +0,0 @@
-diff -up firefox-96.0/modules/libpref/moz.build.2~ firefox-96.0/modules/libpref/moz.build
---- firefox-96.0/modules/libpref/moz.build.2~ 2022-01-06 19:32:46.000000000 +0100
-+++ firefox-96.0/modules/libpref/moz.build 2022-01-10 21:34:48.660595261 +0100
-@@ -124,6 +124,10 @@ UNIFIED_SOURCES += [
- "SharedPrefMap.cpp",
- ]
-
-+LOCAL_INCLUDES += [
-+ '/toolkit/xre'
-+]
-+
- gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs)
-
- GeneratedFile(
-diff -up firefox-96.0/modules/libpref/Preferences.cpp.2~ firefox-96.0/modules/libpref/Preferences.cpp
---- firefox-96.0/modules/libpref/Preferences.cpp.2~ 2022-01-06 19:32:46.000000000 +0100
-+++ firefox-96.0/modules/libpref/Preferences.cpp 2022-01-10 21:34:48.660595261 +0100
-@@ -89,6 +89,7 @@
- #ifdef MOZ_BACKGROUNDTASKS
- # include "mozilla/BackgroundTasks.h"
- #endif
-+#include "nsKDEUtils.h"
-
- #ifdef DEBUG
- # include <map>
-@@ -4640,6 +4641,17 @@ nsresult Preferences::InitInitialObjects
- #endif
- };
-
-+ if(nsKDEUtils::kdeSession()) { // TODO what if some setup actually requires the helper?
-+ for(int i = 0;
-+ i < MOZ_ARRAY_LENGTH(specialFiles);
-+ ++i ) {
-+ if( *specialFiles[ i ] == '\0' ) {
-+ specialFiles[ i ] = "kde.js";
-+ break;
-+ }
-+ }
-+ }
-+
- rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles,
- ArrayLength(specialFiles));
- if (NS_FAILED(rv)) {
-@@ -4714,7 +4726,7 @@ nsresult Preferences::InitInitialObjects
- }
-
- // Do we care if a file provided by this process fails to load?
-- pref_LoadPrefsInDir(path, nullptr, 0);
-+ pref_LoadPrefsInDir(path, specialFiles, ArrayLength(specialFiles));
- }
- }
-
-diff -up firefox-96.0/python/mozbuild/mozpack/chrome/flags.py.2~ firefox-96.0/python/mozbuild/mozpack/chrome/flags.py
---- firefox-96.0/python/mozbuild/mozpack/chrome/flags.py.2~ 2022-01-06 16:57:14.000000000 +0100
-+++ firefox-96.0/python/mozbuild/mozpack/chrome/flags.py 2022-01-10 21:34:48.660595261 +0100
-@@ -234,6 +234,7 @@ class Flags(OrderedDict):
- "tablet": Flag,
- "process": StringFlag,
- "backgroundtask": StringFlag,
-+ "desktop": StringFlag,
- }
- RE = re.compile(r"([!<>=]+)")
-
-diff -up firefox-96.0/python/mozbuild/mozpack/chrome/manifest.py.2~ firefox-96.0/python/mozbuild/mozpack/chrome/manifest.py
---- firefox-96.0/python/mozbuild/mozpack/chrome/manifest.py.2~ 2022-01-06 16:56:52.000000000 +0100
-+++ firefox-96.0/python/mozbuild/mozpack/chrome/manifest.py 2022-01-10 21:34:48.660595261 +0100
-@@ -44,6 +44,7 @@ class ManifestEntry(object):
- "process",
- "contentaccessible",
- "backgroundtask",
-+ "desktop",
- ]
-
- def __init__(self, base, *flags):
-diff -up firefox-96.0/toolkit/components/downloads/moz.build.2~ firefox-96.0/toolkit/components/downloads/moz.build
---- firefox-96.0/toolkit/components/downloads/moz.build.2~ 2022-01-06 19:33:04.000000000 +0100
-+++ firefox-96.0/toolkit/components/downloads/moz.build 2022-01-10 21:34:48.660595261 +0100
-@@ -50,5 +50,9 @@ if CONFIG["MOZ_PLACES"]:
-
- FINAL_LIBRARY = "xul"
-
-+LOCAL_INCLUDES += [
-+ '/toolkit/xre'
-+]
-+
- with Files("**"):
- BUG_COMPONENT = ("Toolkit", "Downloads API")
-diff -up firefox-96.0/toolkit/mozapps/downloads/HelperAppDlg.jsm.2~ firefox-96.0/toolkit/mozapps/downloads/HelperAppDlg.jsm
---- firefox-96.0/toolkit/mozapps/downloads/HelperAppDlg.jsm.2~ 2022-01-06 19:33:04.000000000 +0100
-+++ firefox-96.0/toolkit/mozapps/downloads/HelperAppDlg.jsm 2022-01-10 21:34:48.660595261 +0100
-@@ -1236,26 +1236,56 @@ nsUnknownContentTypeDialog.prototype = {
- this.chosenApp = params.handlerApp;
- }
- } else if ("@mozilla.org/applicationchooser;1" in Cc) {
-- var nsIApplicationChooser = Ci.nsIApplicationChooser;
-- var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance(
-- nsIApplicationChooser
-- );
-- appChooser.init(
-- this.mDialog,
-- this.dialogElement("strings").getString("chooseAppFilePickerTitle")
-- );
-- var contentTypeDialogObj = this;
-- let appChooserCallback = function appChooserCallback_done(aResult) {
-- if (aResult) {
-- contentTypeDialogObj.chosenApp = aResult.QueryInterface(
-- Ci.nsILocalHandlerApp
-- );
-- }
-- contentTypeDialogObj.finishChooseApp();
-- };
-- appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback);
-- // The finishChooseApp is called from appChooserCallback
-- return;
-+ // handle the KDE case which is implemented in the filepicker
-+ // therefore falling back to Gtk2 like behaviour if KDE is running
-+ // FIXME this should be better handled in the nsIApplicationChooser
-+ // interface
-+ var env = Components.classes["@mozilla.org/process/environment;1"]
-+ .getService(Components.interfaces.nsIEnvironment);
-+ if (env.get('KDE_FULL_SESSION') == "true")
-+ {
-+ var nsIFilePicker = Ci.nsIFilePicker;
-+ var fp = Cc["@mozilla.org/filepicker;1"]
-+ .createInstance(nsIFilePicker);
-+ fp.init(this.mDialog,
-+ this.dialogElement("strings").getString("chooseAppFilePickerTitle"),
-+ nsIFilePicker.modeOpen);
-+
-+ fp.appendFilters(nsIFilePicker.filterApps);
-+
-+ fp.open(aResult => {
-+ if (aResult == nsIFilePicker.returnOK && fp.file) {
-+ // Remember the file they chose to run.
-+ var localHandlerApp =
-+ Cc["@mozilla.org/uriloader/local-handler-app;1"].
-+ createInstance(Ci.nsILocalHandlerApp);
-+ localHandlerApp.executable = fp.file;
-+ this.chosenApp = localHandlerApp;
-+ }
-+ this.finishChooseApp();
-+ });
-+ } else {
-+ var nsIApplicationChooser = Ci.nsIApplicationChooser;
-+ var appChooser = Cc["@mozilla.org/applicationchooser;1"].createInstance(
-+ nsIApplicationChooser
-+ );
-+ appChooser.init(
-+ this.mDialog,
-+ this.dialogElement("strings").getString("chooseAppFilePickerTitle")
-+ );
-+ var contentTypeDialogObj = this;
-+ let appChooserCallback = function appChooserCallback_done(aResult) {
-+ if (aResult) {
-+ contentTypeDialogObj.chosenApp = aResult.QueryInterface(
-+ Ci.nsILocalHandlerApp
-+ );
-+ }
-+ contentTypeDialogObj.finishChooseApp();
-+ };
-+ appChooser.open(this.mLauncher.MIMEInfo.MIMEType, appChooserCallback);
-+ // The finishChooseApp is called from appChooserCallback
-+ return;
-+ }
- } else {
- var nsIFilePicker = Ci.nsIFilePicker;
- var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
-diff -up firefox-96.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp.2~ firefox-96.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
---- firefox-96.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp.2~ 2022-01-06 16:58:15.000000000 +0100
-+++ firefox-96.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp 2022-01-10 21:34:48.660595261 +0100
-@@ -18,6 +18,7 @@
- #include "nsInterfaceHashtable.h"
- #include "mozilla/Attributes.h"
- #include "nsIURI.h"
-+#include "nsKDEUtils.h"
-
- using namespace mozilla;
-
-@@ -41,6 +42,8 @@ class nsUnixSystemProxySettings final :
- nsACString& aResult);
- nsresult SetProxyResultFromGSettings(const char* aKeyBase, const char* aType,
- nsACString& aResult);
-+ nsresult GetProxyFromKDE(const nsACString& aScheme, const nsACString& aHost,
-+ PRInt32 aPort, nsACString& aResult);
- };
-
- NS_IMPL_ISUPPORTS(nsUnixSystemProxySettings, nsISystemProxySettings)
-@@ -382,6 +385,9 @@ nsresult nsUnixSystemProxySettings::GetP
- const nsACString& aHost,
- const int32_t aPort,
- nsACString& aResult) {
-+ if (nsKDEUtils::kdeSupport())
-+ return GetProxyFromKDE(aScheme, aHost, aPort, aResult);
-+
- if (mProxySettings) {
- nsresult rv = GetProxyFromGSettings(aScheme, aHost, aPort, aResult);
- if (NS_SUCCEEDED(rv)) return rv;
-@@ -390,6 +396,32 @@ nsresult nsUnixSystemProxySettings::GetP
- return GetProxyFromEnvironment(aScheme, aHost, aPort, aResult);
- }
-
-+nsresult
-+nsUnixSystemProxySettings::GetProxyFromKDE(const nsACString& aScheme,
-+ const nsACString& aHost,
-+ PRInt32 aPort,
-+ nsACString& aResult)
-+{
-+ nsAutoCString url;
-+ url = aScheme;
-+ url += "://";
-+ url += aHost;
-+ if( aPort >= 0 )
-+ {
-+ url += ":";
-+ url += nsPrintfCString("%d", aPort);
-+ }
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "GETPROXY"_ns );
-+ command.AppendElement( url );
-+ nsTArray<nsCString> result;
-+ if( !nsKDEUtils::command( command, &result ) || result.Length() != 1 )
-+ return NS_ERROR_FAILURE;
-+ aResult = result[0];
-+ return NS_OK;
-+}
-+
-+
- NS_IMPL_COMPONENT_FACTORY(nsUnixSystemProxySettings) {
- auto result = MakeRefPtr<nsUnixSystemProxySettings>();
- result->Init();
-diff -up firefox-96.0/toolkit/xre/moz.build.2~ firefox-96.0/toolkit/xre/moz.build
---- firefox-96.0/toolkit/xre/moz.build.2~ 2022-01-06 19:33:05.000000000 +0100
-+++ firefox-96.0/toolkit/xre/moz.build 2022-01-10 21:34:48.660595261 +0100
-@@ -97,7 +97,9 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "ui
- "UIKitDirProvider.mm",
- ]
- elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
-+ EXPORTS += ['nsKDEUtils.h']
- UNIFIED_SOURCES += [
-+ "nsKDEUtils.cpp",
- "nsNativeAppSupportUnix.cpp",
- ]
- CXXFLAGS += CONFIG["MOZ_X11_SM_CFLAGS"]
-diff -up firefox-96.0/toolkit/xre/nsKDEUtils.cpp.2~ firefox-96.0/toolkit/xre/nsKDEUtils.cpp
---- firefox-96.0/toolkit/xre/nsKDEUtils.cpp.2~ 2022-01-10 21:34:48.660595261 +0100
-+++ firefox-96.0/toolkit/xre/nsKDEUtils.cpp 2022-01-10 21:34:48.660595261 +0100
-@@ -0,0 +1,321 @@
-+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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/. */
-+
-+#include "nsKDEUtils.h"
-+#include "nsIWidget.h"
-+#include "nsISupportsPrimitives.h"
-+#include "nsIMutableArray.h"
-+#include "nsComponentManagerUtils.h"
-+#include "nsArrayUtils.h"
-+
-+#include <gtk/gtk.h>
-+
-+#include <limits.h>
-+#include <stdio.h>
-+#include <sys/wait.h>
-+#include <sys/resource.h>
-+#include <unistd.h>
-+#include <X11/Xlib.h>
-+// copied from X11/X.h as a hack since for an unknown
-+// reason it's not picked up from X11/X.h
-+#ifndef None
-+#define None 0L /* universal null resource or null atom */
-+#endif
-+
-+//#define DEBUG_KDE
-+#ifdef DEBUG_KDE
-+#define KMOZILLAHELPER "kmozillahelper"
-+#else
-+// not need for lib64, it's a binary
-+#define KMOZILLAHELPER "/usr/lib/mozilla/kmozillahelper"
-+#endif
-+
-+#define KMOZILLAHELPER_VERSION 6
-+#define MAKE_STR2( n ) #n
-+#define MAKE_STR( n ) MAKE_STR2( n )
-+
-+static bool getKdeSession()
-+{
-+ if (PR_GetEnv("KDE_FULL_SESSION"))
-+ {
-+ return true;
-+ }
-+ return false;
-+}
-+
-+static bool getKdeSupport()
-+ {
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "CHECK"_ns );
-+ command.AppendElement( "KMOZILLAHELPER_VERSION"_ns );
-+ bool kde = nsKDEUtils::command( command );
-+#ifdef DEBUG_KDE
-+ fprintf( stderr, "KDE RUNNING %d\n", kde );
-+#endif
-+ return kde;
-+ }
-+
-+nsKDEUtils::nsKDEUtils()
-+ : commandFile( NULL )
-+ , replyFile( NULL )
-+ {
-+ }
-+
-+nsKDEUtils::~nsKDEUtils()
-+ {
-+// closeHelper(); not actually useful, exiting will close the fd too
-+ }
-+
-+nsKDEUtils* nsKDEUtils::self()
-+ {
-+ static nsKDEUtils s;
-+ return &s;
-+ }
-+
-+static bool helperRunning = false;
-+static bool helperFailed = false;
-+
-+bool nsKDEUtils::kdeSession()
-+ {
-+ static bool session = getKdeSession();
-+ return session;
-+ }
-+
-+bool nsKDEUtils::kdeSupport()
-+ {
-+ static bool support = kdeSession() && getKdeSupport();
-+ return support && helperRunning;
-+ }
-+
-+struct nsKDECommandData
-+ {
-+ FILE* file;
-+ nsTArray<nsCString>* output;
-+ GMainLoop* loop;
-+ bool success;
-+ };
-+
-+static gboolean kdeReadFunc( GIOChannel*, GIOCondition, gpointer data )
-+ {
-+ nsKDECommandData* p = static_cast< nsKDECommandData* >( data );
-+ char buf[ 8192 ]; // TODO big enough
-+ bool command_done = false;
-+ bool command_failed = false;
-+ while( !command_done && !command_failed && fgets( buf, 8192, p->file ) != NULL )
-+ { // TODO what if the kernel splits a line into two chunks?
-+//#ifdef DEBUG_KDE
-+// fprintf( stderr, "READ: %s %d\n", buf, feof( p->file ));
-+//#endif
-+ if( char* eol = strchr( buf, '\n' ))
-+ *eol = '\0';
-+ command_done = ( strcmp( buf, "\\1" ) == 0 );
-+ command_failed = ( strcmp( buf, "\\0" ) == 0 );
-+ nsAutoCString line( buf );
-+ line.ReplaceSubstring( "\\n", "\n" );
-+ line.ReplaceSubstring( "\\" "\\", "\\" ); // \\ -> \ , i.e. unescape
-+ if( p->output && !( command_done || command_failed ))
-+ p->output->AppendElement( nsCString( buf )); // TODO utf8?
-+ }
-+ bool quit = false;
-+ if( feof( p->file ) || command_failed )
-+ {
-+ quit = true;
-+ p->success = false;
-+ }
-+ if( command_done )
-+ { // reading one reply finished
-+ quit = true;
-+ p->success = true;
-+ }
-+ if( quit )
-+ {
-+ if( p->loop )
-+ g_main_loop_quit( p->loop );
-+ return FALSE;
-+ }
-+ return TRUE;
-+ }
-+
-+bool nsKDEUtils::command( const nsTArray<nsCString>& command, nsTArray<nsCString>* output )
-+ {
-+ return self()->internalCommand( command, NULL, false, output );
-+ }
-+
-+bool nsKDEUtils::command( nsIArray* command, nsIArray** output)
-+ {
-+ nsTArray<nsCString> in;
-+ PRUint32 length;
-+ command->GetLength( &length );
-+ for ( PRUint32 i = 0; i < length; i++ )
-+ {
-+ nsCOMPtr<nsISupportsCString> str = do_QueryElementAt( command, i );
-+ if( str )
-+ {
-+ nsAutoCString s;
-+ str->GetData( s );
-+ in.AppendElement( s );
-+ }
-+ }
-+
-+ nsTArray<nsCString> out;
-+ bool ret = self()->internalCommand( in, NULL, false, &out );
-+
-+ if ( !output ) return ret;
-+
-+ nsCOMPtr<nsIMutableArray> result = do_CreateInstance( NS_ARRAY_CONTRACTID );
-+ if ( !result ) return false;
-+
-+ for ( PRUint32 i = 0; i < out.Length(); i++ )
-+ {
-+ nsCOMPtr<nsISupportsCString> rstr = do_CreateInstance( NS_SUPPORTS_CSTRING_CONTRACTID );
-+ if ( !rstr ) return false;
-+
-+ rstr->SetData( out[i] );
-+ result->AppendElement( rstr );
-+ }
-+
-+ NS_ADDREF( *output = result);
-+ return ret;
-+ }
-+
-+
-+bool nsKDEUtils::commandBlockUi( const nsTArray<nsCString>& command, GtkWindow* parent, nsTArray<nsCString>* output )
-+ {
-+ return self()->internalCommand( command, parent, true, output );
-+ }
-+
-+bool nsKDEUtils::internalCommand( const nsTArray<nsCString>& command, GtkWindow* parent, bool blockUi,
-+ nsTArray<nsCString>* output )
-+ {
-+ if( !startHelper())
-+ return false;
-+ feedCommand( command );
-+ // do not store the data in 'this' but in extra structure, just in case there
-+ // is reentrancy (can there be? the event loop is re-entered)
-+ nsKDECommandData data;
-+ data.file = replyFile;
-+ data.output = output;
-+ data.success = false;
-+ if( blockUi )
-+ {
-+ data.loop = g_main_loop_new( NULL, FALSE );
-+ GtkWidget* window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
-+ if( parent && gtk_window_get_group(parent) )
-+ gtk_window_group_add_window( gtk_window_get_group(parent), GTK_WINDOW( window ));
-+ gtk_widget_realize( window );
-+ gtk_widget_set_sensitive( window, TRUE );
-+ gtk_grab_add( window );
-+ GIOChannel* channel = g_io_channel_unix_new( fileno( data.file ));
-+ g_io_add_watch( channel, static_cast< GIOCondition >( G_IO_IN | G_IO_ERR | G_IO_HUP ), kdeReadFunc, &data );
-+ g_io_channel_unref( channel );
-+ g_main_loop_run( data.loop );
-+ g_main_loop_unref( data.loop );
-+ gtk_grab_remove( window );
-+ gtk_widget_destroy( window );
-+ }
-+ else
-+ {
-+ data.loop = NULL;
-+ while( kdeReadFunc( NULL, static_cast< GIOCondition >( 0 ), &data ))
-+ ;
-+ }
-+ return data.success;
-+ }
-+
-+bool nsKDEUtils::startHelper()
-+ {
-+ if( helperRunning )
-+ return true;
-+ if( helperFailed )
-+ return false;
-+ helperFailed = true;
-+ int fdcommand[ 2 ];
-+ int fdreply[ 2 ];
-+ if( pipe( fdcommand ) < 0 )
-+ return false;
-+ if( pipe( fdreply ) < 0 )
-+ {
-+ close( fdcommand[ 0 ] );
-+ close( fdcommand[ 1 ] );
-+ return false;
-+ }
-+ char* args[ 2 ] = { const_cast< char* >( KMOZILLAHELPER ), NULL };
-+ switch( fork())
-+ {
-+ case -1:
-+ {
-+ close( fdcommand[ 0 ] );
-+ close( fdcommand[ 1 ] );
-+ close( fdreply[ 0 ] );
-+ close( fdreply[ 1 ] );
-+ return false;
-+ }
-+ case 0: // child
-+ {
-+ if( dup2( fdcommand[ 0 ], STDIN_FILENO ) < 0 )
-+ _exit( 1 );
-+ if( dup2( fdreply[ 1 ], STDOUT_FILENO ) < 0 )
-+ _exit( 1 );
-+ int maxfd = 1024; // close all other fds
-+ struct rlimit rl;
-+ if( getrlimit( RLIMIT_NOFILE, &rl ) == 0 )
-+ maxfd = rl.rlim_max;
-+ for( int i = 3;
-+ i < maxfd;
-+ ++i )
-+ close( i );
-+#ifdef DEBUG_KDE
-+ execvp( KMOZILLAHELPER, args );
-+#else
-+ execv( KMOZILLAHELPER, args );
-+#endif
-+ _exit( 1 ); // failed
-+ }
-+ default: // parent
-+ {
-+ commandFile = fdopen( fdcommand[ 1 ], "w" );
-+ replyFile = fdopen( fdreply[ 0 ], "r" );
-+ close( fdcommand[ 0 ] );
-+ close( fdreply[ 1 ] );
-+ if( commandFile == NULL || replyFile == NULL )
-+ {
-+ closeHelper();
-+ return false;
-+ }
-+ // ok, helper ready, getKdeRunning() will check if it works
-+ }
-+ }
-+ helperFailed = false;
-+ helperRunning = true;
-+ return true;
-+ }
-+
-+void nsKDEUtils::closeHelper()
-+ {
-+ if( commandFile != NULL )
-+ fclose( commandFile ); // this will also make the helper quit
-+ if( replyFile != NULL )
-+ fclose( replyFile );
-+ helperRunning = false;
-+ }
-+
-+void nsKDEUtils::feedCommand( const nsTArray<nsCString>& command )
-+ {
-+ for( int i = 0;
-+ i < command.Length();
-+ ++i )
-+ {
-+ nsCString line = command[ i ];
-+ line.ReplaceSubstring( "\\", "\\" "\\" ); // \ -> \\ , i.e. escape
-+ line.ReplaceSubstring( "\n", "\\n" );
-+#ifdef DEBUG_KDE
-+ fprintf( stderr, "COMM: %s\n", line.get());
-+#endif
-+ fputs( line.get(), commandFile );
-+ fputs( "\n", commandFile );
-+ }
-+ fputs( "\\E\n", commandFile ); // done as \E, so it cannot happen in normal data
-+ fflush( commandFile );
-+ }
-diff -up firefox-96.0/toolkit/xre/nsKDEUtils.h.2~ firefox-96.0/toolkit/xre/nsKDEUtils.h
---- firefox-96.0/toolkit/xre/nsKDEUtils.h.2~ 2022-01-10 21:34:48.660595261 +0100
-+++ firefox-96.0/toolkit/xre/nsKDEUtils.h 2022-01-10 21:34:48.660595261 +0100
-@@ -0,0 +1,48 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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/. */
-+
-+#ifndef nsKDEUtils_h__
-+#define nsKDEUtils_h__
-+
-+#include "nsString.h"
-+#include "nsTArray.h"
-+#include <stdio.h>
-+
-+typedef struct _GtkWindow GtkWindow;
-+
-+class nsIArray;
-+
-+class NS_EXPORT nsKDEUtils
-+ {
-+ public:
-+ /* Returns true if running inside a KDE session (regardless of whether there is KDE
-+ support available for Firefox). This should be used e.g. when determining
-+ dialog button order but not for code that requires the KDE support. */
-+ static bool kdeSession();
-+ /* Returns true if running inside a KDE session and KDE support is available
-+ for Firefox. This should be used everywhere where the external helper is needed. */
-+ static bool kdeSupport();
-+ /* Executes the given helper command, returns true if helper returned success. */
-+ static bool command( const nsTArray<nsCString>& command, nsTArray<nsCString>* output = NULL );
-+ static bool command( nsIArray* command, nsIArray** output = NULL );
-+ /* Like command(), but additionally blocks the parent widget like if there was
-+ a modal dialog shown and enters the event loop (i.e. there are still paint updates,
-+ this is for commands that take long). */
-+ static bool commandBlockUi( const nsTArray<nsCString>& command, GtkWindow* parent, nsTArray<nsCString>* output = NULL );
-+
-+ private:
-+ nsKDEUtils();
-+ ~nsKDEUtils();
-+ static nsKDEUtils* self();
-+ bool startHelper();
-+ void closeHelper();
-+ void feedCommand( const nsTArray<nsCString>& command );
-+ bool internalCommand( const nsTArray<nsCString>& command, GtkWindow* parent, bool isParent,
-+ nsTArray<nsCString>* output );
-+ FILE* commandFile;
-+ FILE* replyFile;
-+ };
-+
-+#endif // nsKDEUtils
-diff -up firefox-96.0/uriloader/exthandler/HandlerServiceParent.cpp.2~ firefox-96.0/uriloader/exthandler/HandlerServiceParent.cpp
---- firefox-96.0/uriloader/exthandler/HandlerServiceParent.cpp.2~ 2022-01-06 16:57:59.000000000 +0100
-+++ firefox-96.0/uriloader/exthandler/HandlerServiceParent.cpp 2022-01-10 21:34:48.660595261 +0100
-@@ -12,7 +12,7 @@
- #include "ContentHandlerService.h"
- #include "nsStringEnumerator.h"
- #ifdef MOZ_WIDGET_GTK
--# include "unix/nsGNOMERegistry.h"
-+# include "unix/nsCommonRegistry.h"
- #endif
-
- using mozilla::dom::ContentHandlerService;
-@@ -304,7 +304,7 @@ mozilla::ipc::IPCResult HandlerServicePa
- }
- #ifdef MOZ_WIDGET_GTK
- // Check the GNOME registry for a protocol handler
-- *aHandlerExists = nsGNOMERegistry::HandlerExists(aProtocolScheme.get());
-+ *aHandlerExists = nsCommonRegistry::HandlerExists(aProtocolScheme.get());
- #else
- *aHandlerExists = false;
- #endif
-@@ -333,7 +333,7 @@ mozilla::ipc::IPCResult HandlerServicePa
- }
- rv = protoSvc->ExternalProtocolHandlerExists(aProtocolScheme.get(),
- aHandlerExists);
--
-+##
- if (NS_WARN_IF(NS_FAILED(rv))) {
- *aHandlerExists = false;
- }
-diff -up firefox-96.0/uriloader/exthandler/moz.build.2~ firefox-96.0/uriloader/exthandler/moz.build
---- firefox-96.0/uriloader/exthandler/moz.build.2~ 2022-01-06 19:33:05.000000000 +0100
-+++ firefox-96.0/uriloader/exthandler/moz.build 2022-01-10 21:40:48.237015273 +0100
-@@ -83,7 +83,9 @@ else:
-
- if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
- UNIFIED_SOURCES += [
-+ "unix/nsCommonRegistry.cpp",
- "unix/nsGNOMERegistry.cpp",
-+ "unix/nsKDERegistry.cpp",
- "unix/nsMIMEInfoUnix.cpp",
- ]
- elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "android":
-@@ -131,6 +133,7 @@ LOCAL_INCLUDES += [
- "/dom/ipc",
- "/netwerk/base",
- "/netwerk/protocol/http",
-+ "/toolkit/xre",
- ]
-
- if CONFIG["MOZ_ENABLE_DBUS"]:
-diff -up firefox-96.0/uriloader/exthandler/unix/nsCommonRegistry.cpp.2~ firefox-96.0/uriloader/exthandler/unix/nsCommonRegistry.cpp
---- firefox-96.0/uriloader/exthandler/unix/nsCommonRegistry.cpp.2~ 2022-01-10 21:34:48.660595261 +0100
-+++ firefox-96.0/uriloader/exthandler/unix/nsCommonRegistry.cpp 2022-01-10 21:34:48.660595261 +0100
-@@ -0,0 +1,53 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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/. */
-+
-+#include "nsCommonRegistry.h"
-+
-+#include "nsGNOMERegistry.h"
-+#include "nsKDERegistry.h"
-+#include "nsString.h"
-+#include "nsKDEUtils.h"
-+
-+/* static */ bool
-+nsCommonRegistry::HandlerExists(const char *aProtocolScheme)
-+{
-+ if( nsKDEUtils::kdeSupport())
-+ return nsKDERegistry::HandlerExists( aProtocolScheme );
-+ return nsGNOMERegistry::HandlerExists( aProtocolScheme );
-+}
-+
-+/* static */ nsresult
-+nsCommonRegistry::LoadURL(nsIURI *aURL)
-+{
-+ if( nsKDEUtils::kdeSupport())
-+ return nsKDERegistry::LoadURL( aURL );
-+ return nsGNOMERegistry::LoadURL( aURL );
-+}
-+
-+/* static */ void
-+nsCommonRegistry::GetAppDescForScheme(const nsACString& aScheme,
-+ nsAString& aDesc)
-+{
-+ if( nsKDEUtils::kdeSupport())
-+ return nsKDERegistry::GetAppDescForScheme( aScheme, aDesc );
-+ return nsGNOMERegistry::GetAppDescForScheme( aScheme, aDesc );
-+}
-+
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsCommonRegistry::GetFromExtension(const nsACString& aFileExt)
-+{
-+ if( nsKDEUtils::kdeSupport())
-+ return nsKDERegistry::GetFromExtension( aFileExt );
-+ return nsGNOMERegistry::GetFromExtension( aFileExt );
-+}
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsCommonRegistry::GetFromType(const nsACString& aMIMEType)
-+{
-+ if( nsKDEUtils::kdeSupport())
-+ return nsKDERegistry::GetFromType( aMIMEType );
-+ return nsGNOMERegistry::GetFromType( aMIMEType );
-+}
-diff -up firefox-96.0/uriloader/exthandler/unix/nsCommonRegistry.h.2~ firefox-96.0/uriloader/exthandler/unix/nsCommonRegistry.h
---- firefox-96.0/uriloader/exthandler/unix/nsCommonRegistry.h.2~ 2022-01-10 21:34:48.660595261 +0100
-+++ firefox-96.0/uriloader/exthandler/unix/nsCommonRegistry.h 2022-01-10 21:34:48.660595261 +0100
-@@ -0,0 +1,28 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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/. */
-+
-+#ifndef nsCommonRegistry_h__
-+#define nsCommonRegistry_h__
-+
-+#include "nsIURI.h"
-+#include "nsCOMPtr.h"
-+
-+class nsMIMEInfoBase;
-+
-+class nsCommonRegistry
-+{
-+ public:
-+ static bool HandlerExists(const char *aProtocolScheme);
-+
-+ static nsresult LoadURL(nsIURI *aURL);
-+
-+ static void GetAppDescForScheme(const nsACString& aScheme,
-+ nsAString& aDesc);
-+
-+ static already_AddRefed<nsMIMEInfoBase> GetFromExtension(const nsACString& aFileExt);
-+
-+ static already_AddRefed<nsMIMEInfoBase> GetFromType(const nsACString& aMIMEType);
-+};
-+
-+#endif
-diff -up firefox-96.0/uriloader/exthandler/unix/nsKDERegistry.cpp.2~ firefox-96.0/uriloader/exthandler/unix/nsKDERegistry.cpp
---- firefox-96.0/uriloader/exthandler/unix/nsKDERegistry.cpp.2~ 2022-01-10 21:34:48.661595265 +0100
-+++ firefox-96.0/uriloader/exthandler/unix/nsKDERegistry.cpp 2022-01-10 21:34:48.660595261 +0100
-@@ -0,0 +1,86 @@
-+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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/. */
-+
-+#include "nsKDERegistry.h"
-+#include "prlink.h"
-+#include "prmem.h"
-+#include "nsString.h"
-+#include "nsMIMEInfoUnix.h"
-+#include "nsKDEUtils.h"
-+
-+/* static */ bool
-+nsKDERegistry::HandlerExists(const char *aProtocolScheme)
-+{
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "HANDLEREXISTS"_ns );
-+ command.AppendElement( nsAutoCString( aProtocolScheme ));
-+ return nsKDEUtils::command( command );
-+}
-+
-+/* static */ nsresult
-+nsKDERegistry::LoadURL(nsIURI *aURL)
-+{
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "OPEN"_ns );
-+ nsCString url;
-+ aURL->GetSpec( url );
-+ command.AppendElement( url );
-+ bool rv = nsKDEUtils::command( command );
-+ if (!rv)
-+ return NS_ERROR_FAILURE;
-+
-+ return NS_OK;
-+}
-+
-+/* static */ void
-+nsKDERegistry::GetAppDescForScheme(const nsACString& aScheme,
-+ nsAString& aDesc)
-+{
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "GETAPPDESCFORSCHEME"_ns );
-+ command.AppendElement( aScheme );
-+ nsTArray<nsCString> output;
-+ if( nsKDEUtils::command( command, &output ) && output.Length() == 1 )
-+ CopyUTF8toUTF16( output[ 0 ], aDesc );
-+}
-+
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsKDERegistry::GetFromExtension(const nsACString& aFileExt)
-+{
-+ NS_ASSERTION(aFileExt[0] != '.', "aFileExt shouldn't start with a dot");
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "GETFROMEXTENSION"_ns );
-+ command.AppendElement( aFileExt );
-+ return GetFromHelper( command );
-+}
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsKDERegistry::GetFromType(const nsACString& aMIMEType)
-+{
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "GETFROMTYPE"_ns );
-+ command.AppendElement( aMIMEType );
-+ return GetFromHelper( command );
-+}
-+
-+/* static */ already_AddRefed<nsMIMEInfoBase>
-+nsKDERegistry::GetFromHelper(const nsTArray<nsCString>& command)
-+{
-+ nsTArray<nsCString> output;
-+ if( nsKDEUtils::command( command, &output ) && output.Length() == 3 )
-+ {
-+ nsCString mimetype = output[ 0 ];
-+ RefPtr<nsMIMEInfoUnix> mimeInfo = new nsMIMEInfoUnix( mimetype );
-+ NS_ENSURE_TRUE(mimeInfo, nullptr);
-+ nsCString description = output[ 1 ];
-+ mimeInfo->SetDescription(NS_ConvertUTF8toUTF16(description));
-+ nsCString handlerAppName = output[ 2 ];
-+ mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(handlerAppName));
-+ mimeInfo->SetPreferredAction(nsIMIMEInfo::useSystemDefault);
-+ return mimeInfo.forget();
-+ }
-+ return nullptr;
-+}
-diff -up firefox-96.0/uriloader/exthandler/unix/nsKDERegistry.h.2~ firefox-96.0/uriloader/exthandler/unix/nsKDERegistry.h
---- firefox-96.0/uriloader/exthandler/unix/nsKDERegistry.h.2~ 2022-01-10 21:34:48.661595265 +0100
-+++ firefox-96.0/uriloader/exthandler/unix/nsKDERegistry.h 2022-01-10 21:34:48.661595265 +0100
-@@ -0,0 +1,34 @@
-+/* This Source Code Form is subject to the terms of the Mozilla Public
-+ * 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/. */
-+
-+#ifndef nsKDERegistry_h__
-+#define nsKDERegistry_h__
-+
-+#include "nsIURI.h"
-+#include "nsCOMPtr.h"
-+#include "nsTArray.h"
-+
-+class nsMIMEInfoBase;
-+//class nsAutoCString;
-+//class nsCString;
-+
-+class nsKDERegistry
-+{
-+ public:
-+ static bool HandlerExists(const char *aProtocolScheme);
-+
-+ static nsresult LoadURL(nsIURI *aURL);
-+
-+ static void GetAppDescForScheme(const nsACString& aScheme,
-+ nsAString& aDesc);
-+
-+ static already_AddRefed<nsMIMEInfoBase> GetFromExtension(const nsACString& aFileExt);
-+
-+ static already_AddRefed<nsMIMEInfoBase> GetFromType(const nsACString& aMIMEType);
-+ private:
-+ static already_AddRefed<nsMIMEInfoBase> GetFromHelper(const nsTArray<nsCString>& command);
-+
-+};
-+
-+#endif //nsKDERegistry_h__
-diff -up firefox-96.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.2~ firefox-96.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
---- firefox-96.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.2~ 2022-01-06 16:57:48.000000000 +0100
-+++ firefox-96.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp 2022-01-10 21:34:48.661595265 +0100
-@@ -5,16 +5,19 @@
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- #include "nsMIMEInfoUnix.h"
--#include "nsGNOMERegistry.h"
-+#include "nsCommonRegistry.h"
- #include "nsIGIOService.h"
- #include "nsNetCID.h"
- #include "nsIIOService.h"
- #ifdef MOZ_ENABLE_DBUS
- # include "nsDBusHandlerApp.h"
- #endif
-+#if defined(XP_UNIX) && !defined(XP_MACOSX)
-+#include "nsKDEUtils.h"
-+#endif
-
- nsresult nsMIMEInfoUnix::LoadUriInternal(nsIURI* aURI) {
-- return nsGNOMERegistry::LoadURL(aURI);
-+ return nsCommonRegistry::LoadURL(aURI);
- }
-
- NS_IMETHODIMP
-@@ -27,15 +30,15 @@ nsMIMEInfoUnix::GetHasDefaultHandler(boo
- *_retval = false;
-
- if (mClass == eProtocolInfo) {
-- *_retval = nsGNOMERegistry::HandlerExists(mSchemeOrType.get());
-+ *_retval = nsCommonRegistry::HandlerExists(mSchemeOrType.get());
- } else {
- RefPtr<nsMIMEInfoBase> mimeInfo =
-- nsGNOMERegistry::GetFromType(mSchemeOrType);
-+ nsCommonRegistry::GetFromType(mSchemeOrType);
- if (!mimeInfo) {
- nsAutoCString ext;
- nsresult rv = GetPrimaryExtension(ext);
- if (NS_SUCCEEDED(rv)) {
-- mimeInfo = nsGNOMERegistry::GetFromExtension(ext);
-+ mimeInfo = nsCommonRegistry::GetFromExtension(ext);
- }
- }
- if (mimeInfo) *_retval = true;
-@@ -55,6 +58,23 @@ nsresult nsMIMEInfoUnix::LaunchDefaultWi
- nsAutoCString nativePath;
- aFile->GetNativePath(nativePath);
-
-+ if( nsKDEUtils::kdeSupport()) {
-+ bool supports;
-+ if( NS_SUCCEEDED( GetHasDefaultHandler( &supports )) && supports ) {
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "OPEN"_ns );
-+ command.AppendElement( nativePath );
-+ command.AppendElement( "MIMETYPE"_ns );
-+ command.AppendElement( mSchemeOrType );
-+ if( nsKDEUtils::command( command ))
-+ return NS_OK;
-+ }
-+ if (!mDefaultApplication)
-+ return NS_ERROR_FILE_NOT_FOUND;
-+
-+ return LaunchWithIProcess(mDefaultApplication, nativePath);
-+ }
-+
- nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
- if (!giovfs) {
- return NS_ERROR_FAILURE;
-diff -up firefox-96.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp.2~ firefox-96.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp
---- firefox-96.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp.2~ 2022-01-06 16:57:36.000000000 +0100
-+++ firefox-96.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp 2022-01-10 21:34:48.661595265 +0100
-@@ -10,7 +10,7 @@
- #include "nsOSHelperAppService.h"
- #include "nsMIMEInfoUnix.h"
- #ifdef MOZ_WIDGET_GTK
--# include "nsGNOMERegistry.h"
-+# include "nsCommonRegistry.h"
- # ifdef MOZ_BUILD_APP_IS_BROWSER
- # include "nsIToolkitShellService.h"
- # include "nsIGNOMEShellService.h"
-@@ -1030,7 +1030,7 @@ nsresult nsOSHelperAppService::OSProtoco
- if (!XRE_IsContentProcess()) {
- #ifdef MOZ_WIDGET_GTK
- // Check the GNOME registry for a protocol handler
-- *aHandlerExists = nsGNOMERegistry::HandlerExists(aProtocolScheme);
-+ *aHandlerExists = nsCommonRegistry::HandlerExists(aProtocolScheme);
- #else
- *aHandlerExists = false;
- #endif
-@@ -1050,7 +1050,7 @@ nsresult nsOSHelperAppService::OSProtoco
- NS_IMETHODIMP nsOSHelperAppService::GetApplicationDescription(
- const nsACString& aScheme, nsAString& _retval) {
- #ifdef MOZ_WIDGET_GTK
-- nsGNOMERegistry::GetAppDescForScheme(aScheme, _retval);
-+ nsCommonRegistry::GetAppDescForScheme(aScheme, _retval);
- return _retval.IsEmpty() ? NS_ERROR_NOT_AVAILABLE : NS_OK;
- #else
- return NS_ERROR_NOT_AVAILABLE;
-@@ -1153,7 +1153,7 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
- #ifdef MOZ_WIDGET_GTK
- LOG(("Looking in GNOME registry\n"));
- RefPtr<nsMIMEInfoBase> gnomeInfo =
-- nsGNOMERegistry::GetFromExtension(aFileExt);
-+ nsCommonRegistry::GetFromExtension(aFileExt);
- if (gnomeInfo) {
- LOG(("Got MIMEInfo from GNOME registry\n"));
- return gnomeInfo.forget();
-@@ -1266,7 +1266,7 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
-
- #ifdef MOZ_WIDGET_GTK
- if (handler.IsEmpty()) {
-- RefPtr<nsMIMEInfoBase> gnomeInfo = nsGNOMERegistry::GetFromType(aMIMEType);
-+ RefPtr<nsMIMEInfoBase> gnomeInfo = nsCommonRegistry::GetFromType(aMIMEType);
- if (gnomeInfo) {
- LOG(
- ("Got MIMEInfo from GNOME registry without extensions; setting them "
-diff -up firefox-96.0/widget/gtk/moz.build.2~ firefox-96.0/widget/gtk/moz.build
---- firefox-96.0/widget/gtk/moz.build.2~ 2022-01-06 19:33:05.000000000 +0100
-+++ firefox-96.0/widget/gtk/moz.build 2022-01-10 21:34:48.661595265 +0100
-@@ -140,6 +140,7 @@ LOCAL_INCLUDES += [
- "/layout/xul",
- "/other-licenses/atk-1.0",
- "/third_party/cups/include",
-+ "/toolkit/xre",
- "/widget",
- "/widget/headless",
- ]
-diff -up firefox-96.0/widget/gtk/nsFilePicker.cpp.2~ firefox-96.0/widget/gtk/nsFilePicker.cpp
---- firefox-96.0/widget/gtk/nsFilePicker.cpp.2~ 2022-01-06 19:33:05.000000000 +0100
-+++ firefox-96.0/widget/gtk/nsFilePicker.cpp 2022-01-10 21:34:48.661595265 +0100
-@@ -5,6 +5,7 @@
-
- #include <dlfcn.h>
- #include <gtk/gtk.h>
-+#include <gdk/gdkx.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #include <unistd.h>
-@@ -27,6 +28,8 @@
- #include "WidgetUtilsGtk.h"
-
- #include "nsFilePicker.h"
-+#include "nsKDEUtils.h"
-+#include "nsURLHelper.h"
-
- #undef LOG
- #ifdef MOZ_LOGGING
-@@ -247,7 +250,9 @@ NS_IMETHODIMP
- nsFilePicker::AppendFilter(const nsAString& aTitle, const nsAString& aFilter) {
- if (aFilter.EqualsLiteral("..apps")) {
- // No platform specific thing we can do here, really....
-- return NS_OK;
-+ // Unless it's KDE.
-+ if( mMode != modeOpen || !nsKDEUtils::kdeSupport())
-+ return NS_OK;
- }
-
- nsAutoCString filter, name;
-@@ -357,6 +362,29 @@ nsFilePicker::Open(nsIFilePickerShownCal
- // Can't show two dialogs concurrently with the same filepicker
- if (mRunning) return NS_ERROR_NOT_AVAILABLE;
-
-+ // KDE file picker is not handled via callback
-+ if( nsKDEUtils::kdeSupport()) {
-+ mCallback = aCallback;
-+ mRunning = true;
-+ NS_ADDREF_THIS();
-+ g_idle_add([](gpointer data) -> gboolean {
-+ nsFilePicker* queuedPicker = (nsFilePicker*) data;
-+ int16_t result;
-+ queuedPicker->kdeFileDialog(&result);
-+ if (queuedPicker->mCallback) {
-+ queuedPicker->mCallback->Done(result);
-+ queuedPicker->mCallback = nullptr;
-+ } else {
-+ queuedPicker->mResult = result;
-+ }
-+ queuedPicker->mRunning = false;
-+ NS_RELEASE(queuedPicker);
-+ return G_SOURCE_REMOVE;
-+ }, this);
-+
-+ return NS_OK;
-+ }
-+
- NS_ConvertUTF16toUTF8 title(mTitle);
-
- GtkWindow* parent_widget =
-@@ -586,6 +614,234 @@ void nsFilePicker::Done(void* file_choos
- NS_RELEASE_THIS();
- }
-
-+nsCString nsFilePicker::kdeMakeFilter( int index )
-+ {
-+ nsCString buf = mFilters[ index ];
-+ for( PRUint32 i = 0;
-+ i < buf.Length();
-+ ++i )
-+ if( buf[ i ] == ';' ) // KDE separates just using spaces
-+ buf.SetCharAt( ' ', i );
-+ if (!mFilterNames[index].IsEmpty())
-+ {
-+ buf += "|";
-+ buf += mFilterNames[index].get();
-+ }
-+ return buf;
-+ }
-+
-+static PRInt32 windowToXid( nsIWidget* widget )
-+ {
-+ GtkWindow *parent_widget = GTK_WINDOW(widget->GetNativeData(NS_NATIVE_SHELLWIDGET));
-+ GdkWindow* gdk_window = gtk_widget_get_window( gtk_widget_get_toplevel( GTK_WIDGET( parent_widget )));
-+ return GDK_WINDOW_XID( gdk_window );
-+ }
-+
-+NS_IMETHODIMP nsFilePicker::kdeFileDialog(PRInt16 *aReturn)
-+ {
-+ NS_ENSURE_ARG_POINTER(aReturn);
-+
-+ if( mMode == modeOpen && mFilters.Length() == 1 && mFilters[ 0 ].EqualsLiteral( "..apps" ))
-+ return kdeAppsDialog( aReturn );
-+
-+ nsCString title;
-+ title.Adopt(ToNewUTF8String(mTitle));
-+
-+ const char* arg = NULL;
-+ if( mAllowURLs )
-+ {
-+ switch( mMode )
-+ {
-+ case nsIFilePicker::modeOpen:
-+ case nsIFilePicker::modeOpenMultiple:
-+ arg = "GETOPENURL";
-+ break;
-+ case nsIFilePicker::modeSave:
-+ arg = "GETSAVEURL";
-+ break;
-+ case nsIFilePicker::modeGetFolder:
-+ arg = "GETDIRECTORYURL";
-+ break;
-+ }
-+ }
-+ else
-+ {
-+ switch( mMode )
-+ {
-+ case nsIFilePicker::modeOpen:
-+ case nsIFilePicker::modeOpenMultiple:
-+ arg = "GETOPENFILENAME";
-+ break;
-+ case nsIFilePicker::modeSave:
-+ arg = "GETSAVEFILENAME";
-+ break;
-+ case nsIFilePicker::modeGetFolder:
-+ arg = "GETDIRECTORYFILENAME";
-+ break;
-+ }
-+ }
-+
-+ nsAutoCString directory;
-+ if (mDisplayDirectory) {
-+ mDisplayDirectory->GetNativePath(directory);
-+ } else if (mPrevDisplayDirectory) {
-+ mPrevDisplayDirectory->GetNativePath(directory);
-+ }
-+
-+ nsAutoCString startdir;
-+ if (!directory.IsEmpty()) {
-+ startdir = directory;
-+ }
-+ if (mMode == nsIFilePicker::modeSave) {
-+ if( !startdir.IsEmpty())
-+ {
-+ startdir += "/";
-+ startdir += ToNewUTF8String(mDefault);
-+ }
-+ else
-+ startdir = ToNewUTF8String(mDefault);
-+ }
-+
-+ nsAutoCString filters;
-+ PRInt32 count = mFilters.Length();
-+ if( count == 0 ) //just in case
-+ filters = "*";
-+ else
-+ {
-+ filters = kdeMakeFilter( 0 );
-+ for (PRInt32 i = 1; i < count; ++i)
-+ {
-+ filters += "\n";
-+ filters += kdeMakeFilter( i );
-+ }
-+ }
-+
-+ nsTArray<nsCString> command;
-+ command.AppendElement( nsAutoCString( arg ));
-+ command.AppendElement( startdir );
-+ if( mMode != nsIFilePicker::modeGetFolder )
-+ {
-+ command.AppendElement( filters );
-+ nsAutoCString selected;
-+ selected.AppendInt( mSelectedType );
-+ command.AppendElement( selected );
-+ }
-+ command.AppendElement( title );
-+ if( mMode == nsIFilePicker::modeOpenMultiple )
-+ command.AppendElement( "MULTIPLE"_ns );
-+ if( PRInt32 xid = windowToXid( mParentWidget ))
-+ {
-+ command.AppendElement( "PARENT"_ns );
-+ nsAutoCString parent;
-+ parent.AppendInt( xid );
-+ command.AppendElement( parent );
-+ }
-+
-+ nsTArray<nsCString> output;
-+ if( nsKDEUtils::commandBlockUi( command, GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)), &output ))
-+ {
-+ *aReturn = nsIFilePicker::returnOK;
-+ mFiles.Clear();
-+ if( mMode != nsIFilePicker::modeGetFolder )
-+ {
-+ mSelectedType = atoi( output[ 0 ].get());
-+ output.RemoveElementAt( 0 );
-+ }
-+ if (mMode == nsIFilePicker::modeOpenMultiple)
-+ {
-+ mFileURL.Truncate();
-+ PRUint32 count = output.Length();
-+ for( PRUint32 i = 0;
-+ i < count;
-+ ++i )
-+ {
-+ nsCOMPtr<nsIFile> localfile;
-+ nsresult rv = NS_NewNativeLocalFile( output[ i ],
-+ PR_FALSE,
-+ getter_AddRefs(localfile));
-+ if (NS_SUCCEEDED(rv))
-+ mFiles.AppendObject(localfile);
-+ }
-+ }
-+ else
-+ {
-+ if( output.Length() == 0 )
-+ mFileURL = nsCString();
-+ else if( mAllowURLs )
-+ mFileURL = output[ 0 ];
-+ else // GetFile() actually requires it to be url even for local files :-/
-+ {
-+ nsCOMPtr<nsIFile> localfile;
-+ nsresult rv = NS_NewNativeLocalFile( output[ 0 ],
-+ PR_FALSE,
-+ getter_AddRefs(localfile));
-+ if (NS_SUCCEEDED(rv))
-+ rv = net_GetURLSpecFromActualFile(localfile, mFileURL);
-+ }
-+ }
-+ // Remember last used directory.
-+ nsCOMPtr<nsIFile> file;
-+ GetFile(getter_AddRefs(file));
-+ if (file) {
-+ nsCOMPtr<nsIFile> dir;
-+ file->GetParent(getter_AddRefs(dir));
-+ nsCOMPtr<nsIFile> localDir(do_QueryInterface(dir));
-+ if (localDir) {
-+ localDir.swap(mPrevDisplayDirectory);
-+ }
-+ }
-+ if (mMode == nsIFilePicker::modeSave)
-+ {
-+ nsCOMPtr<nsIFile> file;
-+ GetFile(getter_AddRefs(file));
-+ if (file)
-+ {
-+ bool exists = false;
-+ file->Exists(&exists);
-+ if (exists) // TODO do overwrite check in the helper app
-+ *aReturn = nsIFilePicker::returnReplace;
-+ }
-+ }
-+ }
-+ else
-+ {
-+ *aReturn = nsIFilePicker::returnCancel;
-+ }
-+ return NS_OK;
-+ }
-+
-+
-+NS_IMETHODIMP nsFilePicker::kdeAppsDialog(PRInt16 *aReturn)
-+ {
-+ NS_ENSURE_ARG_POINTER(aReturn);
-+
-+ nsCString title;
-+ title.Adopt(ToNewUTF8String(mTitle));
-+
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "APPSDIALOG"_ns );
-+ command.AppendElement( title );
-+ if( PRInt32 xid = windowToXid( mParentWidget ))
-+ {
-+ command.AppendElement( "PARENT"_ns );
-+ nsAutoCString parent;
-+ parent.AppendInt( xid );
-+ command.AppendElement( parent );
-+ }
-+
-+ nsTArray<nsCString> output;
-+ if( nsKDEUtils::commandBlockUi( command, GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET)), &output ))
-+ {
-+ *aReturn = nsIFilePicker::returnOK;
-+ mFileURL = output.Length() > 0 ? output[ 0 ] : nsCString();
-+ }
-+ else
-+ {
-+ *aReturn = nsIFilePicker::returnCancel;
-+ }
-+ return NS_OK;
-+ }
-+
- // All below functions available as of GTK 3.20+
- void* nsFilePicker::GtkFileChooserNew(const gchar* title, GtkWindow* parent,
- GtkFileChooserAction action,
-diff -up firefox-96.0/widget/gtk/nsFilePicker.h.2~ firefox-96.0/widget/gtk/nsFilePicker.h
---- firefox-96.0/widget/gtk/nsFilePicker.h.2~ 2022-01-06 16:57:48.000000000 +0100
-+++ firefox-96.0/widget/gtk/nsFilePicker.h 2022-01-10 21:34:48.661595265 +0100
-@@ -72,6 +72,12 @@ class nsFilePicker : public nsBaseFilePi
- private:
- static nsIFile* mPrevDisplayDirectory;
-
-+ bool kdeRunning();
-+ bool getKdeRunning();
-+ NS_IMETHODIMP kdeFileDialog(PRInt16 *aReturn);
-+ NS_IMETHODIMP kdeAppsDialog(PRInt16 *aReturn);
-+ nsCString kdeMakeFilter( int index );
-+
- void* GtkFileChooserNew(const gchar* title, GtkWindow* parent,
- GtkFileChooserAction action,
- const gchar* accept_label);
-diff -up firefox-96.0/xpcom/components/ManifestParser.cpp.2~ firefox-96.0/xpcom/components/ManifestParser.cpp
---- firefox-96.0/xpcom/components/ManifestParser.cpp.2~ 2022-01-06 16:58:15.000000000 +0100
-+++ firefox-96.0/xpcom/components/ManifestParser.cpp 2022-01-10 21:34:48.661595265 +0100
-@@ -43,6 +43,7 @@
- #include "nsIScriptError.h"
- #include "nsIXULAppInfo.h"
- #include "nsIXULRuntime.h"
-+#include "nsKDEUtils.h"
-
- using namespace mozilla;
-
-@@ -402,6 +403,7 @@ void ParseManifest(NSLocationType aType,
- constexpr auto kOs = u"os"_ns;
- constexpr auto kOsVersion = u"osversion"_ns;
- constexpr auto kABI = u"abi"_ns;
-+ constexpr auto kDesktop = u"desktop"_ns;
- constexpr auto kProcess = u"process"_ns;
- #if defined(MOZ_WIDGET_ANDROID)
- constexpr auto kTablet = u"tablet"_ns;
-@@ -461,6 +463,7 @@ void ParseManifest(NSLocationType aType,
- }
-
- nsAutoString osVersion;
-+ nsAutoString desktop;
- #if defined(XP_WIN)
- # pragma warning(push)
- # pragma warning(disable : 4996) // VC12+ deprecates GetVersionEx
-@@ -469,14 +472,17 @@ void ParseManifest(NSLocationType aType,
- nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", info.dwMajorVersion,
- info.dwMinorVersion);
- }
-+ desktop = u"win"_ns;
- # pragma warning(pop)
- #elif defined(MOZ_WIDGET_COCOA)
- SInt32 majorVersion = nsCocoaFeatures::macOSVersionMajor();
- SInt32 minorVersion = nsCocoaFeatures::macOSVersionMinor();
- nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", majorVersion, minorVersion);
-+ desktop = u"macosx"_ns);
- #elif defined(MOZ_WIDGET_GTK)
- nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", gtk_major_version,
- gtk_minor_version);
-+ desktop = nsKDEUtils::kdeSession() ? u"kde"_ns : u"gnome"_ns;
- #elif defined(MOZ_WIDGET_ANDROID)
- bool isTablet = false;
- if (mozilla::AndroidBridge::Bridge()) {
-@@ -484,6 +490,7 @@ void ParseManifest(NSLocationType aType,
- "android/os/Build$VERSION", "RELEASE", osVersion);
- isTablet = java::GeckoAppShell::IsTablet();
- }
-+ desktop = u"android"_ns;
- #endif
-
- if (XRE_IsContentProcess()) {
-@@ -588,6 +595,7 @@ void ParseManifest(NSLocationType aType,
- : eUnspecified;
- #endif
- int flags = 0;
-+ TriState stDesktop = eUnspecified;
-
- while ((token = nsCRT::strtok(whitespace, kWhitespace, &whitespace)) &&
- ok) {
-@@ -597,6 +605,7 @@ void ParseManifest(NSLocationType aType,
- if (CheckStringFlag(kApplication, wtoken, appID, stApp) ||
- CheckOsFlag(kOs, wtoken, osTarget, stOs) ||
- CheckStringFlag(kABI, wtoken, abi, stABI) ||
-+ CheckStringFlag(kDesktop, wtoken, desktop, stDesktop) ||
- CheckStringFlag(kProcess, wtoken, process, stProcess) ||
- CheckVersionFlag(kOsVersion, wtoken, osVersion, stOsVersion) ||
- CheckVersionFlag(kAppVersion, wtoken, appVersion, stAppVersion) ||
-@@ -655,7 +664,7 @@ void ParseManifest(NSLocationType aType,
- }
-
- if (!ok || stApp == eBad || stAppVersion == eBad ||
-- stGeckoVersion == eBad || stOs == eBad || stOsVersion == eBad ||
-+ stGeckoVersion == eBad || stOs == eBad || stOsVersion == eBad || stDesktop == eBad ||
- #ifdef MOZ_WIDGET_ANDROID
- stTablet == eBad ||
- #endif
-diff -up firefox-96.0/xpcom/components/moz.build.2~ firefox-96.0/xpcom/components/moz.build
---- firefox-96.0/xpcom/components/moz.build.2~ 2022-01-06 19:33:05.000000000 +0100
-+++ firefox-96.0/xpcom/components/moz.build 2022-01-10 21:34:48.661595265 +0100
-@@ -71,6 +71,7 @@ LOCAL_INCLUDES += [
- "/js/xpconnect/loader",
- "/layout/build",
- "/modules/libjar",
-+ "/toolkit/xre",
- ]
-
- if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
-diff -up firefox-96.0/xpcom/io/nsLocalFileUnix.cpp.2~ firefox-96.0/xpcom/io/nsLocalFileUnix.cpp
---- firefox-96.0/xpcom/io/nsLocalFileUnix.cpp.2~ 2022-01-06 19:33:05.000000000 +0100
-+++ firefox-96.0/xpcom/io/nsLocalFileUnix.cpp 2022-01-10 21:34:48.661595265 +0100
-@@ -58,6 +58,7 @@
-
- #ifdef MOZ_WIDGET_GTK
- # include "nsIGIOService.h"
-+# include "nsKDEUtils.h"
- #endif
-
- #ifdef MOZ_WIDGET_COCOA
-@@ -2030,18 +2031,16 @@ nsLocalFile::Reveal() {
- }
-
- #ifdef MOZ_WIDGET_GTK
-- nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
-- if (!giovfs) {
-- return NS_ERROR_FAILURE;
-- }
-+ nsAutoCString url;
-
- bool isDirectory;
- if (NS_FAILED(IsDirectory(&isDirectory))) {
- return NS_ERROR_FAILURE;
- }
-
-+ nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
- if (isDirectory) {
-- return giovfs->ShowURIForInput(mPath);
-+ url = mPath;
- }
- if (NS_SUCCEEDED(giovfs->OrgFreedesktopFileManager1ShowItems(mPath))) {
- return NS_OK;
-@@ -2055,7 +2054,7 @@ nsLocalFile::Reveal() {
- return NS_ERROR_FAILURE;
- }
-
-- return giovfs->ShowURIForInput(dirPath);
-+ url = dirPath;
- #elif defined(MOZ_WIDGET_COCOA)
- CFURLRef url;
- if (NS_SUCCEEDED(GetCFURL(&url))) {
-@@ -2067,6 +2066,17 @@ nsLocalFile::Reveal() {
- #else
- return NS_ERROR_FAILURE;
- #endif
-+ if(nsKDEUtils::kdeSupport()) {
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "REVEAL"_ns );
-+ command.AppendElement( mPath );
-+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+ }
-+
-+ if (!giovfs)
-+ return NS_ERROR_FAILURE;
-+
-+ return giovfs->ShowURIForInput(url);
- }
-
- NS_IMETHODIMP
-@@ -2076,6 +2086,12 @@ nsLocalFile::Launch() {
- }
-
- #ifdef MOZ_WIDGET_GTK
-+ if( nsKDEUtils::kdeSupport()) {
-+ nsTArray<nsCString> command;
-+ command.AppendElement( "OPEN"_ns );
-+ command.AppendElement( mPath );
-+ return nsKDEUtils::command( command ) ? NS_OK : NS_ERROR_FAILURE;
-+ }
- nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
- if (!giovfs) {
- return NS_ERROR_FAILURE;
diff --git a/mozilla-93.0-kde.patch b/mozilla-99.0-kde.patch
similarity index 97%
rename from mozilla-93.0-kde.patch
rename to mozilla-99.0-kde.patch
index 32e7fe4..5671dcc 100644
--- a/mozilla-93.0-kde.patch
+++ b/mozilla-99.0-kde.patch
@@ -3,7 +3,7 @@
# Date 1559294891 -7200
# Fri May 31 11:28:11 2019 +0200
# Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112
-# Parent 0dd1b6436342922d434e7c818875b2a02a73b5ed
+# Parent 8d1110b6918acc4e7d3f655d1e55f4b4ff630abe
Description: Add KDE integration to Firefox (toolkit parts)
Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
Author: Lubos Lunak <lunak@suse.com>
@@ -147,7 +147,7 @@ diff --git a/python/mozbuild/mozpack/chrome/manifest.py b/python/mozbuild/mozpac
diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloads/moz.build
--- a/toolkit/components/downloads/moz.build
+++ b/toolkit/components/downloads/moz.build
-@@ -45,10 +45,14 @@ XPCOM_MANIFESTS += [
+@@ -46,10 +46,14 @@ XPCOM_MANIFESTS += [
if CONFIG["MOZ_PLACES"]:
EXTRA_JS_MODULES += [
@@ -165,7 +165,7 @@ diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloa
diff --git a/toolkit/mozapps/downloads/HelperAppDlg.jsm b/toolkit/mozapps/downloads/HelperAppDlg.jsm
--- a/toolkit/mozapps/downloads/HelperAppDlg.jsm
+++ b/toolkit/mozapps/downloads/HelperAppDlg.jsm
-@@ -1231,36 +1231,66 @@ nsUnknownContentTypeDialog.prototype = {
+@@ -1252,36 +1252,66 @@ nsUnknownContentTypeDialog.prototype = {
params.handlerApp &&
params.handlerApp.executable &&
params.handlerApp.executable.isFile()
@@ -346,7 +346,7 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/sy
diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
--- a/toolkit/xre/moz.build
+++ b/toolkit/xre/moz.build
-@@ -91,17 +91,19 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "co
+@@ -92,17 +92,19 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "co
"../components/printingui",
]
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "uikit":
@@ -360,17 +360,17 @@ diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
+ "nsKDEUtils.cpp",
"nsNativeAppSupportUnix.cpp",
]
+ CXXFLAGS += CONFIG["MOZ_X11_SM_CFLAGS"]
else:
UNIFIED_SOURCES += [
"nsNativeAppSupportDefault.cpp",
]
- if CONFIG["MOZ_HAS_REMOTE"]:
diff --git a/toolkit/xre/nsKDEUtils.cpp b/toolkit/xre/nsKDEUtils.cpp
new file mode 100644
--- /dev/null
+++ b/toolkit/xre/nsKDEUtils.cpp
-@@ -0,0 +1,344 @@
+@@ -0,0 +1,321 @@
+/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
@@ -410,36 +410,13 @@ new file mode 100644
+#define MAKE_STR( n ) MAKE_STR2( n )
+
+static bool getKdeSession()
++{
++ if (PR_GetEnv("KDE_FULL_SESSION"))
+ {
-+ Display* dpy = XOpenDisplay( NULL );
-+ if( dpy == NULL )
-+ return false;
-+ Atom kde_full_session = XInternAtom( dpy, "KDE_FULL_SESSION", true );
-+ bool kde = false;
-+ if( kde_full_session != None )
-+ {
-+ int cnt;
-+ if( Atom* props = XListProperties( dpy, DefaultRootWindow( dpy ), &cnt ))
-+ {
-+ for( int i = 0;
-+ i < cnt;
-+ ++i )
-+ {
-+ if( props[ i ] == kde_full_session )
-+ {
-+ kde = true;
-+#ifdef DEBUG_KDE
-+ fprintf( stderr, "KDE SESSION %d\n", kde );
-+#endif
-+ break;
-+ }
-+ }
-+ XFree( props );
-+ }
-+ }
-+ XCloseDisplay( dpy );
-+ return kde;
++ return true;
+ }
++ return false;
++}
+
+static bool getKdeSupport()
+ {
@@ -831,12 +808,12 @@ diff --git a/uriloader/exthandler/HandlerServiceParent.cpp b/uriloader/exthandle
diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build
--- a/uriloader/exthandler/moz.build
+++ b/uriloader/exthandler/moz.build
-@@ -80,17 +80,19 @@ else:
+@@ -78,17 +78,19 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "ui
+ else:
+ # These files can't be built in unified mode because they redefine LOG.
SOURCES += [
osdir + "/nsOSHelperAppService.cpp",
]
- if CONFIG["CC_TYPE"] in ("clang", "gcc"):
- CXXFLAGS += ["-Wno-error=shadow"]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
UNIFIED_SOURCES += [
@@ -851,7 +828,7 @@ diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build
]
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
UNIFIED_SOURCES += [
-@@ -128,16 +130,17 @@ include("/ipc/chromium/chromium-config.m
+@@ -126,16 +128,17 @@ include("/ipc/chromium/chromium-config.m
FINAL_LIBRARY = "xul"
LOCAL_INCLUDES += [
@@ -864,11 +841,11 @@ diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build
]
if CONFIG["MOZ_ENABLE_DBUS"]:
- CXXFLAGS += CONFIG["TK_CFLAGS"]
CXXFLAGS += CONFIG["MOZ_DBUS_CFLAGS"]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
- CXXFLAGS += CONFIG["TK_CFLAGS"]
+ CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
+ CXXFLAGS += CONFIG["MOZ_DBUS_GLIB_CFLAGS"]
diff --git a/uriloader/exthandler/unix/nsCommonRegistry.cpp b/uriloader/exthandler/unix/nsCommonRegistry.cpp
new file mode 100644
--- /dev/null
@@ -964,12 +941,13 @@ diff --git a/uriloader/exthandler/unix/nsKDERegistry.cpp b/uriloader/exthandler/
new file mode 100644
--- /dev/null
+++ b/uriloader/exthandler/unix/nsKDERegistry.cpp
-@@ -0,0 +1,86 @@
+@@ -0,0 +1,89 @@
+/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/. */
+
++#include "mozilla/StaticPrefs_browser.h"
+#include "nsKDERegistry.h"
+#include "prlink.h"
+#include "prmem.h"
@@ -1045,8 +1023,10 @@ new file mode 100644
+ nsCString description = output[ 1 ];
+ mimeInfo->SetDescription(NS_ConvertUTF8toUTF16(description));
+ nsCString handlerAppName = output[ 2 ];
++ mozilla::StaticPrefs::browser_download_improvements_to_download_panel()
++ ? mimeInfo->SetPreferredAction(nsIMIMEInfo::saveToDisk)
++ : mimeInfo->SetPreferredAction(nsIMIMEInfo::useSystemDefault);
+ mimeInfo->SetDefaultDescription(NS_ConvertUTF8toUTF16(handlerAppName));
-+ mimeInfo->SetPreferredAction(nsIMIMEInfo::useSystemDefault);
+ return mimeInfo.forget();
+ }
+ return nullptr;
@@ -1283,7 +1263,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
--- a/widget/gtk/moz.build
+++ b/widget/gtk/moz.build
-@@ -137,16 +137,17 @@ FINAL_LIBRARY = "xul"
+@@ -136,16 +136,17 @@ FINAL_LIBRARY = "xul"
LOCAL_INCLUDES += [
"/layout/base",
@@ -1340,7 +1320,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
# include "Units.h"
extern mozilla::LazyLogModule gWidgetLog;
# define LOG(args) MOZ_LOG(gWidgetLog, mozilla::LogLevel::Debug, args)
-@@ -242,17 +245,19 @@ nsFilePicker::AppendFilters(int32_t aFil
+@@ -236,17 +239,19 @@ nsFilePicker::AppendFilters(int32_t aFil
mAllowURLs = !!(aFilterMask & filterAllowURLs);
return nsBaseFilePicker::AppendFilters(aFilterMask);
}
@@ -1361,7 +1341,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
mFilters.AppendElement(filter);
mFilterNames.AppendElement(name);
-@@ -352,16 +357,39 @@ nsresult nsFilePicker::Show(int16_t* aRe
+@@ -346,16 +351,39 @@ nsresult nsFilePicker::Show(int16_t* aRe
return NS_OK;
}
@@ -1401,7 +1381,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
GtkFileChooserAction action = GetGtkFileChooserAction(mMode);
const gchar* accept_button;
-@@ -581,16 +609,244 @@ void nsFilePicker::Done(void* file_choos
+@@ -575,16 +603,244 @@ void nsFilePicker::Done(void* file_choos
mCallback->Done(result);
mCallback = nullptr;
} else {
@@ -1819,7 +1799,7 @@ diff --git a/xpcom/components/moz.build b/xpcom/components/moz.build
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
- CXXFLAGS += CONFIG["TK_CFLAGS"]
+ CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
if CONFIG["MOZ_ENABLE_DBUS"]:
CXXFLAGS += CONFIG["MOZ_DBUS_GLIB_CFLAGS"]
@@ -1827,7 +1807,7 @@ diff --git a/xpcom/components/moz.build b/xpcom/components/moz.build
diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
--- a/xpcom/io/nsLocalFileUnix.cpp
+++ b/xpcom/io/nsLocalFileUnix.cpp
-@@ -53,16 +53,17 @@
+@@ -54,16 +54,17 @@
#include "prproces.h"
#include "nsIDirectoryEnumerator.h"
#include "nsSimpleEnumerator.h"
@@ -1845,7 +1825,7 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
# include "prmem.h"
# include "plbase64.h"
-@@ -2023,62 +2024,77 @@ nsLocalFile::SetPersistentDescriptor(con
+@@ -2071,62 +2072,77 @@ nsLocalFile::SetPersistentDescriptor(con
NS_IMETHODIMP
nsLocalFile::Reveal() {