From 9956bb1eafb6bf3ea0f56a3376530d423b1a1dd8 Mon Sep 17 00:00:00 2001 From: Martin Stransky Date: Tue, 11 Jan 2022 19:47:58 +0100 Subject: Update to Firefox 96 --- .gitignore | 2 + D132929.diff | 18 ++++ D133209.diff | 197 +++++++++++++++++++++++++++++++++++++ D133485.diff | 31 ++++++ D133634.diff | 119 ++++++++++++++++++++++ D133885.diff | 33 +++++++ D134141.diff | 12 +++ firefox.spec | 30 ++++-- mochitest-wayland-workaround.patch | 61 ------------ mozilla-1744896.patch | 42 -------- mozilla-1745560.patch | 15 --- pgo.patch | 38 +++---- sources | 4 +- 13 files changed, 454 insertions(+), 148 deletions(-) create mode 100644 D132929.diff create mode 100644 D133209.diff create mode 100644 D133485.diff create mode 100644 D133634.diff create mode 100644 D133885.diff create mode 100644 D134141.diff delete mode 100644 mochitest-wayland-workaround.patch delete mode 100644 mozilla-1744896.patch delete mode 100644 mozilla-1745560.patch 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(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 aWindow) { +- LOG("nsWindow::RequestWindowFocusWayland(%p) gFocusWindow [%p]", +- (void*)aWindow, gFocusWindow); ++ LOG("nsWindow::RequestWindowFocusWayland(%p)", (void*)aWindow); + + RefPtr 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 aWindow); ++ static void RequestFocusWaylandWindow(RefPtr 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 aWindow) { +- LOG("nsWindow::RequestWindowFocusWayland(%p)", (void*)aWindow); ++ LOGW("nsWindow::RequestFocusWaylandWindow(%p) gFocusWindow %p", ++ (void*)aWindow, gFocusWindow); ++ ++ if (!gFocusWindow) { ++ LOGW(" missing gFocusWindow, quit."); ++ } + + RefPtr 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 display = WaylandDisplayGet(); + diff --git a/firefox.spec b/firefox.spec index 1646bbc..947286b 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: 4%{?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 - 96.0-1 +- Updated to 96.0 + * Thu Dec 23 2021 Martin Stransky - 95.0.2-4 - Added fix fox mozbz#1744896 (VSync) 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 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( - 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 -- cgit