Changeset 239203 in webkit


Ignore:
Timestamp:
Dec 14, 2018 4:57:22 AM (5 years ago)
Author:
Carlos Garcia Campos
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
Location:
trunk
Files:
14 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r239197 r239203  
     12018-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [WPE] Use new view state API from libwpe
     4        https://bugs.webkit.org/show_bug.cgi?id=191906
     5
     6        Reviewed by Žan Doberšek.
     7
     8        Remove WKViewSetViewState from the C API.
     9
     10        * UIProcess/API/C/wpe/WKAPICastWPE.h:
     11        * UIProcess/API/C/wpe/WKView.cpp:
     12        * UIProcess/API/C/wpe/WKView.h:
     13        * UIProcess/API/wpe/WPEView.cpp:
     14        (WKWPE::View::View): Add implementation for activity_state_changed vfunc of the view backend client.):
     15        (WKWPE::View::setViewState): Remove the default flags.
     16        * UIProcess/API/wpe/WPEView.h:
     17        (WKWPE::View::setViewState const): Make it private.
     18
    1192018-12-13  Joseph Pecoraro  <pecoraro@apple.com>
    220
  • trunk/Source/WebKit/UIProcess/API/C/wpe/WKAPICastWPE.h

    r235560 r239203  
    3333#include "WKView.h"
    3434#include "WebGrammarDetail.h"
    35 #include <WebCore/ActivityState.h>
    3635
    3736namespace WKWPE {
     
    4948}
    5049
    51 inline OptionSet<WebCore::ActivityState::Flag> toViewStateFlags(WKViewState wkViewState)
    52 {
    53     OptionSet<WebCore::ActivityState::Flag> viewStateFlags;
    54 
    55     if (wkViewState & kWKViewStateIsInWindow)
    56         viewStateFlags.add(WebCore::ActivityState::IsInWindow);
    57     if (wkViewState & kWKViewStateIsVisible)
    58         viewStateFlags.add(WebCore::ActivityState::IsVisible);
    59 
    60     return viewStateFlags;
    61 }
    62 
    6350}
    6451
  • trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp

    r225044 r239203  
    5151}
    5252
    53 void WKViewSetViewState(WKViewRef view, WKViewState viewState)
    54 {
    55     toImpl(view)->setViewState(toViewStateFlags(viewState));
    56 }
    57 
    5853void WKViewSetViewClient(WKViewRef view, const WKViewClientBase* client)
    5954{
  • trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.h

    r225044 r239203  
    4040WK_EXPORT WKPageRef WKViewGetPage(WKViewRef);
    4141
    42 enum {
    43     kWKViewStateIsInWindow = 1 << 0,
    44     kWKViewStateIsVisible = 1 << 1,
    45 };
    46 typedef uint32_t WKViewState;
    47 
    48 WK_EXPORT void WKViewSetViewState(WKViewRef, WKViewState);
    49 
    5042typedef void (*WKViewFrameDisplayed)(WKViewRef view, const void* clientInfo);
    5143
  • trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp

    r234921 r239203  
    4646    , m_pageClient(std::make_unique<PageClientImpl>(*this))
    4747    , m_size { 800, 600 }
     48#if !defined(WPE_BACKEND_CHECK_VERSION) || !WPE_BACKEND_CHECK_VERSION(1, 1, 0)
    4849    , m_viewStateFlags { WebCore::ActivityState::WindowIsActive, WebCore::ActivityState::IsFocused, WebCore::ActivityState::IsVisible, WebCore::ActivityState::IsInWindow }
     50#endif
    4951    , m_compositingManagerProxy(*this)
    5052    , m_backend(backend)
     
    8991            view.frameDisplayed();
    9092        },
     93#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
     94        // activity_state_changed
     95        [](void* data, uint32_t state)
     96        {
     97            auto& view = *reinterpret_cast<View*>(data);
     98            OptionSet<WebCore::ActivityState::Flag> flags;
     99            if (state & wpe_view_activity_state_visible)
     100                flags.add(WebCore::ActivityState::IsVisible);
     101            if (state & wpe_view_activity_state_focused) {
     102                flags.add(WebCore::ActivityState::IsFocused);
     103                flags.add(WebCore::ActivityState::WindowIsActive);
     104            }
     105            if (state & wpe_view_activity_state_in_window)
     106                flags.add(WebCore::ActivityState::IsInWindow);
     107            view.setViewState(flags);
     108        },
     109#else
     110        nullptr,
     111#endif
    91112        // padding
    92         nullptr,
    93113        nullptr,
    94114        nullptr,
     
    175195void View::setViewState(OptionSet<WebCore::ActivityState::Flag> flags)
    176196{
    177     static const OptionSet<WebCore::ActivityState::Flag> defaultFlags { WebCore::ActivityState::WindowIsActive, WebCore::ActivityState::IsFocused };
    178 
    179     auto changedFlags = m_viewStateFlags ^ (defaultFlags | flags);
    180     m_viewStateFlags = defaultFlags | flags;
     197    auto changedFlags = m_viewStateFlags ^ flags;
     198    m_viewStateFlags = flags;
    181199
    182200    if (changedFlags)
  • trunk/Source/WebKit/UIProcess/API/wpe/WPEView.h

    r234921 r239203  
    7070
    7171    OptionSet<WebCore::ActivityState::Flag> viewState() const { return m_viewStateFlags; }
    72     void setViewState(OptionSet<WebCore::ActivityState::Flag>);
    7372
    7473    void close();
     
    8382
    8483    void setSize(const WebCore::IntSize&);
     84    void setViewState(OptionSet<WebCore::ActivityState::Flag>);
    8585
    8686    std::unique_ptr<API::ViewClient> m_client;
  • trunk/Tools/ChangeLog

    r239200 r239203  
     12018-12-14  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [WPE] Use new view state API from libwpe
     4        https://bugs.webkit.org/show_bug.cgi?id=191906
     5
     6        Reviewed by Žan Doberšek.
     7
     8        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
     9        (beforeAll): Enable /webkit/WebKitWebView/page-visibility in WPE.
     10        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
     11        (Test::createWebViewBackend): Make the view initially hidden for consistency with GTK+ tests.
     12        * TestWebKitAPI/glib/WebKitGLib/WebViewTest.h:
     13        * TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp:
     14        (WebViewTest::showInWindow): Add wpe_view_activity_state_visible, wpe_view_activity_state_in_window and
     15        wpe_view_activity_state_focused state flags.
     16        (WebViewTest::hideView): Remove wpe_view_activity_state_visible and wpe_view_activity_state_focused state flags.
     17        * wpe/backends/HeadlessViewBackend.cpp:
     18        (WPEToolingBackends::HeadlessViewBackend::HeadlessViewBackend): Assume view is always visible, focused and in window.
     19        * wpe/backends/WindowViewBackend.cpp:
     20        (WPEToolingBackends::WindowViewBackend::WindowViewBackend): Update the view state flags depending on state
     21        received in configure callback.
     22        * wpe/jhbuild.modules: Bump libwpe to 1.1.0
     23
    1242018-12-13  Fujii Hironori  <Hironori.Fujii@sony.com>
    225
  • trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp

    r239105 r239203  
    715715}
    716716
    717 #if PLATFORM(GTK)
    718717// To test page visibility API. Currently only 'visible', 'hidden' and 'prerender' states are implemented fully in WebCore.
    719718// See also http://www.w3.org/TR/2011/WD-page-visibility-20110602/ and https://developers.google.com/chrome/whitepapers/pagevisibility
     
    777776}
    778777
     778#if PLATFORM(GTK)
    779779class SnapshotWebViewTest: public WebViewTest {
    780780public:
     
    12621262#if PLATFORM(GTK)
    12631263    SnapshotWebViewTest::add("WebKitWebView", "snapshot", testWebViewSnapshot);
     1264#endif
    12641265    WebViewTest::add("WebKitWebView", "page-visibility", testWebViewPageVisibility);
    1265 #endif
    12661266#if ENABLE(NOTIFICATIONS)
    12671267    NotificationWebViewTest::add("WebKitWebView", "notification", testWebViewNotification);
  • trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h

    r238608 r239203  
    144144    {
    145145        auto* headlessBackend = new WPEToolingBackends::HeadlessViewBackend(800, 600);
     146#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
     147        // Make the view initially hidden for consistency with GTK+ tests.
     148        wpe_view_backend_remove_activity_state(headlessBackend->backend(), wpe_view_activity_state_visible | wpe_view_activity_state_focused);
     149#endif
    146150        return webkit_web_view_backend_new(headlessBackend->backend(), [](gpointer userData) {
    147151            delete static_cast<WPEToolingBackends::HeadlessViewBackend*>(userData);
  • trunk/Tools/TestWebKitAPI/glib/WebKitGLib/WebViewTest.h

    r232671 r239203  
    7070#endif
    7171
     72#if PLATFORM(WPE)
     73    void showInWindow();
     74#endif
     75
    7276    WebKitJavascriptResult* runJavaScriptAndWaitUntilFinished(const char* javascript, GError**);
    7377    WebKitJavascriptResult* runJavaScriptFromGResourceAndWaitUntilFinished(const char* resource, GError**);
  • trunk/Tools/TestWebKitAPI/glib/WebKitGLib/wpe/WebViewTestWPE.cpp

    r218686 r239203  
    2121#include "WebViewTest.h"
    2222
     23#include <wpe/wpe.h>
     24
    2325void WebViewTest::platformDestroy()
    2426{
     
    4042}
    4143
     44void WebViewTest::showInWindow()
     45{
     46#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
     47    auto* backend = webkit_web_view_backend_get_wpe_backend(webkit_web_view_get_backend(m_webView));
     48    wpe_view_backend_add_activity_state(backend, wpe_view_activity_state_visible | wpe_view_activity_state_in_window | wpe_view_activity_state_focused);
     49#endif
     50}
     51
    4252void WebViewTest::hideView()
    4353{
    44     // FIXME: implement.
     54#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
     55    auto* backend = webkit_web_view_backend_get_wpe_backend(webkit_web_view_get_backend(m_webView));
     56    wpe_view_backend_remove_activity_state(backend, wpe_view_activity_state_visible | wpe_view_activity_state_focused);
     57#endif
    4558}
    4659
  • trunk/Tools/wpe/backends/HeadlessViewBackend.cpp

    r234193 r239203  
    7272    if (!initialize())
    7373        return;
     74
     75#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
     76    wpe_view_backend_add_activity_state(backend(), wpe_view_activity_state_visible | wpe_view_activity_state_focused | wpe_view_activity_state_in_window);
     77#endif
    7478
    7579    if (!eglMakeCurrent(m_eglDisplay, EGL_NO_SURFACE, EGL_NO_SURFACE, m_eglContext))
  • trunk/Tools/wpe/backends/WindowViewBackend.cpp

    r234542 r239203  
    435435const struct zxdg_toplevel_v6_listener WindowViewBackend::s_xdgToplevelListener = {
    436436    // configure
    437     [](void*, struct zxdg_toplevel_v6*, int32_t /*width*/, int32_t /*height*/, struct wl_array*)
    438     {
    439         // FIXME: dispatch the size against wpe_view_backend.
     437    [](void* data, struct zxdg_toplevel_v6*, int32_t width, int32_t height, struct wl_array* states)
     438    {
     439        auto& window = *static_cast<WindowViewBackend*>(data);
     440        wpe_view_backend_dispatch_set_size(window.backend(), width, height);
     441
     442#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
     443        bool isFocused = false;
     444        void* p;
     445        wl_array_for_each(p, states)
     446        {
     447            uint32_t state = *static_cast<uint32_t*>(p);
     448
     449            switch (state) {
     450            case ZXDG_TOPLEVEL_V6_STATE_ACTIVATED:
     451                isFocused = true;
     452                break;
     453            case ZXDG_TOPLEVEL_V6_STATE_FULLSCREEN:
     454            case ZXDG_TOPLEVEL_V6_STATE_MAXIMIZED:
     455            case ZXDG_TOPLEVEL_V6_STATE_RESIZING:
     456            default:
     457                break;
     458            }
     459        }
     460
     461        if (isFocused)
     462            wpe_view_backend_add_activity_state(window.backend(), wpe_view_activity_state_focused);
     463        else
     464            wpe_view_backend_remove_activity_state(window.backend(), wpe_view_activity_state_focused);
     465#else
     466        (void)states;
     467#endif
    440468    },
    441469    // close
    442     [](void*, struct zxdg_toplevel_v6*) { },
     470    [](void* data, struct zxdg_toplevel_v6*)
     471    {
     472#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
     473        auto& window = *static_cast<WindowViewBackend*>(data);
     474        wpe_view_backend_remove_activity_state(window.backend(), wpe_view_activity_state_visible | wpe_view_activity_state_focused | wpe_view_activity_state_in_window);
     475#else
     476        (void)data;
     477#endif
     478    },
    443479};
    444480
     
    487523        m_xdgToplevel = zxdg_surface_v6_get_toplevel(m_xdgSurface);
    488524        if (m_xdgToplevel) {
    489             zxdg_toplevel_v6_add_listener(m_xdgToplevel, &s_xdgToplevelListener, nullptr);
     525            zxdg_toplevel_v6_add_listener(m_xdgToplevel, &s_xdgToplevelListener, this);
    490526            zxdg_toplevel_v6_set_title(m_xdgToplevel, "WPE");
    491527            wl_surface_commit(m_surface);
     528#if defined(WPE_BACKEND_CHECK_VERSION) && WPE_BACKEND_CHECK_VERSION(1, 1, 0)
     529            wpe_view_backend_add_activity_state(backend(), wpe_view_activity_state_visible | wpe_view_activity_state_in_window);
     530#endif
    492531        }
    493532    }
  • trunk/Tools/wpe/jhbuild.modules

    r238866 r239203  
    167167
    168168  <cmake id="libwpe">
    169       <branch repo="wpewebkit" module="libwpe-1.0.0.tar.xz" version="1.0.0"
    170               hash="sha256:aff11612123f9ab85a8b9a4bcdfb3a7503eba0a0d2d96f2cdecd30e911091719" />
     169      <branch repo="wpewebkit" module="libwpe-1.1.0.tar.xz" version="1.1.0"
     170              hash="sha256:72e34ad754be11abd1a438cfe195d8d644c52105ab2b1c3b39dec6228bc776ce"/>
    171171  </cmake>
    172172
Note: See TracChangeset for help on using the changeset viewer.