summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.gitignore2
-rw-r--r--D132929.diff18
-rw-r--r--D133209.diff197
-rw-r--r--D133485.diff31
-rw-r--r--D133634.diff119
-rw-r--r--D133885.diff33
-rw-r--r--D134141.diff12
-rw-r--r--firefox.spec30
-rw-r--r--mochitest-wayland-workaround.patch61
-rw-r--r--mozilla-1744896.patch42
-rw-r--r--mozilla-1745560.patch15
-rw-r--r--pgo.patch38
-rw-r--r--sources4
13 files changed, 454 insertions, 148 deletions
diff --git a/.gitignore b/.gitignore
index 4494daf..afb0f27 100644
--- a/.gitignore
+++ b/.gitignore
@@ -485,3 +485,5 @@ firefox-3.6.4.source.tar.bz2
/firefox-langpacks-95.0-20211203.tar.xz
/firefox-95.0.2.source.tar.xz
/firefox-langpacks-95.0.2-20211220.tar.xz
+/firefox-96.0.source.tar.xz
+/firefox-langpacks-96.0-20220111.tar.xz
diff --git a/D132929.diff b/D132929.diff
new file mode 100644
index 0000000..0a61842
--- /dev/null
+++ b/D132929.diff
@@ -0,0 +1,18 @@
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -2946,7 +2946,12 @@
+ uint32_t timestamp = GDK_CURRENT_TIME;
+
+ nsGTKToolkit* GTKToolkit = nsGTKToolkit::GetToolkit();
+- if (GTKToolkit) timestamp = GTKToolkit->GetFocusTimestamp();
++ if (GTKToolkit) {
++ timestamp = GTKToolkit->GetFocusTimestamp();
++ }
++ if (!timestamp) {
++ timestamp = GetLastUserInputTime();
++ }
+
+ LOG(" requesting toplevel activation [%p]\n", (void*)toplevelWindow);
+ gtk_window_present_with_time(GTK_WINDOW(toplevelWindow->mShell),
+
diff --git a/D133209.diff b/D133209.diff
new file mode 100644
index 0000000..81908f9
--- /dev/null
+++ b/D133209.diff
@@ -0,0 +1,197 @@
+diff --git a/widget/gtk/nsGtkKeyUtils.h b/widget/gtk/nsGtkKeyUtils.h
+--- a/widget/gtk/nsGtkKeyUtils.h
++++ b/widget/gtk/nsGtkKeyUtils.h
+@@ -202,6 +202,22 @@
+ * from xkb_keymap. We call that from Wayland backend routines.
+ */
+ static void SetModifierMasks(xkb_keymap* aKeymap);
++
++ /**
++ * Wayland global focus handlers
++ */
++ static void SetFocusIn(wl_surface* aFocusSurface, uint32_t aFocusSerial);
++ static void SetFocusOut(wl_surface* aFocusSurface);
++ static void GetFocusInfo(wl_surface** aFocusSurface, uint32_t* aFocusSerial);
++
++ static void SetSeat(wl_seat* aSeat);
++ static wl_seat* GetSeat();
++
++ /**
++ * EnsureInstance() is provided on Wayland to register Wayland callbacks
++ * early.
++ */
++ static void EnsureInstance();
+ #endif
+
+ /**
+@@ -467,6 +483,12 @@
+ void SetModifierMask(xkb_keymap* aKeymap, ModifierIndex aModifierIndex,
+ const char* aModifierName);
+ #endif
++
++#ifdef MOZ_WAYLAND
++ wl_seat* mSeat = nullptr;
++ wl_surface* mFocusSurface = nullptr;
++ uint32_t mFocusSerial = 0;
++#endif
+ };
+
+ } // namespace widget
+diff --git a/widget/gtk/nsGtkKeyUtils.cpp b/widget/gtk/nsGtkKeyUtils.cpp
+--- a/widget/gtk/nsGtkKeyUtils.cpp
++++ b/widget/gtk/nsGtkKeyUtils.cpp
+@@ -331,6 +331,10 @@
+ return sInstance;
+ }
+
++#ifdef MOZ_WAYLAND
++void KeymapWrapper::EnsureInstance() { (void)GetInstance(); }
++#endif
++
+ /* static */
+ void KeymapWrapper::Shutdown() {
+ if (sInstance) {
+@@ -720,10 +724,15 @@
+
+ static void keyboard_handle_enter(void* data, struct wl_keyboard* keyboard,
+ uint32_t serial, struct wl_surface* surface,
+- struct wl_array* keys) {}
++ struct wl_array* keys) {
++ KeymapWrapper::SetFocusIn(surface, serial);
++}
++
+ static void keyboard_handle_leave(void* data, struct wl_keyboard* keyboard,
+ uint32_t serial, struct wl_surface* surface) {
++ KeymapWrapper::SetFocusOut(surface);
+ }
++
+ static void keyboard_handle_key(void* data, struct wl_keyboard* keyboard,
+ uint32_t serial, uint32_t time, uint32_t key,
+ uint32_t state) {}
+@@ -760,6 +769,7 @@
+ if (strcmp(interface, "wl_seat") == 0) {
+ auto* seat =
+ WaylandRegistryBind<wl_seat>(registry, id, &wl_seat_interface, 1);
++ KeymapWrapper::SetSeat(seat);
+ wl_seat_add_listener(seat, &seat_listener, data);
+ }
+ }
+@@ -2411,5 +2421,40 @@
+ altLatinCharCodes.mShiftedCharCode));
+ }
+
++#ifdef MOZ_WAYLAND
++void KeymapWrapper::SetFocusIn(wl_surface* aFocusSurface,
++ uint32_t aFocusSerial) {
++ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
++ keymapWrapper->mFocusSurface = aFocusSurface;
++ keymapWrapper->mFocusSerial = aFocusSerial;
++}
++
++void KeymapWrapper::SetFocusOut(wl_surface* aFocusSurface) {
++ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
++ if (aFocusSurface == keymapWrapper->mFocusSurface) {
++ keymapWrapper->mFocusSurface = nullptr;
++ keymapWrapper->mFocusSerial = 0;
++ }
++}
++
++void KeymapWrapper::GetFocusInfo(wl_surface** aFocusSurface,
++ uint32_t* aFocusSerial) {
++ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
++ *aFocusSurface = keymapWrapper->mFocusSurface;
++ *aFocusSerial = keymapWrapper->mFocusSerial;
++}
++
++void KeymapWrapper::SetSeat(wl_seat* aSeat) {
++ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
++ keymapWrapper->mSeat = aSeat;
++}
++
++wl_seat* KeymapWrapper::GetSeat() {
++ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
++ return keymapWrapper->mSeat;
++}
++
++#endif
++
+ } // namespace widget
+ } // namespace mozilla
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -2862,8 +2862,7 @@
+ };
+
+ void nsWindow::RequestFocusWaylandWindow(RefPtr<nsWindow> aWindow) {
+- LOG("nsWindow::RequestWindowFocusWayland(%p) gFocusWindow [%p]",
+- (void*)aWindow, gFocusWindow);
++ LOG("nsWindow::RequestWindowFocusWayland(%p)", (void*)aWindow);
+
+ RefPtr<nsWaylandDisplay> display = WaylandDisplayGet();
+ xdg_activation_v1* xdg_activation = display->GetXdgActivation();
+@@ -2872,17 +2871,11 @@
+ return;
+ }
+
+- // We use xdg-activation protocol to transfer focus from gFocusWindow to
+- // aWindow. Quit if no window is focused.
+- if (gFocusWindow != this) {
+- LOG(" there isn't any focused window to transfer focus from, quit.");
+- return;
+- }
+-
+- wl_surface* surface =
+- mGdkWindow ? gdk_wayland_window_get_wl_surface(mGdkWindow) : nullptr;
+- if (!surface) {
+- LOG(" requesting window is hidden/unmapped, quit.");
++ wl_surface* focusSurface;
++ uint32_t focusSerial;
++ KeymapWrapper::GetFocusInfo(&focusSurface, &focusSerial);
++ if (!focusSurface) {
++ LOG(" We're missing focused window, quit.");
+ return;
+ }
+
+@@ -2894,9 +2887,9 @@
+ // callback.
+ xdg_activation_token_v1_add_listener(aWindow->mXdgToken, &token_listener,
+ do_AddRef(aWindow).take());
+- xdg_activation_token_v1_set_serial(aWindow->mXdgToken, GetLastUserInputTime(),
+- display->GetSeat());
+- xdg_activation_token_v1_set_surface(aWindow->mXdgToken, surface);
++ xdg_activation_token_v1_set_serial(aWindow->mXdgToken, focusSerial,
++ KeymapWrapper::GetSeat());
++ xdg_activation_token_v1_set_surface(aWindow->mXdgToken, focusSurface);
+ xdg_activation_token_v1_commit(aWindow->mXdgToken);
+ }
+ #endif
+@@ -2959,11 +2952,7 @@
+
+ #ifdef MOZ_WAYLAND
+ if (GdkIsWaylandDisplay()) {
+- if (gFocusWindow) {
+- gFocusWindow->RequestFocusWaylandWindow(toplevelWindow);
+- } else {
+- LOG(" RequestFocusWaylandWindow(): we're missing focused window!");
+- }
++ RequestFocusWaylandWindow(toplevelWindow);
+ }
+ #endif
+ if (GTKToolkit) GTKToolkit->SetFocusTimestamp(0);
+@@ -5359,6 +5348,14 @@
+ a11y::PreInit();
+ #endif
+
++#ifdef MOZ_WAYLAND
++ // Ensure that KeymapWrapper is created on Wayland as we need it for
++ // keyboard focus tracking.
++ if (GdkIsWaylandDisplay()) {
++ KeymapWrapper::EnsureInstance();
++ }
++#endif
++
+ // Ensure that the toolkit is created.
+ nsGTKToolkit::GetToolkit();
+
+
diff --git a/D133485.diff b/D133485.diff
new file mode 100644
index 0000000..6785c55
--- /dev/null
+++ b/D133485.diff
@@ -0,0 +1,31 @@
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -2879,6 +2879,10 @@
+ return;
+ }
+
++ LOG(" requesting xdg-activation token, surface ID %d serial %d seat ID %d",
++ wl_proxy_get_id((struct wl_proxy*)focusSurface), focusSerial,
++ wl_proxy_get_id((struct wl_proxy*)KeymapWrapper::GetSeat()));
++
+ // Store activation token at activated window for further release.
+ g_clear_pointer(&aWindow->mXdgToken, xdg_activation_token_v1_destroy);
+ aWindow->mXdgToken = xdg_activation_v1_get_activation_token(xdg_activation);
+@@ -2941,6 +2945,7 @@
+ nsGTKToolkit* GTKToolkit = nsGTKToolkit::GetToolkit();
+ if (GTKToolkit) {
+ timestamp = GTKToolkit->GetFocusTimestamp();
++ GTKToolkit->SetFocusTimestamp(0);
+ }
+ if (!timestamp) {
+ timestamp = GetLastUserInputTime();
+@@ -2955,7 +2960,6 @@
+ RequestFocusWaylandWindow(toplevelWindow);
+ }
+ #endif
+- if (GTKToolkit) GTKToolkit->SetFocusTimestamp(0);
+ }
+ return;
+ }
+
diff --git a/D133634.diff b/D133634.diff
new file mode 100644
index 0000000..3c9d642
--- /dev/null
+++ b/D133634.diff
@@ -0,0 +1,119 @@
+diff --git a/widget/gtk/nsGtkKeyUtils.cpp b/widget/gtk/nsGtkKeyUtils.cpp
+--- a/widget/gtk/nsGtkKeyUtils.cpp
++++ b/widget/gtk/nsGtkKeyUtils.cpp
+@@ -2424,17 +2424,23 @@
+ #ifdef MOZ_WAYLAND
+ void KeymapWrapper::SetFocusIn(wl_surface* aFocusSurface,
+ uint32_t aFocusSerial) {
++ LOGW("KeymapWrapper::SetFocusIn() surface %p ID %d serial %d", aFocusSurface,
++ aFocusSurface ? wl_proxy_get_id((struct wl_proxy*)aFocusSurface) : 0,
++ aFocusSerial);
++
+ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
+ keymapWrapper->mFocusSurface = aFocusSurface;
+ keymapWrapper->mFocusSerial = aFocusSerial;
+ }
+
++// aFocusSurface can be null in case that focused surface is already destroyed.
+ void KeymapWrapper::SetFocusOut(wl_surface* aFocusSurface) {
+ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
+- if (aFocusSurface == keymapWrapper->mFocusSurface) {
+- keymapWrapper->mFocusSurface = nullptr;
+- keymapWrapper->mFocusSerial = 0;
+- }
++ LOGW("KeymapWrapper::SetFocusOut surface %p ID %d", aFocusSurface,
++ aFocusSurface ? wl_proxy_get_id((struct wl_proxy*)aFocusSurface) : 0);
++
++ keymapWrapper->mFocusSurface = nullptr;
++ keymapWrapper->mFocusSerial = 0;
+ }
+
+ void KeymapWrapper::GetFocusInfo(wl_surface** aFocusSurface,
+@@ -2453,7 +2459,6 @@
+ KeymapWrapper* keymapWrapper = KeymapWrapper::GetInstance();
+ return keymapWrapper->mSeat;
+ }
+-
+ #endif
+
+ } // namespace widget
+diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h
+--- a/widget/gtk/nsWindow.h
++++ b/widget/gtk/nsWindow.h
+@@ -386,8 +386,7 @@
+
+ #ifdef MOZ_WAYLAND
+ // Use xdg-activation protocol to transfer focus from gFocusWindow to aWindow.
+- // RequestFocusWaylandWindow needs to be called on focused window only.
+- void RequestFocusWaylandWindow(RefPtr<nsWindow> aWindow);
++ static void RequestFocusWaylandWindow(RefPtr<nsWindow> aWindow);
+ void FocusWaylandWindow(const char* aTokenID);
+
+ bool GetCSDDecorationOffset(int* aDx, int* aDy);
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -2845,6 +2845,9 @@
+ return;
+ }
+
++ LOG(" requesting xdg-activation, surface ID %d",
++ wl_proxy_get_id((struct wl_proxy*)surface));
++
+ xdg_activation_v1* xdg_activation = WaylandDisplayGet()->GetXdgActivation();
+ xdg_activation_v1_activate(xdg_activation, aTokenID, surface);
+ }
+@@ -2862,12 +2865,17 @@
+ };
+
+ void nsWindow::RequestFocusWaylandWindow(RefPtr<nsWindow> aWindow) {
+- LOG("nsWindow::RequestWindowFocusWayland(%p)", (void*)aWindow);
++ LOGW("nsWindow::RequestFocusWaylandWindow(%p) gFocusWindow %p",
++ (void*)aWindow, gFocusWindow);
++
++ if (!gFocusWindow) {
++ LOGW(" missing gFocusWindow, quit.");
++ }
+
+ RefPtr<nsWaylandDisplay> display = WaylandDisplayGet();
+ xdg_activation_v1* xdg_activation = display->GetXdgActivation();
+ if (!xdg_activation) {
+- LOG(" xdg-activation is missing, quit.");
++ LOGW(" xdg-activation is missing, quit.");
+ return;
+ }
+
+@@ -2875,13 +2883,25 @@
+ uint32_t focusSerial;
+ KeymapWrapper::GetFocusInfo(&focusSurface, &focusSerial);
+ if (!focusSurface) {
+- LOG(" We're missing focused window, quit.");
+- return;
+- }
+-
+- LOG(" requesting xdg-activation token, surface ID %d serial %d seat ID %d",
+- wl_proxy_get_id((struct wl_proxy*)focusSurface), focusSerial,
+- wl_proxy_get_id((struct wl_proxy*)KeymapWrapper::GetSeat()));
++ LOGW(" We're missing focused window, quit.");
++ return;
++ }
++
++ GdkWindow* gdkWindow = gtk_widget_get_window(gFocusWindow->mShell);
++ wl_surface* surface =
++ gdkWindow ? gdk_wayland_window_get_wl_surface(gdkWindow) : nullptr;
++ if (focusSurface != surface) {
++ LOGW(" focused surface %p and gFocusWindow surface %p don't match, quit.",
++ focusSurface, surface);
++ return;
++ }
++
++ LOGW(
++ " requesting xdg-activation token, surface %p ID %d serial %d seat ID "
++ "%d",
++ focusSurface,
++ focusSurface ? wl_proxy_get_id((struct wl_proxy*)focusSurface) : 0,
++ focusSerial, wl_proxy_get_id((struct wl_proxy*)KeymapWrapper::GetSeat()));
+
+ // Store activation token at activated window for further release.
+ g_clear_pointer(&aWindow->mXdgToken, xdg_activation_token_v1_destroy);
+
diff --git a/D133885.diff b/D133885.diff
new file mode 100644
index 0000000..246fc2a
--- /dev/null
+++ b/D133885.diff
@@ -0,0 +1,33 @@
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -2868,7 +2868,7 @@
+ LOGW("nsWindow::RequestFocusWaylandWindow(%p) gFocusWindow %p",
+ (void*)aWindow, gFocusWindow);
+
+- if (!gFocusWindow) {
++ if (!gFocusWindow || gFocusWindow->IsDestroyed()) {
+ LOGW(" missing gFocusWindow, quit.");
+ }
+
+@@ -2883,13 +2883,16 @@
+ uint32_t focusSerial;
+ KeymapWrapper::GetFocusInfo(&focusSurface, &focusSerial);
+ if (!focusSurface) {
+- LOGW(" We're missing focused window, quit.");
++ LOGW(" We're missing KeymapWrapper focused window, quit.");
+ return;
+ }
+
+ GdkWindow* gdkWindow = gtk_widget_get_window(gFocusWindow->mShell);
+- wl_surface* surface =
+- gdkWindow ? gdk_wayland_window_get_wl_surface(gdkWindow) : nullptr;
++ if (!gdkWindow) {
++ LOGW(" gFocusWindow is not mapped, quit.");
++ return;
++ }
++ wl_surface* surface = gdk_wayland_window_get_wl_surface(gdkWindow);
+ if (focusSurface != surface) {
+ LOGW(" focused surface %p and gFocusWindow surface %p don't match, quit.",
+ focusSurface, surface);
+
diff --git a/D134141.diff b/D134141.diff
new file mode 100644
index 0000000..ef0b9fb
--- /dev/null
+++ b/D134141.diff
@@ -0,0 +1,12 @@
+diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp
+--- a/widget/gtk/nsWindow.cpp
++++ b/widget/gtk/nsWindow.cpp
+@@ -2870,6 +2870,7 @@
+
+ if (!gFocusWindow || gFocusWindow->IsDestroyed()) {
+ LOGW(" missing gFocusWindow, quit.");
++ return;
+ }
+
+ RefPtr<nsWaylandDisplay> display = WaylandDisplayGet();
+
diff --git a/firefox.spec b/firefox.spec
index c068073..13e2d95 100644
--- a/firefox.spec
+++ b/firefox.spec
@@ -162,13 +162,13 @@ ExcludeArch: aarch64
Summary: Mozilla Firefox Web browser
Name: firefox
-Version: 95.0.2
-Release: 5%{?pre_tag}%{?dist}
+Version: 96.0
+Release: 1%{?pre_tag}%{?dist}
URL: https://www.mozilla.org/firefox/
License: MPLv1.1 or GPLv2+ or LGPLv2+
Source0: https://archive.mozilla.org/pub/firefox/releases/%{version}%{?pre_version}/source/firefox-%{version}%{?pre_version}.source.tar.xz
%if %{with langpacks}
-Source1: firefox-langpacks-%{version}%{?pre_version}-20211220.tar.xz
+Source1: firefox-langpacks-%{version}%{?pre_version}-20220111.tar.xz
%endif
Source2: cbindgen-vendor.tar.xz
Source10: firefox-mozconfig
@@ -219,7 +219,6 @@ Patch55: firefox-testing.patch
Patch57: firefox-disable-ffvpx-with-vapi.patch
Patch61: firefox-glibc-dynstack.patch
Patch62: build-python.patch
-Patch63: mozilla-1745560.patch
# Test patches
# Generate without context by
@@ -244,8 +243,13 @@ Patch402: mozilla-1196777.patch
Patch407: mozilla-1667096.patch
Patch408: mozilla-1663844.patch
Patch415: mozilla-1670333.patch
-Patch420: mochitest-wayland-workaround.patch
-Patch421: mozilla-1744896.patch
+# xdg-activation backports from 97.0
+Patch421: D132929.diff
+Patch422: D133209.diff
+Patch423: D133485.diff
+Patch424: D133634.diff
+Patch425: D133885.diff
+Patch426: D134141.diff
# PGO/LTO patches
Patch600: pgo.patch
@@ -464,7 +468,6 @@ This package contains results of tests executed during build.
%patch57 -p1 -b .ffvpx-with-vapi
#%patch61 -p1 -b .glibc-dynstack
%patch62 -p1 -b .build-python
-%patch63 -p1 -b .1745560
# Test patches
#%patch100 -p1 -b .firefox-tests-xpcshell
@@ -487,8 +490,14 @@ This package contains results of tests executed during build.
%patch407 -p1 -b .1667096
%patch408 -p1 -b .1663844
%patch415 -p1 -b .1670333
-#%patch420 -p1 -b .mochitest-wayland-workaround
-%patch421 -p1 -b .1744896
+
+# xdg-activation backports from 97.0
+%patch421 -p1 -b .D132929
+%patch422 -p1 -b .D133209
+%patch423 -p1 -b .D133485
+%patch424 -p1 -b .D133634
+%patch425 -p1 -b .D133885
+%patch426 -p1 -b .D134141
# PGO patches
%if %{build_with_pgo}
@@ -1058,6 +1067,9 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || :
#---------------------------------------------------------------------
%changelog
+* Tue Jan 11 2022 Martin Stransky <stransky@redhat.com> - 96.0-1
+- Updated to 96.0
+
* Sat Jan 08 2022 Miro HronĨok <mhroncok@redhat.com> - 95.0.2-5
- Rebuilt for https://fedoraproject.org/wiki/Changes/LIBFFI34
diff --git a/mochitest-wayland-workaround.patch b/mochitest-wayland-workaround.patch
deleted file mode 100644
index 7a69061..0000000
--- a/mochitest-wayland-workaround.patch
+++ /dev/null
@@ -1,61 +0,0 @@
-diff -up firefox-89.0/dom/base/test/browser_multiple_popups.js.mochitest-wayland-workaround firefox-89.0/dom/base/test/browser_multiple_popups.js
---- firefox-89.0/dom/base/test/browser_multiple_popups.js.mochitest-wayland-workaround 2021-05-27 22:29:44.000000000 +0200
-+++ firefox-89.0/dom/base/test/browser_multiple_popups.js 2021-06-01 10:02:59.648432325 +0200
-@@ -265,6 +265,7 @@ add_task(async _ => {
- info("All opened from chrome.");
- await withTestPage(2, { chrome: true }, async function(browser) {
- await BrowserTestUtils.synthesizeMouseAtCenter("#openPopups", {}, browser);
-+ await BrowserTestUtils.synthesizeMouseAtCenter("#openPopups", {}, browser);
- });
- });
-
-diff -up firefox-89.0/dom/ipc/BrowserChild.cpp.mochitest-wayland-workaround firefox-89.0/dom/ipc/BrowserChild.cpp
---- firefox-89.0/dom/ipc/BrowserChild.cpp.mochitest-wayland-workaround 2021-05-27 22:29:44.000000000 +0200
-+++ firefox-89.0/dom/ipc/BrowserChild.cpp 2021-06-01 10:02:59.649432346 +0200
-@@ -457,7 +457,7 @@ nsresult BrowserChild::Init(mozIDOMWindo
- }
- mPuppetWidget->InfallibleCreate(nullptr,
- nullptr, // no parents
-- LayoutDeviceIntRect(0, 0, 0, 0),
-+ LayoutDeviceIntRect(0, 0, 1000, 1000),
- nullptr); // HandleWidgetEvent
-
- mWebBrowser = nsWebBrowser::Create(this, mPuppetWidget, mBrowsingContext,
-diff -up firefox-89.0/toolkit/components/browser/nsWebBrowser.cpp.mochitest-wayland-workaround firefox-89.0/toolkit/components/browser/nsWebBrowser.cpp
---- firefox-89.0/toolkit/components/browser/nsWebBrowser.cpp.mochitest-wayland-workaround 2021-05-27 22:29:54.000000000 +0200
-+++ firefox-89.0/toolkit/components/browser/nsWebBrowser.cpp 2021-06-01 10:02:59.649432346 +0200
-@@ -150,7 +150,8 @@ already_AddRefed<nsWebBrowser> nsWebBrow
- // handler that always gets called (even for subframes) for any bubbling
- // event.
-
-- nsresult rv = docShell->InitWindow(nullptr, docShellParentWidget, 0, 0, 0, 0);
-+ nsresult rv =
-+ docShell->InitWindow(nullptr, docShellParentWidget, 0, 0, 1000, 1000);
- if (NS_WARN_IF(NS_FAILED(rv))) {
- return nullptr;
- }
-diff -up firefox-89.0/widget/gtk/nsWindow.cpp.mochitest-wayland-workaround firefox-89.0/widget/gtk/nsWindow.cpp
---- firefox-89.0/widget/gtk/nsWindow.cpp.mochitest-wayland-workaround 2021-06-01 10:02:59.644432243 +0200
-+++ firefox-89.0/widget/gtk/nsWindow.cpp 2021-06-01 10:04:28.715262874 +0200
-@@ -7962,6 +7973,8 @@ nsresult nsWindow::SynthesizeNativeMouse
- nsIObserver* aObserver) {
- AutoObserverNotifier notifier(aObserver, "mouseevent");
-
-+ LOG(("nsWindow::SynthesizeNativeMouseEvent [%p]\n", (void*)this));
-+
- if (!mGdkWindow) {
- return NS_OK;
- }
-@@ -7976,6 +7989,12 @@ nsresult nsWindow::SynthesizeNativeMouse
- switch (aNativeMessage) {
- case NativeMouseMessage::ButtonDown:
- case NativeMouseMessage::ButtonUp: {
-+ if (aNativeMessage == NativeMouseMessage::ButtonDown) {
-+ LOG((" NativeMouseMessage::ButtonDown()\n"));
-+ } else {
-+ LOG((" NativeMouseMessage::ButtonUp()\n"));
-+ }
-+
- GdkEvent event;
- memset(&event, 0, sizeof(GdkEvent));
- event.type = aNativeMessage == NativeMouseMessage::ButtonDown
diff --git a/mozilla-1744896.patch b/mozilla-1744896.patch
deleted file mode 100644
index b3f343e..0000000
--- a/mozilla-1744896.patch
+++ /dev/null
@@ -1,42 +0,0 @@
-diff -up firefox-95.0.2/widget/gtk/nsWindow.cpp.1744896 firefox-95.0.2/widget/gtk/nsWindow.cpp
---- firefox-95.0.2/widget/gtk/nsWindow.cpp.1744896 2021-12-23 11:54:31.522539340 +0100
-+++ firefox-95.0.2/widget/gtk/nsWindow.cpp 2021-12-23 11:55:56.070270174 +0100
-@@ -5765,6 +5765,17 @@ nsresult nsWindow::Create(nsIWidget* aPa
- }
- }
- #endif
-+#ifdef MOZ_WAYLAND
-+ // Initialize the window specific VsyncSource early in order to avoid races
-+ // with BrowserParent::UpdateVsyncParentVsyncSource().
-+ // Only use for toplevel windows for now, see bug 1619246.
-+ if (GdkIsWaylandDisplay() &&
-+ StaticPrefs::widget_wayland_vsync_enabled_AtStartup() &&
-+ mWindowType == eWindowType_toplevel) {
-+ mWaylandVsyncSource = new WaylandVsyncSource();
-+ MOZ_RELEASE_ASSERT(mWaylandVsyncSource);
-+ }
-+#endif
-
- // We create input contexts for all containers, except for
- // toplevel popup windows
-@@ -6077,19 +6088,12 @@ void nsWindow::ResumeCompositorFromCompo
-
- void nsWindow::WaylandStartVsync() {
- #ifdef MOZ_WAYLAND
-- // only use for toplevel windows for now - see bug 1619246
-- if (!GdkIsWaylandDisplay() ||
-- !StaticPrefs::widget_wayland_vsync_enabled_AtStartup() ||
-- mWindowType != eWindowType_toplevel) {
-+ if (!mWaylandVsyncSource) {
- return;
- }
-
- LOG("nsWindow::WaylandStartVsync() [%p]\n", (void*)this);
-
-- if (!mWaylandVsyncSource) {
-- mWaylandVsyncSource = new WaylandVsyncSource();
-- }
--
- WaylandVsyncSource::WaylandDisplay& display =
- static_cast<WaylandVsyncSource::WaylandDisplay&>(
- mWaylandVsyncSource->GetGlobalDisplay());
diff --git a/mozilla-1745560.patch b/mozilla-1745560.patch
deleted file mode 100644
index 891dfeb..0000000
--- a/mozilla-1745560.patch
+++ /dev/null
@@ -1,15 +0,0 @@
-diff --git a/widget/gtk/mozwayland/mozwayland.c b/widget/gtk/mozwayland/mozwayland.c
---- a/widget/gtk/mozwayland/mozwayland.c
-+++ b/widget/gtk/mozwayland/mozwayland.c
-@@ -200,3 +200,10 @@
-
- MOZ_EXPORT void wl_list_insert_list(struct wl_list* list,
- struct wl_list* other) {}
-+
-+MOZ_EXPORT struct wl_proxy* wl_proxy_marshal_flags(
-+ struct wl_proxy* proxy, uint32_t opcode,
-+ const struct wl_interface* interface, uint32_t version, uint32_t flags,
-+ ...) {
-+ return NULL;
-+}
-
diff --git a/pgo.patch b/pgo.patch
index bd92d1f..e7e715b 100644
--- a/pgo.patch
+++ b/pgo.patch
@@ -1,6 +1,6 @@
-diff -up firefox-95.0/build/moz.configure/lto-pgo.configure.pgo firefox-95.0/build/moz.configure/lto-pgo.configure
---- firefox-95.0/build/moz.configure/lto-pgo.configure.pgo 2021-12-03 16:04:48.441167077 +0100
-+++ firefox-95.0/build/moz.configure/lto-pgo.configure 2021-12-03 16:06:19.129415806 +0100
+diff -up firefox-96.0/build/moz.configure/lto-pgo.configure.pgo firefox-96.0/build/moz.configure/lto-pgo.configure
+--- firefox-96.0/build/moz.configure/lto-pgo.configure.pgo 2022-01-06 19:32:35.000000000 +0100
++++ firefox-96.0/build/moz.configure/lto-pgo.configure 2022-01-11 15:43:02.193378698 +0100
@@ -248,8 +248,8 @@ def lto(
cflags.append("-flto")
ldflags.append("-flto")
@@ -21,9 +21,9 @@ diff -up firefox-95.0/build/moz.configure/lto-pgo.configure.pgo firefox-95.0/bui
# With clang-cl, -flto can only be used with -c or -fuse-ld=lld.
# AC_TRY_LINKs during configure don't have -c, so pass -fuse-ld=lld.
cflags.append("-fuse-ld=lld")
-diff -up firefox-95.0/build/pgo/profileserver.py.pgo firefox-95.0/build/pgo/profileserver.py
---- firefox-95.0/build/pgo/profileserver.py.pgo 2021-11-29 15:01:10.000000000 +0100
-+++ firefox-95.0/build/pgo/profileserver.py 2021-12-03 16:04:48.441167077 +0100
+diff -up firefox-96.0/build/pgo/profileserver.py.pgo firefox-96.0/build/pgo/profileserver.py
+--- firefox-96.0/build/pgo/profileserver.py.pgo 2022-01-06 16:56:23.000000000 +0100
++++ firefox-96.0/build/pgo/profileserver.py 2022-01-11 15:43:02.193378698 +0100
@@ -11,7 +11,7 @@ import glob
import subprocess
@@ -70,9 +70,9 @@ diff -up firefox-95.0/build/pgo/profileserver.py.pgo firefox-95.0/build/pgo/prof
llvm_profdata = env.get("LLVM_PROFDATA")
if llvm_profdata:
profraw_files = glob.glob("*.profraw")
-diff -up firefox-95.0/build/unix/mozconfig.unix.pgo firefox-95.0/build/unix/mozconfig.unix
---- firefox-95.0/build/unix/mozconfig.unix.pgo 2021-11-29 15:01:10.000000000 +0100
-+++ firefox-95.0/build/unix/mozconfig.unix 2021-12-03 16:04:48.441167077 +0100
+diff -up firefox-96.0/build/unix/mozconfig.unix.pgo firefox-96.0/build/unix/mozconfig.unix
+--- firefox-96.0/build/unix/mozconfig.unix.pgo 2022-01-06 16:56:24.000000000 +0100
++++ firefox-96.0/build/unix/mozconfig.unix 2022-01-11 15:43:02.193378698 +0100
@@ -4,6 +4,15 @@ if [ -n "$FORCE_GCC" ]; then
CC="$MOZ_FETCHES_DIR/gcc/bin/gcc"
CXX="$MOZ_FETCHES_DIR/gcc/bin/g++"
@@ -89,18 +89,18 @@ diff -up firefox-95.0/build/unix/mozconfig.unix.pgo firefox-95.0/build/unix/mozc
# We want to make sure we use binutils and other binaries in the tooltool
# package.
mk_add_options "export PATH=$MOZ_FETCHES_DIR/gcc/bin:$PATH"
-diff -up firefox-95.0/extensions/spellcheck/src/moz.build.pgo firefox-95.0/extensions/spellcheck/src/moz.build
---- firefox-95.0/extensions/spellcheck/src/moz.build.pgo 2021-11-29 15:01:12.000000000 +0100
-+++ firefox-95.0/extensions/spellcheck/src/moz.build 2021-12-03 16:04:48.441167077 +0100
-@@ -31,3 +31,5 @@ EXPORTS.mozilla += [
-
- if CONFIG["CC_TYPE"] in ("clang", "gcc"):
- CXXFLAGS += ["-Wno-error=shadow"]
+diff -up firefox-96.0/extensions/spellcheck/src/moz.build.pgo firefox-96.0/extensions/spellcheck/src/moz.build
+--- firefox-96.0/extensions/spellcheck/src/moz.build.pgo 2022-01-11 15:43:02.193378698 +0100
++++ firefox-96.0/extensions/spellcheck/src/moz.build 2022-01-11 15:49:52.929362701 +0100
+@@ -28,3 +28,5 @@ EXPORTS.mozilla += [
+ "mozInlineSpellChecker.h",
+ "mozSpellChecker.h",
+ ]
+
+CXXFLAGS += ['-fno-devirtualize']
-diff -up firefox-95.0/toolkit/components/terminator/nsTerminator.cpp.pgo firefox-95.0/toolkit/components/terminator/nsTerminator.cpp
---- firefox-95.0/toolkit/components/terminator/nsTerminator.cpp.pgo 2021-11-29 15:01:30.000000000 +0100
-+++ firefox-95.0/toolkit/components/terminator/nsTerminator.cpp 2021-12-03 16:04:48.442167068 +0100
+diff -up firefox-96.0/toolkit/components/terminator/nsTerminator.cpp.pgo firefox-96.0/toolkit/components/terminator/nsTerminator.cpp
+--- firefox-96.0/toolkit/components/terminator/nsTerminator.cpp.pgo 2022-01-06 16:58:15.000000000 +0100
++++ firefox-96.0/toolkit/components/terminator/nsTerminator.cpp 2022-01-11 15:43:02.193378698 +0100
@@ -466,6 +466,11 @@ void nsTerminator::StartWatchdog() {
}
#endif
diff --git a/sources b/sources
index 626c03c..65620be 100644
--- a/sources
+++ b/sources
@@ -1,4 +1,4 @@
SHA512 (cbindgen-vendor.tar.xz) = b9ab1498be90ecf60822df7021f8812f124550d97f8cd687c69d3ab56fc5fb714bfe88c78c978a1794d211724909a9a5cad6a4b483fa05f762909c45d5075520
SHA512 (mochitest-python.tar.gz) = 18e1aeb475df5fbf1fe3838897d5ac2f3114aa349030713fc2be27af087b1b12f57642621b87bd052f324a7cb7fbae5f36b21502191d85692f62c8cdd69c8bf2
-SHA512 (firefox-95.0.2.source.tar.xz) = 1b9eb91d72a6975b4d2558a7c5de0e008095398b9862498623656ab6d8056e3cffc12263f58aa07feeddc91ccfb512aa4b582dfeadb142d548d96c3d50204196
-SHA512 (firefox-langpacks-95.0.2-20211220.tar.xz) = 28adb48311b7e3ab8acfd54dfa68a2f58344d7e73353ef71f8f02d608a23471e62c318accd4c0157478edd300c449af758ca93be0f8891160ba26f8888afdd9d
+SHA512 (firefox-96.0.source.tar.xz) = 39f553474537eb4e521f4182e38f0ddff039fa6b40b939d461937d2cef27f7182097b478f08f90d64fdcbe9c063e78f14f6863a8a82a16207ec7a1d3fdfda4ff
+SHA512 (firefox-langpacks-96.0-20220111.tar.xz) = 116e80badb7ba9077138371789fe017350f5ab0473a6130a356d05fb7205eedefc77076d56ee9f4feb7db3cf84456b8b182936185ef77723115ea9559f044f33
bgstack15