| /* |
| * 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() |
| { |
| 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); |
| } |
| } |
| |
| /** |
| * 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; |
| } |
| |
| namespace WTF { |
| |
| template <> WebKitWebViewBackend* refGPtr(WebKitWebViewBackend* ptr) |
| { |
| if (ptr) |
| webkitWebViewBackendRef(ptr); |
| return ptr; |
| } |
| |
| template <> void derefGPtr(WebKitWebViewBackend* ptr) |
| { |
| if (ptr) |
| webkitWebViewBackendUnref(ptr); |
| } |
| |
| } |