Skip to content

Commit 2246a2a

Browse files
fredldotmecarlosgcampos
authored andcommitted
[WPE] Implement theme color retrieval API
https://bugs.webkit.org/show_bug.cgi?id=273747 Reviewed by Adrian Perez de Castro and Carlos Garcia Campos. Implements a property "theme-color" and a getter function webkit_web_view_get_theme_color() for retrieving the web view's page theme color, with property changes for notification. Combined changes: * Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp: (WebKitWebViewClient::themeColorDidChange): (webkitWebViewGetProperty): (webkit_web_view_class_init): * Source/WebKit/UIProcess/API/glib/WebKitWebView.h.in: * Source/WebKit/UIProcess/API/wpe/APIViewClient.h: (API::ViewClient::themeColorDidChange): * Source/WebKit/UIProcess/API/wpe/PageClientImpl.cpp: (WebKit::PageClientImpl::themeColorDidChange): * Source/WebKit/UIProcess/API/wpe/PageClientImpl.h: * Source/WebKit/UIProcess/API/wpe/WPEWebView.cpp: (WKWPE::View::themeColorDidChange): * Source/WebKit/UIProcess/API/wpe/WPEWebView.h: * Source/WebKit/UIProcess/API/wpe/WebKitWebViewClient.h: * Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp: (webkit_web_view_get_theme_color): * Source/WebKit/UIProcess/WebPageProxy.messages.in: * Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/LayerTreeHost.cpp: (WebKit::LayerTreeHost::flushLayers): * Source/WebKit/WebProcess/WebPage/WebPage.cpp: * Source/WebKit/WebProcess/WebPage/WebPage.h: * Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp: (ThemeColorWebViewTest::themeColorChanged): (ThemeColorWebViewTest::testThemeColorResult): (ThemeColorWebViewTest::waitUntilThemeColorChanged): (testWebViewThemeColor): (beforeAll): Canonical link: https://commits.webkit.org/296035@main
1 parent cca9621 commit 2246a2a

14 files changed

Lines changed: 148 additions & 3 deletions

File tree

Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,7 @@
116116
#if ENABLE(WPE_PLATFORM)
117117
#include "WebKitInputMethodContextImplWPE.h"
118118
#endif
119+
#include "WebKitColor.h"
119120
#endif
120121

121122
#if ENABLE(2022_GLIB_API)
@@ -244,6 +245,10 @@ enum {
244245
PROP_WEB_EXTENSION_MODE,
245246
PROP_DEFAULT_CONTENT_SECURITY_POLICY,
246247

248+
#if PLATFORM(WPE)
249+
PROP_THEME_COLOR,
250+
#endif
251+
247252
N_PROPERTIES,
248253
};
249254

@@ -557,6 +562,13 @@ WebKitWebResourceLoadManager* WebKitWebViewClient::webResourceLoadManager()
557562
return webkitWebViewGetWebResourceLoadManager(m_webView);
558563
}
559564

565+
void WebKitWebViewClient::themeColorDidChange()
566+
{
567+
#if PLATFORM(WPE)
568+
g_object_notify_by_pspec(G_OBJECT(m_webView), sObjProperties[PROP_THEME_COLOR]);
569+
#endif
570+
}
571+
560572
#if ENABLE(FULLSCREEN_API)
561573
bool WebKitWebViewClient::enterFullScreen(WKWPE::View&)
562574
{
@@ -1177,6 +1189,14 @@ static void webkitWebViewGetProperty(GObject* object, guint propId, GValue* valu
11771189
case PROP_DEFAULT_CONTENT_SECURITY_POLICY:
11781190
g_value_set_string(value, webkit_web_view_get_default_content_security_policy(webView));
11791191
break;
1192+
#if PLATFORM(WPE)
1193+
case PROP_THEME_COLOR: {
1194+
auto* color = static_cast<WebKitColor*>(fastMalloc(sizeof(WebKitColor)));
1195+
webkit_web_view_get_theme_color(webView, color);
1196+
g_value_take_boxed(value, static_cast<gconstpointer>(color));
1197+
break;
1198+
}
1199+
#endif
11801200
default:
11811201
G_OBJECT_WARN_INVALID_PROPERTY_ID(object, propId, paramSpec);
11821202
}
@@ -1710,6 +1730,21 @@ static void webkit_web_view_class_init(WebKitWebViewClass* webViewClass)
17101730
nullptr,
17111731
static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
17121732

1733+
#if PLATFORM(WPE)
1734+
/**
1735+
* WebKitWebView:theme-color:
1736+
*
1737+
* The theme color of the WebView's current page.
1738+
*
1739+
* Since: 2.50
1740+
*/
1741+
sObjProperties[PROP_THEME_COLOR] = g_param_spec_boxed(
1742+
"theme-color",
1743+
nullptr, nullptr,
1744+
WEBKIT_TYPE_COLOR,
1745+
WEBKIT_PARAM_READABLE);
1746+
#endif
1747+
17131748
g_object_class_install_properties(gObjectClass, N_PROPERTIES, sObjProperties.data());
17141749

17151750
/**

Source/WebKit/UIProcess/API/glib/WebKitWebView.h.in

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -908,6 +908,12 @@ webkit_web_view_get_web_extension_mode (WebKitWebView
908908
WEBKIT_API const gchar*
909909
webkit_web_view_get_default_content_security_policy (WebKitWebView *web_view);
910910

911+
#if PLATFORM(WPE)
912+
WEBKIT_API gboolean
913+
webkit_web_view_get_theme_color (WebKitWebView *web_view,
914+
WebKitColor *color);
915+
#endif
916+
911917
#if USE(GI_FINISH_FUNC_ANNOTATION)
912918
/**
913919
* webkit_web_view_run_async_javascript_function_in_world: (finish-func webkit_web_view_run_javascript_in_world_finish)

Source/WebKit/UIProcess/API/wpe/APIViewClient.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ class ViewClient {
5454
virtual void didChangePageID(WKWPE::View&) { }
5555
virtual void didReceiveUserMessage(WKWPE::View&, WebKit::UserMessage&&, CompletionHandler<void(WebKit::UserMessage&&)>&& completionHandler) { completionHandler(WebKit::UserMessage()); }
5656
virtual WebKit::WebKitWebResourceLoadManager* webResourceLoadManager() { return nullptr; }
57+
virtual void themeColorDidChange() { }
5758

5859
#if ENABLE(FULLSCREEN_API)
5960
virtual bool enterFullScreen(WKWPE::View&) { return false; };

Source/WebKit/UIProcess/API/wpe/PageClientImpl.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,11 @@ void PageClientImpl::didChangeBackgroundColor()
396396
{
397397
}
398398

399+
void PageClientImpl::themeColorDidChange()
400+
{
401+
m_view.themeColorDidChange();
402+
}
403+
399404
void PageClientImpl::refView()
400405
{
401406
}

Source/WebKit/UIProcess/API/wpe/PageClientImpl.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,7 @@ class PageClientImpl final : public PageClient
153153
void didSameDocumentNavigationForMainFrame(SameDocumentNavigationType) override;
154154

155155
void didChangeBackgroundColor() override;
156+
void themeColorDidChange() override;
156157
void isPlayingAudioWillChange() final { }
157158
void isPlayingAudioDidChange() final { }
158159

Source/WebKit/UIProcess/API/wpe/WPEWebView.cpp

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -119,6 +119,11 @@ void View::selectionDidChange()
119119
}
120120
}
121121

122+
void View::themeColorDidChange()
123+
{
124+
m_client->themeColorDidChange();
125+
}
126+
122127
void View::setSize(const WebCore::IntSize& size)
123128
{
124129
m_size = size;

Source/WebKit/UIProcess/API/wpe/WPEWebView.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,8 @@ class View : public API::ObjectImpl<API::Object::Type::View> {
7373
WebKitInputMethodContext* inputMethodContext() const;
7474
void setInputMethodState(std::optional<WebKit::InputMethodState>&&);
7575

76+
void themeColorDidChange();
77+
7678
#if ENABLE(FULLSCREEN_API)
7779
bool isFullScreen() const;
7880
void willEnterFullScreen(CompletionHandler<void(bool)>&&);

Source/WebKit/UIProcess/API/wpe/WebKitWebViewClient.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ class WebKitWebViewClient final : public API::ViewClient {
5555
void didChangePageID(WKWPE::View&) override;
5656
void didReceiveUserMessage(WKWPE::View&, WebKit::UserMessage&&, CompletionHandler<void(WebKit::UserMessage&&)>&&) override;
5757
WebKit::WebKitWebResourceLoadManager* webResourceLoadManager() override;
58+
void themeColorDidChange() override;
5859

5960
#if ENABLE(FULLSCREEN_API)
6061
bool enterFullScreen(WKWPE::View&) override;

Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,3 +327,31 @@ void webkit_web_view_toggle_inspector(WebKitWebView* webView)
327327
inspector->show();
328328
}
329329
#endif
330+
331+
/**
332+
* webkit_web_view_get_theme_color:
333+
* @web_view: a #WebKitWebView
334+
* @color: (out): a #WebKitColor to fill in with the theme color
335+
*
336+
* Gets the theme color that is specified by the content in the @web_view.
337+
* If the @web_view doesn't have a theme color it will fill the @color
338+
* with transparent black content.
339+
*
340+
* Returns: Whether the currently loaded page defines a theme color.
341+
*
342+
* Since: 2.50
343+
*/
344+
gboolean webkit_web_view_get_theme_color(WebKitWebView* webView, WebKitColor* color)
345+
{
346+
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), FALSE);
347+
auto& page = webkitWebViewGetPage(webView);
348+
349+
if (!page.themeColor().isValid()) {
350+
WebCore::Color tmpColor(WebCore::Color::transparentBlack);
351+
webkitColorFillFromWebCoreColor(tmpColor, color);
352+
return FALSE;
353+
}
354+
355+
webkitColorFillFromWebCoreColor(page.themeColor(), color);
356+
return TRUE;
357+
}

Source/WebKit/UIProcess/WebPageProxy.messages.in

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ messages -> WebPageProxy {
8787
DidChangeScrollbarsForMainFrame(bool hasHorizontalScrollbar, bool hasVerticalScrollbar)
8888
DidChangeScrollOffsetPinningForMainFrame(WebCore::RectEdges<bool> pinnedState)
8989
DidChangePageCount(unsigned pageCount)
90-
#if PLATFORM(MAC)
90+
#if PLATFORM(MAC) || PLATFORM(WPE)
9191
ThemeColorChanged(WebCore::Color themeColor)
9292
#endif
9393
#if ENABLE(WEB_PAGE_SPATIAL_BACKDROP)

0 commit comments

Comments
 (0)