$ git diff --patch-with-stat --summary bb93bbed722801ef4db147809ba0711f03f34f52..035943cc1a29244898c5b6239de50111dce7766a
.abf.yml | 140 ++---
D173814.diff | 82 ---
firefox-enable-vaapi.patch | 10 +-
firefox.spec | 21 +-
...import-dmabuf-directly-into-desktop-frame.patch | 505 ----------------
mozilla-107.0.1-kde.patch | 673 ++++-----------------
mozilla-1663844.patch | 37 --
mozilla-1670333.patch | 68 ---
8 files changed, 216 insertions(+), 1320 deletions(-)
delete mode 100644 D173814.diff
delete mode 100644 libwebrtc-pipewire-capturer-import-dmabuf-directly-into-desktop-frame.patch
delete mode 100644 mozilla-1663844.patch
delete mode 100644 mozilla-1670333.patch
diff --git a/.abf.yml b/.abf.yml
index 26586aa..855c760 100644
--- a/.abf.yml
+++ b/.abf.yml
@@ -1,72 +1,72 @@
sources:
- af.xpi: 09fc8a1b64c52bcae2aa55c8126c018b4a839d50
- ar.xpi: 6c55f611e6e69ec7cc39c5689988074d26b7a27f
- ast.xpi: 9af20ceae798f0dc34e027a35578487e6d941369
- bg.xpi: 0b48984d2c2f0106a7f6f9437d0135b8c214b4e9
- bn.xpi: 29cd9aae339a2db24926decb6181613b2e8d51eb
- br.xpi: 9b173e9c77b6896e2347ab992ef9e6104d284b6c
- bs.xpi: 4f2ad26cd8a4b6c7f17f9efbc4ccbbdda36b82a8
- ca.xpi: bc45b30fbfade45ac01f125b9f26b1a5a9311e2a
cbindgen-vendor.tar.xz: 8faf49463f1705b8604b2d121dc844aad7e37eae
- cs.xpi: 4471a0afa4ca83c5644dc2691c25da2b6d09b690
- cy.xpi: ebe262935e3a05f602379350025dc2e05322874e
- da.xpi: 347638e79e3906fa521a2b7a80ee39a2715bf49c
- de.xpi: 70791b195882da777bfb9a65af5251ad943501d9
- el.xpi: 053b9014b5f4cf7a522ab3b81d11acab5f4a951b
- en-GB.xpi: 97b11d254a2ede34d8932c03b13c0bb308110619
- eo.xpi: 11d3d9083cab58b03bf2613c84a7ff35ce0a4d3e
- es-AR.xpi: 0a41b12b7c5a572155fe1b9ff2d6e83fbc4ea8f5
- es-CL.xpi: 49c9b8969d51256b237ce0794ce833736b0ed093
- es-ES.xpi: 8bd3989ca918eae58f10a0fbf4f11f9c1f7ca1f3
- es-MX.xpi: e27ab4f1d187f4b81c10a89647d323eb8058a3ae
- et.xpi: 0597217bb6448c7050617001448f43b762c005dc
- eu.xpi: 63ef4f382beea46da155a27008f8ae3575818576
- fa.xpi: 20992f693d65b3eab448aece45477debf2710b1c
- fi.xpi: f2fd09b39695776566e52f9ef78cc398a29be6d8
- firefox-112.0.2.source.tar.xz: 65deb4379e6d8104216ce9ba0f743403964efee5
- fr.xpi: d4c181f65e7a0b62e0bd2a8cd88a246a80172cec
- fy-NL.xpi: a660fffcf9fa2aa186181785f972f4bcc735d809
- ga-IE.xpi: 7c7bc423ea25c619d88cd1120681ee087c44306c
- gd.xpi: 565788ed5f1358b516c432c3b94a9a4137f479cd
- gl.xpi: 5f8d69832f160ded2d6fe586be0935adccb9cf6d
- gu-IN.xpi: caca5d023f08ad03caae4d54945ffaf3e762b4b4
- he.xpi: 1dc3e383b4936a0ed5195cb6d5af22613968973f
- hi-IN.xpi: 0a55d1e9b068fed90c4efb6cfcfecd7680efe31a
- hr.xpi: 08eaddb6d7a6562c3e16c0908ae5ab48b858702d
- hu.xpi: 9903acb8e4e0cf8444005e2b88eb9e11341bb8d2
- hy-AM.xpi: 8fd47b637e1851a6a7ce3543617ee34d884bbce2
- id.xpi: bf4f9d3020a02e75805de237179ee96495de0744
- is.xpi: 9f8d2a42494d8ea7be94458de3ff4fa06b00599f
- it.xpi: bf72a30420c152ef89707255465a7f4fb22ee691
- ja.xpi: 983e4005a7bd0a9a1a156d80c7b1a148130d30cb
- kk.xpi: 2132b972eecab3d872fffb587fedeeebad53d666
- km.xpi: 96300907645c7416d9ce21b6bf1c993570f82df4
- kn.xpi: 058635203bb40fd782e736de953cb79f9f0794a4
- ko.xpi: e45bcfaa0bbf816ab0c74e6f53f2aa33aa2e4cf9
- lt.xpi: e804ff6a8116101e8cd01ecc24bc3c6ac3a56c23
- lv.xpi: 45169074947be30de5550398cec7802f0e75200e
- mk.xpi: 827ffeca958221023b903c41166e56b2d5babc58
- mr.xpi: 793d14aa979470b58fee27d119f9cf95c38434ed
- nb-NO.xpi: 3bc95e3a22d598aadab06b99804f894337740ee4
- nl.xpi: 159a602697a63fec3742270f9d07fdd7fa0565b0
- nn-NO.xpi: ce2e1571bb7d4a1baceac9a855537fde3fd3b302
- pa-IN.xpi: edbee4f4410353e7d048430cb25db34dbd4ba001
- pl.xpi: 97a63853ffd911f33719917a09134fa30ede4541
- pt-BR.xpi: e1844c6eac74a51ef392245a6e58a5df4f8aa55a
- pt-PT.xpi: 0b5d074c9faea27c1bbeefb08ceaf918b7faf01e
- ro.xpi: 1048fecfbeb33a2bc43469f76c11cefa65aff575
- ru.xpi: f37f7030d84ed60563f4a47af632b8bb556463bf
- si.xpi: 08ddf24d22f6677d244a6c41559e2d4854e7ef7e
- sk.xpi: e46baa1a7d75becd00a2a27fbb5aa636978ef78e
- sl.xpi: fa0dd952311c8063cc8785ee01ed31e8034b9ed7
- sq.xpi: b89dbaaae741b99ed4eb2ab9d59be3cfd1c83f1e
- sr.xpi: bd7d9a612d9690d6215f3f8c2bd8b0b638d4d1b8
- sv-SE.xpi: 7be54d76f70d6cd2855d6f2de6b78c2fe053b114
- ta.xpi: f7aa318b22e41ede2456d2f2bb637cf1ecead63a
- te.xpi: c1da7e0fec7a8e81ea27df5dccd9bea121b28ed3
- th.xpi: c8bfd62fe5c89fb1cd835d26357a15bde5bb5fde
- tr.xpi: f205e48ecd3005c10020afd4920c8d9a11b625bc
- uk.xpi: 1b9bd4199ec87054b67c65084900747c1fe856a7
- vi.xpi: 14ac7ef15fd257a5e5670939314c602ecf3337c6
- zh-CN.xpi: e7f7d089560f7233308b3d9b9ddc8d28b9091253
- zh-TW.xpi: e3b62af1a84c2ebc9dbfd7492f707b964b0248ae
+ firefox-113.0.source.tar.xz: 66f0217f7a1bde8ceb2f5368263d7569baa68597
+ af.xpi: e48817e9499363ac3d631045df7febd296bfa15f
+ ar.xpi: 51bcd5874bfebdef230e6b65df9b65840b3a883d
+ ast.xpi: d7eb819e8131c2a070eb2dddb301dd3a4756b44f
+ bg.xpi: 923d52ac0461636483379a0219cf46f902026bdd
+ bn.xpi: 426e50605b4e6aa99a4a05d442a0c98f3a801a53
+ br.xpi: 109d4c62216f9eb26686f2481299371ed481e416
+ bs.xpi: dd59334a2d7ce6325f2a330626396dd943c4f2f1
+ ca.xpi: d6353f88e9ffc7c896b3b73dd8bcaabf52fffe4d
+ cs.xpi: 6ceceb90cdc871134f14c3a5a7c3ac7ffd15539d
+ cy.xpi: 685cb966eba4d14e04bb1c3ef775233c731afa09
+ da.xpi: d1be981f840127af8bef8a100c4aba02a15df34d
+ de.xpi: 137f0327b2d505d2aebda45f649d37a1ae7834d4
+ el.xpi: f3532594c28ab564988059ee2cb1534fb8a9957b
+ en-GB.xpi: ddb774f240d3f534570051899023e910395b4f7f
+ eo.xpi: 0d0ece3347d7e81310f60c18961b42a535caa166
+ es-AR.xpi: 7beaa6152c924c623b62dd1fdff62f0dcc4859f7
+ es-CL.xpi: f210eac26eff92230cca20a4cb05864936dd079e
+ es-ES.xpi: 2b3b0cc1ab18605d342e1429e61b79a90436cfb1
+ es-MX.xpi: 9e71682cecd9d361c8878eacc3947a8e760d68fb
+ et.xpi: 4cd425e184658565c3fe08dd09759f949a9934d4
+ eu.xpi: 2292526feb37c0f4755ec0437ff2de4ecb437d3a
+ fa.xpi: 55010ad861328c5887fedf72ac3c0351f824ca9b
+ fi.xpi: d43312f1784b8ce057576a0dc183e1f01f7d209c
+ fr.xpi: 8cc60f2e5bc9cd109e0a2f188c45c713906ed3d7
+ fy-NL.xpi: 28dfbdfd44743a45d62561c33df4d7024f63dfbc
+ ga-IE.xpi: 15f8bc7b98b665296b4aee181267b6b7ac7d483a
+ gd.xpi: 4c043391cfa02aa6681c25653f61b94e98765891
+ gl.xpi: 257440ddf02f46cdfce441e56b63d4f2f8029bb0
+ gu-IN.xpi: 25cd4dc71201e40162ff4ffb1137d6ae52df2096
+ he.xpi: 7d3a9370fad4844a108eabe883a2cb10d3857d0a
+ hi-IN.xpi: d95563c5dec8479be2ff9f211cc33fc4f110882d
+ hr.xpi: 8f26f1f8dbcddec85912dc3683892fe52d9fac5c
+ hu.xpi: 94274daa5e32a5847902032c5793df554507dd64
+ hy-AM.xpi: 1def27aa2064ce88b4d7f6bc803747a34a7fb9a1
+ id.xpi: 90a4d5dec43423480595913dcf0946efda6ffed6
+ is.xpi: c87a133897e9cdba29c8c999bdd682d7e4ae8246
+ it.xpi: 868922406e022cbbc056dea43faff50f91bf390e
+ ja.xpi: 89829555194e0693bcd6a257ecb3582d5ae7e4cc
+ kk.xpi: dfe13f2dc36833c275a5368135235c5b0d2807b6
+ km.xpi: be52b7e76df83c95a884d501116c193c057713bc
+ kn.xpi: 46e515548718e1e92b7b6bb6021cbc9a32d6519e
+ ko.xpi: 8fad99e9e7b227992f44276ea3c3448d2eddd94c
+ lt.xpi: e5c4a1cfb81846ea13f439947def00f172006700
+ lv.xpi: 82a006b6312e8e7850997849268317d88d65a4a2
+ mk.xpi: fff162721c0808fb8ddd078bfe06c74992f5a402
+ mr.xpi: 85be4a74255904787378c3efa26bb74375f3484e
+ nb-NO.xpi: a1750383a8645d61f6e3303248fa33b2f1c1dfd7
+ nl.xpi: 9dc390828f66c74c927fe09c97be1a2ec9576940
+ nn-NO.xpi: 3301b27fab68e922788c44662379ef0f7d5597e2
+ pa-IN.xpi: 17ef27efc0113933dcadcaf10687257cf2b57ae5
+ pl.xpi: 1efcf7f38769d3c20978d3deb631e075c0ab3a81
+ pt-BR.xpi: 60e88e174eed540e779bef21b13cdbe1ab71dd9c
+ pt-PT.xpi: 7885b752f7c354ab681205a46709b20e6e1533fe
+ ro.xpi: cb0e056d01151393cf58a2dc905d489de0634091
+ ru.xpi: 580ede1a5a6ccf8ad4c8992f7812050541f282e6
+ si.xpi: 06c57c77b425543fc002c7cc4cd0eb31691a3668
+ sk.xpi: 4a850aa52e59440efdfcfb94b372d6bbea27bdec
+ sl.xpi: 359880834f7526c1ece33372a0338608caa689cf
+ sq.xpi: c7e88f3f159c0dd48b823ec6a72d90e57d51580b
+ sr.xpi: 5a88520ce1e0ae1e4df1e6b040854ed105dbc1d7
+ sv-SE.xpi: 5ab23cff2bdec164912fd9b6f522f4458d0e5f05
+ ta.xpi: eab6182194ffd7c86d98eb0be014f778fc1aff6f
+ te.xpi: be3d6e099aeb516213137da5cebd54ca2364fb32
+ th.xpi: 1800d18a1eafdf9d4e8f5f6b71bb3d2db994dde4
+ tr.xpi: 1e5facbe0036bcf2766624b6f7c5c4c811e5beeb
+ uk.xpi: b8552bf73266b030c06caa4a2add3b843b2ae432
+ vi.xpi: 334e35ed2094acc35c6fe2717d1604433fad8e7c
+ zh-CN.xpi: 9aadb73109a8c0cccfebc43a8b85dbda3f5f3d78
+ zh-TW.xpi: 000f13b96f0d294a39e2dc0c2abc6f681ecc8adf
diff --git a/D173814.diff b/D173814.diff
deleted file mode 100644
index 91898aa..0000000
--- a/D173814.diff
+++ /dev/null
@@ -1,82 +0,0 @@
-diff --git a/widget/gtk/MozContainerWayland.h b/widget/gtk/MozContainerWayland.h
---- a/widget/gtk/MozContainerWayland.h
-+++ b/widget/gtk/MozContainerWayland.h
-@@ -83,10 +83,13 @@
- nsIntSize aSize,
- int scale);
- void moz_container_wayland_set_scale_factor(MozContainer* container);
- void moz_container_wayland_set_scale_factor_locked(
- const mozilla::MutexAutoLock& aProofOfLock, MozContainer* container);
-+bool moz_container_wayland_size_matches_scale_factor_locked(
-+ const mozilla::MutexAutoLock& aProofOfLock, MozContainer* container,
-+ int aWidth, int aHeight);
-
- void moz_container_wayland_add_initial_draw_callback_locked(
- MozContainer* container, const std::function<void(void)>& initial_draw_cb);
- void moz_container_wayland_add_or_fire_initial_draw_callback(
- MozContainer* container, const std::function<void(void)>& initial_draw_cb);
-diff --git a/widget/gtk/MozContainerWayland.cpp b/widget/gtk/MozContainerWayland.cpp
---- a/widget/gtk/MozContainerWayland.cpp
-+++ b/widget/gtk/MozContainerWayland.cpp
-@@ -595,10 +595,17 @@
- if (container->wl_container.surface) {
- moz_container_wayland_set_scale_factor_locked(lock, container);
- }
- }
-
-+bool moz_container_wayland_size_matches_scale_factor_locked(
-+ const MutexAutoLock& aProofOfLock, MozContainer* container, int aWidth,
-+ int aHeight) {
-+ return aWidth % container->wl_container.buffer_scale == 0 &&
-+ aHeight % container->wl_container.buffer_scale == 0;
-+}
-+
- static bool moz_container_wayland_surface_create_locked(
- const MutexAutoLock& aProofOfLock, MozContainer* container) {
- MozContainerWayland* wl_container = &container->wl_container;
-
- LOGWAYLAND("%s [%p]\n", __FUNCTION__,
-diff --git a/widget/gtk/WindowSurfaceWaylandMultiBuffer.cpp b/widget/gtk/WindowSurfaceWaylandMultiBuffer.cpp
---- a/widget/gtk/WindowSurfaceWaylandMultiBuffer.cpp
-+++ b/widget/gtk/WindowSurfaceWaylandMultiBuffer.cpp
-@@ -283,12 +283,12 @@
- return;
- }
- mFrameInProcess = false;
-
- MozContainer* container = mWindow->GetMozContainer();
-- MozContainerSurfaceLock lock(container);
-- struct wl_surface* waylandSurface = lock.GetSurface();
-+ MozContainerSurfaceLock MozContainerLock(container);
-+ struct wl_surface* waylandSurface = MozContainerLock.GetSurface();
- if (!waylandSurface) {
- LOGWAYLAND(
- "WindowSurfaceWaylandMB::Commit [%p] frame queued: can't lock "
- "wl_surface\n",
- (void*)mWindow.get());
-@@ -317,12 +317,23 @@
- LayoutDeviceIntRect r = iter.Get();
- wl_surface_damage_buffer(waylandSurface, r.x, r.y, r.width, r.height);
- }
- }
-
-+ // aProofOfLock is a kind of substitution of MozContainerSurfaceLock.
-+ // MozContainer is locked but MozContainerSurfaceLock doen't convert to
-+ // MutexAutoLock& so we use aProofOfLock here.
- moz_container_wayland_set_scale_factor_locked(aProofOfLock, container);
-- mInProgressBuffer->AttachAndCommit(waylandSurface);
-+
-+ // It's possible that scale factor changed between Lock() and Commit()
-+ // but window size is the same.
-+ // Don't attach such buffer as it may have incorrect size,
-+ // we'll paint new content soon.
-+ if (moz_container_wayland_size_matches_scale_factor_locked(
-+ aProofOfLock, container, mWindowSize.width, mWindowSize.height)) {
-+ mInProgressBuffer->AttachAndCommit(waylandSurface);
-+ }
-
- mInProgressBuffer->ResetBufferAge();
- mFrontBuffer = mInProgressBuffer;
- mFrontBufferInvalidRegion = aInvalidRegion;
- mInProgressBuffer = nullptr;
-
diff --git a/firefox-enable-vaapi.patch b/firefox-enable-vaapi.patch
index dbe92bc..50da2c6 100644
--- a/firefox-enable-vaapi.patch
+++ b/firefox-enable-vaapi.patch
@@ -1,9 +1,9 @@
-diff -up firefox-112.0/widget/gtk/GfxInfo.cpp.firefox-enable-vaapi firefox-112.0/widget/gtk/GfxInfo.cpp
---- firefox-112.0/widget/gtk/GfxInfo.cpp.firefox-enable-vaapi 2023-04-05 11:10:14.156695694 +0200
-+++ firefox-112.0/widget/gtk/GfxInfo.cpp 2023-04-05 11:11:40.697665718 +0200
-@@ -810,14 +810,6 @@ const nsTArray<GfxDriverInfo>& GfxInfo::
+diff -up firefox-113.0/widget/gtk/GfxInfo.cpp.6~ firefox-113.0/widget/gtk/GfxInfo.cpp
+--- firefox-113.0/widget/gtk/GfxInfo.cpp.6~ 2023-05-09 15:56:03.091736331 +0200
++++ firefox-113.0/widget/gtk/GfxInfo.cpp 2023-05-09 15:56:47.355062687 +0200
+@@ -818,14 +818,6 @@ const nsTArray<GfxDriverInfo>& GfxInfo::
nsIGfxInfo::FEATURE_BLOCKED_DEVICE, DRIVER_COMPARISON_IGNORED,
- V(0, 0, 0, 0), "FEATURE_HARDWARE_VIDEO_DECODING_NO_LINUX_AMD", "");
+ V(0, 0, 0, 0), "FEATURE_HARDWARE_VIDEO_DECODING_NO_R600", "");
- // Disable on Release/late Beta
-#if !defined(EARLY_BETA_OR_EARLIER)
diff --git a/firefox.spec b/firefox.spec
index 9abd7bb..c4a269b 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -239,7 +239,7 @@ Name: firefox
Epoch: 0
# IMPORTANT: When updating, you MUST also update the l10n files by running
# download.sh after editing the version number
-Version: 112.0.2
+Version: 113.0
Release: %{?beta:0.%{beta}.}1
License: MPLv1+
Group: Networking/WWW
@@ -279,16 +279,12 @@ Patch17: firefox-112.0.1-no-static-libstdc++.patch
Patch50: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/firefox-enable-vaapi.patch
Patch51: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/0001-GLIBCXX-fix-for-GCC-12.patch
Patch52: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/build-aarch64-skia.patch
-Patch55: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/D173814.diff
Patch57: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/firefox-112.0-commasplit.patch
Patch58: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/firefox-gcc-13-build.patch
-Patch60: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/libwebrtc-pipewire-capturer-import-dmabuf-directly-into-desktop-frame.patch
Patch61: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/mozilla-1196777.patch
Patch62: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/mozilla-1516803.patch
-Patch63: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/mozilla-1663844.patch
#Patch64: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/mozilla-1667096.patch
Patch65: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/mozilla-1669639.patch
-Patch66: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/mozilla-1670333.patch
Patch67: https://src.fedoraproject.org/rpms/firefox/raw/rawhide/f/mozilla-1775202.patch
BuildRequires: doxygen
@@ -546,11 +542,11 @@ cat > .cargo/config <<EOL
replace-with = "vendored-sources"
[source.vendored-sources]
-directory = "`pwd`"
+directory = "$(pwd)"
EOL
env CARGO_HOME=.cargo cargo install cbindgen
-export PATH=`pwd`/.cargo/bin:$PATH
+export PATH=$(pwd)/.cargo/bin:$PATH
cd -
%endif
@@ -559,15 +555,16 @@ export MOZCONFIG=$(pwd)/mozconfig
cat $MOZCONFIG
export MOZ_NOSPAM=1
-export MOZ_SERVICES_SYNC="1"
+export MOZ_SERVICES_SYNC=1
export MACH_NO_WRITE_TIMES=1
-# (tpg) do not create new user profiles on each upgrade, use exsting one
-export MOZ_LEGACY_PROFILES="1"
export LDFLAGS+="%{build_ldflags} -Wl,--no-keep-memory"
export RUSTFLAGS="-Cdebuginfo=0"
-# Needed to keep old profile working
-export MOZ_LEGACY_PROFILES="1"
+# (tpg) do not create new user profiles on each upgrade, use exsting one
+export MOZ_LEGACY_PROFILES=1
+
+# (tpg) re-use already existing user profile
+export MOZ_ALLOW_DOWNGRADE=1
%if %{with system_python}
# FIXME We should enable system python, but need to sort out dependencies
diff --git a/libwebrtc-pipewire-capturer-import-dmabuf-directly-into-desktop-frame.patch b/libwebrtc-pipewire-capturer-import-dmabuf-directly-into-desktop-frame.patch
deleted file mode 100644
index 69f9df2..0000000
--- a/libwebrtc-pipewire-capturer-import-dmabuf-directly-into-desktop-frame.patch
+++ /dev/null
@@ -1,505 +0,0 @@
-From d9faa73cbbc186d7dd0dbfce0589012a0bed9f17 Mon Sep 17 00:00:00 2001
-From: Jan Grulich <grulja@gmail.com>
-Date: Fri, 17 Mar 2023 10:58:10 +0100
-Subject: [PATCH] PipeWire capturer: import DMABufs directly into desktop frame
-
-Originally DMABufs were imported into a temporary buffer followed by a
-copy operation into the desktop frame itself. This is not needed as we
-can import them directly into desktop frames and avoid this overhead.
-
-Also drop support for MemPtr buffers as both Mutter and KWin don't seem
-to support them and they are going to be too slow anyway.
-
-Testing with latest Chromium, I could see two processes with usage around 20% and 40% without this change going down to 10% and 20% with
-this change applied.
-
-Bug: webrtc:13429
-Bug: chrome:1378258
-Change-Id: Ice3292528ff56300931c8638f8e03d4883d5e331
-Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/297501
-Reviewed-by: Alexander Cooper <alcooper@chromium.org>
-Commit-Queue: Jan Grulich <grulja@gmail.com>
-Cr-Commit-Position: refs/heads/main@{#39594}
----
-
-diff --git a/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc b/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
-index 5bbd5d7aba..b529077c6d 100644
---- a/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
-+++ b/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.cc
-@@ -101,11 +101,23 @@ typedef void (*glDeleteTextures_func)(GLsizei n, const GLuint* textures);
- typedef void (*glGenTextures_func)(GLsizei n, GLuint* textures);
- typedef GLenum (*glGetError_func)(void);
- typedef const GLubyte* (*glGetString_func)(GLenum name);
--typedef void (*glGetTexImage_func)(GLenum target,
-- GLint level,
-- GLenum format,
-- GLenum type,
-- void* pixels);
-+typedef void (*glReadPixels_func)(GLint x,
-+ GLint y,
-+ GLsizei width,
-+ GLsizei height,
-+ GLenum format,
-+ GLenum type,
-+ void* data);
-+typedef void (*glGenFramebuffers_func)(GLsizei n, GLuint* ids);
-+typedef void (*glDeleteFramebuffers_func)(GLsizei n,
-+ const GLuint* framebuffers);
-+typedef void (*glBindFramebuffer_func)(GLenum target, GLuint framebuffer);
-+typedef void (*glFramebufferTexture2D_func)(GLenum target,
-+ GLenum attachment,
-+ GLenum textarget,
-+ GLuint texture,
-+ GLint level);
-+typedef GLenum (*glCheckFramebufferStatus_func)(GLenum target);
- typedef void (*glTexParameteri_func)(GLenum target, GLenum pname, GLint param);
- typedef void* (*glXGetProcAddressARB_func)(const char*);
-
-@@ -118,7 +130,12 @@ glDeleteTextures_func GlDeleteTextures = nullptr;
- glGenTextures_func GlGenTextures = nullptr;
- glGetError_func GlGetError = nullptr;
- glGetString_func GlGetString = nullptr;
--glGetTexImage_func GlGetTexImage = nullptr;
-+glReadPixels_func GlReadPixels = nullptr;
-+glGenFramebuffers_func GlGenFramebuffers = nullptr;
-+glDeleteFramebuffers_func GlDeleteFramebuffers = nullptr;
-+glBindFramebuffer_func GlBindFramebuffer = nullptr;
-+glFramebufferTexture2D_func GlFramebufferTexture2D = nullptr;
-+glCheckFramebufferStatus_func GlCheckFramebufferStatus = nullptr;
- glTexParameteri_func GlTexParameteri = nullptr;
- glXGetProcAddressARB_func GlXGetProcAddressARB = nullptr;
-
-@@ -279,12 +296,26 @@ static bool LoadGL() {
- (glDeleteTextures_func)GlXGetProcAddressARB("glDeleteTextures");
- GlGenTextures = (glGenTextures_func)GlXGetProcAddressARB("glGenTextures");
- GlGetError = (glGetError_func)GlXGetProcAddressARB("glGetError");
-- GlGetTexImage = (glGetTexImage_func)GlXGetProcAddressARB("glGetTexImage");
-+ GlReadPixels = (glReadPixels_func)GlXGetProcAddressARB("glReadPixels");
-+ GlGenFramebuffers =
-+ (glGenFramebuffers_func)GlXGetProcAddressARB("glGenFramebuffers");
-+ GlDeleteFramebuffers =
-+ (glDeleteFramebuffers_func)GlXGetProcAddressARB("glDeleteFramebuffers");
-+ GlBindFramebuffer =
-+ (glBindFramebuffer_func)GlXGetProcAddressARB("glBindFramebuffer");
-+ GlFramebufferTexture2D = (glFramebufferTexture2D_func)GlXGetProcAddressARB(
-+ "glFramebufferTexture2D");
-+ GlCheckFramebufferStatus =
-+ (glCheckFramebufferStatus_func)GlXGetProcAddressARB(
-+ "glCheckFramebufferStatus");
-+
- GlTexParameteri =
- (glTexParameteri_func)GlXGetProcAddressARB("glTexParameteri");
-
- return GlBindTexture && GlDeleteTextures && GlGenTextures && GlGetError &&
-- GlGetTexImage && GlTexParameteri;
-+ GlReadPixels && GlGenFramebuffers && GlDeleteFramebuffers &&
-+ GlBindFramebuffer && GlFramebufferTexture2D &&
-+ GlCheckFramebufferStatus && GlTexParameteri;
- }
-
- return false;
-@@ -435,6 +466,14 @@ EglDmaBuf::~EglDmaBuf() {
- EglTerminate(egl_.display);
- }
-
-+ if (fbo_) {
-+ GlDeleteFramebuffers(1, &fbo_);
-+ }
-+
-+ if (texture_) {
-+ GlDeleteTextures(1, &texture_);
-+ }
-+
- // BUG: crbug.com/1290566
- // Closing libEGL.so.1 when using NVidia drivers causes a crash
- // when EglGetPlatformDisplayEXT() is used, at least this one is enough
-@@ -466,20 +505,20 @@ bool EglDmaBuf::GetClientExtensions(EGLDisplay dpy, EGLint name) {
- }
-
- RTC_NO_SANITIZE("cfi-icall")
--std::unique_ptr<uint8_t[]> EglDmaBuf::ImageFromDmaBuf(
-- const DesktopSize& size,
-- uint32_t format,
-- const std::vector<PlaneData>& plane_datas,
-- uint64_t modifier) {
-- std::unique_ptr<uint8_t[]> src;
--
-+bool EglDmaBuf::ImageFromDmaBuf(const DesktopSize& size,
-+ uint32_t format,
-+ const std::vector<PlaneData>& plane_datas,
-+ uint64_t modifier,
-+ const DesktopVector& offset,
-+ const DesktopSize& buffer_size,
-+ uint8_t* data) {
- if (!egl_initialized_) {
-- return src;
-+ return false;
- }
-
- if (plane_datas.size() <= 0) {
- RTC_LOG(LS_ERROR) << "Failed to process buffer: invalid number of planes";
-- return src;
-+ return false;
- }
-
- EGLint attribs[47];
-@@ -568,20 +607,32 @@ std::unique_ptr<uint8_t[]> EglDmaBuf::ImageFromDmaBuf(
- if (image == EGL_NO_IMAGE) {
- RTC_LOG(LS_ERROR) << "Failed to record frame: Error creating EGLImage - "
- << FormatEGLError(EglGetError());
-- return src;
-+ return false;
- }
-
- // create GL 2D texture for framebuffer
-- GLuint texture;
-- GlGenTextures(1, &texture);
-- GlTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-- GlTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-- GlTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-- GlTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-- GlBindTexture(GL_TEXTURE_2D, texture);
-+ if (!texture_) {
-+ GlGenTextures(1, &texture_);
-+ GlTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
-+ GlTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
-+ GlTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
-+ GlTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
-+ }
-+ GlBindTexture(GL_TEXTURE_2D, texture_);
- GlEGLImageTargetTexture2DOES(GL_TEXTURE_2D, image);
-
-- src = std::make_unique<uint8_t[]>(plane_datas[0].stride * size.height());
-+ if (!fbo_) {
-+ GlGenFramebuffers(1, &fbo_);
-+ }
-+
-+ GlBindFramebuffer(GL_FRAMEBUFFER, fbo_);
-+ GlFramebufferTexture2D(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, GL_TEXTURE_2D,
-+ texture_, 0);
-+ if (GlCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
-+ RTC_LOG(LS_ERROR) << "Failed to bind DMA buf framebuffer";
-+ EglDestroyImageKHR(egl_.display, image);
-+ return false;
-+ }
-
- GLenum gl_format = GL_BGRA;
- switch (format) {
-@@ -598,17 +649,18 @@ std::unique_ptr<uint8_t[]> EglDmaBuf::ImageFromDmaBuf(
- gl_format = GL_BGRA;
- break;
- }
-- GlGetTexImage(GL_TEXTURE_2D, 0, gl_format, GL_UNSIGNED_BYTE, src.get());
-
-- if (GlGetError()) {
-+ GlReadPixels(offset.x(), offset.y(), buffer_size.width(),
-+ buffer_size.height(), gl_format, GL_UNSIGNED_BYTE, data);
-+
-+ const GLenum error = GlGetError();
-+ if (error) {
- RTC_LOG(LS_ERROR) << "Failed to get image from DMA buffer.";
-- return src;
- }
-
-- GlDeleteTextures(1, &texture);
- EglDestroyImageKHR(egl_.display, image);
-
-- return src;
-+ return !error;
- }
-
- RTC_NO_SANITIZE("cfi-icall")
-diff --git a/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.h b/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.h
-index f1d96b2f80..22a8f5ab52 100644
---- a/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.h
-+++ b/third_party/libwebrtc/modules/desktop_capture/linux/wayland/egl_dmabuf.h
-@@ -41,11 +41,15 @@ class EglDmaBuf {
- EglDmaBuf();
- ~EglDmaBuf();
-
-- std::unique_ptr<uint8_t[]> ImageFromDmaBuf(
-- const DesktopSize& size,
-- uint32_t format,
-- const std::vector<PlaneData>& plane_datas,
-- uint64_t modifiers);
-+ // Returns whether the image was successfully imported from
-+ // given DmaBuf and its parameters
-+ bool ImageFromDmaBuf(const DesktopSize& size,
-+ uint32_t format,
-+ const std::vector<PlaneData>& plane_datas,
-+ uint64_t modifiers,
-+ const DesktopVector& offset,
-+ const DesktopSize& buffer_size,
-+ uint8_t* data);
- std::vector<uint64_t> QueryDmaBufModifiers(uint32_t format);
-
- bool IsEglInitialized() const { return egl_initialized_; }
-@@ -58,6 +62,8 @@ class EglDmaBuf {
- int32_t drm_fd_ = -1; // for GBM buffer mmap
- gbm_device* gbm_device_ = nullptr; // for passed GBM buffer retrieval
-
-+ GLuint fbo_ = 0;
-+ GLuint texture_ = 0;
- EGLStruct egl_;
-
- absl::optional<std::string> GetRenderNode();
-diff --git a/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc b/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc
-index 0ca75d00fc..a8879764c7 100644
---- a/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc
-+++ b/third_party/libwebrtc/modules/desktop_capture/linux/wayland/shared_screencast_stream.cc
-@@ -149,6 +149,12 @@ class SharedScreenCastStreamPrivate {
- struct spa_video_info_raw spa_video_format_;
-
- void ProcessBuffer(pw_buffer* buffer);
-+ bool ProcessMemFDBuffer(pw_buffer* buffer,
-+ DesktopFrame& frame,
-+ const DesktopVector& offset);
-+ bool ProcessDMABuffer(pw_buffer* buffer,
-+ DesktopFrame& frame,
-+ const DesktopVector& offset);
- void ConvertRGBxToBGRx(uint8_t* frame, uint32_t size);
-
- // PipeWire callbacks
-@@ -268,9 +274,8 @@ void SharedScreenCastStreamPrivate::OnStreamParamChanged(
- std::vector<const spa_pod*> params;
- const int buffer_types =
- has_modifier || (that->pw_server_version_ >= kDmaBufMinVersion)
-- ? (1 << SPA_DATA_DmaBuf) | (1 << SPA_DATA_MemFd) |
-- (1 << SPA_DATA_MemPtr)
-- : (1 << SPA_DATA_MemFd) | (1 << SPA_DATA_MemPtr);
-+ ? (1 << SPA_DATA_DmaBuf) | (1 << SPA_DATA_MemFd)
-+ : (1 << SPA_DATA_MemFd);
-
- params.push_back(reinterpret_cast<spa_pod*>(spa_pod_builder_add_object(
- &builder, SPA_TYPE_OBJECT_ParamBuffers, SPA_PARAM_Buffers,
-@@ -605,9 +610,6 @@ DesktopVector SharedScreenCastStreamPrivate::CaptureCursorPosition() {
- RTC_NO_SANITIZE("cfi-icall")
- void SharedScreenCastStreamPrivate::ProcessBuffer(pw_buffer* buffer) {
- spa_buffer* spa_buffer = buffer->buffer;
-- ScopedBuf map;
-- std::unique_ptr<uint8_t[]> src_unique_ptr;
-- uint8_t* src = nullptr;
-
- // Try to update the mouse cursor first, because it can be the only
- // information carried by the buffer
-@@ -641,76 +643,6 @@ void SharedScreenCastStreamPrivate::ProcessBuffer(pw_buffer* buffer) {
- return;
- }
-
-- if (spa_buffer->datas[0].type == SPA_DATA_MemFd) {
-- map.initialize(
-- static_cast<uint8_t*>(
-- mmap(nullptr,
-- spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset,
-- PROT_READ, MAP_PRIVATE, spa_buffer->datas[0].fd, 0)),
-- spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset,
-- spa_buffer->datas[0].fd);
--
-- if (!map) {
-- RTC_LOG(LS_ERROR) << "Failed to mmap the memory: "
-- << std::strerror(errno);
-- return;
-- }
--
-- src = SPA_MEMBER(map.get(), spa_buffer->datas[0].mapoffset, uint8_t);
-- } else if (spa_buffer->datas[0].type == SPA_DATA_DmaBuf) {
-- const uint n_planes = spa_buffer->n_datas;
--
-- if (!n_planes) {
-- return;
-- }
--
-- std::vector<EglDmaBuf::PlaneData> plane_datas;
-- for (uint32_t i = 0; i < n_planes; ++i) {
-- EglDmaBuf::PlaneData data = {
-- static_cast<int32_t>(spa_buffer->datas[i].fd),
-- static_cast<uint32_t>(spa_buffer->datas[i].chunk->stride),
-- static_cast<uint32_t>(spa_buffer->datas[i].chunk->offset)};
-- plane_datas.push_back(data);
-- }
--
-- // When importing DMA-BUFs, we use the stride (number of bytes from one row
-- // of pixels in the buffer) provided by PipeWire. The stride from PipeWire
-- // is given by the graphics driver and some drivers might add some
-- // additional padding for memory layout optimizations so not everytime the
-- // stride is equal to BYTES_PER_PIXEL x WIDTH. This is fine, because during
-- // the import we will use OpenGL and same graphics driver so it will be able
-- // to work with the stride it provided, but later on when we work with
-- // images we get from DMA-BUFs we will need to update the stride to be equal
-- // to BYTES_PER_PIXEL x WIDTH as that's the size of the DesktopFrame we
-- // allocate for each captured frame.
-- src_unique_ptr = egl_dmabuf_->ImageFromDmaBuf(
-- stream_size_, spa_video_format_.format, plane_datas, modifier_);
-- if (src_unique_ptr) {
-- src = src_unique_ptr.get();
-- } else {
-- RTC_LOG(LS_ERROR) << "Dropping DMA-BUF modifier: " << modifier_
-- << " and trying to renegotiate stream parameters";
--
-- if (pw_server_version_ >= kDropSingleModifierMinVersion) {
-- modifiers_.erase(
-- std::remove(modifiers_.begin(), modifiers_.end(), modifier_),
-- modifiers_.end());
-- } else {
-- modifiers_.clear();
-- }
--
-- pw_loop_signal_event(pw_thread_loop_get_loop(pw_main_loop_),
-- renegotiate_);
-- return;
-- }
-- } else if (spa_buffer->datas[0].type == SPA_DATA_MemPtr) {
-- src = static_cast<uint8_t*>(spa_buffer->datas[0].data);
-- }
--
-- if (!src) {
-- return;
-- }
--
- // Use SPA_META_VideoCrop metadata to get the frame size. KDE and GNOME do
- // handle screen/window sharing differently. KDE/KWin doesn't use
- // SPA_META_VideoCrop metadata and when sharing a window, it always sets
-@@ -763,8 +695,8 @@ void SharedScreenCastStreamPrivate::ProcessBuffer(pw_buffer* buffer) {
- }
-
- // Get the position of the video crop within the stream. Just double-check
-- // that the position doesn't exceed the size of the stream itself. NOTE:
-- // Currently it looks there is no implementation using this.
-+ // that the position doesn't exceed the size of the stream itself.
-+ // NOTE: Currently it looks there is no implementation using this.
- uint32_t y_offset =
- videocrop_metadata_use &&
- (videocrop_metadata->region.position.y + frame_size_.height() <=
-@@ -777,22 +709,7 @@ void SharedScreenCastStreamPrivate::ProcessBuffer(pw_buffer* buffer) {
- stream_size_.width())
- ? videocrop_metadata->region.position.x
- : 0;
--
-- const uint32_t stream_stride = kBytesPerPixel * stream_size_.width();
-- uint32_t buffer_stride = spa_buffer->datas[0].chunk->stride;
-- uint32_t src_stride = buffer_stride;
--
-- if (spa_buffer->datas[0].type == SPA_DATA_DmaBuf &&
-- buffer_stride > stream_stride) {
-- // When DMA-BUFs are used, sometimes spa_buffer->stride we get might
-- // contain additional padding, but after we import the buffer, the stride
-- // we used is no longer relevant and we should just calculate it based on
-- // the stream width. For more context see https://crbug.com/1333304.
-- src_stride = stream_stride;
-- }
--
-- uint8_t* updated_src =
-- src + (src_stride * y_offset) + (kBytesPerPixel * x_offset);
-+ DesktopVector offset = DesktopVector(x_offset, y_offset);
-
- webrtc::MutexLock lock(&queue_lock_);
-
-@@ -813,9 +730,17 @@ void SharedScreenCastStreamPrivate::ProcessBuffer(pw_buffer* buffer) {
- queue_.ReplaceCurrentFrame(SharedDesktopFrame::Wrap(std::move(frame)));
- }
-
-- queue_.current_frame()->CopyPixelsFrom(
-- updated_src, (src_stride - (kBytesPerPixel * x_offset)),
-- DesktopRect::MakeWH(frame_size_.width(), frame_size_.height()));
-+ bool bufferProcessed = false;
-+ if (spa_buffer->datas[0].type == SPA_DATA_MemFd) {
-+ bufferProcessed =
-+ ProcessMemFDBuffer(buffer, *queue_.current_frame(), offset);
-+ } else if (spa_buffer->datas[0].type == SPA_DATA_DmaBuf) {
-+ bufferProcessed = ProcessDMABuffer(buffer, *queue_.current_frame(), offset);
-+ }
-+
-+ if (!bufferProcessed) {
-+ return;
-+ }
-
- if (spa_video_format_.format == SPA_VIDEO_FORMAT_RGBx ||
- spa_video_format_.format == SPA_VIDEO_FORMAT_RGBA) {
-@@ -832,6 +757,87 @@ void SharedScreenCastStreamPrivate::ProcessBuffer(pw_buffer* buffer) {
- DesktopRect::MakeSize(queue_.current_frame()->size()));
- }
-
-+RTC_NO_SANITIZE("cfi-icall")
-+bool SharedScreenCastStreamPrivate::ProcessMemFDBuffer(
-+ pw_buffer* buffer,
-+ DesktopFrame& frame,
-+ const DesktopVector& offset) {
-+ spa_buffer* spa_buffer = buffer->buffer;
-+ ScopedBuf map;
-+ uint8_t* src = nullptr;
-+
-+ map.initialize(
-+ static_cast<uint8_t*>(
-+ mmap(nullptr,
-+ spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset,
-+ PROT_READ, MAP_PRIVATE, spa_buffer->datas[0].fd, 0)),
-+ spa_buffer->datas[0].maxsize + spa_buffer->datas[0].mapoffset,
-+ spa_buffer->datas[0].fd);
-+
-+ if (!map) {
-+ RTC_LOG(LS_ERROR) << "Failed to mmap the memory: " << std::strerror(errno);
-+ return false;
-+ }
-+
-+ src = SPA_MEMBER(map.get(), spa_buffer->datas[0].mapoffset, uint8_t);
-+
-+ uint32_t buffer_stride = spa_buffer->datas[0].chunk->stride;
-+ uint32_t src_stride = buffer_stride;
-+
-+ uint8_t* updated_src =
-+ src + (src_stride * offset.y()) + (kBytesPerPixel * offset.x());
-+
-+ frame.CopyPixelsFrom(
-+ updated_src, (src_stride - (kBytesPerPixel * offset.x())),
-+ DesktopRect::MakeWH(frame.size().width(), frame.size().height()));
-+
-+ return true;
-+}
-+
-+RTC_NO_SANITIZE("cfi-icall")
-+bool SharedScreenCastStreamPrivate::ProcessDMABuffer(
-+ pw_buffer* buffer,
-+ DesktopFrame& frame,
-+ const DesktopVector& offset) {
-+ spa_buffer* spa_buffer = buffer->buffer;
-+
-+ const uint n_planes = spa_buffer->n_datas;
-+
-+ if (!n_planes) {
-+ return false;
-+ }
-+
-+ std::vector<EglDmaBuf::PlaneData> plane_datas;
-+ for (uint32_t i = 0; i < n_planes; ++i) {
-+ EglDmaBuf::PlaneData data = {
-+ static_cast<int32_t>(spa_buffer->datas[i].fd),
-+ static_cast<uint32_t>(spa_buffer->datas[i].chunk->stride),
-+ static_cast<uint32_t>(spa_buffer->datas[i].chunk->offset)};
-+ plane_datas.push_back(data);
-+ }
-+
-+ const bool imported = egl_dmabuf_->ImageFromDmaBuf(
-+ stream_size_, spa_video_format_.format, plane_datas, modifier_, offset,
-+ frame.size(), frame.data());
-+ if (!imported) {
-+ RTC_LOG(LS_ERROR) << "Dropping DMA-BUF modifier: " << modifier_
-+ << " and trying to renegotiate stream parameters";
-+
-+ if (pw_server_version_ >= kDropSingleModifierMinVersion) {
-+ modifiers_.erase(
-+ std::remove(modifiers_.begin(), modifiers_.end(), modifier_),
-+ modifiers_.end());
-+ } else {
-+ modifiers_.clear();
-+ }
-+
-+ pw_loop_signal_event(pw_thread_loop_get_loop(pw_main_loop_), renegotiate_);
-+ return false;
-+ }
-+
-+ return true;
-+}
-+
- void SharedScreenCastStreamPrivate::ConvertRGBxToBGRx(uint8_t* frame,
- uint32_t size) {
- for (uint32_t i = 0; i < size; i += 4) {
diff --git a/mozilla-107.0.1-kde.patch b/mozilla-107.0.1-kde.patch
index 859ee20..c318a14 100644
--- a/mozilla-107.0.1-kde.patch
+++ b/mozilla-107.0.1-kde.patch
@@ -1,24 +1,21 @@
-# HG changeset patch
-# User msirringhaus@suse.de
-# Date 1559294891 -7200
-# Fri May 31 11:28:11 2019 +0200
-# Node ID c2aa7198fb925e7fde96abf65b6f68b9b755f112
-# Parent 36f9c3a81777563ef87663a210b1cd38fdd734d9
-Description: Add KDE integration to Firefox (toolkit parts)
-Author: Wolfgang Rosenauer <wolfgang@rosenauer.org>
-Author: Lubos Lunak <lunak@suse.com>
-Bug: https://bugzilla.mozilla.org/show_bug.cgi?id=140751
- https://bugzilla.novell.com/show_bug.cgi?id=170055
-
-diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
---- a/modules/libpref/Preferences.cpp
-+++ b/modules/libpref/Preferences.cpp
-@@ -89,16 +89,17 @@
- #include "plstr.h"
- #include "prdtoa.h"
- #include "prlink.h"
- #include "xpcpublic.h"
- #include "js/RootingAPI.h"
+diff -up firefox-113.0/modules/libpref/moz.build.2~ firefox-113.0/modules/libpref/moz.build
+--- firefox-113.0/modules/libpref/moz.build.2~ 2023-05-05 00:09:17.000000000 +0200
++++ firefox-113.0/modules/libpref/moz.build 2023-05-09 15:54:23.806998016 +0200
+@@ -127,6 +127,10 @@ UNIFIED_SOURCES += [
+ "SharedPrefMap.cpp",
+ ]
+
++LOCAL_INCLUDES += [
++ '/toolkit/xre'
++]
++
+ gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs)
+
+ GeneratedFile(
+diff -up firefox-113.0/modules/libpref/Preferences.cpp.2~ firefox-113.0/modules/libpref/Preferences.cpp
+--- firefox-113.0/modules/libpref/Preferences.cpp.2~ 2023-05-05 00:09:17.000000000 +0200
++++ firefox-113.0/modules/libpref/Preferences.cpp 2023-05-09 15:54:23.806998016 +0200
+@@ -96,6 +96,7 @@
#ifdef MOZ_BACKGROUNDTASKS
# include "mozilla/BackgroundTasks.h"
#endif
@@ -26,17 +23,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
#ifdef DEBUG
# include <map>
- #endif
-
- #ifdef MOZ_MEMORY
- # include "mozmemory.h"
- #endif
-@@ -4849,16 +4850,27 @@ nsresult Preferences::InitInitialObjects
- "unix.js"
- # if defined(_AIX)
- ,
- "aix.js"
- # endif
+@@ -4912,6 +4913,17 @@ nsresult Preferences::InitInitialObjects
#endif
};
@@ -54,17 +41,7 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
rv = pref_LoadPrefsInDir(defaultPrefDir, specialFiles,
ArrayLength(specialFiles));
if (NS_FAILED(rv)) {
- NS_WARNING("Error parsing application default preferences.");
- }
-
- // Load jar:$app/omni.jar!/defaults/preferences/*.js
- // or jar:$gre/omni.jar!/defaults/preferences/*.js.
-@@ -4923,17 +4935,17 @@ nsresult Preferences::InitInitialObjects
- }
-
- nsCOMPtr<nsIFile> path = do_QueryInterface(elem);
- if (!path) {
- continue;
+@@ -4986,7 +4998,7 @@ nsresult Preferences::InitInitialObjects
}
// Do we care if a file provided by this process fails to load?
@@ -73,44 +50,10 @@ diff --git a/modules/libpref/Preferences.cpp b/modules/libpref/Preferences.cpp
}
}
- #if defined(MOZ_WIDGET_GTK)
- // To ensure the system-wide preferences are not overwritten by
- // firefox/browser/defauts/preferences/*.js we need to load
- // the /etc/firefox/defaults/pref/*.js settings as last.
- // Under Flatpak, the NS_OS_SYSTEM_CONFIG_DIR points to /app/etc/firefox
-diff --git a/modules/libpref/moz.build b/modules/libpref/moz.build
---- a/modules/libpref/moz.build
-+++ b/modules/libpref/moz.build
-@@ -123,16 +123,20 @@ EXPORTS.mozilla += [
- ]
- EXPORTS.mozilla += sorted(["!" + g for g in gen_h])
-
- UNIFIED_SOURCES += [
- "Preferences.cpp",
- "SharedPrefMap.cpp",
- ]
-
-+LOCAL_INCLUDES += [
-+ '/toolkit/xre'
-+]
-+
- gen_all_tuple = tuple(gen_h + gen_cpp + gen_rs)
-
- GeneratedFile(
- *gen_all_tuple,
- script="init/generate_static_pref_list.py",
- entry_point="emit_code",
- inputs=["init/StaticPrefList.yaml"]
- )
-diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/chrome/flags.py
---- a/python/mozbuild/mozpack/chrome/flags.py
-+++ b/python/mozbuild/mozpack/chrome/flags.py
-@@ -229,16 +229,17 @@ class Flags(OrderedDict):
- "os": StringFlag,
- "osversion": VersionFlag,
- "abi": StringFlag,
- "platform": Flag,
- "xpcnativewrappers": Flag,
+diff -up firefox-113.0/python/mozbuild/mozpack/chrome/flags.py.2~ firefox-113.0/python/mozbuild/mozpack/chrome/flags.py
+--- firefox-113.0/python/mozbuild/mozpack/chrome/flags.py.2~ 2023-05-05 00:09:17.000000000 +0200
++++ firefox-113.0/python/mozbuild/mozpack/chrome/flags.py 2023-05-09 15:54:23.807998023 +0200
+@@ -234,6 +234,7 @@ class Flags(OrderedDict):
"tablet": Flag,
"process": StringFlag,
"backgroundtask": StringFlag,
@@ -118,20 +61,10 @@ diff --git a/python/mozbuild/mozpack/chrome/flags.py b/python/mozbuild/mozpack/c
}
RE = re.compile(r"([!<>=]+)")
- def __init__(self, *flags):
- """
- Initialize a set of flags given in string form.
- flags = Flags('contentaccessible=yes', 'appversion>=3.5')
- """
-diff --git a/python/mozbuild/mozpack/chrome/manifest.py b/python/mozbuild/mozpack/chrome/manifest.py
---- a/python/mozbuild/mozpack/chrome/manifest.py
-+++ b/python/mozbuild/mozpack/chrome/manifest.py
-@@ -39,16 +39,17 @@ class ManifestEntry(object):
- "os",
- "osversion",
- "abi",
- "xpcnativewrappers",
- "tablet",
+diff -up firefox-113.0/python/mozbuild/mozpack/chrome/manifest.py.2~ firefox-113.0/python/mozbuild/mozpack/chrome/manifest.py
+--- firefox-113.0/python/mozbuild/mozpack/chrome/manifest.py.2~ 2023-05-05 00:09:17.000000000 +0200
++++ firefox-113.0/python/mozbuild/mozpack/chrome/manifest.py 2023-05-09 15:54:23.807998023 +0200
+@@ -43,6 +43,7 @@ class ManifestEntry(object):
"process",
"contentaccessible",
"backgroundtask",
@@ -139,20 +72,10 @@ diff --git a/python/mozbuild/mozpack/chrome/manifest.py b/python/mozbuild/mozpac
]
def __init__(self, base, *flags):
- """
- Initialize a manifest entry with the given base path and flags.
- """
- self.base = base
- self.flags = Flags(*flags)
-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
-@@ -46,10 +46,14 @@ XPCOM_MANIFESTS += [
-
- if CONFIG["MOZ_PLACES"]:
- EXTRA_JS_MODULES += [
- "DownloadHistory.sys.mjs",
- ]
+diff -up firefox-113.0/toolkit/components/downloads/moz.build.2~ firefox-113.0/toolkit/components/downloads/moz.build
+--- firefox-113.0/toolkit/components/downloads/moz.build.2~ 2023-05-05 00:09:24.000000000 +0200
++++ firefox-113.0/toolkit/components/downloads/moz.build 2023-05-09 15:54:23.807998023 +0200
+@@ -51,5 +51,9 @@ if CONFIG["MOZ_PLACES"]:
FINAL_LIBRARY = "xul"
@@ -162,15 +85,10 @@ diff --git a/toolkit/components/downloads/moz.build b/toolkit/components/downloa
+
with Files("**"):
BUG_COMPONENT = ("Toolkit", "Downloads API")
-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
-@@ -1239,36 +1239,66 @@ nsUnknownContentTypeDialog.prototype = {
- params.handlerApp &&
- params.handlerApp.executable &&
- params.handlerApp.executable.isFile()
- ) {
- // Remember the file they chose to run.
+diff -up firefox-113.0/toolkit/mozapps/downloads/HelperAppDlg.jsm.2~ firefox-113.0/toolkit/mozapps/downloads/HelperAppDlg.jsm
+--- firefox-113.0/toolkit/mozapps/downloads/HelperAppDlg.jsm.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/toolkit/mozapps/downloads/HelperAppDlg.jsm 2023-05-09 15:54:23.807998023 +0200
+@@ -1255,26 +1255,56 @@ nsUnknownContentTypeDialog.prototype = {
this.chosenApp = params.handlerApp;
}
} else if ("@mozilla.org/applicationchooser;1" in Cc) {
@@ -247,20 +165,10 @@ diff --git a/toolkit/mozapps/downloads/HelperAppDlg.jsm b/toolkit/mozapps/downlo
} else {
var nsIFilePicker = Ci.nsIFilePicker;
var fp = Cc["@mozilla.org/filepicker;1"].createInstance(nsIFilePicker);
- fp.init(
- this.mDialog,
- this.dialogElement("strings").getString("chooseAppFilePickerTitle"),
- nsIFilePicker.modeOpen
- );
-diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
---- a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
-+++ b/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
-@@ -10,16 +10,18 @@
- #include "prenv.h"
- #include "nsInterfaceHashtable.h"
- #include "nsHashtablesFwd.h"
- #include "nsHashKeys.h"
- #include "nsNetUtil.h"
+diff -up firefox-113.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp.2~ firefox-113.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp
+--- firefox-113.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp 2023-05-09 15:54:23.807998023 +0200
+@@ -16,6 +16,8 @@
#include "nsISupportsPrimitives.h"
#include "nsIGSettingsService.h"
#include "nsReadableUtils.h"
@@ -269,17 +177,7 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/sy
using namespace mozilla;
- class nsUnixSystemProxySettings final : public nsISystemProxySettings {
- public:
- NS_DECL_ISUPPORTS
- NS_DECL_NSISYSTEMPROXYSETTINGS
-
-@@ -33,16 +35,18 @@ class nsUnixSystemProxySettings final :
- nsCOMPtr<nsIGSettingsCollection> mProxySettings;
- nsInterfaceHashtable<nsCStringHashKey, nsIGSettingsCollection>
- mSchemeProxySettings;
- nsresult GetProxyFromGSettings(const nsACString& aScheme,
- const nsACString& aHost, int32_t aPort,
+@@ -39,6 +41,8 @@ class nsUnixSystemProxySettings final :
nsACString& aResult);
nsresult SetProxyResultFromGSettings(const char* aKeyBase, const char* aType,
nsACString& aResult);
@@ -288,17 +186,7 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/sy
};
NS_IMPL_ISUPPORTS(nsUnixSystemProxySettings, nsISystemProxySettings)
-
- NS_IMETHODIMP
- nsUnixSystemProxySettings::GetMainThreadOnly(bool* aMainThreadOnly) {
- // dbus prevents us from being threadsafe, but this routine should not block
- // anyhow
-@@ -378,21 +382,50 @@ nsresult nsUnixSystemProxySettings::GetP
- return NS_OK;
- }
-
- nsresult nsUnixSystemProxySettings::GetProxyForURI(const nsACString& aSpec,
- const nsACString& aScheme,
+@@ -393,6 +397,9 @@ nsresult nsUnixSystemProxySettings::GetP
const nsACString& aHost,
const int32_t aPort,
nsACString& aResult) {
@@ -308,8 +196,7 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/sy
if (mProxySettings) {
nsresult rv = GetProxyFromGSettings(aScheme, aHost, aPort, aResult);
if (NS_SUCCEEDED(rv)) return rv;
- }
-
+@@ -401,6 +408,32 @@ nsresult nsUnixSystemProxySettings::GetP
return GetProxyFromEnvironment(aScheme, aHost, aPort, aResult);
}
@@ -342,17 +229,10 @@ diff --git a/toolkit/system/unixproxy/nsUnixSystemProxySettings.cpp b/toolkit/sy
NS_IMPL_COMPONENT_FACTORY(nsUnixSystemProxySettings) {
auto result = MakeRefPtr<nsUnixSystemProxySettings>();
result->Init();
- return result.forget().downcast<nsISupports>();
- }
-diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
---- a/toolkit/xre/moz.build
-+++ b/toolkit/xre/moz.build
-@@ -92,17 +92,19 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "co
- "../components/printingui",
- ]
- elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "uikit":
- UNIFIED_SOURCES += [
- "nsNativeAppSupportDefault.cpp",
+diff -up firefox-113.0/toolkit/xre/moz.build.2~ firefox-113.0/toolkit/xre/moz.build
+--- firefox-113.0/toolkit/xre/moz.build.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/toolkit/xre/moz.build 2023-05-09 15:54:23.807998023 +0200
+@@ -96,7 +96,9 @@ elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "ui
"UIKitDirProvider.mm",
]
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
@@ -362,15 +242,9 @@ diff --git a/toolkit/xre/moz.build b/toolkit/xre/moz.build
"nsNativeAppSupportUnix.cpp",
]
CXXFLAGS += CONFIG["MOZ_X11_SM_CFLAGS"]
- else:
- UNIFIED_SOURCES += [
- "nsNativeAppSupportDefault.cpp",
- ]
-
-diff --git a/toolkit/xre/nsKDEUtils.cpp b/toolkit/xre/nsKDEUtils.cpp
-new file mode 100644
---- /dev/null
-+++ b/toolkit/xre/nsKDEUtils.cpp
+diff -up firefox-113.0/toolkit/xre/nsKDEUtils.cpp.2~ firefox-113.0/toolkit/xre/nsKDEUtils.cpp
+--- firefox-113.0/toolkit/xre/nsKDEUtils.cpp.2~ 2023-05-09 15:54:23.807998023 +0200
++++ firefox-113.0/toolkit/xre/nsKDEUtils.cpp 2023-05-09 15:54:23.807998023 +0200
@@ -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
@@ -693,10 +567,9 @@ new file mode 100644
+ fputs( "\\E\n", commandFile ); // done as \E, so it cannot happen in normal data
+ fflush( commandFile );
+ }
-diff --git a/toolkit/xre/nsKDEUtils.h b/toolkit/xre/nsKDEUtils.h
-new file mode 100644
---- /dev/null
-+++ b/toolkit/xre/nsKDEUtils.h
+diff -up firefox-113.0/toolkit/xre/nsKDEUtils.h.2~ firefox-113.0/toolkit/xre/nsKDEUtils.h
+--- firefox-113.0/toolkit/xre/nsKDEUtils.h.2~ 2023-05-09 15:54:23.807998023 +0200
++++ firefox-113.0/toolkit/xre/nsKDEUtils.h 2023-05-09 15:54:23.807998023 +0200
@@ -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
@@ -746,34 +619,19 @@ new file mode 100644
+ };
+
+#endif // nsKDEUtils
-diff --git a/uriloader/exthandler/HandlerServiceParent.cpp b/uriloader/exthandler/HandlerServiceParent.cpp
---- a/uriloader/exthandler/HandlerServiceParent.cpp
-+++ b/uriloader/exthandler/HandlerServiceParent.cpp
-@@ -7,17 +7,17 @@
- #include "mozilla/ipc/ProtocolUtils.h"
- #include "mozilla/Logging.h"
- #include "HandlerServiceParent.h"
- #include "nsIHandlerService.h"
- #include "nsIMIMEInfo.h"
- #include "ContentHandlerService.h"
- #include "nsStringEnumerator.h"
+diff -up firefox-113.0/uriloader/exthandler/HandlerServiceParent.cpp.2~ firefox-113.0/uriloader/exthandler/HandlerServiceParent.cpp
+--- firefox-113.0/uriloader/exthandler/HandlerServiceParent.cpp.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/uriloader/exthandler/HandlerServiceParent.cpp 2023-05-09 15:55:37.238544949 +0200
+@@ -18,7 +18,7 @@
+ #include "nsComponentManagerUtils.h"
+ #include "nsServiceManagerUtils.h"
#ifdef MOZ_WIDGET_GTK
-# include "unix/nsGNOMERegistry.h"
+# include "unix/nsCommonRegistry.h"
#endif
using mozilla::dom::ContentHandlerService;
- using mozilla::dom::HandlerApp;
- using mozilla::dom::HandlerInfo;
- using mozilla::dom::RemoteHandlerApp;
-
- namespace {
-@@ -300,17 +300,17 @@ mozilla::ipc::IPCResult HandlerServicePa
- const nsACString& aProtocolScheme, bool* aHandlerExists) {
- if (aProtocolScheme.Length() > MAX_SCHEME_LENGTH) {
- *aHandlerExists = false;
- return IPC_OK();
- }
+@@ -311,7 +311,7 @@ mozilla::ipc::IPCResult HandlerServicePa
#ifdef MOZ_WIDGET_GTK
// Check the GNOME registry for a protocol handler
*aHandlerExists =
@@ -782,20 +640,10 @@ diff --git a/uriloader/exthandler/HandlerServiceParent.cpp b/uriloader/exthandle
#else
*aHandlerExists = false;
#endif
- return IPC_OK();
- }
-
- /*
- * Check if a handler exists for the provided protocol. Check the datastore
-diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build
---- a/uriloader/exthandler/moz.build
-+++ b/uriloader/exthandler/moz.build
-@@ -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",
- ]
+diff -up firefox-113.0/uriloader/exthandler/moz.build.2~ firefox-113.0/uriloader/exthandler/moz.build
+--- firefox-113.0/uriloader/exthandler/moz.build.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/uriloader/exthandler/moz.build 2023-05-09 15:54:23.807998023 +0200
+@@ -86,7 +86,9 @@ else:
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
UNIFIED_SOURCES += [
@@ -805,17 +653,7 @@ diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build
"unix/nsMIMEInfoUnix.cpp",
]
elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "android":
- UNIFIED_SOURCES += [
- "android/nsMIMEInfoAndroid.cpp",
- ]
- elif CONFIG["MOZ_WIDGET_TOOLKIT"] == "windows":
- UNIFIED_SOURCES += [
-@@ -126,16 +128,17 @@ include("/ipc/chromium/chromium-config.m
- FINAL_LIBRARY = "xul"
-
- LOCAL_INCLUDES += [
- "/docshell/base",
- "/dom/base",
+@@ -134,6 +136,7 @@ LOCAL_INCLUDES += [
"/dom/ipc",
"/netwerk/base",
"/netwerk/protocol/http",
@@ -823,15 +661,9 @@ diff --git a/uriloader/exthandler/moz.build b/uriloader/exthandler/moz.build
]
if CONFIG["MOZ_ENABLE_DBUS"]:
- CXXFLAGS += CONFIG["MOZ_DBUS_CFLAGS"]
-
- if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
- 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
-+++ b/uriloader/exthandler/unix/nsCommonRegistry.cpp
+diff -up firefox-113.0/uriloader/exthandler/unix/nsCommonRegistry.cpp.2~ firefox-113.0/uriloader/exthandler/unix/nsCommonRegistry.cpp
+--- firefox-113.0/uriloader/exthandler/unix/nsCommonRegistry.cpp.2~ 2023-05-09 15:54:23.807998023 +0200
++++ firefox-113.0/uriloader/exthandler/unix/nsCommonRegistry.cpp 2023-05-09 15:54:23.807998023 +0200
@@ -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
@@ -886,10 +718,9 @@ new file mode 100644
+ return nsKDERegistry::GetFromType( aMIMEType );
+ return nsGNOMERegistry::GetFromType( aMIMEType );
+}
-diff --git a/uriloader/exthandler/unix/nsCommonRegistry.h b/uriloader/exthandler/unix/nsCommonRegistry.h
-new file mode 100644
---- /dev/null
-+++ b/uriloader/exthandler/unix/nsCommonRegistry.h
+diff -up firefox-113.0/uriloader/exthandler/unix/nsCommonRegistry.h.2~ firefox-113.0/uriloader/exthandler/unix/nsCommonRegistry.h
+--- firefox-113.0/uriloader/exthandler/unix/nsCommonRegistry.h.2~ 2023-05-09 15:54:23.807998023 +0200
++++ firefox-113.0/uriloader/exthandler/unix/nsCommonRegistry.h 2023-05-09 15:54:23.807998023 +0200
@@ -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
@@ -919,10 +750,9 @@ new file mode 100644
+};
+
+#endif
-diff --git a/uriloader/exthandler/unix/nsKDERegistry.cpp b/uriloader/exthandler/unix/nsKDERegistry.cpp
-new file mode 100644
---- /dev/null
-+++ b/uriloader/exthandler/unix/nsKDERegistry.cpp
+diff -up firefox-113.0/uriloader/exthandler/unix/nsKDERegistry.cpp.2~ firefox-113.0/uriloader/exthandler/unix/nsKDERegistry.cpp
+--- firefox-113.0/uriloader/exthandler/unix/nsKDERegistry.cpp.2~ 2023-05-09 15:54:23.807998023 +0200
++++ firefox-113.0/uriloader/exthandler/unix/nsKDERegistry.cpp 2023-05-09 15:54:23.807998023 +0200
@@ -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
@@ -1013,10 +843,9 @@ new file mode 100644
+ }
+ return nullptr;
+}
-diff --git a/uriloader/exthandler/unix/nsKDERegistry.h b/uriloader/exthandler/unix/nsKDERegistry.h
-new file mode 100644
---- /dev/null
-+++ b/uriloader/exthandler/unix/nsKDERegistry.h
+diff -up firefox-113.0/uriloader/exthandler/unix/nsKDERegistry.h.2~ firefox-113.0/uriloader/exthandler/unix/nsKDERegistry.h
+--- firefox-113.0/uriloader/exthandler/unix/nsKDERegistry.h.2~ 2023-05-09 15:54:23.807998023 +0200
++++ firefox-113.0/uriloader/exthandler/unix/nsKDERegistry.h 2023-05-09 15:54:23.807998023 +0200
@@ -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
@@ -1052,14 +881,10 @@ new file mode 100644
+};
+
+#endif //nsKDERegistry_h__
-diff --git a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp b/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
---- a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
-+++ b/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
-@@ -1,48 +1,51 @@
- /* -*- Mode: C++; tab-width: 3; 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
+diff -up firefox-113.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.2~ firefox-113.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp
+--- firefox-113.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp 2023-05-09 15:54:23.807998023 +0200
+@@ -5,16 +5,19 @@
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "nsMIMEInfoUnix.h"
@@ -1079,16 +904,9 @@ diff --git a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp b/uriloader/exthandler
- return nsGNOMERegistry::LoadURL(aURI);
+ return nsCommonRegistry::LoadURL(aURI);
}
-
- NS_IMETHODIMP
- nsMIMEInfoUnix::GetHasDefaultHandler(bool* _retval) {
- // if a default app is set, it means the application has been set from
- // either /etc/mailcap or ${HOME}/.mailcap, in which case we don't want to
- // give the GNOME answer.
- if (GetDefaultApplication()) {
- return nsMIMEInfoImpl::GetHasDefaultHandler(_retval);
- }
+ NS_IMETHODIMP
+@@ -29,15 +32,15 @@ nsMIMEInfoUnix::GetHasDefaultHandler(boo
*_retval = false;
if (mClass == eProtocolInfo) {
@@ -1107,17 +925,7 @@ diff --git a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp b/uriloader/exthandler
}
}
if (mimeInfo) *_retval = true;
- }
-
- if (*_retval) return NS_OK;
-
- return NS_OK;
-@@ -50,16 +53,33 @@ nsresult nsMIMEInfoUnix::LaunchDefaultWi
- // give the GNOME answer.
- if (GetDefaultApplication()) {
- return nsMIMEInfoImpl::LaunchDefaultWithFile(aFile);
- }
-
+@@ -59,6 +62,23 @@ nsresult nsMIMEInfoUnix::LaunchDefaultWi
nsAutoCString nativePath;
aFile->GetNativePath(nativePath);
@@ -1141,20 +949,10 @@ diff --git a/uriloader/exthandler/unix/nsMIMEInfoUnix.cpp b/uriloader/exthandler
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
if (!giovfs) {
return NS_ERROR_FAILURE;
- }
-
- // nsGIOMimeApp->Launch wants a URI string instead of local file
- nsresult rv;
- nsCOMPtr<nsIIOService> ioservice =
-diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exthandler/unix/nsOSHelperAppService.cpp
---- a/uriloader/exthandler/unix/nsOSHelperAppService.cpp
-+++ b/uriloader/exthandler/unix/nsOSHelperAppService.cpp
-@@ -5,17 +5,17 @@
- * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
-
- #include <sys/types.h>
- #include <sys/stat.h>
-
+diff -up firefox-113.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp.2~ firefox-113.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp
+--- firefox-113.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/uriloader/exthandler/unix/nsOSHelperAppService.cpp 2023-05-09 15:54:23.807998023 +0200
+@@ -10,7 +10,7 @@
#include "nsOSHelperAppService.h"
#include "nsMIMEInfoUnix.h"
#ifdef MOZ_WIDGET_GTK
@@ -1163,17 +961,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
# ifdef MOZ_BUILD_APP_IS_BROWSER
# include "nsIToolkitShellService.h"
# include "nsIGNOMEShellService.h"
- # endif
- #endif
- #include "nsISupports.h"
- #include "nsString.h"
- #include "nsReadableUtils.h"
-@@ -1102,17 +1102,17 @@ nsresult nsOSHelperAppService::GetHandle
-
- nsresult nsOSHelperAppService::OSProtocolHandlerExists(
- const char* aProtocolScheme, bool* aHandlerExists) {
- nsresult rv = NS_OK;
-
+@@ -1107,7 +1107,7 @@ nsresult nsOSHelperAppService::OSProtoco
if (!XRE_IsContentProcess()) {
#ifdef MOZ_WIDGET_GTK
// Check the GNOME registry for a protocol handler
@@ -1182,17 +970,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
#else
*aHandlerExists = false;
#endif
- } else {
- *aHandlerExists = false;
- nsCOMPtr<nsIHandlerService> handlerSvc =
- do_GetService(NS_HANDLERSERVICE_CONTRACTID, &rv);
- if (NS_SUCCEEDED(rv) && handlerSvc) {
-@@ -1122,17 +1122,17 @@ nsresult nsOSHelperAppService::OSProtoco
- }
-
- return rv;
- }
-
+@@ -1127,7 +1127,7 @@ nsresult nsOSHelperAppService::OSProtoco
NS_IMETHODIMP nsOSHelperAppService::GetApplicationDescription(
const nsACString& aScheme, nsAString& _retval) {
#ifdef MOZ_WIDGET_GTK
@@ -1201,17 +979,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
return _retval.IsEmpty() ? NS_ERROR_NOT_AVAILABLE : NS_OK;
#else
return NS_ERROR_NOT_AVAILABLE;
- #endif
- }
-
- NS_IMETHODIMP nsOSHelperAppService::IsCurrentAppOSDefaultForProtocol(
- const nsACString& aScheme, bool* _retval) {
-@@ -1227,17 +1227,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
- nsresult rv =
- LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
- minorType, mime_types_description, true);
-
- if (NS_FAILED(rv) || majorType.IsEmpty()) {
+@@ -1232,7 +1232,7 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
#ifdef MOZ_WIDGET_GTK
LOG("Looking in GNOME registry\n");
RefPtr<nsMIMEInfoBase> gnomeInfo =
@@ -1220,17 +988,7 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
if (gnomeInfo) {
LOG("Got MIMEInfo from GNOME registry\n");
return gnomeInfo.forget();
- }
- #endif
-
- rv = LookUpTypeAndDescription(NS_ConvertUTF8toUTF16(aFileExt), majorType,
- minorType, mime_types_description, false);
-@@ -1342,17 +1342,17 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
-
- // Now look up our extensions
- nsAutoString extensions, mime_types_description;
- LookUpExtensionsAndDescription(majorType, minorType, extensions,
- mime_types_description);
+@@ -1347,7 +1347,7 @@ already_AddRefed<nsMIMEInfoBase> nsOSHel
#ifdef MOZ_WIDGET_GTK
if (handler.IsEmpty()) {
@@ -1239,20 +997,10 @@ diff --git a/uriloader/exthandler/unix/nsOSHelperAppService.cpp b/uriloader/exth
if (gnomeInfo) {
LOG("Got MIMEInfo from GNOME registry without extensions; setting them "
"to %s\n",
- NS_LossyConvertUTF16toASCII(extensions).get());
-
- NS_ASSERTION(!gnomeInfo->HasExtensions(), "How'd that happen?");
- gnomeInfo->SetFileExtensions(NS_ConvertUTF16toUTF8(extensions));
- return gnomeInfo.forget();
-diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
---- a/widget/gtk/moz.build
-+++ b/widget/gtk/moz.build
-@@ -147,16 +147,17 @@ FINAL_LIBRARY = "xul"
-
- LOCAL_INCLUDES += [
- "/layout/base",
- "/layout/forms",
- "/layout/generic",
+diff -up firefox-113.0/widget/gtk/moz.build.2~ firefox-113.0/widget/gtk/moz.build
+--- firefox-113.0/widget/gtk/moz.build.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/widget/gtk/moz.build 2023-05-09 15:54:23.807998023 +0200
+@@ -147,6 +147,7 @@ LOCAL_INCLUDES += [
"/layout/xul",
"/other-licenses/atk-1.0",
"/third_party/cups/include",
@@ -1260,19 +1008,10 @@ diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
"/widget",
"/widget/headless",
]
-
- if CONFIG["MOZ_X11"] or CONFIG["MOZ_WAYLAND"]:
- LOCAL_INCLUDES += [
- "/widget/x11",
- ]
-diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
---- a/widget/gtk/nsFilePicker.cpp
-+++ b/widget/gtk/nsFilePicker.cpp
-@@ -1,15 +1,16 @@
- /* -*- 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/. */
+diff -up firefox-113.0/widget/gtk/nsFilePicker.cpp.2~ firefox-113.0/widget/gtk/nsFilePicker.cpp
+--- firefox-113.0/widget/gtk/nsFilePicker.cpp.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/widget/gtk/nsFilePicker.cpp 2023-05-09 15:54:23.807998023 +0200
+@@ -5,6 +5,7 @@
#include <dlfcn.h>
#include <gtk/gtk.h>
@@ -1280,17 +1019,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
-
- #include "mozilla/Types.h"
- #include "nsGtkUtils.h"
- #include "nsIFileURL.h"
- #include "nsIGIOService.h"
-@@ -21,16 +22,18 @@
- #include "nsArrayEnumerator.h"
- #include "nsEnumeratorUtils.h"
- #include "nsNetUtil.h"
- #include "nsReadableUtils.h"
- #include "MozContainer.h"
+@@ -28,6 +29,8 @@
#include "WidgetUtilsGtk.h"
#include "nsFilePicker.h"
@@ -1299,17 +1028,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
#undef LOG
#ifdef MOZ_LOGGING
- # include "mozilla/Logging.h"
- # include "nsTArray.h"
- # include "Units.h"
- extern mozilla::LazyLogModule gWidgetLog;
- # define LOG(args) MOZ_LOG(gWidgetLog, mozilla::LogLevel::Debug, args)
-@@ -235,17 +238,19 @@ nsFilePicker::AppendFilters(int32_t aFil
- mAllowURLs = !!(aFilterMask & filterAllowURLs);
- return nsBaseFilePicker::AppendFilters(aFilterMask);
- }
-
- NS_IMETHODIMP
+@@ -242,7 +245,9 @@ NS_IMETHODIMP
nsFilePicker::AppendFilter(const nsAString& aTitle, const nsAString& aFilter) {
if (aFilter.EqualsLiteral("..apps")) {
// No platform specific thing we can do here, really....
@@ -1320,17 +1039,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
}
nsAutoCString filter, name;
- CopyUTF16toUTF8(aFilter, filter);
- CopyUTF16toUTF8(aTitle, name);
-
- mFilters.AppendElement(filter);
- mFilterNames.AppendElement(name);
-@@ -345,16 +350,39 @@ nsresult nsFilePicker::Show(int16_t* aRe
- return NS_OK;
- }
-
- NS_IMETHODIMP
- nsFilePicker::Open(nsIFilePickerShownCallback* aCallback) {
+@@ -352,6 +357,29 @@ nsFilePicker::Open(nsIFilePickerShownCal
// Can't show two dialogs concurrently with the same filepicker
if (mRunning) return NS_ERROR_NOT_AVAILABLE;
@@ -1360,17 +1069,7 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
NS_ConvertUTF16toUTF8 title(mTitle);
GtkWindow* parent_widget =
- GTK_WINDOW(mParentWidget->GetNativeData(NS_NATIVE_SHELLWIDGET));
-
- GtkFileChooserAction action = GetGtkFileChooserAction(mMode);
-
- const gchar* accept_button;
-@@ -574,16 +602,244 @@ void nsFilePicker::Done(void* file_choos
- mCallback->Done(result);
- mCallback = nullptr;
- } else {
- mResult = result;
- }
+@@ -633,6 +661,234 @@ void nsFilePicker::Done(void* file_choos
NS_RELEASE_THIS();
}
@@ -1605,20 +1304,10 @@ diff --git a/widget/gtk/nsFilePicker.cpp b/widget/gtk/nsFilePicker.cpp
// All below functions available as of GTK 3.20+
void* nsFilePicker::GtkFileChooserNew(const gchar* title, GtkWindow* parent,
GtkFileChooserAction action,
- const gchar* accept_label) {
- static auto sGtkFileChooserNativeNewPtr =
- (void* (*)(const gchar*, GtkWindow*, GtkFileChooserAction, const gchar*,
- const gchar*))dlsym(RTLD_DEFAULT,
- "gtk_file_chooser_native_new");
-diff --git a/widget/gtk/nsFilePicker.h b/widget/gtk/nsFilePicker.h
---- a/widget/gtk/nsFilePicker.h
-+++ b/widget/gtk/nsFilePicker.h
-@@ -67,16 +67,22 @@ class nsFilePicker : public nsBaseFilePi
- nsString mDefaultExtension;
-
- nsTArray<nsCString> mFilters;
- nsTArray<nsCString> mFilterNames;
-
+diff -up firefox-113.0/widget/gtk/nsFilePicker.h.2~ firefox-113.0/widget/gtk/nsFilePicker.h
+--- firefox-113.0/widget/gtk/nsFilePicker.h.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/widget/gtk/nsFilePicker.h 2023-05-09 15:54:23.807998023 +0200
+@@ -74,6 +74,12 @@ class nsFilePicker : public nsBaseFilePi
private:
static nsIFile* mPrevDisplayDirectory;
@@ -1631,20 +1320,10 @@ diff --git a/widget/gtk/nsFilePicker.h b/widget/gtk/nsFilePicker.h
void* GtkFileChooserNew(const gchar* title, GtkWindow* parent,
GtkFileChooserAction action,
const gchar* accept_label);
- void GtkFileChooserShow(void* file_chooser);
- void GtkFileChooserDestroy(void* file_chooser);
- void GtkFileChooserSetModal(void* file_chooser, GtkWindow* parent_widget,
- gboolean modal);
-
-diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestParser.cpp
---- a/xpcom/components/ManifestParser.cpp
-+++ b/xpcom/components/ManifestParser.cpp
-@@ -38,16 +38,17 @@
- #include "nsTextFormatter.h"
- #include "nsVersionComparator.h"
- #include "nsXPCOMCIDInternal.h"
-
- #include "nsIConsoleService.h"
+diff -up firefox-113.0/xpcom/components/ManifestParser.cpp.2~ firefox-113.0/xpcom/components/ManifestParser.cpp
+--- firefox-113.0/xpcom/components/ManifestParser.cpp.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/xpcom/components/ManifestParser.cpp 2023-05-09 15:54:23.808998031 +0200
+@@ -43,6 +43,7 @@
#include "nsIScriptError.h"
#include "nsIXULAppInfo.h"
#include "nsIXULRuntime.h"
@@ -1652,17 +1331,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
using namespace mozilla;
- struct ManifestDirective {
- const char* directive;
- int argc;
-
- bool ischrome;
-@@ -389,16 +390,17 @@ void ParseManifest(NSLocationType aType,
- constexpr auto kRemoteEnabled = u"remoteenabled"_ns;
- constexpr auto kRemoteRequired = u"remoterequired"_ns;
- constexpr auto kApplication = u"application"_ns;
- constexpr auto kAppVersion = u"appversion"_ns;
- constexpr auto kGeckoVersion = u"platformversion"_ns;
+@@ -394,6 +395,7 @@ void ParseManifest(NSLocationType aType,
constexpr auto kOs = u"os"_ns;
constexpr auto kOsVersion = u"osversion"_ns;
constexpr auto kABI = u"abi"_ns;
@@ -1670,17 +1339,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
constexpr auto kProcess = u"process"_ns;
#if defined(MOZ_WIDGET_ANDROID)
constexpr auto kTablet = u"tablet"_ns;
- #endif
- // You might expect this to be guarded by MOZ_BACKGROUNDTASKS, but it's not
- // possible to have conditional manifest contents, so we need to recognize and
- // discard these tokens even when MOZ_BACKGROUNDTASKS is not set.
- constexpr auto kBackgroundTask = u"backgroundtask"_ns;
-@@ -448,39 +450,44 @@ void ParseManifest(NSLocationType aType,
- CopyUTF8toUTF16(s, abi);
- abi.Insert(char16_t('_'), 0);
- abi.Insert(osTarget, 0);
- }
- }
+@@ -453,6 +455,7 @@ void ParseManifest(NSLocationType aType,
}
nsAutoString osVersion;
@@ -1688,8 +1347,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
#if defined(XP_WIN)
# pragma warning(push)
# pragma warning(disable : 4996) // VC12+ deprecates GetVersionEx
- OSVERSIONINFO info = {sizeof(OSVERSIONINFO)};
- if (GetVersionEx(&info)) {
+@@ -461,14 +464,17 @@ void ParseManifest(NSLocationType aType,
nsTextFormatter::ssprintf(osVersion, u"%ld.%ld", info.dwMajorVersion,
info.dwMinorVersion);
}
@@ -1707,7 +1365,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
#elif defined(MOZ_WIDGET_ANDROID)
bool isTablet = false;
if (jni::IsAvailable()) {
- jni::String::LocalRef release = java::sdk::Build::VERSION::RELEASE();
+@@ -476,6 +482,7 @@ void ParseManifest(NSLocationType aType,
osVersion.Assign(release->ToString());
isTablet = java::GeckoAppShell::IsTablet();
}
@@ -1715,17 +1373,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
#endif
if (XRE_IsContentProcess()) {
- process = kContent;
- } else {
- process = kMain;
- }
-
-@@ -571,25 +578,27 @@ void ParseManifest(NSLocationType aType,
- // When in background task mode, default to not registering
- // category directivies unless backgroundtask=1 is specified.
- TriState stBackgroundTask = (BackgroundTasks::IsBackgroundTaskMode() &&
- strcmp("category", directive->directive) == 0)
- ? eBad
+@@ -576,6 +583,7 @@ void ParseManifest(NSLocationType aType,
: eUnspecified;
#endif
int flags = 0;
@@ -1733,9 +1381,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
while ((token = nsCRT::strtok(whitespace, kWhitespace, &whitespace)) &&
ok) {
- ToLowerCase(token);
- NS_ConvertASCIItoUTF16 wtoken(token);
-
+@@ -585,6 +593,7 @@ void ParseManifest(NSLocationType aType,
if (CheckStringFlag(kApplication, wtoken, appID, stApp) ||
CheckOsFlag(kOs, wtoken, osTarget, stOs) ||
CheckStringFlag(kABI, wtoken, abi, stABI) ||
@@ -1743,17 +1389,7 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
CheckStringFlag(kProcess, wtoken, process, stProcess) ||
CheckVersionFlag(kOsVersion, wtoken, osVersion, stOsVersion) ||
CheckVersionFlag(kAppVersion, wtoken, appVersion, stAppVersion) ||
- CheckVersionFlag(kGeckoVersion, wtoken, geckoVersion,
- stGeckoVersion)) {
- continue;
- }
-
-@@ -638,17 +647,17 @@ void ParseManifest(NSLocationType aType,
- }
-
- LogMessageWithContext(
- aFile, line, "Unrecognized chrome manifest modifier '%s'.", token);
- ok = false;
+@@ -643,7 +652,7 @@ void ParseManifest(NSLocationType aType,
}
if (!ok || stApp == eBad || stAppVersion == eBad ||
@@ -1762,20 +1398,10 @@ diff --git a/xpcom/components/ManifestParser.cpp b/xpcom/components/ManifestPars
#ifdef MOZ_WIDGET_ANDROID
stTablet == eBad ||
#endif
- #ifdef MOZ_BACKGROUNDTASKS
- stBackgroundTask == eBad ||
- #endif
- stABI == eBad || stProcess == eBad) {
- continue;
-diff --git a/xpcom/components/moz.build b/xpcom/components/moz.build
---- a/xpcom/components/moz.build
-+++ b/xpcom/components/moz.build
-@@ -66,16 +66,17 @@ LOCAL_INCLUDES += [
- "!..",
- "../base",
- "../build",
- "../ds",
- "/chrome",
+diff -up firefox-113.0/xpcom/components/moz.build.2~ firefox-113.0/xpcom/components/moz.build
+--- firefox-113.0/xpcom/components/moz.build.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/xpcom/components/moz.build 2023-05-09 15:54:23.808998031 +0200
+@@ -71,6 +71,7 @@ LOCAL_INCLUDES += [
"/js/xpconnect/loader",
"/layout/build",
"/modules/libjar",
@@ -1783,20 +1409,10 @@ diff --git a/xpcom/components/moz.build b/xpcom/components/moz.build
]
if CONFIG["MOZ_WIDGET_TOOLKIT"] == "gtk":
- CXXFLAGS += CONFIG["MOZ_GTK3_CFLAGS"]
- if CONFIG["MOZ_ENABLE_DBUS"]:
- CXXFLAGS += CONFIG["MOZ_DBUS_GLIB_CFLAGS"]
-
- include("/ipc/chromium/chromium-config.mozbuild")
-diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
---- a/xpcom/io/nsLocalFileUnix.cpp
-+++ b/xpcom/io/nsLocalFileUnix.cpp
-@@ -46,16 +46,17 @@
- #include "nsString.h"
- #include "nsIDirectoryEnumerator.h"
- #include "nsSimpleEnumerator.h"
- #include "private/pprio.h"
- #include "prlink.h"
+diff -up firefox-113.0/xpcom/io/nsLocalFileUnix.cpp.2~ firefox-113.0/xpcom/io/nsLocalFileUnix.cpp
+--- firefox-113.0/xpcom/io/nsLocalFileUnix.cpp.2~ 2023-05-05 00:09:25.000000000 +0200
++++ firefox-113.0/xpcom/io/nsLocalFileUnix.cpp 2023-05-09 15:54:23.808998031 +0200
+@@ -51,6 +51,7 @@
#ifdef MOZ_WIDGET_GTK
# include "nsIGIOService.h"
@@ -1804,49 +1420,29 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
#endif
#ifdef MOZ_WIDGET_COCOA
- # include <Carbon/Carbon.h>
- # include "CocoaFileUtils.h"
- # include "prmem.h"
- # include "plbase64.h"
-
-@@ -2088,20 +2089,29 @@ nsLocalFile::SetPersistentDescriptor(con
-
- NS_IMETHODIMP
- nsLocalFile::Reveal() {
- if (!FilePreferences::IsAllowedPath(mPath)) {
- return NS_ERROR_FILE_ACCESS_DENIED;
+@@ -2172,10 +2173,19 @@ nsLocalFile::Reveal() {
}
#ifdef MOZ_WIDGET_GTK
+ nsAutoCString url;
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
- if (!giovfs) {
+- return NS_ERROR_FAILURE;
+ url = mPath;
+ 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 NS_ERROR_FAILURE;
+
return giovfs->RevealFile(this);
#elif defined(MOZ_WIDGET_COCOA)
CFURLRef url;
- if (NS_SUCCEEDED(GetCFURL(&url))) {
- nsresult rv = CocoaFileUtils::RevealFileInFinder(url);
- ::CFRelease(url);
- return rv;
- }
-@@ -2113,16 +2123,23 @@ nsLocalFile::Reveal() {
-
- NS_IMETHODIMP
- nsLocalFile::Launch() {
- if (!FilePreferences::IsAllowedPath(mPath)) {
- return NS_ERROR_FILE_ACCESS_DENIED;
+@@ -2197,6 +2207,13 @@ nsLocalFile::Launch() {
}
#ifdef MOZ_WIDGET_GTK
@@ -1860,8 +1456,3 @@ diff --git a/xpcom/io/nsLocalFileUnix.cpp b/xpcom/io/nsLocalFileUnix.cpp
nsCOMPtr<nsIGIOService> giovfs = do_GetService(NS_GIOSERVICE_CONTRACTID);
if (!giovfs) {
return NS_ERROR_FAILURE;
- }
-
- return giovfs->LaunchFile(mPath);
- #elif defined(MOZ_WIDGET_ANDROID)
- // Not supported on GeckoView
diff --git a/mozilla-1663844.patch b/mozilla-1663844.patch
deleted file mode 100644
index afa5168..0000000
--- a/mozilla-1663844.patch
+++ /dev/null
@@ -1,37 +0,0 @@
-diff -up firefox-109.0/dom/media/gmp/GMPSharedMemManager.h.1663844 firefox-109.0/dom/media/gmp/GMPSharedMemManager.h
---- firefox-109.0/dom/media/gmp/GMPSharedMemManager.h.1663844 2023-01-09 20:34:10.000000000 +0100
-+++ firefox-109.0/dom/media/gmp/GMPSharedMemManager.h 2023-01-12 09:28:56.035741438 +0100
-@@ -26,7 +26,7 @@ class GMPSharedMem {
- // returned to the parent pool (which is not included). If more than
- // this are needed, we presume the client has either crashed or hung
- // (perhaps temporarily).
-- static const uint32_t kGMPBufLimit = 20;
-+ static const uint32_t kGMPBufLimit = 40;
-
- GMPSharedMem() {
- for (size_t i = 0; i < sizeof(mGmpAllocated) / sizeof(mGmpAllocated[0]);
-diff -up firefox-109.0/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp.1663844 firefox-109.0/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp
---- firefox-109.0/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp.1663844 2023-01-09 20:34:10.000000000 +0100
-+++ firefox-109.0/dom/media/platforms/agnostic/gmp/GMPDecoderModule.cpp 2023-01-12 09:28:56.036741473 +0100
-@@ -84,6 +84,9 @@ media::DecodeSupportSet GMPDecoderModule
-
- media::DecodeSupportSet GMPDecoderModule::SupportsMimeType(
- const nsACString& aMimeType, DecoderDoctorDiagnostics* aDiagnostics) const {
-+ if (MP4Decoder::IsH264(aMimeType)) {
-+ return media::DecodeSupport::SoftwareDecode;
-+ }
- return media::DecodeSupport::Unsupported;
- }
-
-diff -up firefox-109.0/dom/media/platforms/agnostic/gmp/GMPVideoDecoder.cpp.1663844 firefox-109.0/dom/media/platforms/agnostic/gmp/GMPVideoDecoder.cpp
---- firefox-109.0/dom/media/platforms/agnostic/gmp/GMPVideoDecoder.cpp.1663844 2023-01-12 09:28:56.036741473 +0100
-+++ firefox-109.0/dom/media/platforms/agnostic/gmp/GMPVideoDecoder.cpp 2023-01-12 14:18:12.354866405 +0100
-@@ -81,6 +81,8 @@ void GMPVideoDecoder::Decoded(GMPVideoi4
- });
-
- mDecodedData.AppendElement(std::move(v));
-+ mDecodePromise.ResolveIfExists(std::move(mDecodedData), __func__);
-+ mDecodedData = DecodedData();
- } else {
- mDecodedData.Clear();
- mDecodePromise.RejectIfExists(
diff --git a/mozilla-1670333.patch b/mozilla-1670333.patch
deleted file mode 100644
index a1eaa9a..0000000
--- a/mozilla-1670333.patch
+++ /dev/null
@@ -1,68 +0,0 @@
-diff -up firefox-105.0/dom/media/mp4/MP4Demuxer.cpp.1670333 firefox-105.0/dom/media/mp4/MP4Demuxer.cpp
---- firefox-105.0/dom/media/mp4/MP4Demuxer.cpp.1670333 2022-09-15 20:49:09.000000000 +0200
-+++ firefox-105.0/dom/media/mp4/MP4Demuxer.cpp 2022-09-20 09:16:35.404519249 +0200
-@@ -31,6 +31,8 @@ mozilla::LogModule* GetDemuxerLog() { re
- DDMOZ_LOG(gMediaDemuxerLog, mozilla::LogLevel::Debug, "::%s: " arg, \
- __func__, ##__VA_ARGS__)
-
-+extern bool gUseKeyframeFromContainer;
-+
- namespace mozilla {
-
- DDLoggedTypeDeclNameAndBase(MP4TrackDemuxer, MediaTrackDemuxer);
-@@ -394,6 +396,12 @@ already_AddRefed<MediaRawData> MP4TrackD
- [[fallthrough]];
- case H264::FrameType::OTHER: {
- bool keyframe = type == H264::FrameType::I_FRAME;
-+ if (gUseKeyframeFromContainer) {
-+ if (sample->mKeyframe && sample->mKeyframe != keyframe) {
-+ sample->mKeyframe = keyframe;
-+ }
-+ break;
-+ }
- if (sample->mKeyframe != keyframe) {
- NS_WARNING(nsPrintfCString("Frame incorrectly marked as %skeyframe "
- "@ pts:%" PRId64 " dur:%" PRId64
-diff -up firefox-105.0/dom/media/platforms/PDMFactory.cpp.1670333 firefox-105.0/dom/media/platforms/PDMFactory.cpp
---- firefox-105.0/dom/media/platforms/PDMFactory.cpp.1670333 2022-09-15 20:49:09.000000000 +0200
-+++ firefox-105.0/dom/media/platforms/PDMFactory.cpp 2022-09-20 09:20:05.369572900 +0200
-@@ -61,6 +61,8 @@
-
- #include <functional>
-
-+bool gUseKeyframeFromContainer = false;
-+
- using DecodeSupport = mozilla::media::DecodeSupport;
- using DecodeSupportSet = mozilla::media::DecodeSupportSet;
- using MediaCodec = mozilla::media::MediaCodec;
-@@ -553,7 +555,7 @@ void PDMFactory::CreateRddPDMs() {
- #ifdef MOZ_FFMPEG
- if (StaticPrefs::media_ffmpeg_enabled() &&
- StaticPrefs::media_rdd_ffmpeg_enabled() &&
-- !CreateAndStartupPDM<FFmpegRuntimeLinker>()) {
-+ !(mFFmpegUsed = CreateAndStartupPDM<FFmpegRuntimeLinker>())) {
- mFailureFlags += GetFailureFlagBasedOnFFmpegStatus(
- FFmpegRuntimeLinker::LinkStatusCode());
- }
-@@ -653,8 +655,9 @@ void PDMFactory::CreateContentPDMs() {
-
- CreateAndStartupPDM<AgnosticDecoderModule>();
-
-- if (StaticPrefs::media_gmp_decoder_enabled() &&
-+ if (StaticPrefs::media_gmp_decoder_enabled() && !mFFmpegUsed &&
- !CreateAndStartupPDM<GMPDecoderModule>()) {
-+ gUseKeyframeFromContainer = true;
- mFailureFlags += DecoderDoctorDiagnostics::Flags::GMPPDMFailedToStartup;
- }
- }
-diff -up firefox-105.0/dom/media/platforms/PDMFactory.h.1670333 firefox-105.0/dom/media/platforms/PDMFactory.h
---- firefox-105.0/dom/media/platforms/PDMFactory.h.1670333 2022-09-15 20:49:08.000000000 +0200
-+++ firefox-105.0/dom/media/platforms/PDMFactory.h 2022-09-20 09:16:35.404519249 +0200
-@@ -102,6 +102,7 @@ class PDMFactory final {
- RefPtr<PlatformDecoderModule> mNullPDM;
-
- DecoderDoctorDiagnostics::FlagsSet mFailureFlags;
-+ bool mFFmpegUsed = false;
-
- friend class RemoteVideoDecoderParent;
- static void EnsureInit();