Diff
Modified: trunk/Source/WebKit/ChangeLog (225043 => 225044)
--- trunk/Source/WebKit/ChangeLog 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Source/WebKit/ChangeLog 2017-11-20 08:16:26 UTC (rev 225044)
@@ -1,5 +1,54 @@
2017-11-20 Carlos Garcia Campos <[email protected]>
+ [WPE] webkit_web_view_new() should enable specifying wpe_view_backend object
+ https://bugs.webkit.org/show_bug.cgi?id=178655
+
+ Reviewed by Michael Catanzaro.
+
+ Update all WebKitWebView constructors to receive a WebKitWebViewBackend as argument. It's now required to
+ provide a backend to create a web view, but it can be NULL to use the default one. WebKitWebViewBackend is a
+ boxed type wrapping a struct wpe_view_backend* used as construct only property of WebKitWebView. The view always
+ takes the ownership of the WebKitWebViewBackend which owns the struct wpe_view_backend*. An optional
+ GDestroyNotify and user data pointer can be passed to the WebKitWebViewBackend constructor to provide a custom
+ deleter for the backend. In the C API the struct wpe_view_backend* is also mandatory now, but it can't be NULL
+ and it's owned by the caller, not the view.
+
+ * PlatformWPE.cmake:
+ * UIProcess/API/C/wpe/WKView.cpp:
+ (WKViewCreate):
+ * UIProcess/API/C/wpe/WKView.h:
+ * UIProcess/API/glib/WebKitWebView.cpp:
+ (_WebKitWebViewPrivate::~_WebKitWebViewPrivate):
+ (webkitWebViewConstructed):
+ (webkitWebViewSetProperty):
+ (webkitWebViewGetProperty):
+ (webkit_web_view_class_init):
+ (webkitWebViewCreatePage):
+ (webkit_web_view_get_backend):
+ * UIProcess/API/wpe/WPEView.cpp:
+ (WKWPE::m_backend):
+ (WKWPE::View::~View):
+ * UIProcess/API/wpe/WebKitWebView.h:
+ * UIProcess/API/wpe/WebKitWebViewBackend.cpp: Added.
+ (_WebKitWebViewBackend::_WebKitWebViewBackend):
+ (_WebKitWebViewBackend::~_WebKitWebViewBackend):
+ (webkitWebViewBackendRef):
+ (webkitWebViewBackendUnref):
+ (webkitWebViewBackendCreateDefault):
+ (webkit_web_view_backend_new):
+ (webkit_web_view_backend_get_wpe_backend):
+ * UIProcess/API/wpe/WebKitWebViewBackend.h: Added.
+ * UIProcess/API/wpe/WebKitWebViewBackendPrivate.h: Added.
+ * UIProcess/API/wpe/WebKitWebViewWPE.cpp:
+ (webkit_web_view_new):
+ (webkit_web_view_new_with_context):
+ (webkit_web_view_new_with_related_view):
+ (webkit_web_view_new_with_settings):
+ (webkit_web_view_new_with_user_content_manager):
+ * UIProcess/API/wpe/webkit.h:
+
+2017-11-20 Carlos Garcia Campos <[email protected]>
+
[GTK][WPE] webkit_cookie_manager_delete_all_cookies doesn't delete the cookies if called before a web process is running
https://bugs.webkit.org/show_bug.cgi?id=175265
Modified: trunk/Source/WebKit/PlatformWPE.cmake (225043 => 225044)
--- trunk/Source/WebKit/PlatformWPE.cmake 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Source/WebKit/PlatformWPE.cmake 2017-11-20 08:16:26 UTC (rev 225044)
@@ -202,6 +202,7 @@
UIProcess/API/wpe/PageClientImpl.cpp
UIProcess/API/wpe/ScrollGestureController.cpp
UIProcess/API/wpe/WebKitScriptDialogWPE.cpp
+ UIProcess/API/wpe/WebKitWebViewBackend.cpp
UIProcess/API/wpe/WebKitWebViewWPE.cpp
UIProcess/API/wpe/WPEView.cpp
@@ -333,6 +334,7 @@
${WEBKIT_DIR}/UIProcess/API/wpe/WebKitWebContext.h
${WEBKIT_DIR}/UIProcess/API/wpe/WebKitWebResource.h
${WEBKIT_DIR}/UIProcess/API/wpe/WebKitWebView.h
+ ${WEBKIT_DIR}/UIProcess/API/wpe/WebKitWebViewBackend.h
${WEBKIT_DIR}/UIProcess/API/wpe/WebKitWebViewSessionState.h
${WEBKIT_DIR}/UIProcess/API/wpe/WebKitWebsiteData.h
${WEBKIT_DIR}/UIProcess/API/wpe/WebKitWebsiteDataManager.h
Modified: trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp (225043 => 225044)
--- trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -40,13 +40,8 @@
};
}
-WKViewRef WKViewCreate(WKPageConfigurationRef configuration)
+WKViewRef WKViewCreate(struct wpe_view_backend* backend, WKPageConfigurationRef configuration)
{
- return toAPI(WKWPE::View::create(nullptr, *toImpl(configuration)));
-}
-
-WKViewRef WKViewCreateWithViewBackend(struct wpe_view_backend* backend, WKPageConfigurationRef configuration)
-{
return toAPI(WKWPE::View::create(backend, *toImpl(configuration)));
}
Modified: trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.h (225043 => 225044)
--- trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.h 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Source/WebKit/UIProcess/API/C/wpe/WKView.h 2017-11-20 08:16:26 UTC (rev 225044)
@@ -35,8 +35,7 @@
struct wpe_view_backend;
-WK_EXPORT WKViewRef WKViewCreate(WKPageConfigurationRef);
-WK_EXPORT WKViewRef WKViewCreateWithViewBackend(struct wpe_view_backend*, WKPageConfigurationRef);
+WK_EXPORT WKViewRef WKViewCreate(struct wpe_view_backend*, WKPageConfigurationRef);
WK_EXPORT WKPageRef WKViewGetPage(WKViewRef);
Modified: trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp (225043 => 225044)
--- trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Source/WebKit/UIProcess/API/glib/WebKitWebView.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -84,6 +84,7 @@
#if PLATFORM(WPE)
#include "APIViewClient.h"
#include "WPEView.h"
+#include "WebKitWebViewBackendPrivate.h"
#endif
#if USE(LIBNOTIFY)
@@ -161,6 +162,10 @@
enum {
PROP_0,
+#if PLATFORM(WPE)
+ PROP_BACKEND,
+#endif
+
PROP_WEB_CONTEXT,
PROP_RELATED_VIEW,
PROP_SETTINGS,
@@ -192,9 +197,14 @@
// For modal dialogs, make sure the main loop is stopped when finalizing the webView.
if (modalLoop && g_main_loop_is_running(modalLoop.get()))
g_main_loop_quit(modalLoop.get());
+#if PLATFORM(WPE)
+ view = nullptr;
+ webkitWebViewBackendUnref(backend);
+#endif
}
#if PLATFORM(WPE)
+ WebKitWebViewBackend* backend;
std::unique_ptr<WKWPE::View> view;
#endif
@@ -619,6 +629,10 @@
WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
WebKitWebViewPrivate* priv = webView->priv;
+#if PLATFORM(WPE)
+ if (!priv->backend)
+ priv->backend = webkitWebViewBackendCreateDefault();
+#endif
if (priv->relatedView) {
priv->context = webkit_web_view_get_context(priv->relatedView);
priv->isEphemeral = webkit_web_view_is_ephemeral(priv->relatedView);
@@ -673,6 +687,13 @@
WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
switch (propId) {
+#if PLATFORM(WPE)
+ case PROP_BACKEND: {
+ gpointer backend = g_value_get_boxed(value);
+ webView->priv->backend = backend ? static_cast<WebKitWebViewBackend*>(backend) : nullptr;
+ break;
+ }
+#endif
case PROP_WEB_CONTEXT: {
gpointer webContext = g_value_get_object(value);
webView->priv->context = webContext ? WEBKIT_WEB_CONTEXT(webContext) : nullptr;
@@ -715,6 +736,11 @@
WebKitWebView* webView = WEBKIT_WEB_VIEW(object);
switch (propId) {
+#if PLATFORM(WPE)
+ case PROP_BACKEND:
+ g_value_set_static_boxed(value, webView->priv->backend);
+ break;
+#endif
case PROP_WEB_CONTEXT:
g_value_set_object(value, webView->priv->context.get());
break;
@@ -821,7 +847,26 @@
webViewClass->authenticate = webkitWebViewAuthenticate;
webViewClass->show_notification = webkitWebViewShowNotification;
+#if PLATFORM(WPE)
/**
+ * WebKitWebView:backend:
+ *
+ * The #WebKitWebViewBackend of the view.
+ *
+ * since: 2.20
+ */
+ g_object_class_install_property(
+ gObjectClass,
+ PROP_BACKEND,
+ g_param_spec_boxed(
+ "backend",
+ _("Backend"),
+ _("The backend for the web view"),
+ WEBKIT_TYPE_WEB_VIEW_BACKEND,
+ static_cast<GParamFlags>(WEBKIT_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY)));
+#endif
+
+ /**
* WebKitWebView:web-context:
*
* The #WebKitWebContext of the view.
@@ -1915,7 +1960,7 @@
#if PLATFORM(GTK)
webkitWebViewBaseCreateWebPage(WEBKIT_WEB_VIEW_BASE(webView), WTFMove(configuration));
#elif PLATFORM(WPE)
- webView->priv->view.reset(WKWPE::View::create(nullptr, configuration.get()));
+ webView->priv->view.reset(WKWPE::View::create(webkit_web_view_backend_get_wpe_backend(webView->priv->backend), configuration.get()));
#endif
}
@@ -2347,7 +2392,26 @@
}
#endif
+#if PLATFORM(WPE)
/**
+ * webkit_web_view_get_backend:
+ * @web_view: a #WebKitWebView
+ *
+ * Get the #WebKitWebViewBackend of @web_view
+ *
+ * Returns: (transfer none): the #WebKitWebViewBackend of @web_view
+ *
+ * Since: 2.20
+ */
+WebKitWebViewBackend* webkit_web_view_get_backend(WebKitWebView* webView)
+{
+ g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), nullptr);
+
+ return webView->priv->backend;
+}
+#endif
+
+/**
* webkit_web_view_get_context:
* @web_view: a #WebKitWebView
*
Modified: trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp (225043 => 225044)
--- trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WPEView.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -48,7 +48,10 @@
, m_size { 800, 600 }
, m_viewStateFlags(WebCore::ActivityState::WindowIsActive | WebCore::ActivityState::IsFocused | WebCore::ActivityState::IsVisible | WebCore::ActivityState::IsInWindow)
, m_compositingManagerProxy(*this)
+ , m_backend(backend)
{
+ ASSERT(m_backend);
+
auto configuration = baseConfiguration.copy();
auto* preferences = configuration->preferences();
if (!preferences && configuration->pageGroup()) {
@@ -71,9 +74,6 @@
pool->startMemorySampler(0);
#endif
- m_backend = backend;
- if (!m_backend)
- m_backend = wpe_view_backend_create();
m_compositingManagerProxy.initialize();
static struct wpe_view_backend_client s_backendClient = {
@@ -136,7 +136,6 @@
View::~View()
{
m_compositingManagerProxy.finalize();
- wpe_view_backend_destroy(m_backend);
}
void View::setClient(std::unique_ptr<API::ViewClient>&& client)
Modified: trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebView.h (225043 => 225044)
--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebView.h 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebView.h 2017-11-20 08:16:26 UTC (rev 225044)
@@ -49,6 +49,7 @@
#include <wpe/WebKitUserContentManager.h>
#include <wpe/WebKitWebContext.h>
#include <wpe/WebKitWebResource.h>
+#include <wpe/WebKitWebViewBackend.h>
#include <wpe/WebKitWebViewSessionState.h>
#include <wpe/WebKitWindowProperties.h>
@@ -228,20 +229,27 @@
webkit_web_view_get_type (void);
WEBKIT_API WebKitWebView *
-webkit_web_view_new (void);
+webkit_web_view_new (WebKitWebViewBackend *backend);
WEBKIT_API WebKitWebView *
-webkit_web_view_new_with_context (WebKitWebContext *context);
+webkit_web_view_new_with_context (WebKitWebViewBackend *backend,
+ WebKitWebContext *context);
WEBKIT_API WebKitWebView *
-webkit_web_view_new_with_settings (WebKitSettings *settings);
+webkit_web_view_new_with_settings (WebKitWebViewBackend *backend,
+ WebKitSettings *settings);
WEBKIT_API WebKitWebView *
-webkit_web_view_new_with_related_view (WebKitWebView *web_view);
+webkit_web_view_new_with_related_view (WebKitWebViewBackend *backend,
+ WebKitWebView *web_view);
WEBKIT_API WebKitWebView *
-webkit_web_view_new_with_user_content_manager (WebKitUserContentManager *user_content_manager);
+webkit_web_view_new_with_user_content_manager (WebKitWebViewBackend *backend,
+ WebKitUserContentManager *user_content_manager);
+WEBKIT_API WebKitWebViewBackend *
+webkit_web_view_get_backend (WebKitWebView *web_view);
+
WEBKIT_API gboolean
webkit_web_view_is_ephemeral (WebKitWebView *web_view);
Added: trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewBackend.cpp (0 => 225044)
--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewBackend.cpp (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewBackend.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -0,0 +1,131 @@
+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#include "config.h"
+#include "WebKitWebViewBackend.h"
+
+#include "WebKitWebViewBackendPrivate.h"
+
+/**
+ * SECTION: WebKitWebViewBackend
+ * @Short_description: A web view backend
+ * @Title: WebKitWebViewBackend
+ * @See_also: #WebKitWebView.
+ *
+ * A WebKitWebViewBackend is a boxed type wrapping a WPE backend used to create a
+ * #WebKitWebView. A WebKitWebViewBackend is created with webkit_web_view_backend_new()
+ * and it should be passed to a WebKitWebView constructor that will take the ownership.
+ *
+ * Since: 2.20
+ */
+
+struct _WebKitWebViewBackend {
+ _WebKitWebViewBackend(struct wpe_view_backend* backend, GDestroyNotify notifyCallback, gpointer notifyCallbackData)
+ : backend(backend)
+ , notifyCallback(notifyCallback)
+ , notifyCallbackData(notifyCallbackData)
+ {
+ ASSERT(backend);
+ ASSERT(notifyCallback);
+ ASSERT(notifyCallbackData);
+ }
+
+ _WebKitWebViewBackend()
+ : backend(wpe_view_backend_create())
+ , notifyCallback(reinterpret_cast<GDestroyNotify>(wpe_view_backend_destroy))
+ , notifyCallbackData(backend)
+ {
+ }
+
+ ~_WebKitWebViewBackend()
+ {
+ notifyCallback(notifyCallbackData);
+ }
+
+ struct wpe_view_backend* backend;
+ GDestroyNotify notifyCallback;
+ gpointer notifyCallbackData;
+ int referenceCount { 1 };
+};
+
+static WebKitWebViewBackend* webkitWebViewBackendRef(WebKitWebViewBackend* viewBackend)
+{
+ ASSERT(viewBackend);
+ g_atomic_int_inc(&viewBackend->referenceCount);
+ return viewBackend;
+}
+
+G_DEFINE_BOXED_TYPE(WebKitWebViewBackend, webkit_web_view_backend, webkitWebViewBackendRef, webkitWebViewBackendUnref)
+
+void webkitWebViewBackendUnref(WebKitWebViewBackend* viewBackend)
+{
+ ASSERT(viewBackend);
+ if (g_atomic_int_dec_and_test(&viewBackend->referenceCount)) {
+ viewBackend->~WebKitWebViewBackend();
+ fastFree(viewBackend);
+ }
+}
+
+WebKitWebViewBackend* webkitWebViewBackendCreateDefault()
+{
+ auto* viewBackend = static_cast<WebKitWebViewBackend*>(fastMalloc(sizeof(WebKitWebViewBackend)));
+ new (viewBackend) WebKitWebViewBackend();
+ return viewBackend;
+}
+
+/**
+ * webkit_web_view_backend_new:
+ * @backend: (transfer full): a #wpe_view_backend
+ * @notify: (nullable): a #GDestroyNotify, or %NULL
+ * @user_data: user data to pass to @notify
+ *
+ * Create a new #WebKitWebViewBackend for the given WPE @backend. You can pass a #GDestroyNotify
+ * that will be called when the object is destroyed passing @user_data as the argument. If @notify
+ * is %NULL, wpe_view_backend_destroy() will be used with @backend as argument.
+ * The returned #WebKitWebViewBackend should never be freed by the user; it must be passed to a
+ * #WebKitWebView constructor that will take the ownership.
+ *
+ * Returns: a newly created #WebKitWebViewBackend
+ *
+ * Since: 2.20
+ */
+WebKitWebViewBackend* webkit_web_view_backend_new(struct wpe_view_backend* backend, GDestroyNotify notify, gpointer userData)
+{
+ g_return_val_if_fail(backend, nullptr);
+
+ auto* viewBackend = static_cast<WebKitWebViewBackend*>(fastMalloc(sizeof(WebKitWebViewBackend)));
+ new (viewBackend) WebKitWebViewBackend(backend, notify ? notify : reinterpret_cast<GDestroyNotify>(wpe_view_backend_destroy), notify ? userData : backend);
+ return viewBackend;
+}
+
+/**
+ * webkit_web_view_backend_get_wpe_backend:
+ * @view_backend: a #WebKitWebViewBackend
+ *
+ * Get the WPE backend of @view_backend
+ *
+ * Returns: (transfer none): the #wpe_view_backend
+ *
+ * Since: 2.20
+ */
+struct wpe_view_backend* webkit_web_view_backend_get_wpe_backend(WebKitWebViewBackend* viewBackend)
+{
+ g_return_val_if_fail(viewBackend, nullptr);
+ return viewBackend->backend;
+}
Added: trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewBackend.h (0 => 225044)
--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewBackend.h (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewBackend.h 2017-11-20 08:16:26 UTC (rev 225044)
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#if !defined(__WEBKIT_H_INSIDE__) && !defined(WEBKIT2_COMPILATION)
+#error "Only <wpe/webkit.h> can be included directly."
+#endif
+
+#ifndef WebKitWebViewBackend_h
+#define WebKitWebViewBackend_h
+
+#include <glib-object.h>
+#include <wpe/WebKitDefines.h>
+#include <wpe/view-backend.h>
+
+G_BEGIN_DECLS
+
+#define WEBKIT_TYPE_WEB_VIEW_BACKEND (webkit_web_view_backend_get_type())
+
+typedef struct _WebKitWebViewBackend WebKitWebViewBackend;
+
+WEBKIT_API GType
+webkit_web_view_backend_get_type (void);
+
+WEBKIT_API WebKitWebViewBackend *
+webkit_web_view_backend_new (struct wpe_view_backend *backend,
+ GDestroyNotify notify,
+ gpointer user_data);
+WEBKIT_API struct wpe_view_backend *
+webkit_web_view_backend_get_wpe_backend (WebKitWebViewBackend *view_backend);
+
+G_END_DECLS
+
+#endif /* WebKitWebViewBackend_h */
Added: trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewBackendPrivate.h (0 => 225044)
--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewBackendPrivate.h (rev 0)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewBackendPrivate.h 2017-11-20 08:16:26 UTC (rev 225044)
@@ -0,0 +1,25 @@
+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#pragma once
+
+#include "WebKitWebViewBackend.h"
+
+void webkitWebViewBackendUnref(WebKitWebViewBackend*);
+WebKitWebViewBackend* webkitWebViewBackendCreateDefault();
Modified: trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp (225043 => 225044)
--- trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Source/WebKit/UIProcess/API/wpe/WebKitWebViewWPE.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -39,6 +39,7 @@
/**
* webkit_web_view_new:
+ * @backend: (nullable) (transfer full): a #WebKitWebViewBackend, or %NULL to use the default
*
* Creates a new #WebKitWebView with the default #WebKitWebContext and
* no #WebKitUserContentManager associated with it.
@@ -48,13 +49,17 @@
*
* Returns: The newly created #WebKitWebView
*/
-WebKitWebView* webkit_web_view_new()
+WebKitWebView* webkit_web_view_new(WebKitWebViewBackend* backend)
{
- return webkit_web_view_new_with_context(webkit_web_context_get_default());
+ return WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
+ "backend", backend,
+ "web-context", webkit_web_context_get_default(),
+ nullptr));
}
/**
* webkit_web_view_new_with_context:
+ * @backend: (nullable) (transfer full): a #WebKitWebViewBackend, or %NULL to use the default
* @context: the #WebKitWebContext to be used by the #WebKitWebView
*
* Creates a new #WebKitWebView with the given #WebKitWebContext and
@@ -64,11 +69,12 @@
*
* Returns: The newly created #WebKitWebView
*/
-WebKitWebView* webkit_web_view_new_with_context(WebKitWebContext* context)
+WebKitWebView* webkit_web_view_new_with_context(WebKitWebViewBackend* backend, WebKitWebContext* context)
{
g_return_val_if_fail(WEBKIT_IS_WEB_CONTEXT(context), nullptr);
return WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
+ "backend", backend,
"is-ephemeral", webkit_web_context_is_ephemeral(context),
"web-context", context,
nullptr));
@@ -76,6 +82,7 @@
/**
* webkit_web_view_new_with_related_view: (constructor)
+ * @backend: (nullable) (transfer full): a #WebKitWebViewBackend, or %NULL to use the default
* @web_view: the related #WebKitWebView
*
* Creates a new #WebKitWebView sharing the same web process with @web_view.
@@ -93,11 +100,12 @@
*
* Since: 2.4
*/
-WebKitWebView* webkit_web_view_new_with_related_view(WebKitWebView* webView)
+WebKitWebView* webkit_web_view_new_with_related_view(WebKitWebViewBackend* backend, WebKitWebView* webView)
{
g_return_val_if_fail(WEBKIT_IS_WEB_VIEW(webView), nullptr);
return WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
+ "backend", backend,
"user-content-manager", webkit_web_view_get_user_content_manager(webView),
"settings", webkit_web_view_get_settings(webView),
"related-view", webView,
@@ -106,6 +114,7 @@
/**
* webkit_web_view_new_with_settings:
+ * @backend: (nullable) (transfer full): a #WebKitWebViewBackend, or %NULL to use the default
* @settings: a #WebKitSettings
*
* Creates a new #WebKitWebView with the given #WebKitSettings.
@@ -116,14 +125,19 @@
*
* Since: 2.6
*/
-WebKitWebView* webkit_web_view_new_with_settings(WebKitSettings* settings)
+WebKitWebView* webkit_web_view_new_with_settings(WebKitWebViewBackend* backend, WebKitSettings* settings)
{
g_return_val_if_fail(WEBKIT_IS_SETTINGS(settings), nullptr);
- return WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW, "settings", settings, nullptr));
+
+ return WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
+ "backend", backend,
+ "settings", settings,
+ nullptr));
}
/**
* webkit_web_view_new_with_user_content_manager:
+ * @backend: (nullable) (transfer full): a #WebKitWebViewBackend, or %NULL to use the default
* @user_content_manager: a #WebKitUserContentManager.
*
* Creates a new #WebKitWebView with the given #WebKitUserContentManager.
@@ -134,9 +148,12 @@
*
* Since: 2.6
*/
-WebKitWebView* webkit_web_view_new_with_user_content_manager(WebKitUserContentManager* userContentManager)
+WebKitWebView* webkit_web_view_new_with_user_content_manager(WebKitWebViewBackend* backend, WebKitUserContentManager* userContentManager)
{
g_return_val_if_fail(WEBKIT_IS_USER_CONTENT_MANAGER(userContentManager), nullptr);
- return WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW, "user-content-manager", userContentManager, nullptr));
+ return WEBKIT_WEB_VIEW(g_object_new(WEBKIT_TYPE_WEB_VIEW,
+ "backend", backend,
+ "user-content-manager", userContentManager,
+ nullptr));
}
Modified: trunk/Source/WebKit/UIProcess/API/wpe/webkit.h (225043 => 225044)
--- trunk/Source/WebKit/UIProcess/API/wpe/webkit.h 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Source/WebKit/UIProcess/API/wpe/webkit.h 2017-11-20 08:16:26 UTC (rev 225044)
@@ -72,6 +72,7 @@
#include <wpe/WebKitWebContext.h>
#include <wpe/WebKitWebResource.h>
#include <wpe/WebKitWebView.h>
+#include <wpe/WebKitWebViewBackend.h>
#include <wpe/WebKitWebViewSessionState.h>
#include <wpe/WebKitWebsiteData.h>
#include <wpe/WebKitWebsiteDataManager.h>
Modified: trunk/Tools/ChangeLog (225043 => 225044)
--- trunk/Tools/ChangeLog 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/ChangeLog 2017-11-20 08:16:26 UTC (rev 225044)
@@ -1,5 +1,45 @@
2017-11-20 Carlos Garcia Campos <[email protected]>
+ [WPE] webkit_web_view_new() should enable specifying wpe_view_backend object
+ https://bugs.webkit.org/show_bug.cgi?id=178655
+
+ Reviewed by Michael Catanzaro.
+
+ Update unit tests to create web views using helper methods that have a different implementation for GTK and
+ WPE. Also add a new test case to check the new API to create a WebKitWebView with a WPE backend. Use
+ WKViewCreate in WTR and fix a memory leak in HeadlessViewBackend.
+
+ * TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp:
+ (testAutomationSessionRequestSession):
+ * TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp:
+ (testWebKitWebViewSessionState):
+ (testWebKitWebViewSessionStateWithFormData):
+ (testWebKitWebViewNavigationAfterSessionRestore):
+ * TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp:
+ * TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp:
+ (testWebResourceGetDataError):
+ * TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp:
+ * TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp:
+ (testWebViewNewWithUserContentManager):
+ * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp:
+ (testWebContextEphemeral):
+ * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
+ (testWebViewWebContext):
+ (testWebViewWebContextLifetime):
+ (testWebViewWebBackend):
+ (testWebViewSettings):
+ (beforeAll):
+ * TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp:
+ (testWebsiteDataEphemeral):
+ * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
+ (Test::createWebView):
+ * WebKitTestRunner/wpe/HeadlessViewBackend.cpp:
+ (HeadlessViewBackend::~HeadlessViewBackend):
+ * WebKitTestRunner/wpe/PlatformWebViewWPE.cpp:
+ (WTR::PlatformWebView::PlatformWebView):
+
+2017-11-20 Carlos Garcia Campos <[email protected]>
+
[GTK][WPE] webkit_cookie_manager_delete_all_cookies doesn't delete the cookies if called before a web process is running
https://bugs.webkit.org/show_bug.cgi?id=175265
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestAutomationSession.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -308,7 +308,7 @@
g_assert(!test->createTopLevelBrowsingContext(nullptr));
// Will also fail if the web view is not controlled by automation.
- auto webView = Test::adoptView(webkit_web_view_new_with_context(test->m_webContext.get()));
+ auto webView = Test::adoptView(Test::createWebView(test->m_webContext.get()));
g_assert(!webkit_web_view_is_controlled_by_automation(webView.get()));
g_assert(!test->createTopLevelBrowsingContext(webView.get()));
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestBackForwardList.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -266,7 +266,7 @@
{
WebKitWebViewSessionState* state = webkit_web_view_get_session_state(test->m_webView);
g_assert(state);
- auto view = Test::adoptView(webkit_web_view_new());
+ auto view = Test::adoptView(Test::createWebView());
WebKitBackForwardList* bfList = webkit_web_view_get_back_forward_list(view.get());
g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0);
webkit_web_view_restore_session_state(view.get(), state);
@@ -275,7 +275,7 @@
g_assert(data);
state = webkit_web_view_session_state_new(data.get());
g_assert(state);
- view = Test::adoptView(webkit_web_view_new());
+ view = Test::adoptView(Test::createWebView());
bfList = webkit_web_view_get_back_forward_list(view.get());
g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0);
webkit_web_view_restore_session_state(view.get(), state);
@@ -318,7 +318,7 @@
state = webkit_web_view_session_state_new(data.get());
g_assert(state);
- view = Test::adoptView(webkit_web_view_new());
+ view = Test::adoptView(Test::createWebView());
bfList = webkit_web_view_get_back_forward_list(view.get());
g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0);
webkit_web_view_restore_session_state(view.get(), state);
@@ -347,7 +347,7 @@
WebKitWebViewSessionState* state = webkit_web_view_get_session_state(test->m_webView);
g_assert(state);
- auto view = Test::adoptView(webkit_web_view_new());
+ auto view = Test::adoptView(Test::createWebView());
WebKitBackForwardList* bfList = webkit_web_view_get_back_forward_list(view.get());
g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0);
webkit_web_view_restore_session_state(view.get(), state);
@@ -356,7 +356,7 @@
g_assert(data);
state = webkit_web_view_session_state_new(data.get());
g_assert(state);
- view = Test::adoptView(webkit_web_view_new());
+ view = Test::adoptView(Test::createWebView());
bfList = webkit_web_view_get_back_forward_list(view.get());
g_assert_cmpuint(webkit_back_forward_list_get_length(bfList), ==, 0);
webkit_web_view_restore_session_state(view.get(), state);
@@ -374,7 +374,7 @@
{
// This test checks that a normal load after a session restore with a BackForard list having
// forward items doesn't produce any runtime critical warning. See https://bugs.webkit.org/show_bug.cgi?id=153233.
- auto view = Test::adoptView(webkit_web_view_new());
+ auto view = Test::adoptView(Test::createWebView());
g_signal_connect(view.get(), "load-changed", G_CALLBACK(viewLoadChanged), test->m_mainLoop);
webkit_web_view_load_uri(view.get(), kServer->getURIForPath("/Page1").data());
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestMultiprocess.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -58,7 +58,7 @@
{
g_assert_cmpuint(index, <, numViews);
- m_webViews[index] = Test::adoptView(webkit_web_view_new_with_context(m_webContext.get()));
+ m_webViews[index] = Test::adoptView(Test::createWebView(m_webContext.get()));
assertObjectIsDeletedWhenTestFinishes(G_OBJECT(m_webViews[index].get()));
m_webViewBusNames[index] = GUniquePtr<char>(g_strdup_printf("org.webkit.gtk.WebExtensionTest%u", Test::s_webExtensionID));
@@ -170,7 +170,7 @@
, m_initializeWebExtensionsSignalCount(0)
{
webkit_web_context_set_process_model(m_webContext.get(), WEBKIT_PROCESS_MODEL_MULTIPLE_SECONDARY_PROCESSES);
- m_webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(m_webContext.get()));
+ m_webView = WEBKIT_WEB_VIEW(Test::createWebView(m_webContext.get()));
#if PLATFORM(GTK)
g_object_ref_sink(m_webView);
#endif
@@ -195,7 +195,7 @@
{
g_assert(webView == m_webView);
- auto* newWebView = webkit_web_view_new_with_related_view(webView);
+ auto* newWebView = Test::createWebView(webView);
#if PLATFORM(GTK)
g_object_ref_sink(newWebView);
#endif
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestResources.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -547,7 +547,7 @@
static void testWebResourceGetDataError(Test* test, gconstpointer)
{
GRefPtr<GMainLoop> mainLoop = adoptGRef(g_main_loop_new(nullptr, FALSE));
- GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(test->m_webContext.get()));
+ GRefPtr<WebKitWebView> webView = WEBKIT_WEB_VIEW(Test::createWebView(test->m_webContext.get()));
webkit_web_view_load_html(webView.get(), "<html></html>", nullptr);
g_signal_connect(webView.get(), "load-changed", G_CALLBACK(webViewloadChanged), mainLoop.get());
g_main_loop_run(mainLoop.get());
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestUIClient.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -321,7 +321,7 @@
g_assert(webView == m_webView);
g_assert(navigation);
- auto* newWebView = webkit_web_view_new_with_context(webkit_web_view_get_context(webView));
+ auto* newWebView = Test::createWebView(webkit_web_view_get_context(webView));
#if PLATFORM(GTK)
g_object_ref_sink(newWebView);
#endif
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitUserContentManager.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -40,10 +40,10 @@
{
GRefPtr<WebKitUserContentManager> userContentManager1 = adoptGRef(webkit_user_content_manager_new());
test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(userContentManager1.get()));
- auto webView1 = Test::adoptView(webkit_web_view_new_with_user_content_manager(userContentManager1.get()));
+ auto webView1 = Test::adoptView(Test::createWebView(userContentManager1.get()));
g_assert(webkit_web_view_get_user_content_manager(webView1.get()) == userContentManager1.get());
- auto webView2 = Test::adoptView(webkit_web_view_new());
+ auto webView2 = Test::adoptView(Test::createWebView());
g_assert(webkit_web_view_get_user_content_manager(webView2.get()) != userContentManager1.get());
}
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebContext.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -51,11 +51,11 @@
g_assert(WEBKIT_IS_WEBSITE_DATA_MANAGER(manager));
g_assert(!webkit_website_data_manager_is_ephemeral(manager));
- auto webView = Test::adoptView(webkit_web_view_new());
+ auto webView = Test::adoptView(Test::createWebView());
g_assert(!webkit_web_view_is_ephemeral(webView.get()));
g_assert(webkit_web_view_get_website_data_manager(webView.get()) == webkit_web_context_get_website_data_manager(webkit_web_context_get_default()));
- webView = Test::adoptView(webkit_web_view_new_with_context(test->m_webContext.get()));
+ webView = Test::adoptView(Test::createWebView(test->m_webContext.get()));
g_assert(!webkit_web_view_is_ephemeral(webView.get()));
g_assert(webkit_web_view_get_website_data_manager(webView.get()) == manager);
@@ -66,7 +66,7 @@
g_assert(webkit_website_data_manager_is_ephemeral(manager));
g_assert(webkit_web_view_get_website_data_manager(webView.get()) != manager);
- webView = Test::adoptView(webkit_web_view_new_with_context(context.get()));
+ webView = Test::adoptView(Test::createWebView(context.get()));
g_assert(webkit_web_view_is_ephemeral(webView.get()));
g_assert(webkit_web_view_get_website_data_manager(webView.get()) == manager);
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -55,7 +55,7 @@
g_assert(webkit_web_view_get_context(webView.get()) == webkit_web_context_get_default());
// Check that a web view created with a related view has the related view context.
- webView = Test::adoptView(webkit_web_view_new_with_related_view(test->m_webView));
+ webView = Test::adoptView(Test::createWebView(test->m_webView));
g_assert(webkit_web_view_get_context(webView.get()) == test->m_webContext.get());
// Check that a web context given as construct parameter is ignored if a related view is also provided.
@@ -69,7 +69,7 @@
WebKitWebContext* webContext = webkit_web_context_new();
test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webContext));
- auto* webView = webkit_web_view_new_with_context(webContext);
+ auto* webView = Test::createWebView(webContext);
test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView));
#if PLATFORM(GTK)
@@ -85,7 +85,7 @@
WebKitWebContext* webContext2 = webkit_web_context_new();
test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webContext2));
- auto* webView2 = webkit_web_view_new_with_context(webContext2);
+ auto* webView2 = Test::createWebView(webContext2);
test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView2));
#if PLATFORM(GTK)
@@ -98,6 +98,67 @@
g_object_unref(webContext2);
}
+#if PLATFORM(WPE)
+static void testWebViewWebBackend(Test* test, gconstpointer)
+{
+ // Use the default backend (we don't have a way to check the backend will be actually freed).
+ GRefPtr<WebKitWebView> webView = adoptGRef(webkit_web_view_new(nullptr));
+ test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView.get()));
+ auto* viewBackend = webkit_web_view_get_backend(webView.get());
+ g_assert(viewBackend);
+ auto* wpeBackend = webkit_web_view_backend_get_wpe_backend(viewBackend);
+ g_assert(wpeBackend);
+ webView = nullptr;
+
+ // User provided backend with default deleter (we don't have a way to check the backend will be actually freed).
+ webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpe_view_backend_create(), nullptr, nullptr)));
+ test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView.get()));
+ viewBackend = webkit_web_view_get_backend(webView.get());
+ g_assert(viewBackend);
+ wpeBackend = webkit_web_view_backend_get_wpe_backend(viewBackend);
+ g_assert(wpeBackend);
+ webView = nullptr;
+
+ // User provided backend with destroy notify.
+ wpeBackend = wpe_view_backend_create();
+ webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpeBackend, [](gpointer userData) {
+ auto* backend = *static_cast<struct wpe_view_backend**>(userData);
+ wpe_view_backend_destroy(backend);
+ *static_cast<struct wpe_view_backend**>(userData) = nullptr;
+ }, &wpeBackend)));
+ test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView.get()));
+ webView = nullptr;
+ g_assert(!wpeBackend);
+
+ // User provided backend owned by another object with destroy notify.
+ static bool hasInstance = false;
+ struct BackendOwner {
+ BackendOwner(struct wpe_view_backend* backend)
+ : backend(backend)
+ {
+ hasInstance = true;
+ }
+
+ ~BackendOwner()
+ {
+ wpe_view_backend_destroy(backend);
+ hasInstance = false;
+ }
+
+ struct wpe_view_backend* backend;
+ };
+ auto* owner = new BackendOwner(wpe_view_backend_create());
+ g_assert(hasInstance);
+ webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(owner->backend, [](gpointer userData) {
+ delete static_cast<BackendOwner*>(userData);
+ }, owner)));
+ test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView.get()));
+ g_assert(hasInstance);
+ webView = nullptr;
+ g_assert(!hasInstance);
+}
+#endif // PLATFORM(WPE)
+
static void ephemeralViewloadChanged(WebKitWebView* webView, WebKitLoadEvent loadEvent, WebViewTest* test)
{
if (loadEvent != WEBKIT_LOAD_FINISHED)
@@ -177,7 +238,7 @@
g_assert(settings != defaultSettings);
g_assert(!webkit_settings_get_enable_javascript(settings));
- auto webView2 = Test::adoptView(webkit_web_view_new());
+ auto webView2 = Test::adoptView(Test::createWebView());
test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView2.get()));
webkit_web_view_set_settings(WEBKIT_WEB_VIEW(webView2.get()), settings);
g_assert(webkit_web_view_get_settings(WEBKIT_WEB_VIEW(webView2.get())) == settings);
@@ -189,7 +250,7 @@
g_assert(settings == newSettings2.get());
g_assert(webkit_settings_get_enable_javascript(settings));
- auto webView3 = Test::adoptView(webkit_web_view_new_with_settings(newSettings2.get()));
+ auto webView3 = Test::adoptView(Test::createWebView(newSettings2.get()));
test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView3.get()));
g_assert(webkit_web_view_get_settings(WEBKIT_WEB_VIEW(webView3.get())) == newSettings2.get());
}
@@ -1077,6 +1138,9 @@
WebViewTest::add("WebKitWebView", "web-context", testWebViewWebContext);
WebViewTest::add("WebKitWebView", "web-context-lifetime", testWebViewWebContextLifetime);
+#if PLATFORM(WPE)
+ Test::add("WebKitWebView", "backend", testWebViewWebBackend);
+#endif
WebViewTest::add("WebKitWebView", "ephemeral", testWebViewEphemeral);
WebViewTest::add("WebKitWebView", "custom-charset", testWebViewCustomCharset);
WebViewTest::add("WebKitWebView", "settings", testWebViewSettings);
Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebsiteData.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -252,7 +252,7 @@
// Non persistent data can be queried in an ephemeral manager.
GRefPtr<WebKitWebContext> webContext = adoptGRef(webkit_web_context_new_with_website_data_manager(manager.get()));
g_assert(webkit_web_context_is_ephemeral(webContext.get()));
- auto webView = Test::adoptView(webkit_web_view_new_with_context(webContext.get()));
+ auto webView = Test::adoptView(Test::createWebView(webContext.get()));
g_assert(webkit_web_view_is_ephemeral(webView.get()));
g_assert(webkit_web_view_get_website_data_manager(webView.get()) == manager.get());
Modified: trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h (225043 => 225044)
--- trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h 2017-11-20 08:16:26 UTC (rev 225044)
@@ -143,6 +143,51 @@
webkit_web_context_set_web_extensions_initialization_user_data(m_webContext.get(), g_variant_new_uint32(++s_webExtensionID));
}
+ static WebKitWebView* createWebView()
+ {
+#if PLATFORM(GTK)
+ return WEBKIT_WEB_VIEW(webkit_web_view_new());
+#elif PLATFORM(WPE)
+ return webkit_web_view_new(nullptr);
+#endif
+ }
+
+ static WebKitWebView* createWebView(WebKitWebContext* context)
+ {
+#if PLATFORM(GTK)
+ return WEBKIT_WEB_VIEW(webkit_web_view_new_with_context(context));
+#elif PLATFORM(WPE)
+ return webkit_web_view_new_with_context(nullptr, context);
+#endif
+ }
+
+ static WebKitWebView* createWebView(WebKitWebView* relatedView)
+ {
+#if PLATFORM(GTK)
+ return WEBKIT_WEB_VIEW(webkit_web_view_new_with_related_view(relatedView));
+#elif PLATFORM(WPE)
+ return webkit_web_view_new_with_related_view(nullptr, relatedView);
+#endif
+ }
+
+ static WebKitWebView* createWebView(WebKitUserContentManager* contentManager)
+ {
+#if PLATFORM(GTK)
+ return WEBKIT_WEB_VIEW(webkit_web_view_new_with_user_content_manager(contentManager));
+#elif PLATFORM(WPE)
+ return webkit_web_view_new_with_user_content_manager(nullptr, contentManager);
+#endif
+ }
+
+ static WebKitWebView* createWebView(WebKitSettings* settings)
+ {
+#if PLATFORM(GTK)
+ return WEBKIT_WEB_VIEW(webkit_web_view_new_with_settings(settings));
+#elif PLATFORM(WPE)
+ return webkit_web_view_new_with_settings(nullptr, settings);
+#endif
+ }
+
static void objectFinalized(Test* test, GObject* finalizedObject)
{
test->m_watchedObjects.remove(finalizedObject);
Modified: trunk/Tools/WebKitTestRunner/wpe/HeadlessViewBackend.cpp (225043 => 225044)
--- trunk/Tools/WebKitTestRunner/wpe/HeadlessViewBackend.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/WebKitTestRunner/wpe/HeadlessViewBackend.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -131,6 +131,8 @@
if (m_egl.context)
eglDestroyContext(m_egl.display, m_egl.context);
+
+ wpe_mesa_view_backend_exportable_dma_buf_destroy(m_exportable);
}
struct wpe_view_backend* HeadlessViewBackend::backend() const
Modified: trunk/Tools/WebKitTestRunner/wpe/PlatformWebViewWPE.cpp (225043 => 225044)
--- trunk/Tools/WebKitTestRunner/wpe/PlatformWebViewWPE.cpp 2017-11-20 08:11:29 UTC (rev 225043)
+++ trunk/Tools/WebKitTestRunner/wpe/PlatformWebViewWPE.cpp 2017-11-20 08:16:26 UTC (rev 225044)
@@ -40,7 +40,7 @@
, m_options(options)
{
m_window = new HeadlessViewBackend;
- m_view = WKViewCreateWithViewBackend(m_window->backend(), configuration);
+ m_view = WKViewCreate(m_window->backend(), configuration);
}
PlatformWebView::~PlatformWebView()