WebKit Bugzilla
Attachment 357307 Details for
Bug 191906
: [WPE] Use new view state API from libwpe
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
New Account
|
Log In
Remember
[x]
|
Forgot Password
Login:
[x]
[patch]
Patch for landing
wpe-view-state.diff (text/plain), 17.22 KB, created by
Carlos Garcia Campos
on 2018-12-14 01:18:49 PST
(
hide
)
Description:
Patch for landing
Filename:
MIME Type:
Creator:
Carlos Garcia Campos
Created:
2018-12-14 01:18:49 PST
Size:
17.22 KB
patch
obsolete
>diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 9fbabea1e2f..5b7507a0e45 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,21 @@ >+2018-12-14 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ [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 <pecoraro@apple.com> > > [iOS] Web Inspector: Occasional UIProcess crashes under WebPageProxy::showInspectorIndication >diff --git a/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h b/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h >index 4bfe6cc68bc..1e6784000f1 100644 >--- a/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h >+++ b/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h >@@ -32,7 +32,6 @@ > > #include "WKView.h" > #include "WebGrammarDetail.h" >-#include <WebCore/ActivityState.h> > > namespace WKWPE { > class View; >@@ -48,18 +47,6 @@ inline ProxyingRefPtr<WebGrammarDetail> toAPI(const WebCore::GrammarDetail& gram > 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 >diff --git a/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp b/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp >index 50149ffe487..78bba3967b6 100644 >--- a/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp >+++ b/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp >@@ -50,11 +50,6 @@ WKPageRef WKViewGetPage(WKViewRef view) > 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 { >diff --git a/Source/WebKit/UIProcess/API/C/wpe/WKView.h b/Source/WebKit/UIProcess/API/C/wpe/WKView.h >index 1115a0eadd2..8fb98395cf4 100644 >--- a/Source/WebKit/UIProcess/API/C/wpe/WKView.h >+++ b/Source/WebKit/UIProcess/API/C/wpe/WKView.h >@@ -39,14 +39,6 @@ WK_EXPORT WKViewRef WKViewCreate(struct wpe_view_backend*, WKPageConfigurationRe > > 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 { >diff --git a/Source/WebKit/UIProcess/API/wpe/WPEView.cpp b/Source/WebKit/UIProcess/API/wpe/WPEView.cpp >index fffcb11fee4..afdbd07dfb6 100644 >--- a/Source/WebKit/UIProcess/API/wpe/WPEView.cpp >+++ b/Source/WebKit/UIProcess/API/wpe/WPEView.cpp >@@ -45,7 +45,9 @@ View::View(struct wpe_view_backend* backend, const API::PageConfiguration& baseC > : 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,8 +90,26 @@ View::View(struct wpe_view_backend* backend, const API::PageConfiguration& baseC > auto& view = *reinterpret_cast<View*>(data); > view.frameDisplayed(); > }, >- // padding >+#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 >@@ -174,10 +194,8 @@ void View::setSize(const WebCore::IntSize& size) > > 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 ^ (defaultFlags | flags); >- m_viewStateFlags = defaultFlags | flags; >+ auto changedFlags = m_viewStateFlags ^ flags; >+ m_viewStateFlags = flags; > > if (changedFlags) > m_pageProxy->activityStateDidChange(changedFlags); >diff --git a/Source/WebKit/UIProcess/API/wpe/WPEView.h b/Source/WebKit/UIProcess/API/wpe/WPEView.h >index 2ab48530ea1..99bf278975d 100644 >--- a/Source/WebKit/UIProcess/API/wpe/WPEView.h >+++ b/Source/WebKit/UIProcess/API/wpe/WPEView.h >@@ -69,7 +69,6 @@ public: > 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 @@ private: > 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; > >diff --git a/Tools/ChangeLog b/Tools/ChangeLog >index 53567cddb60..801ed441044 100644 >--- a/Tools/ChangeLog >+++ b/Tools/ChangeLog >@@ -1,3 +1,26 @@ >+2018-12-14 Carlos Garcia Campos <cgarcia@igalia.com> >+ >+ [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 <Hironori.Fujii@sony.com> > > [WinCairo][Clang] DLLLauncherMain.cpp: warning: unused function 'prependPath' and 'appleApplicationSupportDirectory' >diff --git a/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp b/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp >index ba910243328..45ec1e5a8aa 100644 >--- a/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp >+++ b/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp >@@ -714,7 +714,6 @@ static void testWebViewSave(SaveWebViewTest* test, gconstpointer) > 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 @@ static void testWebViewPageVisibility(WebViewTest* test, gconstpointer) > g_assert(WebViewTest::javascriptResultToBoolean(javascriptResult)); > } > >+#if PLATFORM(GTK) > class SnapshotWebViewTest: public WebViewTest { > public: > MAKE_GLIB_TEST_FIXTURE(SnapshotWebViewTest); >@@ -1261,8 +1261,8 @@ void beforeAll() > // FIXME: View is initially visible in WPE and has a fixed hardcoded size. > #if PLATFORM(GTK) > SnapshotWebViewTest::add("WebKitWebView", "snapshot", testWebViewSnapshot); >- WebViewTest::add("WebKitWebView", "page-visibility", testWebViewPageVisibility); > #endif >+ WebViewTest::add("WebKitWebView", "page-visibility", testWebViewPageVisibility); > #if ENABLE(NOTIFICATIONS) > NotificationWebViewTest::add("WebKitWebView", "notification", testWebViewNotification); > NotificationWebViewTest::add("WebKitWebView", "notification-initial-permission-allowed", testWebViewNotificationInitialPermissionAllowed); >diff --git a/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h b/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h >index 57a2d202364..313f21771bc 100644 >--- a/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h >+++ b/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h >@@ -143,6 +143,10 @@ public: > 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); >diff --git a/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.h b/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.h >index 2d2b31f78b7..3d4d511bc87 100644 >--- a/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.h >+++ b/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.h >@@ -69,6 +69,10 @@ public: > 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**); >diff --git a/Tools/TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp b/Tools/TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp >index ccf15c21375..6494186a87f 100644 >--- a/Tools/TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp >+++ b/Tools/TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp >@@ -20,6 +20,8 @@ > #include "config.h" > #include "WebViewTest.h" > >+#include <wpe/wpe.h> >+ > void WebViewTest::platformDestroy() > { > } >@@ -39,9 +41,20 @@ void WebViewTest::resizeView(int width, int height) > // 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) >diff --git a/Tools/wpe/backends/HeadlessViewBackend.cpp b/Tools/wpe/backends/HeadlessViewBackend.cpp >index ed1ada439ba..8e12ee6ce89 100644 >--- a/Tools/wpe/backends/HeadlessViewBackend.cpp >+++ b/Tools/wpe/backends/HeadlessViewBackend.cpp >@@ -72,6 +72,10 @@ HeadlessViewBackend::HeadlessViewBackend(uint32_t width, uint32_t height) > 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; > >diff --git a/Tools/wpe/backends/WindowViewBackend.cpp b/Tools/wpe/backends/WindowViewBackend.cpp >index 65221e1db16..20f03b80bab 100644 >--- a/Tools/wpe/backends/WindowViewBackend.cpp >+++ b/Tools/wpe/backends/WindowViewBackend.cpp >@@ -434,12 +434,48 @@ const struct zxdg_surface_v6_listener WindowViewBackend::s_xdgSurfaceListener = > > 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 @@ WindowViewBackend::WindowViewBackend(uint32_t width, uint32_t height) > 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 > } > } > >diff --git a/Tools/wpe/jhbuild.modules b/Tools/wpe/jhbuild.modules >index edc26cd6b13..85b632880ef 100644 >--- a/Tools/wpe/jhbuild.modules >+++ b/Tools/wpe/jhbuild.modules >@@ -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">
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 191906
:
355469
|
355719
|
355859
| 357307