# HG changeset patch # User Wolfgang Rosenauer # Date 1535036344 -7200 # Node ID 3f18b0f2a868ee9bcc792361c97689d3170076e3 # Parent 5ce9d1f6be4154f1f318fc21c4f14ad32c63a8ab# Parent 33c6119b5cc5c5482247841a304da3166d45301b merge from firefox61 and specify next beta cycle diff -r 5ce9d1f6be41 -r 3f18b0f2a868 MozillaFirefox/MozillaFirefox.changes --- a/MozillaFirefox/MozillaFirefox.changes Sat Jun 23 09:14:31 2018 +0200 +++ b/MozillaFirefox/MozillaFirefox.changes Thu Aug 23 16:59:04 2018 +0200 @@ -1,16 +1,97 @@ ------------------------------------------------------------------- -Sun Jun 17 06:51:24 UTC 2018 - wr@rosenauer.org - -- update to Firefox 61.0b14 +Thu Aug 23 14:49:41 UTC 2018 - wr@rosenauer.org + +- update to Firefox 62.0b19 +- requires NSS >= 3.38 + +------------------------------------------------------------------- +Thu Aug 9 14:22:00 UTC 2018 - wr@rosenauer.org + +- update to Firefox 61.0.2 + * Improved website rendering with the Retained Display List feature + enabled (bmo#1474402) + * Fixed broken DevTools panels with certain extensions installed + (bmo#1474379) + * Fixed a crash for users with some accessibility tools enabled + (bmo#1474007) + +------------------------------------------------------------------- +Mon Jul 9 07:22:09 UTC 2018 - astieger@suse.com + +- Mozilla Firefox 61.0.1: + * Fix missing content on the New Tab Page and the Home section of + the Preferences page (bmo#1471375) + * Fixed loss of bookmarks under rare circumstances when upgrading + from Firefox 60 (bmo#1472127) + * Improved playback of Twitch 1080p video streams (bmo#1469257) + * Web pages no longer lose focus when a browser popup window is + opened (bmo#1471415) + * Re-allowed downloading files from FTP sites via the "Save Link + As" option when linked from HTTP pages (bmo#1470295) + * Fixed extensions being unable to override the default homepage + in certain situations (bmo#1466846) + +------------------------------------------------------------------- +Sat Jun 23 07:25:51 UTC 2018 - wr@rosenauer.org + +- update to Firefox 61.0 + * Performance enhancements + * Various improvements for dark theme support will provide a more + consistent experience across the entire Firefox UI + * OpenSearch plugins offered by web pages can now be added from the + page action menu for easier installation + * Improved support for allowing WebExtensions to manage and hide tabs + MFSA 2018-15 (bsc#1098998) + * CVE-2018-12359 (bmo#1459162) + Buffer overflow using computed size of canvas element + * CVE-2018-12360 (bmo#1459693) + Use-after-free when using focus() + * CVE-2018-12361 (bmo#1463244) + Integer overflow in SwizzleData + * CVE-2018-12358 (bmo#1467852) + Same-origin bypass using service worker and redirection + * CVE-2018-12362 (bmo#1452375) + Integer overflow in SSSE3 scaler + * CVE-2018-5156 (bmo#1453127) + Media recorder segmentation fault when track type is changed during capture + * CVE-2018-12363 (bmo#1464784) + Use-after-free when appending DOM nodes + * CVE-2018-12364 (bmo#1436241) + CSRF attacks through 307 redirects and NPAPI plugins + * CVE-2018-12365 (bmo#1459206) + Compromised IPC child process can list local filenames + * CVE-2018-12371 (bmo#1465686) + Integer overflow in Skia library during edge builder allocation + * CVE-2018-12366 (bmo#1464039) + Invalid data handling during QCMS transformations + * CVE-2018-12367 (bmo#1462891) + Timing attack mitigation of PerformanceNavigationTiming + * CVE-2018-12369 (bmo#1454909) + WebExtension security permission checks bypassed by embedded experiments + * CVE-2018-12370 (bmo#1456652) + SameSite cookie protections bypassed when exiting Reader View + * CVE-2018-5186 (bmo#1464872,bmo#1463329,bmo#1419373,bmo#1412882, + bmo#1413033,bmo#1444673,bmo#1454448,bmo#1453505,bmo#1438671) + Memory safety bugs fixed in Firefox 61 + * CVE-2018-5187 (bmo#1461324,bmo#1414829,bmo#1395246,bmo#1467938, + bmo#1461619,bmo#1425930,bmo#1438556,bmo#1454285,bmo#1459568, + bmo#1463884) + Memory safety bugs fixed in Firefox 60 and Firefox ESR 60.1 + * CVE-2018-5188 (bmo#1456189,bmo#1456975,bmo#1465898,bmo#1392739, + bmo#1451297,bmo#1464063,bmo#1437842,bmo#1442722,bmo#1452576, + bmo#1450688,bmo#1458264,bmo#1458270,bmo#1465108,bmo#1464829, + bmo#1464079,bmo#1463494,bmo#1458048) + Memory safety bugs fixed in Firefox 60, Firefox ESR 60.1, and Firefox ESR 52.9 - requires NSS 3.37.3 +- requires python >= 3.5 to build - removed obsolete patches mozilla-i586-DecoderDoctorLogger.patch mozilla-i586-domPrefs.patch mozilla-fix-skia-aarch64.patch mozilla-bmo1375074.patch + mozilla-enable-csd.patch - patch for new no-return warnings (mozilla-no-return.patch) - do not disable system installed locales (mozilla-bmo1464766.patch) -- disabled outdated mozilla-enable-csd.patch temporarily ------------------------------------------------------------------- Fri Jun 8 10:52:13 UTC 2018 - bjorn.lie@gmail.com diff -r 5ce9d1f6be41 -r 3f18b0f2a868 MozillaFirefox/MozillaFirefox.spec --- a/MozillaFirefox/MozillaFirefox.spec Sat Jun 23 09:14:31 2018 +0200 +++ b/MozillaFirefox/MozillaFirefox.spec Thu Aug 23 16:59:04 2018 +0200 @@ -18,13 +18,13 @@ # changed with every update -%define major 60 +%define major 61 %define mainver %major.99 -%define orig_version 61.0 -%define orig_suffix b14 +%define orig_version 62.0 +%define orig_suffix b19 %define update_channel beta %define branding 1 -%define releasedate 20180614135649 +%define releasedate 20180820172315 %define source_prefix firefox-%{orig_version} # PIE, full relro (x86_64 for now) @@ -75,9 +75,10 @@ BuildRequires: libproxy-devel BuildRequires: makeinfo BuildRequires: mozilla-nspr-devel >= 4.19 -BuildRequires: mozilla-nss-devel >= 3.37.3 +BuildRequires: mozilla-nss-devel >= 3.38 BuildRequires: python-devel BuildRequires: python2-xml +BuildRequires: python3 >= 3.5 BuildRequires: rust >= 1.24 BuildRequires: rust-std BuildRequires: startup-notification-devel @@ -158,9 +159,8 @@ Patch6: mozilla-reduce-files-per-UnifiedBindings.patch Patch7: mozilla-aarch64-startup-crash.patch Patch8: mozilla-bmo256180.patch -Patch9: mozilla-enable-csd.patch -Patch10: mozilla-no-return.patch -Patch11: mozilla-bmo1464766.patch +Patch9: mozilla-no-return.patch +Patch10: mozilla-bmo1464766.patch # Firefox/browser Patch101: firefox-kde.patch Patch102: firefox-branded-icons.patch @@ -270,9 +270,8 @@ %endif %patch7 -p1 %patch8 -p1 -#%patch9 -p1 +%patch9 -p1 %patch10 -p1 -%patch11 -p1 # Firefox %patch101 -p1 %patch102 -p1 diff -r 5ce9d1f6be41 -r 3f18b0f2a868 MozillaFirefox/create-tar.sh --- a/MozillaFirefox/create-tar.sh Sat Jun 23 09:14:31 2018 +0200 +++ b/MozillaFirefox/create-tar.sh Thu Aug 23 16:59:04 2018 +0200 @@ -7,9 +7,9 @@ CHANNEL="beta" BRANCH="releases/mozilla-$CHANNEL" -RELEASE_TAG="FIREFOX_61_0b14_RELEASE" -VERSION="61.0" -VERSION_SUFFIX="b14" +RELEASE_TAG="FIREFOX_62_0b19_RELEASE" +VERSION="62.0" +VERSION_SUFFIX="b19" LOCALE_FILE="firefox-$VERSION/browser/locales/l10n-changesets.json" # check required tools diff -r 5ce9d1f6be41 -r 3f18b0f2a868 MozillaFirefox/mozilla-enable-csd.patch --- a/MozillaFirefox/mozilla-enable-csd.patch Sat Jun 23 09:14:31 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -../mozilla-enable-csd.patch \ No newline at end of file diff -r 5ce9d1f6be41 -r 3f18b0f2a868 MozillaFirefox/source-stamp.txt --- a/MozillaFirefox/source-stamp.txt Sat Jun 23 09:14:31 2018 +0200 +++ b/MozillaFirefox/source-stamp.txt Thu Aug 23 16:59:04 2018 +0200 @@ -1,2 +1,2 @@ -REV=585281dde960 +REV=10e2940b1bde REPO=http://hg.mozilla.org/releases/mozilla-beta diff -r 5ce9d1f6be41 -r 3f18b0f2a868 mozilla-enable-csd.patch --- a/mozilla-enable-csd.patch Sat Jun 23 09:14:31 2018 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,614 +0,0 @@ -This is a composition of these patches for Firefox 60: - -https://bugzilla.mozilla.org/show_bug.cgi?id=1441873 -https://bugzilla.mozilla.org/show_bug.cgi?id=1441665 -https://bugzilla.mozilla.org/show_bug.cgi?id=1456898 -https://bugzilla.mozilla.org/show_bug.cgi?id=1457309 -https://bugzilla.mozilla.org/show_bug.cgi?id=1457691 - -which fix popup window placement at CSD window mode. - - -diff --git a/widget/gtk/nsLookAndFeel.cpp b/widget/gtk/nsLookAndFeel.cpp ---- a/widget/gtk/nsLookAndFeel.cpp -+++ b/widget/gtk/nsLookAndFeel.cpp -@@ -1076,19 +1076,18 @@ nsLookAndFeel::EnsureInit() - nullptr); - - GetSystemFontInfo(gtk_widget_get_style_context(entry), - &mFieldFontName, &mFieldFontStyle); - - gtk_widget_destroy(window); - g_object_unref(labelWidget); - -- // Require GTK 3.10 for GtkHeaderBar support and compatible window manager. -- mCSDAvailable = (gtk_check_version(3, 10, 0) == nullptr && -- nsWindow::GetCSDSupportLevel() != nsWindow::CSD_SUPPORT_NONE); -+ mCSDAvailable = -+ nsWindow::GetSystemCSDSupportLevel() != nsWindow::CSD_SUPPORT_NONE; - - mCSDCloseButton = false; - mCSDMinimizeButton = false; - mCSDMaximizeButton = false; - - // We need to initialize whole CSD config explicitly because it's queried - // as -moz-gtk* media features. - WidgetNodeType buttonLayout[TOOLBAR_BUTTONS]; -diff --git a/widget/gtk/nsWindow.h b/widget/gtk/nsWindow.h ---- a/widget/gtk/nsWindow.h -+++ b/widget/gtk/nsWindow.h -@@ -395,28 +395,26 @@ public: - // From GDK - int GdkCoordToDevicePixels(gint coord); - LayoutDeviceIntPoint GdkPointToDevicePixels(GdkPoint point); - LayoutDeviceIntPoint GdkEventCoordsToDevicePixels(gdouble x, gdouble y); - LayoutDeviceIntRect GdkRectToDevicePixels(GdkRectangle rect); - - virtual bool WidgetTypeSupportsAcceleration() override; - -- bool DoDrawTitlebar() const; -- - typedef enum { CSD_SUPPORT_SYSTEM, // CSD including shadows - CSD_SUPPORT_CLIENT, // CSD without shadows - CSD_SUPPORT_NONE, // WM does not support CSD at all - CSD_SUPPORT_UNKNOWN - } CSDSupportLevel; - /** - * Get the support of Client Side Decoration by checking - * the XDG_CURRENT_DESKTOP environment variable. - */ -- static CSDSupportLevel GetCSDSupportLevel(); -+ static CSDSupportLevel GetSystemCSDSupportLevel(); - - protected: - virtual ~nsWindow(); - - // event handling code - void DispatchActivateEvent(void); - void DispatchDeactivateEvent(void); - void DispatchResized(); -@@ -512,19 +510,21 @@ private: - int mXDepth; - mozilla::widget::WindowSurfaceProvider mSurfaceProvider; - #endif - - // Upper bound on pending ConfigureNotify events to be dispatched to the - // window. See bug 1225044. - unsigned int mPendingConfigures; - -- bool mIsCSDAvailable; -+ // Window titlebar rendering mode, CSD_SUPPORT_NONE if it's disabled -+ // for this window. -+ CSDSupportLevel mCSDSupportLevel; - // If true, draw our own window titlebar. -- bool mIsCSDEnabled; -+ bool mDrawInTitlebar; - // Draggable titlebar region maintained by UpdateWindowDraggingRegion - LayoutDeviceIntRegion mDraggableRegion; - - #ifdef ACCESSIBILITY - RefPtr mRootAccessible; - - /** - * Request to create the accessible for this window if it is top level. - -diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp ---- a/widget/gtk/nsWindow.cpp -+++ b/widget/gtk/nsWindow.cpp -@@ -474,18 +474,18 @@ nsWindow::nsWindow() - - mTransparencyBitmapWidth = 0; - mTransparencyBitmapHeight = 0; - - #if GTK_CHECK_VERSION(3,4,0) - mLastScrollEventTime = GDK_CURRENT_TIME; - #endif - mPendingConfigures = 0; -- mIsCSDAvailable = false; -- mIsCSDEnabled = false; -+ mCSDSupportLevel = CSD_SUPPORT_NONE; -+ mDrawInTitlebar = false; - } - - nsWindow::~nsWindow() - { - LOG(("nsWindow::~nsWindow() [%p]\n", (void *)this)); - - delete[] mTransparencyBitmap; - mTransparencyBitmap = nullptr; -@@ -2814,17 +2814,17 @@ nsWindow::OnButtonReleaseEvent(GdkEventB - LayoutDeviceIntPoint pos = event.mRefPoint; - - nsEventStatus eventStatus = DispatchInputEvent(&event); - - bool defaultPrevented = (eventStatus == nsEventStatus_eConsumeNoDefault); - // Check if mouse position in titlebar and doubleclick happened to - // trigger restore/maximize. - if (!defaultPrevented -- && mIsCSDEnabled -+ && mDrawInTitlebar - && event.button == WidgetMouseEvent::eLeftButton - && event.mClickCount == 2 - && mDraggableRegion.Contains(pos.x, pos.y)) { - - if (mSizeState == nsSizeMode_Maximized) { - SetSizeMode(nsSizeMode_Normal); - } else { - SetSizeMode(nsSizeMode_Maximized); -@@ -3758,22 +3758,18 @@ nsWindow::Create(nsIWidget* aParent, - gtk_window_set_wmclass(GTK_WINDOW(mShell), "Toplevel", - gdk_get_program_class()); - - // each toplevel window gets its own window group - GtkWindowGroup *group = gtk_window_group_new(); - gtk_window_group_add_window(group, GTK_WINDOW(mShell)); - g_object_unref(group); - -- int32_t isCSDAvailable = false; -- nsresult rv = LookAndFeel::GetInt(LookAndFeel::eIntID_GTKCSDAvailable, -- &isCSDAvailable); -- if (NS_SUCCEEDED(rv)) { -- mIsCSDAvailable = isCSDAvailable; -- } -+ // We enable titlebar rendering for toplevel windows only. -+ mCSDSupportLevel = GetSystemCSDSupportLevel(); - } - - // Create a container to hold child windows and child GtkWidgets. - GtkWidget *container = moz_container_new(); - mContainer = MOZ_CONTAINER(container); - - // "csd" style is set when widget is realized so we need to call - // it explicitly now. -@@ -3788,17 +3784,17 @@ nsWindow::Create(nsIWidget* aParent, - * are drawn by Gtk+ to mShell. Content is rendered to mContainer - * and we listen to the Gtk+ events on mContainer. - * 3) We're running on Wayland. All gecko content is rendered - * to mContainer and we listen to the Gtk+ events on mContainer. - */ - GtkStyleContext* style = gtk_widget_get_style_context(mShell); - drawToContainer = - !mIsX11Display || -- (mIsCSDAvailable && GetCSDSupportLevel() == CSD_SUPPORT_CLIENT) || -+ (mCSDSupportLevel == CSD_SUPPORT_CLIENT) || - gtk_style_context_has_class(style, "csd"); - eventWidget = (drawToContainer) ? container : mShell; - - gtk_widget_add_events(eventWidget, kEvents); - if (drawToContainer) - gtk_widget_add_events(mShell, GDK_PROPERTY_CHANGE_MASK); - - // Prevent GtkWindow from painting a background to avoid flickering. -@@ -6581,90 +6577,91 @@ nsWindow::ClearCachedResources() - window->ClearCachedResources(); - } - } - } - - nsresult - nsWindow::SetNonClientMargins(LayoutDeviceIntMargin &aMargins) - { -- SetDrawsInTitlebar(aMargins.top == 0); -- return NS_OK; -+ SetDrawsInTitlebar(aMargins.top == 0); -+ return NS_OK; - } - - void - nsWindow::SetDrawsInTitlebar(bool aState) - { -- if (!mIsCSDAvailable || aState == mIsCSDEnabled) -- return; -- -- if (mShell) { -- if (GetCSDSupportLevel() == CSD_SUPPORT_SYSTEM) { -- SetWindowDecoration(aState ? eBorderStyle_border : mBorderStyle); -- } -- else { -- /* Window manager does not support GDK_DECOR_BORDER, -- * emulate it by CSD. -- * -- * gtk_window_set_titlebar() works on unrealized widgets only, -- * we need to handle mShell carefully here. -- * When CSD is enabled mGdkWindow is owned by mContainer which is good -- * as we can't delete our mGdkWindow. To make mShell unrealized while -- * mContainer is preserved we temporary reparent mContainer to an -- * invisible GtkWindow. -- */ -- NativeShow(false); -- -- // Using GTK_WINDOW_POPUP rather than -- // GTK_WINDOW_TOPLEVEL in the hope that POPUP results in less -- // initialization and window manager interaction. -- GtkWidget* tmpWindow = gtk_window_new(GTK_WINDOW_POPUP); -- gtk_widget_realize(tmpWindow); -- -- gtk_widget_reparent(GTK_WIDGET(mContainer), tmpWindow); -- gtk_widget_unrealize(GTK_WIDGET(mShell)); -- -- // Available as of GTK 3.10+ -- static auto sGtkWindowSetTitlebar = (void (*)(GtkWindow*, GtkWidget*)) -- dlsym(RTLD_DEFAULT, "gtk_window_set_titlebar"); -- MOZ_ASSERT(sGtkWindowSetTitlebar, -- "Missing gtk_window_set_titlebar(), old Gtk+ library?"); -- -- if (aState) { -- // Add a hidden titlebar widget to trigger CSD, but disable the default -- // titlebar. GtkFixed is a somewhat random choice for a simple unused -- // widget. gtk_window_set_titlebar() takes ownership of the titlebar -- // widget. -- sGtkWindowSetTitlebar(GTK_WINDOW(mShell), gtk_fixed_new()); -- } else { -- sGtkWindowSetTitlebar(GTK_WINDOW(mShell), nullptr); -- } -- -- /* A workaround for https://bugzilla.gnome.org/show_bug.cgi?id=791081 -- * gtk_widget_realize() throws: -- * "In pixman_region32_init_rect: Invalid rectangle passed" -- * when mShell has default 1x1 size. -- */ -- GtkAllocation allocation = {0, 0, 0, 0}; -- gtk_widget_get_preferred_width(GTK_WIDGET(mShell), nullptr, -- &allocation.width); -- gtk_widget_get_preferred_height(GTK_WIDGET(mShell), nullptr, -- &allocation.height); -- gtk_widget_size_allocate(GTK_WIDGET(mShell), &allocation); -- -- gtk_widget_realize(GTK_WIDGET(mShell)); -- gtk_widget_reparent(GTK_WIDGET(mContainer), GTK_WIDGET(mShell)); -- mNeedsShow = true; -- NativeResize(); -- -- gtk_widget_destroy(tmpWindow); -- } -- } -- -- mIsCSDEnabled = aState; -+ if (!mShell || -+ mCSDSupportLevel == CSD_SUPPORT_NONE || -+ aState == mDrawInTitlebar) { -+ return; -+ } -+ -+ if (mCSDSupportLevel == CSD_SUPPORT_SYSTEM) { -+ SetWindowDecoration(aState ? eBorderStyle_border : mBorderStyle); -+ } -+ else if (mCSDSupportLevel == CSD_SUPPORT_CLIENT) { -+ /* Window manager does not support GDK_DECOR_BORDER, -+ * emulate it by CSD. -+ * -+ * gtk_window_set_titlebar() works on unrealized widgets only, -+ * we need to handle mShell carefully here. -+ * When CSD is enabled mGdkWindow is owned by mContainer which is good -+ * as we can't delete our mGdkWindow. To make mShell unrealized while -+ * mContainer is preserved we temporary reparent mContainer to an -+ * invisible GtkWindow. -+ */ -+ NativeShow(false); -+ -+ // Using GTK_WINDOW_POPUP rather than -+ // GTK_WINDOW_TOPLEVEL in the hope that POPUP results in less -+ // initialization and window manager interaction. -+ GtkWidget* tmpWindow = gtk_window_new(GTK_WINDOW_POPUP); -+ gtk_widget_realize(tmpWindow); -+ -+ gtk_widget_reparent(GTK_WIDGET(mContainer), tmpWindow); -+ gtk_widget_unrealize(GTK_WIDGET(mShell)); -+ -+ // Available as of GTK 3.10+ -+ static auto sGtkWindowSetTitlebar = (void (*)(GtkWindow*, GtkWidget*)) -+ dlsym(RTLD_DEFAULT, "gtk_window_set_titlebar"); -+ MOZ_ASSERT(sGtkWindowSetTitlebar, -+ "Missing gtk_window_set_titlebar(), old Gtk+ library?"); -+ -+ if (aState) { -+ // Add a hidden titlebar widget to trigger CSD, but disable the default -+ // titlebar. GtkFixed is a somewhat random choice for a simple unused -+ // widget. gtk_window_set_titlebar() takes ownership of the titlebar -+ // widget. -+ sGtkWindowSetTitlebar(GTK_WINDOW(mShell), gtk_fixed_new()); -+ } else { -+ sGtkWindowSetTitlebar(GTK_WINDOW(mShell), nullptr); -+ } -+ -+ /* A workaround for https://bugzilla.gnome.org/show_bug.cgi?id=791081 -+ * gtk_widget_realize() throws: -+ * "In pixman_region32_init_rect: Invalid rectangle passed" -+ * when mShell has default 1x1 size. -+ */ -+ GtkAllocation allocation = {0, 0, 0, 0}; -+ gtk_widget_get_preferred_width(GTK_WIDGET(mShell), nullptr, -+ &allocation.width); -+ gtk_widget_get_preferred_height(GTK_WIDGET(mShell), nullptr, -+ &allocation.height); -+ gtk_widget_size_allocate(GTK_WIDGET(mShell), &allocation); -+ -+ gtk_widget_realize(GTK_WIDGET(mShell)); -+ gtk_widget_reparent(GTK_WIDGET(mContainer), GTK_WIDGET(mShell)); -+ mNeedsShow = true; -+ NativeResize(); -+ -+ gtk_widget_destroy(tmpWindow); -+ } -+ -+ mDrawInTitlebar = aState; - } - - gint - nsWindow::GdkScaleFactor() - { - #if (MOZ_WIDGET_GTK >= 3) - // Available as of GTK 3.10+ - static auto sGdkWindowGetScaleFactorPtr = (gint (*)(GdkWindow*)) -@@ -6923,28 +6920,28 @@ nsWindow::SynthesizeNativeTouchPoint(uin - event.touch.y = DevicePixelsToGdkCoordRoundDown(pointInWindow.y); - - gdk_event_put(&event); - - return NS_OK; - } - #endif - --bool --nsWindow::DoDrawTitlebar() const --{ -- return mIsCSDEnabled && mSizeState == nsSizeMode_Normal; --} -- - nsWindow::CSDSupportLevel --nsWindow::GetCSDSupportLevel() { -+nsWindow::GetSystemCSDSupportLevel() { - if (sCSDSupportLevel != CSD_SUPPORT_UNKNOWN) { - return sCSDSupportLevel; - } - -+ // Require GTK 3.10 for GtkHeaderBar support and compatible window manager. -+ if (gtk_check_version(3, 10, 0) != nullptr) { -+ sCSDSupportLevel = CSD_SUPPORT_NONE; -+ return sCSDSupportLevel; -+ } -+ - const char* currentDesktop = getenv("XDG_CURRENT_DESKTOP"); - if (currentDesktop) { - // GNOME Flashback (fallback) - if (strstr(currentDesktop, "GNOME-Flashback:GNOME") != nullptr) { - sCSDSupportLevel = CSD_SUPPORT_CLIENT; - // gnome-shell - } else if (strstr(currentDesktop, "GNOME") != nullptr) { - sCSDSupportLevel = CSD_SUPPORT_SYSTEM; -diff -up firefox-60.0/widget/gtk/gtk3drawing.cpp.orig firefox-60.0/widget/gtk/gtk3drawing.cpp ---- firefox-60.0/widget/gtk/gtk3drawing.cpp.orig 2018-04-26 22:07:36.000000000 +0200 -+++ firefox-60.0/widget/gtk/gtk3drawing.cpp 2018-04-30 13:38:19.083949868 +0200 -@@ -38,6 +38,16 @@ static ToolbarGTKMetrics sToolbarMetrics - #define GTK_STATE_FLAG_CHECKED (1 << 11) - #endif - -+static GtkBorder -+operator+=(GtkBorder& first, const GtkBorder& second) -+{ -+ first.left += second.left; -+ first.right += second.right; -+ first.top += second.top; -+ first.bottom += second.bottom; -+ return first; -+} -+ - static gint - moz_gtk_get_tab_thickness(GtkStyleContext *style); - -@@ -3056,6 +3066,76 @@ GetScrollbarMetrics(GtkOrientation aOrie - return metrics; - } - -+/* -+ * get_shadow_width() from gtkwindow.c is not public so we need -+ * to implement it. -+ */ -+bool -+GetCSDDecorationSize(GtkWindow *aGtkWindow, GtkBorder* aDecorationSize) -+{ -+ GtkStyleContext* context = gtk_widget_get_style_context(GTK_WIDGET(aGtkWindow)); -+ bool solidDecorations = gtk_style_context_has_class(context, "solid-csd"); -+ context = GetStyleContext(solidDecorations ? -+ MOZ_GTK_WINDOW_DECORATION_SOLID : -+ MOZ_GTK_WINDOW_DECORATION); -+ -+ /* Always sum border + padding */ -+ GtkBorder padding; -+ GtkStateFlags state = gtk_style_context_get_state(context); -+ gtk_style_context_get_border(context, state, aDecorationSize); -+ gtk_style_context_get_padding(context, state, &padding); -+ *aDecorationSize += padding; -+ -+ // Available on GTK 3.20+. -+ static auto sGtkRenderBackgroundGetClip = -+ (void (*)(GtkStyleContext*, gdouble, gdouble, gdouble, gdouble, GdkRectangle*)) -+ dlsym(RTLD_DEFAULT, "gtk_render_background_get_clip"); -+ -+ GtkBorder margin; -+ gtk_style_context_get_margin(context, state, &margin); -+ -+ GtkBorder extents = {0, 0, 0, 0}; -+ if (sGtkRenderBackgroundGetClip) { -+ /* Get shadow extents but combine with style margin; use the bigger value. -+ */ -+ GdkRectangle clip; -+ sGtkRenderBackgroundGetClip(context, 0, 0, 0, 0, &clip); -+ -+ extents.top = -clip.y; -+ extents.right = clip.width + clip.x; -+ extents.bottom = clip.height + clip.y; -+ extents.left = -clip.x; -+ -+ // Margin is used for resize grip size - it's not present on -+ // popup windows. -+ if (gtk_window_get_window_type(aGtkWindow) != GTK_WINDOW_POPUP) { -+ extents.top = MAX(extents.top, margin.top); -+ extents.right = MAX(extents.right, margin.right); -+ extents.bottom = MAX(extents.bottom, margin.bottom); -+ extents.left = MAX(extents.left, margin.left); -+ } -+ } else { -+ /* If we can't get shadow extents use decoration-resize-handle instead -+ * as a workaround. This is inspired by update_border_windows() -+ * from gtkwindow.c although this is not 100% accurate as we emulate -+ * the extents here. -+ */ -+ gint handle; -+ gtk_widget_style_get(GetWidget(MOZ_GTK_WINDOW), -+ "decoration-resize-handle", &handle, -+ NULL); -+ -+ extents.top = handle + margin.top; -+ extents.right = handle + margin.right; -+ extents.bottom = handle + margin.bottom; -+ extents.left = handle + margin.left; -+ } -+ -+ *aDecorationSize += extents; -+ -+ return (sGtkRenderBackgroundGetClip != nullptr); -+} -+ - /* cairo_t *cr argument has to be a system-cairo. */ - gint - moz_gtk_widget_paint(WidgetNodeType widget, cairo_t *cr, -diff -up firefox-60.0/widget/gtk/gtkdrawing.h.orig firefox-60.0/widget/gtk/gtkdrawing.h ---- firefox-60.0/widget/gtk/gtkdrawing.h.orig 2018-04-26 22:07:35.000000000 +0200 -+++ firefox-60.0/widget/gtk/gtkdrawing.h 2018-04-30 13:38:19.083949868 +0200 -@@ -334,6 +334,10 @@ typedef enum { - */ - MOZ_GTK_HEADER_BAR_BUTTON_MAXIMIZE_RESTORE, - -+ /* Client-side window decoration node. Available on GTK 3.20+. */ -+ MOZ_GTK_WINDOW_DECORATION, -+ MOZ_GTK_WINDOW_DECORATION_SOLID, -+ - MOZ_GTK_WIDGET_NODE_COUNT - } WidgetNodeType; - -@@ -606,4 +610,17 @@ GetToolbarButtonMetrics(WidgetNodeType a - int - GetGtkHeaderBarButtonLayout(WidgetNodeType* aButtonLayout, int aMaxButtonNums); - -+/** -+ * Get size of CSD window extents of given GtkWindow. -+ * -+ * aGtkWindow [IN] Decorated window. -+ * aDecorationSize [OUT] Returns calculated (or estimated) decoration -+ * size of given aGtkWindow. -+ * -+ * returns: True if we have extract decoration size (for GTK 3.20+) -+ * False if we have only an estimation (for GTK+ before 3.20+) -+ */ -+bool -+GetCSDDecorationSize(GtkWindow *aGtkWindow, GtkBorder* aDecorationSize); -+ - #endif -diff -up firefox-60.0/widget/gtk/nsWindow.cpp.orig firefox-60.0/widget/gtk/nsWindow.cpp ---- firefox-60.0/widget/gtk/nsWindow.cpp.orig 2018-04-30 13:37:32.145122854 +0200 -+++ firefox-60.0/widget/gtk/nsWindow.cpp 2018-04-30 13:39:12.593752681 +0200 -@@ -127,6 +127,7 @@ using namespace mozilla::widget; - #endif - - #include "nsShmImage.h" -+#include "gtkdrawing.h" - - #include "nsIDOMWheelEvent.h" - -@@ -3360,6 +3361,10 @@ nsWindow::OnWindowStateEvent(GtkWidget * - aEvent->new_window_state & GDK_WINDOW_STATE_FULLSCREEN); - } - } -+ -+ if (mDrawInTitlebar && mCSDSupportLevel == CSD_SUPPORT_CLIENT) { -+ UpdateClientOffsetForCSDWindow(); -+ } - } - - void -@@ -6552,6 +6557,32 @@ nsWindow::ClearCachedResources() - } - } - -+/* nsWindow::UpdateClientOffsetForCSDWindow() is designed to be called from -+ * paint code to update mClientOffset any time. It also propagates -+ * the mClientOffset to child tabs. -+ * -+ * It works only for CSD decorated GtkWindow. -+ */ -+void -+nsWindow::UpdateClientOffsetForCSDWindow() -+{ -+ // _NET_FRAME_EXTENTS is not set on client decorated windows, -+ // so we need to read offset between mContainer and toplevel mShell -+ // window. -+ if (mSizeState == nsSizeMode_Normal) { -+ GtkBorder decorationSize; -+ GetCSDDecorationSize(GTK_WINDOW(mShell), &decorationSize); -+ mClientOffset = nsIntPoint(decorationSize.left, decorationSize.top); -+ } else { -+ mClientOffset = nsIntPoint(0, 0); -+ } -+ -+ // Send a WindowMoved notification. This ensures that TabParent -+ // picks up the new client offset and sends it to the child process -+ // if appropriate. -+ NotifyWindowMoved(mBounds.x, mBounds.y); -+} -+ - nsresult - nsWindow::SetNonClientMargins(LayoutDeviceIntMargin &aMargins) - { -@@ -6626,6 +6657,13 @@ nsWindow::SetDrawsInTitlebar(bool aState - mNeedsShow = true; - NativeResize(); - -+ // When we use system titlebar setup managed by Gtk+ we also get -+ // _NET_FRAME_EXTENTS property for our toplevel window so we can't -+ // update the client offset it here. -+ if (aState) { -+ UpdateClientOffsetForCSDWindow(); -+ } -+ - gtk_widget_destroy(tmpWindow); - } - -diff -up firefox-60.0/widget/gtk/nsWindow.h.orig firefox-60.0/widget/gtk/nsWindow.h ---- firefox-60.0/widget/gtk/nsWindow.h.orig 2018-04-30 13:37:32.143122861 +0200 -+++ firefox-60.0/widget/gtk/nsWindow.h 2018-04-30 13:38:19.085949861 +0200 -@@ -454,6 +454,8 @@ private: - nsIWidgetListener* GetListener(); - bool IsComposited() const; - -+ void UpdateClientOffsetForCSDWindow(); -+ - GtkWidget *mShell; - MozContainer *mContainer; - GdkWindow *mGdkWindow; -diff -up firefox-60.0/widget/gtk/WidgetStyleCache.cpp.orig firefox-60.0/widget/gtk/WidgetStyleCache.cpp ---- firefox-60.0/widget/gtk/WidgetStyleCache.cpp.orig 2018-04-26 22:07:35.000000000 +0200 -+++ firefox-60.0/widget/gtk/WidgetStyleCache.cpp 2018-04-30 13:38:19.085949861 +0200 -@@ -1285,6 +1285,22 @@ GetCssNodeStyleInternal(WidgetNodeType a - "MOZ_GTK_HEADER_BAR_BUTTON_RESTORE is used as an icon only!"); - return nullptr; - } -+ case MOZ_GTK_WINDOW_DECORATION: -+ { -+ GtkStyleContext* parentStyle = -+ CreateSubStyleWithClass(MOZ_GTK_WINDOW, "csd"); -+ style = CreateCSSNode("decoration", parentStyle); -+ g_object_unref(parentStyle); -+ break; -+ } -+ case MOZ_GTK_WINDOW_DECORATION_SOLID: -+ { -+ GtkStyleContext* parentStyle = -+ CreateSubStyleWithClass(MOZ_GTK_WINDOW, "solid-csd"); -+ style = CreateCSSNode("decoration", parentStyle); -+ g_object_unref(parentStyle); -+ break; -+ } - default: - return GetWidgetRootStyle(aNodeType); - } diff -r 5ce9d1f6be41 -r 3f18b0f2a868 series --- a/series Sat Jun 23 09:14:31 2018 +0200 +++ b/series Thu Aug 23 16:59:04 2018 +0200 @@ -9,7 +9,6 @@ mozilla-bmo256180.patch mozilla-no-return.patch mozilla-bmo1464766.patch -#mozilla-enable-csd.patch # Firefox patches firefox-kde.patch