Diff
Modified: trunk/Source/WebKit/ChangeLog (246147 => 246148)
--- trunk/Source/WebKit/ChangeLog 2019-06-06 09:31:40 UTC (rev 246147)
+++ trunk/Source/WebKit/ChangeLog 2019-06-06 11:34:02 UTC (rev 246148)
@@ -1,3 +1,12 @@
+2019-06-06 Carlos Garcia Campos <[email protected]>
+
+ [GTK][WPE] Enable PSON
+ https://bugs.webkit.org/show_bug.cgi?id=194979
+
+ Reviewed by Žan Doberšek.
+
+ * Shared/WebPreferencesDefaultValues.h:
+
2019-06-05 Said Abou-Hallawa <[email protected]>
[Cocoa] REGRESSION(r244182): Inspector thinks CA commits can be nested
Modified: trunk/Source/WebKit/Shared/WebPreferencesDefaultValues.h (246147 => 246148)
--- trunk/Source/WebKit/Shared/WebPreferencesDefaultValues.h 2019-06-06 09:31:40 UTC (rev 246147)
+++ trunk/Source/WebKit/Shared/WebPreferencesDefaultValues.h 2019-06-06 11:34:02 UTC (rev 246148)
@@ -224,7 +224,7 @@
#define DEFAULT_POINTER_EVENTS_ENABLED false
#endif
-#if PLATFORM(MAC) || PLATFORM(IOS)
+#if PLATFORM(MAC) || PLATFORM(IOS) || PLATFORM(GTK) || PLATFORM(WPE)
#define DEFAULT_PROCESS_SWAP_ON_CROSS_SITE_NAVIGATION_ENABLED true
#else
#define DEFAULT_PROCESS_SWAP_ON_CROSS_SITE_NAVIGATION_ENABLED false
Modified: trunk/Tools/ChangeLog (246147 => 246148)
--- trunk/Tools/ChangeLog 2019-06-06 09:31:40 UTC (rev 246147)
+++ trunk/Tools/ChangeLog 2019-06-06 11:34:02 UTC (rev 246148)
@@ -1,3 +1,17 @@
+2019-06-06 Carlos Garcia Campos <[email protected]>
+
+ [GTK][WPE] Enable PSON
+ https://bugs.webkit.org/show_bug.cgi?id=194979
+
+ Reviewed by Žan Doberšek.
+
+ Add WPEBackend-fdo patch required for PSON to work. It can be removed once we have a new version to depend on.
+
+ * gtk/jhbuild.modules:
+ * gtk/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Added.
+ * wpe/jhbuild.modules:
+ * wpe/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch: Added.
+
2019-06-05 Andy Estes <[email protected]>
[macOS] Stop calling -[NSDraggingItem setItem:]
Modified: trunk/Tools/gtk/jhbuild.modules (246147 => 246148)
--- trunk/Tools/gtk/jhbuild.modules 2019-06-06 09:31:40 UTC (rev 246147)
+++ trunk/Tools/gtk/jhbuild.modules 2019-06-06 11:34:02 UTC (rev 246148)
@@ -478,7 +478,10 @@
<dep package="glib"/>
</dependencies>
<branch repo="wpewebkit" module="wpebackend-fdo-1.3.0.tar.xz" version="1.3.0"
- hash="sha256:fed9ab29f5d53cf465188da80d014f3aa067c77704f8508c6bd17971fded359d"/>
+ hash="sha256:fed9ab29f5d53cf465188da80d014f3aa067c77704f8508c6bd17971fded359d">
+ <!-- Remove this when updating to 1.3.1 -->
+ <patch file="wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch" strip="1"/>
+ </branch>
</cmake>
<!-- Dependencies listed below this point are not thought to affect test results, and are only
Added: trunk/Tools/gtk/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch (0 => 246148)
--- trunk/Tools/gtk/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch (rev 0)
+++ trunk/Tools/gtk/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch 2019-06-06 11:34:02 UTC (rev 246148)
@@ -0,0 +1,198 @@
+From 13cae95a3b38899f8fd5fc39a5d25fcc9500e09a Mon Sep 17 00:00:00 2001
+From: Carlos Garcia Campos <[email protected]>
+Date: Thu, 30 May 2019 14:04:29 +0200
+Subject: [PATCH] Handle the case of new target created for the same view
+ backend
+
+The client can remove a target and create a new one for the same view
+backend. In that case we need to unregister the current view backend in
+the wayland compositor before registering the new one. This patch renames
+WS::Instance::createSurface as registerSurface to clarify that it's not
+creating a new surface but registering a new one for the given id. Also
+ViewBackend::m_id has been renamed as m_surfaceId to clarify that's not
+the backend identifier, but the current surface identifier.
+---
+ src/renderer-backend-egl.cpp | 8 +++++-
+ src/view-backend-exportable-private.cpp | 35 +++++++++++++++++++++----
+ src/view-backend-exportable-private.h | 5 +++-
+ src/ws.cpp | 12 ++++-----
+ src/ws.h | 2 +-
+ 5 files changed, 48 insertions(+), 14 deletions(-)
+
+diff --git a/src/renderer-backend-egl.cpp b/src/renderer-backend-egl.cpp
+index 726d61c..7e11d5e 100644
+--- a/src/renderer-backend-egl.cpp
++++ b/src/renderer-backend-egl.cpp
+@@ -139,6 +139,11 @@ public:
+
+ ~Target()
+ {
++ if (m_wl.wpeBridgeId && m_glib.socket) {
++ uint32_t message[] = { 0x43, m_wl.wpeBridgeId };
++ g_socket_send(m_glib.socket, reinterpret_cast<gchar*>(message), 2 * sizeof(uint32_t), nullptr, nullptr);
++ }
++
+ g_clear_pointer(&m_wl.frameCallback, wl_callback_destroy);
+ g_clear_pointer(&m_wl.window, wl_egl_window_destroy);
+ g_clear_pointer(&m_wl.surface, wl_surface_destroy);
+@@ -223,6 +228,7 @@ public:
+
+ void bridgeConnected(uint32_t bridgeID)
+ {
++ m_wl.wpeBridgeId = bridgeID;
+ uint32_t message[] = { 0x42, bridgeID };
+ if (m_glib.socket)
+ g_socket_send(m_glib.socket, reinterpret_cast<gchar*>(message), 2 * sizeof(uint32_t), nullptr, nullptr);
+@@ -246,11 +252,11 @@ private:
+ } m_glib;
+
+ struct {
+- struct wl_display* displayWrapper { nullptr };
+ struct wl_event_queue* eventQueue { nullptr };
+ struct wl_registry* registry { nullptr };
+ struct wl_compositor* compositor { nullptr };
+ struct wpe_bridge* wpeBridge { nullptr };
++ uint32_t wpeBridgeId { 0 };
+
+ struct wl_surface* surface { nullptr };
+ struct wl_egl_window* window { nullptr };
+diff --git a/src/view-backend-exportable-private.cpp b/src/view-backend-exportable-private.cpp
+index d73102f..d10679b 100644
+--- a/src/view-backend-exportable-private.cpp
++++ b/src/view-backend-exportable-private.cpp
+@@ -39,7 +39,7 @@ ViewBackend::~ViewBackend()
+ for (auto* resource : m_callbackResources)
+ wl_resource_destroy(resource);
+
+- WS::Instance::singleton().unregisterViewBackend(m_id);
++ unregisterSurface(m_surfaceId);
+
+ if (m_clientFd != -1)
+ close(m_clientFd);
+@@ -117,6 +117,24 @@ void ViewBackend::releaseBuffer(struct wl_resource* buffer_resource)
+ wl_client_flush(m_client);
+ }
+
++void ViewBackend::registerSurface(uint32_t surfaceId)
++{
++ m_surfaceId = surfaceId;
++ m_client = WS::Instance::singleton().registerViewBackend(m_surfaceId, *this);
++}
++
++void ViewBackend::unregisterSurface(uint32_t surfaceId)
++{
++ if (!surfaceId || m_surfaceId != surfaceId)
++ return;
++
++ for (auto* resource : m_callbackResources)
++ wl_resource_destroy(resource);
++ m_callbackResources.clear();
++ WS::Instance::singleton().unregisterViewBackend(m_surfaceId);
++ m_surfaceId = 0;
++}
++
+ gboolean ViewBackend::s_socketCallback(GSocket* socket, GIOCondition condition, gpointer data)
+ {
+ if (!(condition & G_IO_IN))
+@@ -128,10 +146,17 @@ gboolean ViewBackend::s_socketCallback(GSocket* socket, GIOCondition condition,
+ if (len == -1)
+ return FALSE;
+
+- if (len == sizeof(uint32_t) * 2 && message[0] == 0x42) {
+- auto& viewBackend = *static_cast<ViewBackend*>(data);
+- viewBackend.m_id = message[1];
+- viewBackend.m_client = WS::Instance::singleton().registerViewBackend(viewBackend.m_id, viewBackend);
++ if (len != sizeof(uint32_t) * 2)
++ return TRUE;
++
++ auto& viewBackend = *static_cast<ViewBackend*>(data);
++ switch (message[0]) {
++ case 0x42:
++ viewBackend.registerSurface(message[1]);
++ break;
++ case 0x43:
++ viewBackend.unregisterSurface(message[1]);
++ break;
+ }
+
+ return TRUE;
+diff --git a/src/view-backend-exportable-private.h b/src/view-backend-exportable-private.h
+index b27494e..73f3497 100644
+--- a/src/view-backend-exportable-private.h
++++ b/src/view-backend-exportable-private.h
+@@ -67,9 +67,12 @@ public:
+ void releaseBuffer(struct wl_resource* buffer_resource);
+
+ private:
++ void registerSurface(uint32_t);
++ void unregisterSurface(uint32_t);
++
+ static gboolean s_socketCallback(GSocket*, GIOCondition, gpointer);
+
+- uint32_t m_id { 0 };
++ uint32_t m_surfaceId { 0 };
+ struct wl_client* m_client { nullptr };
+
+ ClientBundle* m_clientBundle;
+diff --git a/src/ws.cpp b/src/ws.cpp
+index a856e0b..1aac351 100644
+--- a/src/ws.cpp
++++ b/src/ws.cpp
+@@ -231,7 +231,7 @@ static const struct wpe_bridge_interface s_wpeBridgeInterface = {
+ static uint32_t bridgeID = 0;
+ ++bridgeID;
+ wpe_bridge_send_connected(resource, bridgeID);
+- Instance::singleton().createSurface(bridgeID, surface);
++ Instance::singleton().registerSurface(bridgeID, surface);
+ },
+ };
+
+@@ -393,7 +393,7 @@ int Instance::createClient()
+ return clientFd;
+ }
+
+-void Instance::createSurface(uint32_t id, Surface* surface)
++void Instance::registerSurface(uint32_t id, Surface* surface)
+ {
+ m_viewBackendMap.insert({ id, surface });
+ }
+@@ -538,9 +538,9 @@ void Instance::foreachDmaBufModifier(std::function<void (int format, uint64_t mo
+ }
+ }
+
+-struct wl_client* Instance::registerViewBackend(uint32_t id, ExportableClient& exportableClient)
++struct wl_client* Instance::registerViewBackend(uint32_t surfaceId, ExportableClient& exportableClient)
+ {
+- auto it = m_viewBackendMap.find(id);
++ auto it = m_viewBackendMap.find(surfaceId);
+ if (it == m_viewBackendMap.end())
+ std::abort();
+
+@@ -548,9 +548,9 @@ struct wl_client* Instance::registerViewBackend(uint32_t id, ExportableClient& e
+ return it->second->client;
+ }
+
+-void Instance::unregisterViewBackend(uint32_t id)
++void Instance::unregisterViewBackend(uint32_t surfaceId)
+ {
+- auto it = m_viewBackendMap.find(id);
++ auto it = m_viewBackendMap.find(surfaceId);
+ if (it != m_viewBackendMap.end()) {
+ it->second->exportableClient = nullptr;
+ m_viewBackendMap.erase(it);
+diff --git a/src/ws.h b/src/ws.h
+index d4c2bff..5cb88e7 100644
+--- a/src/ws.h
++++ b/src/ws.h
+@@ -53,7 +53,7 @@ public:
+
+ int createClient();
+
+- void createSurface(uint32_t, Surface*);
++ void registerSurface(uint32_t, Surface*);
+ struct wl_client* registerViewBackend(uint32_t, ExportableClient&);
+ void unregisterViewBackend(uint32_t);
+
+--
+2.20.1
+
Modified: trunk/Tools/wpe/jhbuild.modules (246147 => 246148)
--- trunk/Tools/wpe/jhbuild.modules 2019-06-06 09:31:40 UTC (rev 246147)
+++ trunk/Tools/wpe/jhbuild.modules 2019-06-06 11:34:02 UTC (rev 246148)
@@ -205,7 +205,10 @@
<dep package="glib"/>
</dependencies>
<branch repo="wpewebkit" module="wpebackend-fdo-1.3.0.tar.xz" version="1.3.0"
- hash="sha256:fed9ab29f5d53cf465188da80d014f3aa067c77704f8508c6bd17971fded359d"/>
+ hash="sha256:fed9ab29f5d53cf465188da80d014f3aa067c77704f8508c6bd17971fded359d">
+ <!-- Remove this when updating to 1.3.1 -->
+ <patch file="wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch" strip="1"/>
+ </branch>
</cmake>
<autotools id="libgpg-error" autogen-sh="configure">
Added: trunk/Tools/wpe/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch (0 => 246148)
--- trunk/Tools/wpe/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch (rev 0)
+++ trunk/Tools/wpe/patches/wpebackend-fdo-Handle-the-case-of-new-target-created-for-the-same-v.patch 2019-06-06 11:34:02 UTC (rev 246148)
@@ -0,0 +1,198 @@
+From 13cae95a3b38899f8fd5fc39a5d25fcc9500e09a Mon Sep 17 00:00:00 2001
+From: Carlos Garcia Campos <[email protected]>
+Date: Thu, 30 May 2019 14:04:29 +0200
+Subject: [PATCH] Handle the case of new target created for the same view
+ backend
+
+The client can remove a target and create a new one for the same view
+backend. In that case we need to unregister the current view backend in
+the wayland compositor before registering the new one. This patch renames
+WS::Instance::createSurface as registerSurface to clarify that it's not
+creating a new surface but registering a new one for the given id. Also
+ViewBackend::m_id has been renamed as m_surfaceId to clarify that's not
+the backend identifier, but the current surface identifier.
+---
+ src/renderer-backend-egl.cpp | 8 +++++-
+ src/view-backend-exportable-private.cpp | 35 +++++++++++++++++++++----
+ src/view-backend-exportable-private.h | 5 +++-
+ src/ws.cpp | 12 ++++-----
+ src/ws.h | 2 +-
+ 5 files changed, 48 insertions(+), 14 deletions(-)
+
+diff --git a/src/renderer-backend-egl.cpp b/src/renderer-backend-egl.cpp
+index 726d61c..7e11d5e 100644
+--- a/src/renderer-backend-egl.cpp
++++ b/src/renderer-backend-egl.cpp
+@@ -139,6 +139,11 @@ public:
+
+ ~Target()
+ {
++ if (m_wl.wpeBridgeId && m_glib.socket) {
++ uint32_t message[] = { 0x43, m_wl.wpeBridgeId };
++ g_socket_send(m_glib.socket, reinterpret_cast<gchar*>(message), 2 * sizeof(uint32_t), nullptr, nullptr);
++ }
++
+ g_clear_pointer(&m_wl.frameCallback, wl_callback_destroy);
+ g_clear_pointer(&m_wl.window, wl_egl_window_destroy);
+ g_clear_pointer(&m_wl.surface, wl_surface_destroy);
+@@ -223,6 +228,7 @@ public:
+
+ void bridgeConnected(uint32_t bridgeID)
+ {
++ m_wl.wpeBridgeId = bridgeID;
+ uint32_t message[] = { 0x42, bridgeID };
+ if (m_glib.socket)
+ g_socket_send(m_glib.socket, reinterpret_cast<gchar*>(message), 2 * sizeof(uint32_t), nullptr, nullptr);
+@@ -246,11 +252,11 @@ private:
+ } m_glib;
+
+ struct {
+- struct wl_display* displayWrapper { nullptr };
+ struct wl_event_queue* eventQueue { nullptr };
+ struct wl_registry* registry { nullptr };
+ struct wl_compositor* compositor { nullptr };
+ struct wpe_bridge* wpeBridge { nullptr };
++ uint32_t wpeBridgeId { 0 };
+
+ struct wl_surface* surface { nullptr };
+ struct wl_egl_window* window { nullptr };
+diff --git a/src/view-backend-exportable-private.cpp b/src/view-backend-exportable-private.cpp
+index d73102f..d10679b 100644
+--- a/src/view-backend-exportable-private.cpp
++++ b/src/view-backend-exportable-private.cpp
+@@ -39,7 +39,7 @@ ViewBackend::~ViewBackend()
+ for (auto* resource : m_callbackResources)
+ wl_resource_destroy(resource);
+
+- WS::Instance::singleton().unregisterViewBackend(m_id);
++ unregisterSurface(m_surfaceId);
+
+ if (m_clientFd != -1)
+ close(m_clientFd);
+@@ -117,6 +117,24 @@ void ViewBackend::releaseBuffer(struct wl_resource* buffer_resource)
+ wl_client_flush(m_client);
+ }
+
++void ViewBackend::registerSurface(uint32_t surfaceId)
++{
++ m_surfaceId = surfaceId;
++ m_client = WS::Instance::singleton().registerViewBackend(m_surfaceId, *this);
++}
++
++void ViewBackend::unregisterSurface(uint32_t surfaceId)
++{
++ if (!surfaceId || m_surfaceId != surfaceId)
++ return;
++
++ for (auto* resource : m_callbackResources)
++ wl_resource_destroy(resource);
++ m_callbackResources.clear();
++ WS::Instance::singleton().unregisterViewBackend(m_surfaceId);
++ m_surfaceId = 0;
++}
++
+ gboolean ViewBackend::s_socketCallback(GSocket* socket, GIOCondition condition, gpointer data)
+ {
+ if (!(condition & G_IO_IN))
+@@ -128,10 +146,17 @@ gboolean ViewBackend::s_socketCallback(GSocket* socket, GIOCondition condition,
+ if (len == -1)
+ return FALSE;
+
+- if (len == sizeof(uint32_t) * 2 && message[0] == 0x42) {
+- auto& viewBackend = *static_cast<ViewBackend*>(data);
+- viewBackend.m_id = message[1];
+- viewBackend.m_client = WS::Instance::singleton().registerViewBackend(viewBackend.m_id, viewBackend);
++ if (len != sizeof(uint32_t) * 2)
++ return TRUE;
++
++ auto& viewBackend = *static_cast<ViewBackend*>(data);
++ switch (message[0]) {
++ case 0x42:
++ viewBackend.registerSurface(message[1]);
++ break;
++ case 0x43:
++ viewBackend.unregisterSurface(message[1]);
++ break;
+ }
+
+ return TRUE;
+diff --git a/src/view-backend-exportable-private.h b/src/view-backend-exportable-private.h
+index b27494e..73f3497 100644
+--- a/src/view-backend-exportable-private.h
++++ b/src/view-backend-exportable-private.h
+@@ -67,9 +67,12 @@ public:
+ void releaseBuffer(struct wl_resource* buffer_resource);
+
+ private:
++ void registerSurface(uint32_t);
++ void unregisterSurface(uint32_t);
++
+ static gboolean s_socketCallback(GSocket*, GIOCondition, gpointer);
+
+- uint32_t m_id { 0 };
++ uint32_t m_surfaceId { 0 };
+ struct wl_client* m_client { nullptr };
+
+ ClientBundle* m_clientBundle;
+diff --git a/src/ws.cpp b/src/ws.cpp
+index a856e0b..1aac351 100644
+--- a/src/ws.cpp
++++ b/src/ws.cpp
+@@ -231,7 +231,7 @@ static const struct wpe_bridge_interface s_wpeBridgeInterface = {
+ static uint32_t bridgeID = 0;
+ ++bridgeID;
+ wpe_bridge_send_connected(resource, bridgeID);
+- Instance::singleton().createSurface(bridgeID, surface);
++ Instance::singleton().registerSurface(bridgeID, surface);
+ },
+ };
+
+@@ -393,7 +393,7 @@ int Instance::createClient()
+ return clientFd;
+ }
+
+-void Instance::createSurface(uint32_t id, Surface* surface)
++void Instance::registerSurface(uint32_t id, Surface* surface)
+ {
+ m_viewBackendMap.insert({ id, surface });
+ }
+@@ -538,9 +538,9 @@ void Instance::foreachDmaBufModifier(std::function<void (int format, uint64_t mo
+ }
+ }
+
+-struct wl_client* Instance::registerViewBackend(uint32_t id, ExportableClient& exportableClient)
++struct wl_client* Instance::registerViewBackend(uint32_t surfaceId, ExportableClient& exportableClient)
+ {
+- auto it = m_viewBackendMap.find(id);
++ auto it = m_viewBackendMap.find(surfaceId);
+ if (it == m_viewBackendMap.end())
+ std::abort();
+
+@@ -548,9 +548,9 @@ struct wl_client* Instance::registerViewBackend(uint32_t id, ExportableClient& e
+ return it->second->client;
+ }
+
+-void Instance::unregisterViewBackend(uint32_t id)
++void Instance::unregisterViewBackend(uint32_t surfaceId)
+ {
+- auto it = m_viewBackendMap.find(id);
++ auto it = m_viewBackendMap.find(surfaceId);
+ if (it != m_viewBackendMap.end()) {
+ it->second->exportableClient = nullptr;
+ m_viewBackendMap.erase(it);
+diff --git a/src/ws.h b/src/ws.h
+index d4c2bff..5cb88e7 100644
+--- a/src/ws.h
++++ b/src/ws.h
+@@ -53,7 +53,7 @@ public:
+
+ int createClient();
+
+- void createSurface(uint32_t, Surface*);
++ void registerSurface(uint32_t, Surface*);
+ struct wl_client* registerViewBackend(uint32_t, ExportableClient&);
+ void unregisterViewBackend(uint32_t);
+
+--
+2.20.1
+