WebKitWebViewBackend.cpp [plain text]
#include "config.h"
#include "WebKitWebViewBackend.h"
#include "WebKitWebViewBackendPrivate.h"
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;
}
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;
}
struct wpe_view_backend* webkit_web_view_backend_get_wpe_backend(WebKitWebViewBackend* viewBackend)
{
g_return_val_if_fail(viewBackend, nullptr);
return viewBackend->backend;
}