Title: [255350] releases/WebKitGTK/webkit-2.26
Revision
255350
Author
carlo...@webkit.org
Date
2020-01-29 02:38:43 -0800 (Wed, 29 Jan 2020)

Log Message

[GTK] Should use light theme unless website declares support for dark themes in color-schemes property
https://bugs.webkit.org/show_bug.cgi?id=197947

Reviewed by Michael Catanzaro.

.:

Do not define HAVE_OS_DARK_MODE_SUPPORT.

* Source/cmake/OptionsGTK.cmake:

Source/WebCore:

* dom/Document.cpp:
(WebCore::Document::useDarkAppearance const): Remove HAVE(OS_DARK_MODE_SUPPORT) because ENABLE(DARK_MODE_CSS)
guards should be enough.
* page/FrameView.cpp:
(WebCore::FrameView::updateBackgroundRecursively): Revert changes made in r244635.
* page/Page.cpp:
(WebCore::Page::effectiveAppearanceDidChange): Use ENABLE(DARK_MODE_CSS) instead of HAVE(OS_DARK_MODE_SUPPORT).
(WebCore::Page::useDarkAppearance const): Ditto.
* rendering/RenderThemeGtk.cpp:
(WebCore::RenderThemeGtk::systemColor const): Revert changes made in r244635.
* rendering/RenderThemeGtk.h:
* testing/InternalSettings.cpp:
(WebCore::InternalSettings::setUseDarkAppearanceInternal): Revert changes made in r244635.

Source/WebKit:

Handle the theme changes in the UI process, converting dark variant to the light one before sending the theme
name to the web process. The web process is still notified when a dark theme is in use, so that if website
prefers a dark color scheme it will be used, but the gtk theme that will be used for controls styling will
always be light.

* Shared/WebPageCreationParameters.cpp:
(WebKit::WebPageCreationParameters::encode const): Encode themeName.
(WebKit::WebPageCreationParameters::decode): Decode themeName.
* Shared/WebPageCreationParameters.h:
* UIProcess/API/gtk/PageClientImpl.cpp:
(WebKit::PageClientImpl::themeName const): Get the theme name that should be used by the web process.
* UIProcess/API/gtk/PageClientImpl.h:
* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(themeChanged): Call WebPageProxy::themeDidChange().
(applicationPreferDarkThemeChanged):
(webkitWebViewBaseSetToplevelOnScreenWindow): Use a different callback for the theme name change.
* UIProcess/PageClient.h:
* UIProcess/WebPageProxy.cpp:
* UIProcess/WebPageProxy.h:
* UIProcess/gtk/WebPageProxyGtk.cpp:
(WebKit::WebPageProxy::themeDidChange): Send ThemeDidChange message to the web process with the theme name to use.
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::WebPage): Initialize the theme name.
(WebKit::WebPage::effectiveAppearanceDidChange): Use this now for GTK port too.
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in: Add ThemeDidChange message.
* WebProcess/WebPage/gtk/WebPageGtk.cpp:
(WebKit::WebPage::themeDidChange): Set the theme given name in gtk settings.
* WebProcess/gtk/WebProcessMainGtk.cpp:

Source/WTF:

Do not define HAVE_OS_DARK_MODE_SUPPORT for the GTK port.

* wtf/PlatformHave.h:

LayoutTests:

Rebaseline several tests for the new behavior.

* platform/gtk/css-dark-mode/color-scheme-priority-expected.txt: Added.
* platform/gtk/css-dark-mode/default-colors-expected.txt:
* platform/gtk/css-dark-mode/prefers-color-scheme-expected.txt:

Modified Paths

Added Paths

Diff

Modified: releases/WebKitGTK/webkit-2.26/ChangeLog (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/ChangeLog	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/ChangeLog	2020-01-29 10:38:43 UTC (rev 255350)
@@ -1,3 +1,14 @@
+2020-01-28  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Should use light theme unless website declares support for dark themes in color-schemes property
+        https://bugs.webkit.org/show_bug.cgi?id=197947
+
+        Reviewed by Michael Catanzaro.
+
+        Do not define HAVE_OS_DARK_MODE_SUPPORT.
+
+        * Source/cmake/OptionsGTK.cmake:
+
 2020-01-23  Adrian Perez de Castro  <ape...@igalia.com>
 
         Unreviewed. Update OptionsWPE.cmake and NEWS for the 2.26.3 release

Modified: releases/WebKitGTK/webkit-2.26/LayoutTests/ChangeLog (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/LayoutTests/ChangeLog	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/LayoutTests/ChangeLog	2020-01-29 10:38:43 UTC (rev 255350)
@@ -1,3 +1,16 @@
+2020-01-28  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Should use light theme unless website declares support for dark themes in color-schemes property
+        https://bugs.webkit.org/show_bug.cgi?id=197947
+
+        Reviewed by Michael Catanzaro.
+
+        Rebaseline several tests for the new behavior.
+
+        * platform/gtk/css-dark-mode/color-scheme-priority-expected.txt: Added.
+        * platform/gtk/css-dark-mode/default-colors-expected.txt:
+        * platform/gtk/css-dark-mode/prefers-color-scheme-expected.txt:
+
 2020-01-07  Fujii Hironori  <fujii.hiron...@gmail.com>
 
         [GTK] fast/text/atsui-rtl-override-selection.html is failing since r254114

Added: releases/WebKitGTK/webkit-2.26/LayoutTests/platform/gtk/css-dark-mode/color-scheme-priority-expected.txt (0 => 255350)


--- releases/WebKitGTK/webkit-2.26/LayoutTests/platform/gtk/css-dark-mode/color-scheme-priority-expected.txt	                        (rev 0)
+++ releases/WebKitGTK/webkit-2.26/LayoutTests/platform/gtk/css-dark-mode/color-scheme-priority-expected.txt	2020-01-29 10:38:43 UTC (rev 255350)
@@ -0,0 +1,5 @@
+
+PASS Element colors are correct in light color scheme with light and dark color scheme 
+PASS Dark color scheme enabled 
+FAIL Element colors are correct in dark color scheme with light and dark color scheme assert_equals: expected "rgb(255, 255, 255)" but got "rgb(0, 0, 0)"
+

Modified: releases/WebKitGTK/webkit-2.26/LayoutTests/platform/gtk/css-dark-mode/default-colors-expected.txt (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/LayoutTests/platform/gtk/css-dark-mode/default-colors-expected.txt	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/LayoutTests/platform/gtk/css-dark-mode/default-colors-expected.txt	2020-01-29 10:38:43 UTC (rev 255350)
@@ -2,9 +2,9 @@
 PASS Body text color is black, since the page isn't in dark mode 
 PASS View base background color is white, since the page isn't in dark mode 
 PASS Set dark appearance 
-FAIL Body text color is black, since the page hasn't set a supported color scheme assert_equals: expected "rgb(0, 0, 0)" but got "rgb(255, 255, 255)"
+PASS Body text color is black, since the page hasn't set a supported color scheme 
 PASS View base background color is white, since the page hasn't set a supported color scheme 
 PASS Set prefers-color-schemes: light dark on the body 
-PASS Body text color is white 
-FAIL View base background color is a dark grey assert_equals: expected "rgb(30, 30, 30)" but got "rgb(51, 57, 59)"
+FAIL Body text color is white assert_equals: expected "rgb(255, 255, 255)" but got "rgb(0, 0, 0)"
+FAIL View base background color is a dark grey assert_equals: expected "rgb(30, 30, 30)" but got "rgb(255, 255, 255)"
 

Modified: releases/WebKitGTK/webkit-2.26/LayoutTests/platform/gtk/css-dark-mode/prefers-color-scheme-expected.txt (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/LayoutTests/platform/gtk/css-dark-mode/prefers-color-scheme-expected.txt	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/LayoutTests/platform/gtk/css-dark-mode/prefers-color-scheme-expected.txt	2020-01-29 10:38:43 UTC (rev 255350)
@@ -2,6 +2,6 @@
 PASS Element colors are correct in light color scheme 
 PASS Element colors are correct in light color scheme with boolean context query 
 PASS Dark color scheme enabled 
-FAIL Element colors are correct in dark color scheme assert_equals: expected "rgb(0, 0, 0)" but got "rgb(255, 255, 255)"
-FAIL Element colors are correct in dark color scheme with boolean context query assert_equals: expected "rgb(0, 0, 0)" but got "rgb(255, 255, 255)"
+PASS Element colors are correct in dark color scheme 
+PASS Element colors are correct in dark color scheme with boolean context query 
 

Modified: releases/WebKitGTK/webkit-2.26/Source/WTF/ChangeLog (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WTF/ChangeLog	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WTF/ChangeLog	2020-01-29 10:38:43 UTC (rev 255350)
@@ -1,3 +1,14 @@
+2020-01-28  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Should use light theme unless website declares support for dark themes in color-schemes property
+        https://bugs.webkit.org/show_bug.cgi?id=197947
+
+        Reviewed by Michael Catanzaro.
+
+        Do not define HAVE_OS_DARK_MODE_SUPPORT for the GTK port.
+
+        * wtf/PlatformHave.h:
+
 2019-10-04  Heiko Becker  <heire...@exherbo.org>
 
         Fix build with icu 65.1

Modified: releases/WebKitGTK/webkit-2.26/Source/WTF/wtf/Platform.h (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WTF/wtf/Platform.h	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WTF/wtf/Platform.h	2020-01-29 10:38:43 UTC (rev 255350)
@@ -1447,7 +1447,7 @@
 #endif
 #endif
 
-#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || (PLATFORM(IOS_FAMILY) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 130000) || PLATFORM(GTK)
+#if (PLATFORM(MAC) && __MAC_OS_X_VERSION_MIN_REQUIRED >= 101400) || (PLATFORM(IOS_FAMILY) && __IPHONE_OS_VERSION_MIN_REQUIRED >= 130000)
 #define HAVE_OS_DARK_MODE_SUPPORT 1
 #endif
 

Modified: releases/WebKitGTK/webkit-2.26/Source/WebCore/ChangeLog (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebCore/ChangeLog	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebCore/ChangeLog	2020-01-29 10:38:43 UTC (rev 255350)
@@ -1,3 +1,24 @@
+2020-01-28  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Should use light theme unless website declares support for dark themes in color-schemes property
+        https://bugs.webkit.org/show_bug.cgi?id=197947
+
+        Reviewed by Michael Catanzaro.
+
+        * dom/Document.cpp:
+        (WebCore::Document::useDarkAppearance const): Remove HAVE(OS_DARK_MODE_SUPPORT) because ENABLE(DARK_MODE_CSS)
+        guards should be enough.
+        * page/FrameView.cpp:
+        (WebCore::FrameView::updateBackgroundRecursively): Revert changes made in r244635.
+        * page/Page.cpp:
+        (WebCore::Page::effectiveAppearanceDidChange): Use ENABLE(DARK_MODE_CSS) instead of HAVE(OS_DARK_MODE_SUPPORT).
+        (WebCore::Page::useDarkAppearance const): Ditto.
+        * rendering/RenderThemeGtk.cpp:
+        (WebCore::RenderThemeGtk::systemColor const): Revert changes made in r244635.
+        * rendering/RenderThemeGtk.h:
+        * testing/InternalSettings.cpp:
+        (WebCore::InternalSettings::setUseDarkAppearanceInternal): Revert changes made in r244635.
+
 2020-01-06  Fujii Hironori  <hironori.fu...@sony.com>
 
         ComplexTextController::offsetForPosition returns a wrong offset for a glyph boundary in a RTL text

Modified: releases/WebKitGTK/webkit-2.26/Source/WebCore/dom/Document.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebCore/dom/Document.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebCore/dom/Document.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -6927,7 +6927,6 @@
 
 bool Document::useDarkAppearance(const RenderStyle* style) const
 {
-#if HAVE(OS_DARK_MODE_SUPPORT)
 #if ENABLE(DARK_MODE_CSS)
     OptionSet<ColorScheme> colorScheme;
 
@@ -6956,9 +6955,6 @@
     if (colorScheme.contains(ColorScheme::Dark))
         return pageUsesDarkAppearance;
 #endif
-#else
-    UNUSED_PARAM(style);
-#endif
 
     return false;
 }

Modified: releases/WebKitGTK/webkit-2.26/Source/WebCore/page/FrameView.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebCore/page/FrameView.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebCore/page/FrameView.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -2971,13 +2971,8 @@
 void FrameView::updateBackgroundRecursively(const Optional<Color>& backgroundColor)
 {
 #if HAVE(OS_DARK_MODE_SUPPORT)
-#if PLATFORM(MAC) || PLATFORM(IOS_FAMILY)
-    static const auto cssValueControlBackground = CSSValueAppleSystemControlBackground;
+    Color baseBackgroundColor = backgroundColor.valueOr(RenderTheme::singleton().systemColor(CSSValueAppleSystemControlBackground, styleColorOptions()));
 #else
-    static const auto cssValueControlBackground = CSSValueWindow;
-#endif
-    Color baseBackgroundColor = backgroundColor.valueOr(RenderTheme::singleton().systemColor(cssValueControlBackground, styleColorOptions()));
-#else
     Color baseBackgroundColor = backgroundColor.valueOr(Color::white);
 #endif
 

Modified: releases/WebKitGTK/webkit-2.26/Source/WebCore/page/Page.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebCore/page/Page.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebCore/page/Page.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -2714,7 +2714,7 @@
 
 void Page::effectiveAppearanceDidChange(bool useDarkAppearance, bool useElevatedUserInterfaceLevel)
 {
-#if HAVE(OS_DARK_MODE_SUPPORT)
+#if ENABLE(DARK_MODE_CSS)
     if (m_useDarkAppearance == useDarkAppearance && m_useElevatedUserInterfaceLevel == useElevatedUserInterfaceLevel)
         return;
 
@@ -2738,7 +2738,7 @@
 
 bool Page::useDarkAppearance() const
 {
-#if HAVE(OS_DARK_MODE_SUPPORT)
+#if ENABLE(DARK_MODE_CSS)
     FrameView* view = mainFrame().view();
     if (!view || !equalLettersIgnoringASCIICase(view->mediaType(), "screen"))
         return false;

Modified: releases/WebKitGTK/webkit-2.26/Source/WebCore/rendering/RenderThemeGtk.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebCore/rendering/RenderThemeGtk.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebCore/rendering/RenderThemeGtk.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -124,22 +124,6 @@
 }
 #endif
 
-static void themeChangedCallback()
-{
-    Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment();
-}
-
-RenderThemeGtk::RenderThemeGtk()
-{
-    static bool themeMonitorInitialized = false;
-    if (!themeMonitorInitialized) {
-        GtkSettings* settings = gtk_settings_get_default();
-        g_signal_connect(settings, "notify::gtk-theme-name", G_CALLBACK(themeChangedCallback), nullptr);
-        g_signal_connect(settings, "notify::gtk-color-scheme", G_CALLBACK(themeChangedCallback), nullptr);
-        themeMonitorInitialized = true;
-    }
-}
-
 enum RenderThemePart {
     Entry,
     EntrySelection,
@@ -951,17 +935,6 @@
         return styleColor(Entry, GTK_STATE_FLAG_ACTIVE, StyleColorForeground);
     case CSSValueGraytext:
         return styleColor(Entry, GTK_STATE_FLAG_INSENSITIVE, StyleColorForeground);
-    case CSSValueWebkitControlBackground:
-        return styleColor(Entry, GTK_STATE_FLAG_ACTIVE, StyleColorBackground);
-    case CSSValueWindow: {
-        // Only get window color from the theme in dark mode.
-        gboolean preferDarkTheme = FALSE;
-        if (auto* settings = gtk_settings_get_default())
-            g_object_get(settings, "gtk-application-prefer-dark-theme", &preferDarkTheme, nullptr);
-        if (preferDarkTheme)
-            return styleColor(Window, GTK_STATE_FLAG_ACTIVE, StyleColorBackground);
-        break;
-    }
     default:
         break;
     }

Modified: releases/WebKitGTK/webkit-2.26/Source/WebCore/rendering/RenderThemeGtk.h (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebCore/rendering/RenderThemeGtk.h	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebCore/rendering/RenderThemeGtk.h	2020-01-29 10:38:43 UTC (rev 255350)
@@ -104,7 +104,6 @@
     bool shouldHaveCapsLockIndicator(const HTMLInputElement&) const override;
 
 private:
-    RenderThemeGtk();
     virtual ~RenderThemeGtk();
 
     bool paintCheckbox(const RenderObject&, const PaintInfo&, const IntRect&) override;

Modified: releases/WebKitGTK/webkit-2.26/Source/WebCore/testing/InternalSettings.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebCore/testing/InternalSettings.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebCore/testing/InternalSettings.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -51,10 +51,6 @@
 #include "SoupNetworkSession.h"
 #endif
 
-#if PLATFORM(GTK)
-#include <gtk/gtk.h>
-#endif
-
 namespace WebCore {
 
 InternalSettings::Backup::Backup(Settings& settings)
@@ -542,16 +538,6 @@
 
 void InternalSettings::setUseDarkAppearanceInternal(bool useDarkAppearance)
 {
-#if PLATFORM(GTK)
-    // GTK doesn't allow to change the theme from the web process, but tests need to do it, so
-    // we do it here only for tests.
-    if (auto* settings = gtk_settings_get_default()) {
-        gboolean preferDarkTheme;
-        g_object_get(settings, "gtk-application-prefer-dark-theme", &preferDarkTheme, nullptr);
-        if (preferDarkTheme != useDarkAppearance)
-            g_object_set(settings, "gtk-application-prefer-dark-theme", useDarkAppearance, nullptr);
-    }
-#endif
     ASSERT(m_page);
     m_page->effectiveAppearanceDidChange(useDarkAppearance, m_page->useElevatedUserInterfaceLevel());
 }

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/ChangeLog (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/ChangeLog	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/ChangeLog	2020-01-29 10:38:43 UTC (rev 255350)
@@ -1,3 +1,40 @@
+2020-01-28  Carlos Garcia Campos  <cgar...@igalia.com>
+
+        [GTK] Should use light theme unless website declares support for dark themes in color-schemes property
+        https://bugs.webkit.org/show_bug.cgi?id=197947
+
+        Reviewed by Michael Catanzaro.
+
+        Handle the theme changes in the UI process, converting dark variant to the light one before sending the theme
+        name to the web process. The web process is still notified when a dark theme is in use, so that if website
+        prefers a dark color scheme it will be used, but the gtk theme that will be used for controls styling will
+        always be light.
+
+        * Shared/WebPageCreationParameters.cpp:
+        (WebKit::WebPageCreationParameters::encode const): Encode themeName.
+        (WebKit::WebPageCreationParameters::decode): Decode themeName.
+        * Shared/WebPageCreationParameters.h:
+        * UIProcess/API/gtk/PageClientImpl.cpp:
+        (WebKit::PageClientImpl::themeName const): Get the theme name that should be used by the web process.
+        * UIProcess/API/gtk/PageClientImpl.h:
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        (themeChanged): Call WebPageProxy::themeDidChange().
+        (applicationPreferDarkThemeChanged):
+        (webkitWebViewBaseSetToplevelOnScreenWindow): Use a different callback for the theme name change.
+        * UIProcess/PageClient.h:
+        * UIProcess/WebPageProxy.cpp:
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/gtk/WebPageProxyGtk.cpp:
+        (WebKit::WebPageProxy::themeDidChange): Send ThemeDidChange message to the web process with the theme name to use.
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::WebPage): Initialize the theme name.
+        (WebKit::WebPage::effectiveAppearanceDidChange): Use this now for GTK port too.
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in: Add ThemeDidChange message.
+        * WebProcess/WebPage/gtk/WebPageGtk.cpp:
+        (WebKit::WebPage::themeDidChange): Set the theme given name in gtk settings.
+        * WebProcess/gtk/WebProcessMainGtk.cpp:
+
 2019-09-26  Patrick Griffis  <pgrif...@igalia.com>
 
         [GTK] Fix logic of dark theme detection

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/Shared/WebPageCreationParameters.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/Shared/WebPageCreationParameters.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/Shared/WebPageCreationParameters.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -133,6 +133,10 @@
 #endif
     encoder << backgroundColor;
     encoder << oldPageID;
+
+#if PLATFORM(GTK)
+    encoder << themeName;
+#endif
 }
 
 Optional<WebPageCreationParameters> WebPageCreationParameters::decode(IPC::Decoder& decoder)
@@ -404,6 +408,11 @@
         return WTF::nullopt;
     parameters.oldPageID = WTFMove(*oldPageID);
 
+#if PLATFORM(GTK)
+    if (!decoder.decode(parameters.themeName))
+        return WTF::nullopt;
+#endif
+
     return parameters;
 }
 

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/Shared/WebPageCreationParameters.h (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/Shared/WebPageCreationParameters.h	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/Shared/WebPageCreationParameters.h	2020-01-29 10:38:43 UTC (rev 255350)
@@ -210,6 +210,10 @@
     Optional<WebCore::Color> backgroundColor;
 
     Optional<WebCore::PageIdentifier> oldPageID;
+
+#if PLATFORM(GTK)
+    String themeName;
+#endif
 };
 
 } // namespace WebKit

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/API/gtk/PageClientImpl.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -579,4 +579,21 @@
 }
 #endif
 
+String PageClientImpl::themeName() const
+{
+    if (auto* themeNameEnv = g_getenv("GTK_THEME")) {
+        String name = String::fromUTF8(themeNameEnv);
+        if (name.endsWith("-dark") || name.endsWith(":dark"))
+            return name.substring(0, name.length() - 5);
+        return name;
+    }
+
+    GUniqueOutPtr<char> themeNameSetting;
+    g_object_get(gtk_widget_get_settings(m_viewWidget), "gtk-theme-name", &themeNameSetting.outPtr(), nullptr);
+    String name = String::fromUTF8(themeNameSetting.get());
+    if (name.endsWith("-dark"))
+        return name.substring(0, name.length() - 5);
+    return name;
+}
+
 } // namespace WebKit

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/API/gtk/PageClientImpl.h (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/API/gtk/PageClientImpl.h	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/API/gtk/PageClientImpl.h	2020-01-29 10:38:43 UTC (rev 255350)
@@ -172,6 +172,8 @@
     IPC::Attachment hostFileDescriptor() override;
 #endif
 
+    String themeName() const override;
+
     // Members of PageClientImpl class
     GtkWidget* m_viewWidget;
     DefaultUndoController m_undoController;

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/API/gtk/WebKitWebViewBase.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -292,6 +292,11 @@
 
 static void themeChanged(WebKitWebViewBase* webViewBase)
 {
+    webViewBase->priv->pageProxy->themeDidChange();
+}
+
+static void applicationPreferDarkThemeChanged(WebKitWebViewBase* webViewBase)
+{
     webViewBase->priv->pageProxy->effectiveAppearanceDidChange();
 }
 
@@ -371,7 +376,7 @@
     priv->themeChangedID =
         g_signal_connect_swapped(settings, "notify::gtk-theme-name", G_CALLBACK(themeChanged), webViewBase);
     priv->applicationPreferDarkThemeID =
-        g_signal_connect_swapped(settings, "notify::gtk-application-prefer-dark-theme", G_CALLBACK(themeChanged), webViewBase);
+        g_signal_connect_swapped(settings, "notify::gtk-application-prefer-dark-theme", G_CALLBACK(applicationPreferDarkThemeChanged), webViewBase);
 
     if (gtk_widget_get_realized(GTK_WIDGET(window)))
         gtk_widget_realize(GTK_WIDGET(webViewBase));

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/PageClient.h (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/PageClient.h	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/PageClient.h	2020-01-29 10:38:43 UTC (rev 255350)
@@ -510,6 +510,10 @@
 #if USE(WPE_RENDERER)
     virtual IPC::Attachment hostFileDescriptor() = 0;
 #endif
+
+#if PLATFORM(GTK)
+    virtual String themeName() const = 0;
+#endif
 };
 
 } // namespace WebKit

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/WebPageProxy.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/WebPageProxy.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -7292,6 +7292,10 @@
 
     process.addWebUserContentControllerProxy(m_userContentController, parameters);
 
+#if PLATFORM(GTK)
+    parameters.themeName = pageClient().themeName();
+#endif
+
     return parameters;
 }
 

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/WebPageProxy.h (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/WebPageProxy.h	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/WebPageProxy.h	2020-01-29 10:38:43 UTC (rev 255350)
@@ -806,6 +806,7 @@
 #if PLATFORM(GTK)
     PlatformViewWidget viewWidget();
     bool makeGLContextCurrent();
+    void themeDidChange();
 #endif
 
     const Optional<WebCore::Color>& backgroundColor() const { return m_backgroundColor; }

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/gtk/WebPageProxyGtk.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/gtk/WebPageProxyGtk.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/UIProcess/gtk/WebPageProxyGtk.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -166,4 +166,13 @@
     webkitWebViewBaseShowEmojiChooser(WEBKIT_WEB_VIEW_BASE(viewWidget()), caretRect, WTFMove(completionHandler));
 }
 
+void WebPageProxy::themeDidChange()
+{
+    if (!hasRunningProcess())
+        return;
+
+    send(Messages::WebPage::ThemeDidChange(pageClient().themeName()));
+    effectiveAppearanceDidChange();
+}
+
 } // namespace WebKit

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/EntryPoint/unix/WebProcessMain.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/EntryPoint/unix/WebProcessMain.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/EntryPoint/unix/WebProcessMain.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -35,6 +35,9 @@
 
 int main(int argc, char** argv)
 {
+    // Ignore the GTK_THEME environment variable, the theme is always set by the UI process now.
+    unsetenv("GTK_THEME");
+
 #if USE(GCRYPT)
     PAL::GCrypt::initialize();
 #endif

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/WebPage.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/WebPage.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -564,6 +564,10 @@
     setGapBetweenPages(parameters.gapBetweenPages);
     setPaginationLineGridEnabled(parameters.paginationLineGridEnabled);
 
+#if PLATFORM(GTK)
+    themeDidChange(WTFMove(parameters.themeName));
+#endif
+
     effectiveAppearanceDidChange(parameters.useDarkAppearance, parameters.useElevatedUserInterfaceLevel);
 
     if (parameters.isEditable)
@@ -4665,12 +4669,10 @@
 
 #endif
 
-#if !PLATFORM(GTK)
 void WebPage::effectiveAppearanceDidChange(bool useDarkAppearance, bool useElevatedUserInterfaceLevel)
 {
     corePage()->effectiveAppearanceDidChange(useDarkAppearance, useElevatedUserInterfaceLevel);
 }
-#endif
 
 void WebPage::beginPrinting(FrameIdentifier frameID, const PrintInfo& printInfo)
 {

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/WebPage.h (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/WebPage.h	2020-01-29 10:38:43 UTC (rev 255350)
@@ -777,6 +777,8 @@
     void showEmojiPicker(WebCore::Frame&);
 
     void getCenterForZoomGesture(const WebCore::IntPoint& centerInViewCoordinates, CompletionHandler<void(WebCore::IntPoint&&)>&&);
+
+    void themeDidChange(String&&);
 #endif
 
     void didApplyStyle();
@@ -1967,6 +1969,10 @@
 #if ENABLE(TEXT_AUTOSIZING)
     WebCore::Timer m_textAutoSizingAdjustmentTimer;
 #endif
+
+#if PLATFORM(GTK)
+    String m_themeName;
+#endif
 };
 
 #if !PLATFORM(IOS_FAMILY)

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/WebPage.messages.in (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/WebPage.messages.in	2020-01-29 10:38:43 UTC (rev 255350)
@@ -495,6 +495,10 @@
 
     EffectiveAppearanceDidChange(bool useDarkAppearance, bool useElevatedUserInterfaceLevel);
 
+#if PLATFORM(GTK)
+    ThemeDidChange(String themeName)
+#endif
+
 #if PLATFORM(COCOA)
     RequestActiveNowPlayingSessionInfo(WebKit::CallbackID callbackID)
 #endif

Modified: releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/gtk/WebPageGtk.cpp (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/gtk/WebPageGtk.cpp	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/WebKit/WebProcess/WebPage/gtk/WebPageGtk.cpp	2020-01-29 10:38:43 UTC (rev 255350)
@@ -203,11 +203,14 @@
     sendWithAsyncReply(Messages::WebPageProxy::ShowEmojiPicker(frame.view()->contentsToRootView(frame.selection().absoluteCaretBounds())), WTFMove(completionHandler));
 }
 
-void WebPage::effectiveAppearanceDidChange(bool useDarkAppearance, bool useInactiveAppearance)
+void WebPage::themeDidChange(String&& themeName)
 {
-    if (auto* settings = gtk_settings_get_default())
-        g_object_set(settings, "gtk-application-prefer-dark-theme", useDarkAppearance, nullptr);
-    corePage()->effectiveAppearanceDidChange(useDarkAppearance, useInactiveAppearance);
+    if (m_themeName == themeName)
+        return;
+
+    m_themeName = WTFMove(themeName);
+    g_object_set(gtk_settings_get_default(), "gtk-theme-name", m_themeName.utf8().data(), nullptr);
+    Page::updateStyleForAllPagesAfterGlobalChangeInEnvironment();
 }
 
 } // namespace WebKit

Modified: releases/WebKitGTK/webkit-2.26/Source/cmake/OptionsGTK.cmake (255349 => 255350)


--- releases/WebKitGTK/webkit-2.26/Source/cmake/OptionsGTK.cmake	2020-01-29 10:38:26 UTC (rev 255349)
+++ releases/WebKitGTK/webkit-2.26/Source/cmake/OptionsGTK.cmake	2020-01-29 10:38:43 UTC (rev 255350)
@@ -195,7 +195,6 @@
 set(GDK_INCLUDE_DIRS ${GDK3_INCLUDE_DIRS})
 
 SET_AND_EXPOSE_TO_BUILD(HAVE_GTK_UNIX_PRINTING ${GTKUnixPrint_FOUND})
-SET_AND_EXPOSE_TO_BUILD(HAVE_OS_DARK_MODE_SUPPORT 1)
 
 if (USE_WPE_RENDERER)
     find_package(WPE 1.3.0)
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to