#include "config.h"
#include "qwkcontext.h"
#include "qwkcontext_p.h"
#include "ClientImpl.h"
#include "IconDatabase.h"
#include <QDir>
#include <QPixmap>
#include <QUrl>
#include "WebIconDatabase.h"
#include "WebPlatformStrategies.h"
#include "WKIconDatabase.h"
using namespace WebKit;
static inline void initializePlatformStrategiesIfNeeded()
{
static bool initialized = false;
if (initialized)
return;
WebPlatformStrategies::initialize();
initialized = true;
}
QWKContextPrivate::QWKContextPrivate(QWKContext* qq, WebContext* webContext)
: q(qq)
{
if (!webContext)
context = WebContext::create(String());
else
context = webContext;
initializePlatformStrategiesIfNeeded();
WKIconDatabaseClient iconDatabaseClient = {
0, qq, qt_wk_didChangeIconForPageURL,
qt_wk_didRemoveAllIcons
};
WKIconDatabaseSetIconDatabaseClient(toAPI(context->iconDatabase()), &iconDatabaseClient);
}
QWKContextPrivate::~QWKContextPrivate()
{ }
QWKContext::QWKContext(QObject* parent)
: QObject(parent)
, d(new QWKContextPrivate(this))
{ }
QWKContext::QWKContext(WKContextRef contextRef, QObject* parent)
: QObject(parent)
, d(new QWKContextPrivate(this, toImpl(contextRef)))
{ }
QWKContext::~QWKContext()
{
delete d;
}
void QWKContext::setIconDatabasePath(const QString& path)
{
QFileInfo info(path);
if (info.isDir() && info.isWritable()) {
QString databasePath = path + QDir::separator() + QString(WebCore::IconDatabase::defaultDatabaseFilename());
d->context->setIconDatabasePath(databasePath);
}
}
QIcon QWKContext::iconForPageURL(const QUrl& pageURL) const
{
RefPtr<WebCore::Image> image = d->context->iconDatabase()->imageForPageURL(pageURL.toString());
if (!image)
return QIcon();
QPixmap* nativeImage = image->nativeImageForCurrentFrame();
if (!nativeImage)
return QIcon();
return QIcon(*nativeImage);
}
#include "moc_qwkcontext.cpp"