#include "config.h"
#include "WebKitPlugin.h"
#include "WebKitMimeInfoPrivate.h"
#include "WebKitPluginPrivate.h"
#include <wtf/glib/WTFGType.h>
#include <wtf/text/CString.h>
using namespace WebKit;
struct _WebKitPluginPrivate {
~_WebKitPluginPrivate()
{
g_list_free_full(mimeInfoList, reinterpret_cast<GDestroyNotify>(webkit_mime_info_unref));
}
PluginModuleInfo pluginInfo;
CString name;
CString description;
CString path;
GList* mimeInfoList;
};
WEBKIT_DEFINE_TYPE(WebKitPlugin, webkit_plugin, G_TYPE_OBJECT)
static void webkit_plugin_class_init(WebKitPluginClass*)
{
}
WebKitPlugin* webkitPluginCreate(const PluginModuleInfo& pluginInfo)
{
WebKitPlugin* plugin = WEBKIT_PLUGIN(g_object_new(WEBKIT_TYPE_PLUGIN, NULL));
plugin->priv->pluginInfo = pluginInfo;
return plugin;
}
const char* webkit_plugin_get_name(WebKitPlugin* plugin)
{
g_return_val_if_fail(WEBKIT_IS_PLUGIN(plugin), 0);
if (!plugin->priv->name.isNull())
return plugin->priv->name.data();
if (plugin->priv->pluginInfo.info.name.isEmpty())
return 0;
plugin->priv->name = plugin->priv->pluginInfo.info.name.utf8();
return plugin->priv->name.data();
}
const char* webkit_plugin_get_description(WebKitPlugin* plugin)
{
g_return_val_if_fail(WEBKIT_IS_PLUGIN(plugin), 0);
if (!plugin->priv->description.isNull())
return plugin->priv->description.data();
if (plugin->priv->pluginInfo.info.desc.isEmpty())
return 0;
plugin->priv->description = plugin->priv->pluginInfo.info.desc.utf8();
return plugin->priv->description.data();
}
const char* webkit_plugin_get_path(WebKitPlugin* plugin)
{
g_return_val_if_fail(WEBKIT_IS_PLUGIN(plugin), 0);
if (!plugin->priv->path.isNull())
return plugin->priv->path.data();
if (plugin->priv->pluginInfo.path.isEmpty())
return 0;
plugin->priv->path = plugin->priv->pluginInfo.path.utf8();
return plugin->priv->path.data();
}
GList* webkit_plugin_get_mime_info_list(WebKitPlugin* plugin)
{
g_return_val_if_fail(WEBKIT_IS_PLUGIN(plugin), 0);
if (plugin->priv->mimeInfoList)
return plugin->priv->mimeInfoList;
if (plugin->priv->pluginInfo.info.mimes.isEmpty())
return 0;
for (size_t i = 0; i < plugin->priv->pluginInfo.info.mimes.size(); ++i)
plugin->priv->mimeInfoList = g_list_prepend(plugin->priv->mimeInfoList, webkitMimeInfoCreate(plugin->priv->pluginInfo.info.mimes[i]));
return plugin->priv->mimeInfoList;
}