diff --git a/.gitignore b/.gitignore index 40cbc79..59fa836 100644 --- a/.gitignore +++ b/.gitignore @@ -331,3 +331,4 @@ firefox-3.6.4.source.tar.bz2 /firefox-langpacks-65.0.2-20190301.tar.xz /firefox-66.0.source.tar.xz /firefox-langpacks-66.0-20190312.tar.xz +/firefox-langpacks-66.0-20190315.tar.xz diff --git a/firefox-mozconfig b/firefox-mozconfig index 3df0a66..78aa1da 100644 --- a/firefox-mozconfig +++ b/firefox-mozconfig @@ -13,6 +13,8 @@ ac_add_options --enable-chrome-format=omni ac_add_options --enable-pulseaudio ac_add_options --without-system-icu ac_add_options --with-mozilla-api-keyfile=../mozilla-api-key +ac_add_options --with-google-location-service-api-keyfile=../google-api-key +ac_add_options --with-google-safebrowsing-api-keyfile=../google-api-key ac_add_options --enable-release ac_add_options --update-channel=release ac_add_options --disable-system-sqlite diff --git a/firefox.spec b/firefox.spec index f44061f..86ab918 100644 --- a/firefox.spec +++ b/firefox.spec @@ -4,7 +4,7 @@ # Disabled arm due to rhbz#1658940 ExcludeArch: armv7hl # Disabled due to https://pagure.io/fedora-infrastructure/issue/7581 -ExcludeArch: s390x +# ExcludeArch: s390x %global system_nss 1 %global system_ffi 1 @@ -154,6 +154,8 @@ Patch417: bug1375074-save-restore-x28.patch Patch574: firefox-pipewire.patch Patch575: mozilla-1423598-popup.patch Patch576: mozilla-1532643-popup.patch +Patch577: mozilla-1535567.patch +Patch578: mozilla-1431399.patch # PGO/LTO patches Patch600: pgo.patch @@ -359,6 +361,8 @@ This package contains results of tests executed during build. %endif %patch575 -p1 -b .mozilla-1423598-popup %patch576 -p1 -b .mozilla-1532643-popup +%patch577 -p1 -b .mozilla-1535567 +%patch578 -p1 -b .mozilla-1431399 # PGO patches %patch600 -p1 -b .pgo @@ -906,8 +910,13 @@ gtk-update-icon-cache %{_datadir}/icons/hicolor &>/dev/null || : #--------------------------------------------------------------------- %changelog +* Fri Mar 15 2019 Martin Stransky - 66.0-2 +- Updated to 66.0 (Build 3) +- Re-enable s390x arches +- Fixed Wayland specific bugs mozbz#1535567, mozbz#1431399 + * Tue Mar 12 2019 Martin Stransky - 66.0-1 -- Updated to 66 Build 1 +- Updated to 66.0 (Build 1) * Fri Mar 1 2019 Martin Stransky - 65.0.2-1 - Updated to 65.0.2 diff --git a/mozilla-1431399.patch b/mozilla-1431399.patch new file mode 100644 index 0000000..b6513d0 --- /dev/null +++ b/mozilla-1431399.patch @@ -0,0 +1,17 @@ +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -3242,6 +3242,12 @@ + mBounds = aRect; + ConstrainSize(&mBounds.width, &mBounds.height); + ++ // eWindowType_child is not supported on Wayland. Just switch to toplevel ++ // as a workaround. ++ if (!mIsX11Display && mWindowType == eWindowType_child) { ++ mWindowType = eWindowType_toplevel; ++ } ++ + // figure out our parent window + GtkWidget *parentMozContainer = nullptr; + GtkContainer *parentGtkContainer = nullptr; + diff --git a/mozilla-1535567.patch b/mozilla-1535567.patch new file mode 100644 index 0000000..1cbe3fd --- /dev/null +++ b/mozilla-1535567.patch @@ -0,0 +1,266 @@ +diff -up firefox-66.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium.old firefox-66.0/media/libyuv/libyuv/tools_libyuv/autoroller/unittests/testdata/DEPS.chromium +diff -up firefox-66.0/media/webrtc/trunk/Makefile.old firefox-66.0/media/webrtc/trunk/Makefile +diff -up firefox-66.0/widget/gtk/mozcontainer.cpp.old firefox-66.0/widget/gtk/mozcontainer.cpp +--- firefox-66.0/widget/gtk/mozcontainer.cpp.old 2019-03-14 23:12:56.000000000 +0100 ++++ firefox-66.0/widget/gtk/mozcontainer.cpp 2019-03-15 13:23:59.366840324 +0100 +@@ -20,6 +20,20 @@ + # include "maiRedundantObjectFactory.h" + #endif + ++#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) ++#else ++# define LOG(args) ++#endif /* MOZ_LOGGING */ ++ + #ifdef MOZ_WAYLAND + using namespace mozilla; + using namespace mozilla::widget; +@@ -157,10 +171,14 @@ void moz_container_init(MozContainer *co + container->subsurface = nullptr; + container->eglwindow = nullptr; + container->frame_callback_handler = nullptr; ++ container->frame_callback_handler_surface_id = -1; + // We can draw to x11 window any time. + container->ready_to_draw = GDK_IS_X11_DISPLAY(gdk_display_get_default()); + container->surface_needs_clear = true; ++ container->inital_draw_cb = nullptr; + #endif ++ ++ LOG(("moz_container_class_init() [%p]\n", (void *)container)); + } + + #if defined(MOZ_WAYLAND) +@@ -170,36 +188,92 @@ static wl_surface *moz_container_get_gtk + dlsym(RTLD_DEFAULT, "gdk_wayland_window_get_wl_surface"); + + GdkWindow *window = gtk_widget_get_window(GTK_WIDGET(container)); +- return sGdkWaylandWindowGetWlSurface(window); ++ wl_surface *surface = sGdkWaylandWindowGetWlSurface(window); ++ ++ LOG(("moz_container_get_gtk_container_surface() [%p] wl_surface %p ID %d\n", ++ (void *)container, (void *)surface, ++ surface ? wl_proxy_get_id((struct wl_proxy *)surface) : -1)); ++ ++ return surface; + } + + static void frame_callback_handler(void *data, struct wl_callback *callback, + uint32_t time) { + MozContainer *container = MOZ_CONTAINER(data); ++ ++ LOG( ++ ("moz_container_frame_callback_handler() [%p] frame_callback_handler %p " ++ "ready_to_draw %d (set to true) " ++ "inital_draw callback %d\n", ++ (void *)container, (void *)container->frame_callback_handler, ++ container->ready_to_draw, container->inital_draw_cb ? 1 : 0)); ++ + g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy); ++ container->frame_callback_handler_surface_id = -1; ++ ++ if (!container->ready_to_draw && container->inital_draw_cb) { ++ container->inital_draw_cb(); ++ } + container->ready_to_draw = true; + } + ++void moz_container_set_initial_draw_callback( ++ MozContainer *container, std::function inital_draw_cb) { ++ container->inital_draw_cb = inital_draw_cb; ++} ++ + static const struct wl_callback_listener frame_listener = { + frame_callback_handler}; + +-static gboolean moz_container_map_wayland(GtkWidget *widget, +- GdkEventAny *event) { +- MozContainer *container = MOZ_CONTAINER(widget); +- +- if (container->ready_to_draw || container->frame_callback_handler) { +- return FALSE; +- } +- ++static void moz_container_request_parent_frame_callback( ++ MozContainer *container) { + wl_surface *gtk_container_surface = + moz_container_get_gtk_container_surface(container); ++ int gtk_container_surface_id = ++ gtk_container_surface ++ ? wl_proxy_get_id((struct wl_proxy *)gtk_container_surface) ++ : -1; ++ ++ LOG( ++ ("moz_container_request_parent_frame_callback() [%p] " ++ "container->frame_callback_handler %p " ++ "container->frame_callback_handler_surface_id %d\n", ++ (void *)container, container->frame_callback_handler, ++ container->frame_callback_handler_surface_id)); ++ ++ if (container->frame_callback_handler && ++ container->frame_callback_handler_surface_id == ++ gtk_container_surface_id) { ++ return; ++ } ++ ++ // If there's pending frame callback, delete it. ++ if (container->frame_callback_handler) { ++ g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy); ++ } + + if (gtk_container_surface) { ++ container->frame_callback_handler_surface_id = gtk_container_surface_id; + container->frame_callback_handler = wl_surface_frame(gtk_container_surface); + wl_callback_add_listener(container->frame_callback_handler, &frame_listener, + container); ++ } else { ++ container->frame_callback_handler_surface_id = -1; + } ++} + ++static gboolean moz_container_map_wayland(GtkWidget *widget, ++ GdkEventAny *event) { ++ MozContainer *container = MOZ_CONTAINER(widget); ++ ++ LOG(("moz_container_map_wayland() begin [%p] ready_to_draw %d\n", ++ (void *)container, container->ready_to_draw)); ++ ++ if (container->ready_to_draw) { ++ return FALSE; ++ } ++ ++ moz_container_request_parent_frame_callback(MOZ_CONTAINER(widget)); + return FALSE; + } + +@@ -208,9 +282,12 @@ static void moz_container_unmap_wayland( + g_clear_pointer(&container->subsurface, wl_subsurface_destroy); + g_clear_pointer(&container->surface, wl_surface_destroy); + g_clear_pointer(&container->frame_callback_handler, wl_callback_destroy); ++ container->frame_callback_handler_surface_id = -1; + + container->surface_needs_clear = true; + container->ready_to_draw = false; ++ ++ LOG(("moz_container_unmap_wayland() [%p]\n", (void *)container)); + } + + static gint moz_container_get_scale(MozContainer *container) { +@@ -227,6 +304,10 @@ static gint moz_container_get_scale(MozC + + void moz_container_scale_changed(MozContainer *container, + GtkAllocation *aAllocation) { ++ LOG(("moz_container_scale_changed() [%p] surface %p eglwindow %p\n", ++ (void *)container, (void *)container->surface, ++ (void *)container->eglwindow)); ++ + if (!container->surface) { + return; + } +@@ -320,6 +401,10 @@ void moz_container_realize(GtkWidget *wi + : gtk_widget_get_visual(widget); + + window = gdk_window_new(parent, &attributes, attributes_mask); ++ ++ LOG(("moz_container_realize() [%p] GdkWindow %p\n", (void *)container, ++ (void *)window)); ++ + gdk_window_set_user_data(window, widget); + } else { + window = parent; +@@ -336,12 +421,8 @@ void moz_container_size_allocate(GtkWidg + + g_return_if_fail(IS_MOZ_CONTAINER(widget)); + +- /* printf("moz_container_size_allocate %p %d %d %d %d\n", +- (void *)widget, +- allocation->x, +- allocation->y, +- allocation->width, +- allocation->height); */ ++ LOG(("moz_container_size_allocate() [%p] %d %d %d %d\n", (void *)widget, ++ allocation->x, allocation->y, allocation->width, allocation->height)); + + /* short circuit if you can */ + container = MOZ_CONTAINER(widget); +@@ -487,8 +568,13 @@ static void moz_container_add(GtkContain + + #ifdef MOZ_WAYLAND + struct wl_surface *moz_container_get_wl_surface(MozContainer *container) { ++ LOG(("moz_container_get_wl_surface() [%p] surface %p ready_to_draw %d\n", ++ (void *)container, (void *)container->surface, ++ container->ready_to_draw)); ++ + if (!container->surface) { + if (!container->ready_to_draw) { ++ moz_container_request_parent_frame_callback(container); + return nullptr; + } + GdkDisplay *display = gtk_widget_get_display(GTK_WIDGET(container)); +@@ -526,10 +612,16 @@ struct wl_surface *moz_container_get_wl_ + WaylandDisplayRelease(waylandDisplay); + } + ++ LOG(("moz_container_get_wl_surface() [%p] created surface %p\n", ++ (void *)container, (void *)container->surface)); ++ + return container->surface; + } + + struct wl_egl_window *moz_container_get_wl_egl_window(MozContainer *container) { ++ LOG(("moz_container_get_wl_egl_window() [%p] eglwindow %p\n", ++ (void *)container, (void *)container->eglwindow)); ++ + if (!container->eglwindow) { + wl_surface *surface = moz_container_get_wl_surface(container); + if (!surface) { +@@ -543,6 +635,10 @@ struct wl_egl_window *moz_container_get_ + gdk_window_get_height(window) * scale); + wl_surface_set_buffer_scale(surface, scale); + } ++ ++ LOG(("moz_container_get_wl_egl_window() [%p] created eglwindow %p\n", ++ (void *)container, (void *)container->eglwindow)); ++ + return container->eglwindow; + } + +diff -up firefox-66.0/widget/gtk/mozcontainer.h.old firefox-66.0/widget/gtk/mozcontainer.h +--- firefox-66.0/widget/gtk/mozcontainer.h.old 2019-03-14 23:13:02.000000000 +0100 ++++ firefox-66.0/widget/gtk/mozcontainer.h 2019-03-15 13:23:59.366840324 +0100 +@@ -9,6 +9,7 @@ + #define __MOZ_CONTAINER_H__ + + #include ++#include + + /* + * MozContainer +@@ -76,8 +77,10 @@ struct _MozContainer { + struct wl_subsurface *subsurface; + struct wl_egl_window *eglwindow; + struct wl_callback *frame_callback_handler; ++ int frame_callback_handler_surface_id; + gboolean surface_needs_clear; + gboolean ready_to_draw; ++ std::function inital_draw_cb; + #endif + gboolean force_default_visual; + }; +@@ -100,6 +103,8 @@ gboolean moz_container_has_wl_egl_window + gboolean moz_container_surface_needs_clear(MozContainer *container); + void moz_container_scale_changed(MozContainer *container, + GtkAllocation *aAllocation); ++void moz_container_set_initial_draw_callback( ++ MozContainer *container, std::function inital_draw_cb); + #endif + + #endif /* __MOZ_CONTAINER_H__ */ diff --git a/sources b/sources index 9a966a8..ed9917b 100644 --- a/sources +++ b/sources @@ -1,3 +1,3 @@ SHA512 (cbindgen-vendor.tar.xz) = b6737ca86e6223bb9e25861dae05e18469aecbeaa74d0d24719f531b01c74b9a00d9ba4e7faf6366e98cb7f0bdbeedfc337b739fff60bb3d22faabe9751f7ded -SHA512 (firefox-66.0.source.tar.xz) = 8200c887ea9e05a7fac6e964de34b293b20af4e2e3e10bc664adc4204fd54d97b8d560665e1c7a2d93df58b424f8bdd88c927b4bf95351f56124b24f811640dd -SHA512 (firefox-langpacks-66.0-20190312.tar.xz) = 243ae8d15c91fdc80ffa87e4586ac345ef60bb0a8e06afebeed7bc18b02c7302845961afee4c1d8684bcf9fed42f175b641f9b4053653dd000750f430a57d3ff +SHA512 (firefox-66.0.source.tar.xz) = a9a13d9c42d4adc05e9783345eb9737c26c009cea3e79d1fc3332f4a55515152b48c3e1a01f44eac6b6f4fc4e076203934380a10d018c17fa225c1df71c6fe63 +SHA512 (firefox-langpacks-66.0-20190315.tar.xz) = 5b2bc553b6adb2f95705089b093567798ab806abd5b73218a33428079edb7a89870e5a53d4b31cbe7e1f3ee7dd58ec04982601872bd45598168fb49311213941