Changeset 86694 in webkit


Ignore:
Timestamp:
May 17, 2011 12:00:51 PM (13 years ago)
Author:
andreas.kling@nokia.com
Message:

2011-05-17 Andreas Kling <kling@webkit.org>

Reviewed by Kenneth Rohde Christiansen.

[Qt][WK2] Initial support for favicons.
https://bugs.webkit.org/show_bug.cgi?id=58937

Add the following API to QWKContext:

  • void setIconDatabasePath(QString)
  • void iconChangedForPageURL(QUrl) [signal]
  • QIcon iconForPageURL(QUrl)

This is mostly analogous to the QWebSettings/QWebFrame icon API we had in WebKit1.

  • UIProcess/API/qt/ClientImpl.h: Added WKIconDatabaseClient methods.
  • UIProcess/API/qt/ClientImpl.cpp: (toQWKContext): Helper to cast from "void* clientInfo" to a QWKContext*. (qt_wk_didChangeIconForPageURL): Emits QWKContext::iconChangedForPageURL(QUrl). (qt_wk_didRemoveAllIcons): Stub.
  • UIProcess/API/qt/qwkcontext.h:
  • UIProcess/API/qt/qwkcontext_p.h:
  • UIProcess/API/qt/qwkcontext.cpp: (QWKContextPrivate::QWKContextPrivate): Set up and register a WKIconDatabaseClient. (QWKContext::QWKContext): Minor refactor to avoid code duplication in constructors. (QWKContext::setIconDatabasePath): Exactly what it sounds like. (QWKContext::iconForPageURL): Retrieves the favicon for a given page URL as a QIcon.
  • WebKit2API.pri: Add WKIconDatabase.cpp and WKIconDatabase.h to build.
Location:
trunk/Source/WebKit2
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r86692 r86694  
     12011-05-17  Andreas Kling  <kling@webkit.org>
     2
     3        Reviewed by Kenneth Rohde Christiansen.
     4
     5        [Qt][WK2] Initial support for favicons.
     6        https://bugs.webkit.org/show_bug.cgi?id=58937
     7
     8        Add the following API to QWKContext:
     9
     10        - void setIconDatabasePath(QString)
     11        - void iconChangedForPageURL(QUrl) [signal]
     12        - QIcon iconForPageURL(QUrl)
     13
     14        This is mostly analogous to the QWebSettings/QWebFrame icon API we had in WebKit1.
     15
     16        * UIProcess/API/qt/ClientImpl.h: Added WKIconDatabaseClient methods.
     17
     18        * UIProcess/API/qt/ClientImpl.cpp:
     19        (toQWKContext): Helper to cast from "void* clientInfo" to a QWKContext*.
     20        (qt_wk_didChangeIconForPageURL): Emits QWKContext::iconChangedForPageURL(QUrl).
     21        (qt_wk_didRemoveAllIcons): Stub.
     22
     23        * UIProcess/API/qt/qwkcontext.h:
     24        * UIProcess/API/qt/qwkcontext_p.h:
     25        * UIProcess/API/qt/qwkcontext.cpp:
     26        (QWKContextPrivate::QWKContextPrivate): Set up and register a WKIconDatabaseClient.
     27        (QWKContext::QWKContext): Minor refactor to avoid code duplication in constructors.
     28        (QWKContext::setIconDatabasePath): Exactly what it sounds like.
     29        (QWKContext::iconForPageURL): Retrieves the favicon for a given page URL as a QIcon.
     30
     31        * WebKit2API.pri: Add WKIconDatabase.cpp and WKIconDatabase.h to build.
     32
    1332011-05-17  Brady Eidson  <beidson@apple.com>
    234
  • trunk/Source/WebKit2/UIProcess/API/qt/ClientImpl.cpp

    r84539 r86694  
    2525#include "WKStringQt.h"
    2626#include "WKURLQt.h"
     27#include <qwkcontext.h>
    2728#include <qwkpage.h>
    2829#include <qwkpage_p.h>
     
    3233using namespace WebKit;
    3334
     35static QWKContext* toQWKContext(const void* clientInfo)
     36{
     37    if (clientInfo)
     38        return reinterpret_cast<QWKContext*>(const_cast<void*>(clientInfo));
     39    return 0;
     40}
     41
    3442static QWKPage* toQWKPage(const void* clientInfo)
    3543{
     
    189197    QWKPagePrivate::get(toQWKPage(clientInfo))->updateNavigationActions();
    190198}
     199
     200void qt_wk_didChangeIconForPageURL(WKIconDatabaseRef iconDatabase, WKURLRef pageURL, const void* clientInfo)
     201{
     202    QUrl qUrl = WKURLCopyQUrl(pageURL);
     203    emit toQWKContext(clientInfo)->iconChangedForPageURL(qUrl);
     204}
     205
     206void qt_wk_didRemoveAllIcons(WKIconDatabaseRef iconDatabase, const void* clientInfo)
     207{
     208}
  • trunk/Source/WebKit2/UIProcess/API/qt/ClientImpl.h

    r84539 r86694  
    5454void qt_wk_setStatusText(WKPageRef page, WKStringRef text, const void *clientInfo);
    5555
     56// IconDatabase client.
     57void qt_wk_didChangeIconForPageURL(WKIconDatabaseRef, WKURLRef, const void* clientInfo);
     58void qt_wk_didRemoveAllIcons(WKIconDatabaseRef, const void* clientInfo);
     59
    5660#ifdef __cplusplus
    5761}
  • trunk/Source/WebKit2/UIProcess/API/qt/qwkcontext.cpp

    r76916 r86694  
    2323#include "qwkcontext_p.h"
    2424
     25#include "ClientImpl.h"
     26#include "IconDatabase.h"
     27#include <QDir>
     28#include <QPixmap>
     29#include <QUrl>
     30#include "WebIconDatabase.h"
    2531#include "WebPlatformStrategies.h"
     32#include "WKIconDatabase.h"
    2633
    2734using namespace WebKit;
     
    3744}
    3845
    39 QWKContextPrivate::QWKContextPrivate(QWKContext* qq)
     46QWKContextPrivate::QWKContextPrivate(QWKContext* qq, WebContext* webContext)
    4047    : q(qq)
    4148{
     49    if (!webContext)
     50        context = WebContext::create(String());
     51    else
     52        context = webContext;
     53
    4254    initializePlatformStrategiesIfNeeded();
     55
     56    WKIconDatabaseClient iconDatabaseClient = {
     57        0,      // version
     58        qq,     // clientInfo
     59        qt_wk_didChangeIconForPageURL,
     60        qt_wk_didRemoveAllIcons
     61    };
     62
     63    WKIconDatabaseSetIconDatabaseClient(toAPI(context->iconDatabase()), &iconDatabaseClient);
    4364}
    4465
    4566QWKContextPrivate::~QWKContextPrivate()
    46 {
    47 }
     67{ }
    4868
    4969QWKContext::QWKContext(QObject* parent)
    5070    : QObject(parent)
    5171    , d(new QWKContextPrivate(this))
    52 {
    53     d->context = WebContext::create(String());
    54 }
     72{ }
    5573
    5674QWKContext::QWKContext(WKContextRef contextRef, QObject* parent)
    5775    : QObject(parent)
    58     , d(new QWKContextPrivate(this))
    59 {
    60     d->context = toImpl(contextRef);
    61 }
     76    , d(new QWKContextPrivate(this, toImpl(contextRef)))
     77{ }
    6278
    6379QWKContext::~QWKContext()
     
    6682}
    6783
     84void QWKContext::setIconDatabasePath(const QString& path)
     85{
     86    // FIXME: There is currently no way to disable the icon database once it's enabled.
     87    QFileInfo info(path);
     88    if (info.isDir() && info.isWritable()) {
     89        QString databasePath = path + QDir::separator() + QString(WebCore::IconDatabase::defaultDatabaseFilename());
     90        d->context->setIconDatabasePath(databasePath);
     91    }
     92}
     93
     94QIcon QWKContext::iconForPageURL(const QUrl& pageURL) const
     95{
     96    RefPtr<WebCore::Image> image = d->context->iconDatabase()->imageForPageURL(pageURL.toString());
     97    if (!image)
     98        return QIcon();
     99
     100    QPixmap* nativeImage = image->nativeImageForCurrentFrame();
     101    if (!nativeImage)
     102        return QIcon();
     103
     104    return QIcon(*nativeImage);
     105}
     106
    68107#include "moc_qwkcontext.cpp"
  • trunk/Source/WebKit2/UIProcess/API/qt/qwkcontext.h

    r73976 r86694  
    2525#include <WebKit2/WKContext.h>
    2626
     27class QIcon;
     28class QUrl;
    2729class QWKContextPrivate;
    2830
     
    3638    QWKContext(WKContextRef contextRef, QObject* parent = 0);
    3739
     40    void setIconDatabasePath(const QString&);
     41    QIcon iconForPageURL(const QUrl&) const;
     42
     43public:
     44    Q_SIGNAL void iconChangedForPageURL(const QUrl&);
     45
    3846private:
    3947    QWKContextPrivate* d;
  • trunk/Source/WebKit2/UIProcess/API/qt/qwkcontext_p.h

    r73986 r86694  
    2727class QWKContextPrivate {
    2828public:
    29     QWKContextPrivate(QWKContext*);
     29    QWKContextPrivate(QWKContext*, WebKit::WebContext* = 0);
    3030    ~QWKContextPrivate();
    3131
  • trunk/Source/WebKit2/WebKit2API.pri

    r83842 r86694  
    3232    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKGeolocationPermissionRequest.cpp \
    3333    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKGeolocationPosition.cpp \
     34    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKIconDatabase.cpp \
    3435    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKInspector.cpp \
    3536    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKOpenPanelParameters.cpp \
     
    104105    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKGeolocationPermissionRequest.h \
    105106    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKGeolocationPosition.h \
     107    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKIconDatabase.h \
    106108    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKInspector.h \
    107109    $$SOURCE_DIR/WebKit2/UIProcess/API/C/WKOpenPanelParameters.h \
Note: See TracChangeset for help on using the changeset viewer.