Title: [239203] trunk
Revision
239203
Author
[email protected]
Date
2018-12-14 04:57:22 -0800 (Fri, 14 Dec 2018)

Log Message

[WPE] Use new view state API from libwpe
https://bugs.webkit.org/show_bug.cgi?id=191906

Reviewed by Žan Doberšek.

Source/WebKit:

Remove WKViewSetViewState from the C API.

* UIProcess/API/C/wpe/WKAPICastWPE.h:
* UIProcess/API/C/wpe/WKView.cpp:
* UIProcess/API/C/wpe/WKView.h:
* UIProcess/API/wpe/WPEView.cpp:
(WKWPE::View::View): Add implementation for activity_state_changed vfunc of the view backend client.):
(WKWPE::View::setViewState): Remove the default flags.
* UIProcess/API/wpe/WPEView.h:
(WKWPE::View::setViewState const): Make it private.

Tools:

* TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
(beforeAll): Enable /webkit/WebKitWebView/page-visibility in WPE.
* TestWebKitAPI/glib/WebKitGLib/TestMain.h:
(Test::createWebViewBackend): Make the view initially hidden for consistency with GTK+ tests.
* TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
* TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
(WebViewTest::showInWindow): Add wpe_view_activity_state_visible, wpe_view_activity_state_in_window and
wpe_view_activity_state_focused state flags.
(WebViewTest::hideView): Remove wpe_view_activity_state_visible and wpe_view_activity_state_focused state flags.
* wpe/backends/HeadlessViewBackend.cpp:
(WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend): Assume view is always visible, focused and in window.
* wpe/backends/WindowViewBackend.cpp:
(WPEToolingBackends::WindowViewBackend::WindowViewBackend): Update the view state flags depending on state
received in configure callback.
* wpe/jhbuild.modules: Bump libwpe to 1.1.0

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (239202 => 239203)


--- trunk/Source/WebKit/ChangeLog	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Source/WebKit/ChangeLog	2018-12-14 12:57:22 UTC (rev 239203)
@@ -1,3 +1,21 @@
+2018-12-14  Carlos Garcia Campos  <[email protected]>
+
+        [WPE] Use new view state API from libwpe
+        https://bugs.webkit.org/show_bug.cgi?id=191906
+
+        Reviewed by Žan Doberšek.
+
+        Remove WKViewSetViewState from the C API.
+
+        * UIProcess/API/C/wpe/WKAPICastWPE.h:
+        * UIProcess/API/C/wpe/WKView.cpp:
+        * UIProcess/API/C/wpe/WKView.h:
+        * UIProcess/API/wpe/WPEView.cpp:
+        (WKWPE::View::View): Add implementation for activity_state_changed vfunc of the view backend client.):
+        (WKWPE::View::setViewState): Remove the default flags.
+        * UIProcess/API/wpe/WPEView.h:
+        (WKWPE::View::setViewState const): Make it private.
+
 2018-12-13  Joseph Pecoraro  <[email protected]>
 
         [iOS] Web Inspector: Occasional UIProcess crashes under WebPageProxy::showInspectorIndication

Modified: trunk/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h (239202 => 239203)


--- trunk/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h	2018-12-14 12:57:22 UTC (rev 239203)
@@ -32,7 +32,6 @@
 
 #include "WKView.h"
 #include "WebGrammarDetail.h"
-#include <WebCore/ActivityState.h>
 
 namespace WKWPE {
 class View;
@@ -48,18 +47,6 @@
     return ProxyingRefPtr<WebGrammarDetail>(WebGrammarDetail::create(grammarDetail));
 }
 
-inline OptionSet<WebCore::ActivityState::Flag> toViewStateFlags(WKViewState wkViewState)
-{
-    OptionSet<WebCore::ActivityState::Flag> viewStateFlags;
-
-    if (wkViewState & kWKViewStateIsInWindow)
-        viewStateFlags.add(WebCore::ActivityState::IsInWindow);
-    if (wkViewState & kWKViewStateIsVisible)
-        viewStateFlags.add(WebCore::ActivityState::IsVisible);
-
-    return viewStateFlags;
 }
 
-}
-
 #endif // WKAPICastWPE_h

Modified: trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp (239202 => 239203)


--- trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp	2018-12-14 12:57:22 UTC (rev 239203)
@@ -50,11 +50,6 @@
     return toAPI(&toImpl(view)->page());
 }
 
-void WKViewSetViewState(WKViewRef view, WKViewState viewState)
-{
-    toImpl(view)->setViewState(toViewStateFlags(viewState));
-}
-
 void WKViewSetViewClient(WKViewRef view, const WKViewClientBase* client)
 {
     class ViewClient final : public API::Client<WKViewClientBase>, public API::ViewClient {

Modified: trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.h (239202 => 239203)


--- trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.h	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.h	2018-12-14 12:57:22 UTC (rev 239203)
@@ -39,14 +39,6 @@
 
 WK_EXPORT WKPageRef WKViewGetPage(WKViewRef);
 
-enum {
-    kWKViewStateIsInWindow = 1 << 0,
-    kWKViewStateIsVisible = 1 << 1,
-};
-typedef uint32_t WKViewState;
-
-WK_EXPORT void WKViewSetViewState(WKViewRef, WKViewState);
-
 typedef void (*WKViewFrameDisplayed)(WKViewRef view, const void* clientInfo);
 
 typedef struct WKViewClientBase {

Modified: trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp (239202 => 239203)


--- trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp	2018-12-14 12:57:22 UTC (rev 239203)
@@ -45,7 +45,9 @@
     : m_client(std::make_unique<API::ViewClient>())
     , m_pageClient(std::make_unique<PageClientImpl>(*this))
     , m_size { 800, 600 }
+#if !defined(WPE_BACKEND_CHECK_VERSION) || !WPE_BACKEND_CHECK_VERSION(1, 1, 0)
     , m_viewStateFlags { WebCore::ActivityState::WindowIsActive, WebCore::ActivityState::IsFocused, WebCore::ActivityState::IsVisible, WebCore::ActivityState::IsInWindow }
+#endif
     , m_compositingManagerProxy(*this)
     , m_backend(backend)
 {
@@ -88,10 +90,28 @@
             auto& view = *reinterpret_cast<View*>(data);
             view.frameDisplayed();
         },
+#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
+        // activity_state_changed
+        [](void* data, uint32_t state)
+        {
+            auto& view = *reinterpret_cast<View*>(data);
+            OptionSet<WebCore::ActivityState::Flag> flags;
+            if (state & wpe_view_activity_state_visible)
+                flags.add(WebCore::ActivityState::IsVisible);
+            if (state & wpe_view_activity_state_focused) {
+                flags.add(WebCore::ActivityState::IsFocused);
+                flags.add(WebCore::ActivityState::WindowIsActive);
+            }
+            if (state & wpe_view_activity_state_in_window)
+                flags.add(WebCore::ActivityState::IsInWindow);
+            view.setViewState(flags);
+        },
+#else
+        nullptr,
+#endif
         // padding
         nullptr,
         nullptr,
-        nullptr,
         nullptr
     };
     wpe_view_backend_set_backend_client(m_backend, &s_backendClient, this);
@@ -174,11 +194,9 @@
 
 void View::setViewState(OptionSet<WebCore::ActivityState::Flag> flags)
 {
-    static const OptionSet<WebCore::ActivityState::Flag> defaultFlags { WebCore::ActivityState::WindowIsActive, WebCore::ActivityState::IsFocused };
+    auto changedFlags = m_viewStateFlags ^ flags;
+    m_viewStateFlags = flags;
 
-    auto changedFlags = m_viewStateFlags ^ (defaultFlags | flags);
-    m_viewStateFlags = defaultFlags | flags;
-
     if (changedFlags)
         m_pageProxy->activityStateDidChange(changedFlags);
 }

Modified: trunk/Source/WebKit/UIProcess/API/wpe/WPEView.h (239202 => 239203)


--- trunk/Source/WebKit/UIProcess/API/wpe/WPEView.h	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WPEView.h	2018-12-14 12:57:22 UTC (rev 239203)
@@ -69,7 +69,6 @@
     const WebCore::IntSize& size() const { return m_size; }
 
     OptionSet<WebCore::ActivityState::Flag> viewState() const { return m_viewStateFlags; }
-    void setViewState(OptionSet<WebCore::ActivityState::Flag>);
 
     void close();
 
@@ -82,6 +81,7 @@
     View(struct wpe_view_backend*, const API::PageConfiguration&);
 
     void setSize(const WebCore::IntSize&);
+    void setViewState(OptionSet<WebCore::ActivityState::Flag>);
 
     std::unique_ptr<API::ViewClient> m_client;
 

Modified: trunk/Tools/ChangeLog (239202 => 239203)


--- trunk/Tools/ChangeLog	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Tools/ChangeLog	2018-12-14 12:57:22 UTC (rev 239203)
@@ -1,3 +1,26 @@
+2018-12-14  Carlos Garcia Campos  <[email protected]>
+
+        [WPE] Use new view state API from libwpe
+        https://bugs.webkit.org/show_bug.cgi?id=191906
+
+        Reviewed by Žan Doberšek.
+
+        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
+        (beforeAll): Enable /webkit/WebKitWebView/page-visibility in WPE.
+        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
+        (Test::createWebViewBackend): Make the view initially hidden for consistency with GTK+ tests.
+        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
+        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
+        (WebViewTest::showInWindow): Add wpe_view_activity_state_visible, wpe_view_activity_state_in_window and
+        wpe_view_activity_state_focused state flags.
+        (WebViewTest::hideView): Remove wpe_view_activity_state_visible and wpe_view_activity_state_focused state flags.
+        * wpe/backends/HeadlessViewBackend.cpp:
+        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend): Assume view is always visible, focused and in window.
+        * wpe/backends/WindowViewBackend.cpp:
+        (WPEToolingBackends::WindowViewBackend::WindowViewBackend): Update the view state flags depending on state
+        received in configure callback.
+        * wpe/jhbuild.modules: Bump libwpe to 1.1.0
+
 2018-12-13  Fujii Hironori  <[email protected]>
 
         [WinCairo][Clang] DLLLauncherMain.cpp: warning: unused function 'prependPath' and 'appleApplicationSupportDirectory'

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp (239202 => 239203)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp	2018-12-14 12:57:22 UTC (rev 239203)
@@ -714,7 +714,6 @@
     g_assert_cmpint(g_file_info_get_size(fileInfo.get()), ==, totalBytesFromStream);
 }
 
-#if PLATFORM(GTK)
 // To test page visibility API. Currently only 'visible', 'hidden' and 'prerender' states are implemented fully in WebCore.
 // See also http://www.w3.org/TR/2011/WD-page-visibility-20110602/ and https://developers.google.com/chrome/whitepapers/pagevisibility
 static void testWebViewPageVisibility(WebViewTest* test, gconstpointer)
@@ -776,6 +775,7 @@
     g_assert(WebViewTest::_javascript_ResultToBoolean(_javascript_Result));
 }
 
+#if PLATFORM(GTK)
 class SnapshotWebViewTest: public WebViewTest {
 public:
     MAKE_GLIB_TEST_FIXTURE(SnapshotWebViewTest);
@@ -1261,8 +1261,8 @@
     // FIXME: View is initially visible in WPE and has a fixed hardcoded size.
 #if PLATFORM(GTK)
     SnapshotWebViewTest::add("WebKitWebView", "snapshot", testWebViewSnapshot);
+#endif
     WebViewTest::add("WebKitWebView", "page-visibility", testWebViewPageVisibility);
-#endif
 #if ENABLE(NOTIFICATIONS)
     NotificationWebViewTest::add("WebKitWebView", "notification", testWebViewNotification);
     NotificationWebViewTest::add("WebKitWebView", "notification-initial-permission-allowed", testWebViewNotificationInitialPermissionAllowed);

Modified: trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h (239202 => 239203)


--- trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h	2018-12-14 12:57:22 UTC (rev 239203)
@@ -143,6 +143,10 @@
     static WebKitWebViewBackend* createWebViewBackend()
     {
         auto* headlessBackend = new WPEToolingBackends::HeadlessViewBackend(800, 600);
+#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
+        // Make the view initially hidden for consistency with GTK+ tests.
+        wpe_view_backend_remove_activity_state(headlessBackend->backend(), wpe_view_activity_state_visible | wpe_view_activity_state_focused);
+#endif
         return webkit_web_view_backend_new(headlessBackend->backend(), [](gpointer userData) {
             delete static_cast<WPEToolingBackends::HeadlessViewBackend*>(userData);
         }, headlessBackend);

Modified: trunk/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.h (239202 => 239203)


--- trunk/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.h	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.h	2018-12-14 12:57:22 UTC (rev 239203)
@@ -69,6 +69,10 @@
     void emitPopupMenuSignal();
 #endif
 
+#if PLATFORM(WPE)
+    void showInWindow();
+#endif
+
     WebKitJavascriptResult* runJavaScriptAndWaitUntilFinished(const char* _javascript_, GError**);
     WebKitJavascriptResult* runJavaScriptFromGResourceAndWaitUntilFinished(const char* resource, GError**);
     WebKitJavascriptResult* runJavaScriptInWorldAndWaitUntilFinished(const char* _javascript_, const char* world, GError**);

Modified: trunk/Tools/TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp (239202 => 239203)


--- trunk/Tools/TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Tools/TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp	2018-12-14 12:57:22 UTC (rev 239203)
@@ -20,6 +20,8 @@
 #include "config.h"
 #include "WebViewTest.h"
 
+#include <wpe/wpe.h>
+
 void WebViewTest::platformDestroy()
 {
 }
@@ -39,9 +41,20 @@
     // FIXME: implement.
 }
 
+void WebViewTest::showInWindow()
+{
+#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
+    auto* backend = webkit_web_view_backend_get_wpe_backend(webkit_web_view_get_backend(m_webView));
+    wpe_view_backend_add_activity_state(backend, wpe_view_activity_state_visible | wpe_view_activity_state_in_window | wpe_view_activity_state_focused);
+#endif
+}
+
 void WebViewTest::hideView()
 {
-    // FIXME: implement.
+#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
+    auto* backend = webkit_web_view_backend_get_wpe_backend(webkit_web_view_get_backend(m_webView));
+    wpe_view_backend_remove_activity_state(backend, wpe_view_activity_state_visible | wpe_view_activity_state_focused);
+#endif
 }
 
 void WebViewTest::mouseMoveTo(int x, int y, unsigned mouseModifiers)

Modified: trunk/Tools/wpe/backends/HeadlessViewBackend.cpp (239202 => 239203)


--- trunk/Tools/wpe/backends/HeadlessViewBackend.cpp	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Tools/wpe/backends/HeadlessViewBackend.cpp	2018-12-14 12:57:22 UTC (rev 239203)
@@ -72,6 +72,10 @@
     if (!initialize())
         return;
 
+#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
+    wpe_view_backend_add_activity_state(backend(), wpe_view_activity_state_visible | wpe_view_activity_state_focused | wpe_view_activity_state_in_window);
+#endif
+
     if (!eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, m_eglContext))
         return;
 

Modified: trunk/Tools/wpe/backends/WindowViewBackend.cpp (239202 => 239203)


--- trunk/Tools/wpe/backends/WindowViewBackend.cpp	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Tools/wpe/backends/WindowViewBackend.cpp	2018-12-14 12:57:22 UTC (rev 239203)
@@ -434,12 +434,48 @@
 
 const struct zxdg_toplevel_v6_listener WindowViewBackend::s_xdgToplevelListener = {
     // configure
-    [](void*, struct zxdg_toplevel_v6*, int32_t /*width*/, int32_t /*height*/, struct wl_array*)
+    [](void* data, struct zxdg_toplevel_v6*, int32_t width, int32_t height, struct wl_array* states)
     {
-        // FIXME: dispatch the size against wpe_view_backend.
+        auto& window = *static_cast<WindowViewBackend*>(data);
+        wpe_view_backend_dispatch_set_size(window.backend(), width, height);
+
+#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
+        bool isFocused = false;
+        void* p;
+        wl_array_for_each(p, states)
+        {
+            uint32_t state = *static_cast<uint32_t*>(p);
+
+            switch (state) {
+            case ZXDG_TOPLEVEL_V6_STATE_ACTIVATED:
+                isFocused = true;
+                break;
+            case ZXDG_TOPLEVEL_V6_STATE_FULLSCREEN:
+            case ZXDG_TOPLEVEL_V6_STATE_MAXIMIZED:
+            case ZXDG_TOPLEVEL_V6_STATE_RESIZING:
+            default:
+                break;
+            }
+        }
+
+        if (isFocused)
+            wpe_view_backend_add_activity_state(window.backend(), wpe_view_activity_state_focused);
+        else
+            wpe_view_backend_remove_activity_state(window.backend(), wpe_view_activity_state_focused);
+#else
+        (void)states;
+#endif
     },
     // close
-    [](void*, struct zxdg_toplevel_v6*) { },
+    [](void* data, struct zxdg_toplevel_v6*)
+    {
+#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
+        auto& window = *static_cast<WindowViewBackend*>(data);
+        wpe_view_backend_remove_activity_state(window.backend(), wpe_view_activity_state_visible | wpe_view_activity_state_focused | wpe_view_activity_state_in_window);
+#else
+        (void)data;
+#endif
+    },
 };
 
 WindowViewBackend::WindowViewBackend(uint32_t width, uint32_t height)
@@ -486,9 +522,12 @@
         zxdg_surface_v6_add_listener(m_xdgSurface, &s_xdgSurfaceListener, nullptr);
         m_xdgToplevel = zxdg_surface_v6_get_toplevel(m_xdgSurface);
         if (m_xdgToplevel) {
-            zxdg_toplevel_v6_add_listener(m_xdgToplevel, &s_xdgToplevelListener, nullptr);
+            zxdg_toplevel_v6_add_listener(m_xdgToplevel, &s_xdgToplevelListener, this);
             zxdg_toplevel_v6_set_title(m_xdgToplevel, "WPE");
             wl_surface_commit(m_surface);
+#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
+            wpe_view_backend_add_activity_state(backend(), wpe_view_activity_state_visible | wpe_view_activity_state_in_window);
+#endif
         }
     }
 

Modified: trunk/Tools/wpe/jhbuild.modules (239202 => 239203)


--- trunk/Tools/wpe/jhbuild.modules	2018-12-14 12:14:40 UTC (rev 239202)
+++ trunk/Tools/wpe/jhbuild.modules	2018-12-14 12:57:22 UTC (rev 239203)
@@ -166,8 +166,8 @@
   </autotools>
 
   <cmake id="libwpe">
-      <branch repo="wpewebkit" module="libwpe-1.0.0.tar.xz" version="1.0.0"
-              hash="sha256:aff11612123f9ab85a8b9a4bcdfb3a7503eba0a0d2d96f2cdecd30e911091719" />
+      <branch repo="wpewebkit" module="libwpe-1.1.0.tar.xz" version="1.1.0"
+              hash="sha256:72e34ad754be11abd1a438cfe195d8d644c52105ab2b1c3b39dec6228bc776ce"/>
   </cmake>
 
   <cmake id="wpebackend-fdo">
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to