WebKitMimeInfo.cpp [plain text]
#include "config.h"
#include "WebKitMimeInfo.h"
#include "WebKitMimeInfoPrivate.h"
#include <wtf/glib/GRefPtr.h>
#include <wtf/text/CString.h>
struct _WebKitMimeInfo {
_WebKitMimeInfo(const WebCore::MimeClassInfo& mimeInfo)
: mimeInfo(mimeInfo)
{
}
WebCore::MimeClassInfo mimeInfo;
CString mimeType;
CString description;
GRefPtr<GPtrArray> extensions;
int referenceCount { 0 };
};
G_DEFINE_BOXED_TYPE(WebKitMimeInfo, webkit_mime_info, webkit_mime_info_ref, webkit_mime_info_unref)
WebKitMimeInfo* webkitMimeInfoCreate(const WebCore::MimeClassInfo& mimeInfo)
{
WebKitMimeInfo* info = static_cast<WebKitMimeInfo*>(fastMalloc(sizeof(WebKitMimeInfo)));
new (info) WebKitMimeInfo(mimeInfo);
return info;
}
WebKitMimeInfo* webkit_mime_info_ref(WebKitMimeInfo* info)
{
g_atomic_int_inc(&info->referenceCount);
return info;
}
void webkit_mime_info_unref(WebKitMimeInfo* info)
{
if (g_atomic_int_dec_and_test(&info->referenceCount)) {
info->~WebKitMimeInfo();
fastFree(info);
}
}
const char* webkit_mime_info_get_mime_type(WebKitMimeInfo* info)
{
if (!info->mimeType.isNull())
return info->mimeType.data();
if (info->mimeInfo.type.isEmpty())
return 0;
info->mimeType = info->mimeInfo.type.utf8();
return info->mimeType.data();
}
const char* webkit_mime_info_get_description(WebKitMimeInfo* info)
{
if (!info->description.isNull())
return info->description.data();
if (info->mimeInfo.desc.isEmpty())
return 0;
info->description = info->mimeInfo.desc.utf8();
return info->description.data();
}
const char* const* webkit_mime_info_get_extensions(WebKitMimeInfo* info)
{
if (info->extensions)
return reinterpret_cast<gchar**>(info->extensions->pdata);
if (info->mimeInfo.extensions.isEmpty())
return 0;
info->extensions = adoptGRef(g_ptr_array_new_with_free_func(g_free));
for (size_t i = 0; i < info->mimeInfo.extensions.size(); ++i) {
if (info->mimeInfo.extensions[i].isEmpty())
continue;
g_ptr_array_add(info->extensions.get(), g_strdup(info->mimeInfo.extensions[i].utf8().data()));
}
g_ptr_array_add(info->extensions.get(), 0);
return reinterpret_cast<gchar**>(info->extensions->pdata);
}