From 908e0f8bd3461fbdacc93835c37e2f7c660a4f19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tor=20Arne=20Vestb=C3=B8?= Date: Tue, 29 May 2012 13:17:23 +0000 Subject: [PATCH] [Qt] Sync up favicon-implementation with WebView url changes in r118158 https://bugs.webkit.org/show_bug.cgi?id=87133 We now base64-encode the page url in the image-provider url, so that any normalization done by QUrl will not mess up the page-url. The logic of creating and parsing the provider-url has been moved into the image provider, to keep it in one place. We were also releasing icons (even ones we hadn't retained), which we can't do since we don't know when the icon url is no longer in use. Reviewed-by Simon Hausmann. Canonical link: https://commits.webkit.org/105504@main git-svn-id: https://svn.webkit.org/repository/webkit/trunk@118762 268f45cc-cd09-0410-ab3c-d52691b4dbfc --- Source/WebKit/qt/ChangeLog | 19 +++++ Source/WebKit/qt/declarative/plugin.cpp | 2 + Source/WebKit/qt/declarative/public.pri | 2 + Source/WebKit2/ChangeLog | 40 +++++++++ .../UIProcess/API/qt/qquickwebview.cpp | 76 ++++++++---------- .../UIProcess/API/qt/qquickwebview_p.h | 2 +- .../UIProcess/API/qt/qquickwebview_p_p.h | 7 +- .../API/qt/qwebiconimageprovider.cpp | 43 ++++++++-- .../API/qt/qwebiconimageprovider_p.h | 12 ++- .../qmltests/WebView/tst_favIconLoad.qml | 3 +- .../UIProcess/qt/QtWebIconDatabaseClient.cpp | 51 +++++------- .../UIProcess/qt/QtWebIconDatabaseClient.h | 8 +- Tools/ChangeLog | 19 +++++ Tools/MiniBrowser/qt/icons/favicon.png | Bin 891 -> 814 bytes Tools/MiniBrowser/qt/qml/BrowserWindow.qml | 2 +- 15 files changed, 194 insertions(+), 92 deletions(-) diff --git a/Source/WebKit/qt/ChangeLog b/Source/WebKit/qt/ChangeLog index 8f1376d15127..e82740f947c8 100644 --- a/Source/WebKit/qt/ChangeLog +++ b/Source/WebKit/qt/ChangeLog @@ -1,3 +1,22 @@ +2012-05-29 Tor Arne Vestbø + + [Qt] Sync up favicon-implementation with WebView url changes in r118158 + + https://bugs.webkit.org/show_bug.cgi?id=87133 + + We now base64-encode the page url in the image-provider url, so that any + normalization done by QUrl will not mess up the page-url. The logic of + creating and parsing the provider-url has been moved into the image + provider, to keep it in one place. + + We were also releasing icons (even ones we hadn't retained), which we can't + do since we don't know when the icon url is no longer in use. + + Reviewed-by Simon Hausmann. + + * declarative/plugin.cpp: + * declarative/public.pri: + 2012-05-25 Jesus Sanchez-Palencia WebKitTestRunner needs to support layoutTestController.setJavaScriptProfilingEnabled diff --git a/Source/WebKit/qt/declarative/plugin.cpp b/Source/WebKit/qt/declarative/plugin.cpp index f8c532a062af..b18a7bb60a48 100644 --- a/Source/WebKit/qt/declarative/plugin.cpp +++ b/Source/WebKit/qt/declarative/plugin.cpp @@ -17,6 +17,8 @@ Boston, MA 02110-1301, USA. */ +#include "config.h" + #include "qglobal.h" #if defined(HAVE_QQUICK1) diff --git a/Source/WebKit/qt/declarative/public.pri b/Source/WebKit/qt/declarative/public.pri index 04b17b7245a6..576ce03caae7 100644 --- a/Source/WebKit/qt/declarative/public.pri +++ b/Source/WebKit/qt/declarative/public.pri @@ -34,6 +34,8 @@ contains(DEFINES, HAVE_QQUICK1=1) { HEADERS += qdeclarativewebview_p.h } +WEBKIT += wtf + DESTDIR = $${ROOT_BUILD_DIR}/imports/$${TARGET.module_name} CONFIG += rpath diff --git a/Source/WebKit2/ChangeLog b/Source/WebKit2/ChangeLog index aec951caea74..b83d6c41fcdc 100644 --- a/Source/WebKit2/ChangeLog +++ b/Source/WebKit2/ChangeLog @@ -1,3 +1,43 @@ +2012-05-29 Tor Arne Vestbø + + [Qt] Sync up favicon-implementation with WebView url changes in r118158 + + https://bugs.webkit.org/show_bug.cgi?id=87133 + + We now base64-encode the page url in the image-provider url, so that any + normalization done by QUrl will not mess up the page-url. The logic of + creating and parsing the provider-url has been moved into the image + provider, to keep it in one place. + + We were also releasing icons (even ones we hadn't retained), which we can't + do since we don't know when the icon url is no longer in use. + + Reviewed-by Simon Hausmann. + + * UIProcess/API/qt/qquickwebview.cpp: + (QQuickWebViewPrivate::initialize): + (QQuickWebViewPrivate::loadProgressDidChange): + (QQuickWebViewPrivate::_q_onUrlChanged): + (QQuickWebViewPrivate::_q_onIconChangedForPageURL): + (QQuickWebViewPrivate::updateIcon): + (QQuickWebView::icon): + * UIProcess/API/qt/qquickwebview_p.h: + * UIProcess/API/qt/qquickwebview_p_p.h: + (QQuickWebViewPrivate): + * UIProcess/API/qt/qwebiconimageprovider.cpp: + (QWebIconImageProvider::iconURLForPageURLInContext): + (QWebIconImageProvider::requestImage): + * UIProcess/API/qt/qwebiconimageprovider_p.h: + (WebKit): + * UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml: + * UIProcess/qt/QtWebIconDatabaseClient.cpp: + (WebKit::QtWebIconDatabaseClient::didChangeIconForPageURL): + (WebKit::QtWebIconDatabaseClient::iconForPageURL): + (WebKit): + (WebKit::QtWebIconDatabaseClient::iconImageForPageURL): + * UIProcess/qt/QtWebIconDatabaseClient.h: + (QtWebIconDatabaseClient): + 2012-05-29 Kenneth Rohde Christiansen [Qt][WK2] Fix failing qmltests::FitToView::test_basic() diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp index 6f53593998e2..4936a25bd4db 100644 --- a/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp +++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview.cpp @@ -44,6 +44,7 @@ #include "qquickwebpage_p_p.h" #include "qquickwebview_p_p.h" #include "qwebdownloaditem_p_p.h" +#include "qwebiconimageprovider_p.h" #include "qwebkittest_p.h" #include "qwebloadrequest_p.h" #include "qwebnavigationhistory_p.h" @@ -56,6 +57,7 @@ #include #include #include +#include #include #include #include @@ -305,7 +307,7 @@ void QQuickWebViewPrivate::initialize(WKContextRef contextRef, WKPageGroupRef pa navigationHistory = adoptPtr(QWebNavigationHistoryPrivate::createHistory(toAPI(webPageProxy.get()))); QtWebIconDatabaseClient* iconDatabase = context->iconDatabase(); - QObject::connect(iconDatabase, SIGNAL(iconChangedForPageURL(QUrl, QUrl)), q_ptr, SLOT(_q_onIconChangedForPageURL(QUrl, QUrl))); + QObject::connect(iconDatabase, SIGNAL(iconChangedForPageURL(QString)), q_ptr, SLOT(_q_onIconChangedForPageURL(QString))); // Any page setting should preferrable be set before creating the page. webPageProxy->pageGroup()->preferences()->setAcceleratedCompositingEnabled(true); @@ -375,9 +377,6 @@ void QQuickWebViewPrivate::loadProgressDidChange(int loadProgress) { Q_Q(QQuickWebView); - if (!loadProgress) - setIcon(QUrl()); - m_loadProgress = loadProgress; emit q->loadProgressChanged(); @@ -420,16 +419,6 @@ void QQuickWebViewPrivate::setNeedsDisplay() q->page()->update(); } -void QQuickWebViewPrivate::_q_onIconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURL) -{ - Q_Q(QQuickWebView); - - if (q->url() != pageURL) - return; - - setIcon(iconURL); -} - void QQuickWebViewPrivate::processDidCrash() { Q_Q(QQuickWebView); @@ -482,9 +471,39 @@ void QQuickWebViewPrivate::_q_onVisibleChanged() } void QQuickWebViewPrivate::_q_onUrlChanged() +{ + updateIcon(); +} + +void QQuickWebViewPrivate::_q_onIconChangedForPageURL(const QString& pageUrl) +{ + if (pageUrl != QString(m_currentUrl)) + return; + + updateIcon(); +} + +/* Called either when the url changes, or when the icon for the current page changes */ +void QQuickWebViewPrivate::updateIcon() { Q_Q(QQuickWebView); - context->iconDatabase()->requestIconForPageURL(q->url()); + + QQuickView* view = qobject_cast(q->canvas()); + if (!view) + return; + + QWebIconImageProvider* provider = static_cast( + view->engine()->imageProvider(QWebIconImageProvider::identifier())); + if (!provider) + return; + + WTF::String iconUrl = provider->iconURLForPageURLInContext(m_currentUrl, context.get()); + + if (iconUrl == m_iconUrl) + return; + + m_iconUrl = iconUrl; + emit q->iconChanged(); } void QQuickWebViewPrivate::_q_onReceivedResponseFromDownload(QWebDownloadItem* downloadItem) @@ -644,31 +663,6 @@ void QQuickWebViewPrivate::addAttachedPropertyTo(QObject* object) attached->setView(q); } -void QQuickWebViewPrivate::setIcon(const QUrl& iconURL) -{ - Q_Q(QQuickWebView); - if (m_iconURL == iconURL) - return; - - if (!webPageProxy->mainFrame()) - return; - - String oldPageURL = QUrl::fromPercentEncoding(m_iconURL.encodedFragment()); - String newPageURL = webPageProxy->mainFrame()->url(); - - if (oldPageURL != newPageURL) { - QtWebIconDatabaseClient* iconDatabase = context->iconDatabase(); - if (!oldPageURL.isEmpty()) - iconDatabase->releaseIconForPageURL(oldPageURL); - - if (!newPageURL.isEmpty()) - iconDatabase->retainIconForPageURL(newPageURL); - } - - m_iconURL = iconURL; - emit q->iconChanged(); -} - bool QQuickWebViewPrivate::navigatorQtObjectEnabled() const { return m_navigatorQtObjectEnabled; @@ -1561,7 +1555,7 @@ void QQuickWebView::emitUrlChangeIfNeeded() QUrl QQuickWebView::icon() const { Q_D(const QQuickWebView); - return d->m_iconURL; + return QUrl(d->m_iconUrl); } /*! diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h index ad1de773b967..cf469fb1e5d1 100644 --- a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h +++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p.h @@ -212,7 +212,7 @@ public Q_SLOTS: Q_PRIVATE_SLOT(d_func(), void _q_onVisibleChanged()); Q_PRIVATE_SLOT(d_func(), void _q_onUrlChanged()); Q_PRIVATE_SLOT(d_func(), void _q_onReceivedResponseFromDownload(QWebDownloadItem*)); - Q_PRIVATE_SLOT(d_func(), void _q_onIconChangedForPageURL(const QUrl&, const QUrl&)); + Q_PRIVATE_SLOT(d_func(), void _q_onIconChangedForPageURL(const QString&)); // Hides QObject::d_ptr allowing us to use the convenience macros. QScopedPointer d_ptr; QQuickWebViewExperimental* m_experimental; diff --git a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h index 73cb619a4f88..23e885c15dad 100644 --- a/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h +++ b/Source/WebKit2/UIProcess/API/qt/qquickwebview_p_p.h @@ -103,7 +103,7 @@ class QQuickWebViewPrivate { void _q_onVisibleChanged(); void _q_onUrlChanged(); void _q_onReceivedResponseFromDownload(QWebDownloadItem*); - void _q_onIconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURLString); + void _q_onIconChangedForPageURL(const QString&); void chooseFiles(WKOpenPanelResultListenerRef, const QStringList& selectedFileNames, WebKit::QtWebPageUIClient::FileChooserType); quint64 exceededDatabaseQuota(const QString& databaseName, const QString& displayName, WKSecurityOriginRef securityOrigin, quint64 currentQuota, quint64 currentOriginUsage, quint64 currentDatabaseUsage, quint64 expectedUsage); @@ -118,7 +118,6 @@ class QQuickWebViewPrivate { void setRenderToOffscreenBuffer(bool enable) { m_renderToOffscreenBuffer = enable; } void setTransparentBackground(bool); void addAttachedPropertyTo(QObject*); - void setIcon(const QUrl&); bool navigatorQtObjectEnabled() const; bool renderToOffscreenBuffer() const { return m_renderToOffscreenBuffer; } @@ -133,6 +132,8 @@ class QQuickWebViewPrivate { void setDialogActive(bool active) { m_dialogActive = active; } + void updateIcon(); + // PageClient. WebCore::IntSize viewSize() const; void didReceiveMessageFromNavigatorQtObject(const String& message); @@ -200,7 +201,7 @@ class QQuickWebViewPrivate { bool m_renderToOffscreenBuffer; bool m_dialogActive; bool m_allowAnyHTTPSCertificateForLocalHost; - QUrl m_iconURL; + WTF::String m_iconUrl; int m_loadProgress; WTF::String m_currentUrl; }; diff --git a/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp b/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp index 71342a1e3749..63dce28d076a 100644 --- a/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp +++ b/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider.cpp @@ -24,6 +24,7 @@ #include "QtWebIconDatabaseClient.h" #include #include +#include #include using namespace WebKit; @@ -37,24 +38,52 @@ QWebIconImageProvider::~QWebIconImageProvider() { } -QImage QWebIconImageProvider::requestImage(const QString& id, QSize* size, const QSize& requestedSize) +WTF::String QWebIconImageProvider::iconURLForPageURLInContext(const WTF::String &pageURL, QtWebContext* context) { - QString decodedIconUrl = id; - decodedIconUrl.remove(0, decodedIconUrl.indexOf('#') + 1); - String pageURL = QString::fromUtf8(QUrl(decodedIconUrl).toEncoded()); + QtWebIconDatabaseClient* iconDatabase = context->iconDatabase(); + WTF::String iconURL = iconDatabase->iconForPageURL(pageURL); + + if (iconURL.isEmpty()) + return String(); + + QUrl url; + url.setScheme(QStringLiteral("image")); + url.setHost(QWebIconImageProvider::identifier()); + + QString path; + path.append(QLatin1Char('/')); + path.append(QString::number(context->contextID())); + path.append(QLatin1Char('/')); + path.append(QString::number(WTF::StringHash::hash(iconURL))); + url.setPath(path); + + // FIXME: Use QUrl::DecodedMode when landed in Qt + url.setFragment(QString::fromLatin1(QByteArray(QString(pageURL).toUtf8()).toBase64())); + + // FIXME: We can't know when the icon url is no longer in use, + // so we never release these icons. At some point we might want + // to introduce expiry of icons to elevate this issue. + iconDatabase->retainIconForPageURL(pageURL); + return url.toString(QUrl::FullyEncoded); +} + +QImage QWebIconImageProvider::requestImage(const QString& id, QSize* size, const QSize& requestedSize) +{ // The string identifier has the leading image://webicon/ already stripped, so we just // need to truncate from the first slash to get the context id. - QString contextIDAsString = id; - contextIDAsString.truncate(contextIDAsString.indexOf(QLatin1Char('/'))); + QString contextIDString = id.left(id.indexOf(QLatin1Char('/'))); bool ok = false; - uint64_t contextId = contextIDAsString.toUInt(&ok); + uint64_t contextId = contextIDString.toUInt(&ok); if (!ok) return QImage(); + QtWebContext* context = QtWebContext::contextByID(contextId); if (!context) return QImage(); + QString pageURL = QString::fromUtf8(QByteArray::fromBase64(id.midRef(id.indexOf('#') + 1).toLatin1())); + QtWebIconDatabaseClient* iconDatabase = context->iconDatabase(); QImage icon = requestedSize.isValid() ? iconDatabase->iconImageForPageURL(pageURL, requestedSize) : iconDatabase->iconImageForPageURL(pageURL); ASSERT(!icon.isNull()); diff --git a/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider_p.h b/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider_p.h index a54008a2c96d..7efe21a1419e 100644 --- a/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider_p.h +++ b/Source/WebKit2/UIProcess/API/qt/qwebiconimageprovider_p.h @@ -21,13 +21,23 @@ #define qwebiconimageprovider_p_h #include "qwebkitglobal.h" +#include #include +#include + +namespace WebKit { + class QtWebContext; +} class QWEBKIT_EXPORT QWebIconImageProvider : public QQuickImageProvider { public: QWebIconImageProvider(); ~QWebIconImageProvider(); - QImage requestImage(const QString& id, QSize* size, const QSize& requestedSize); + + static QString identifier() { return QStringLiteral("webicon"); } + + WTF::String iconURLForPageURLInContext(const WTF::String& pageURL, WebKit::QtWebContext* context); + virtual QImage requestImage(const QString& id, QSize* size, const QSize& requestedSize); }; #endif diff --git a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml index 8210040e8d4f..f6ed4b261000 100644 --- a/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml +++ b/Source/WebKit2/UIProcess/API/qt/tests/qmltests/WebView/tst_favIconLoad.qml @@ -20,6 +20,7 @@ TestWebView { TestCase { id: test name: "WebViewLoadFavIcon" + when: windowShown function init() { if (webView.icon != '') { @@ -36,7 +37,6 @@ TestWebView { var url = Qt.resolvedUrl("../common/favicon.html") webView.url = url verify(webView.waitForLoadSucceeded()) - expectFail("", "https://bugs.webkit.org/show_bug.cgi?id=87133") compare(spy.count, 1) compare(favicon.width, 48) compare(favicon.height, 48) @@ -47,7 +47,6 @@ TestWebView { var url = Qt.resolvedUrl("../common/favicon2.html?favicon=load should work with#whitespace!") webView.url = url verify(webView.waitForLoadSucceeded()) - expectFail("", "https://bugs.webkit.org/show_bug.cgi?id=87133") compare(spy.count, 1) compare(favicon.width, 16) compare(favicon.height, 16) diff --git a/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp b/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp index c769c8b03bc1..5132c7939274 100644 --- a/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp +++ b/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.cpp @@ -62,13 +62,29 @@ QtWebIconDatabaseClient::~QtWebIconDatabaseClient() WKIconDatabaseSetIconDatabaseClient(toAPI(m_iconDatabase.get()), 0); } -void QtWebIconDatabaseClient::didChangeIconForPageURL(WKIconDatabaseRef iconDatabase, WKURLRef pageURL, const void* clientInfo) +void QtWebIconDatabaseClient::didChangeIconForPageURL(WKIconDatabaseRef, WKURLRef pageURL, const void* clientInfo) { - QUrl qUrl = WKURLCopyQUrl(pageURL); - toQtWebIconDatabaseClient(clientInfo)->requestIconForPageURL(qUrl); + emit toQtWebIconDatabaseClient(clientInfo)->iconChangedForPageURL(toImpl(pageURL)->string()); } -QImage QtWebIconDatabaseClient::iconImageForPageURL(const String& pageURL, const QSize& iconSize) +WTF::String QtWebIconDatabaseClient::iconForPageURL(const WTF::String& pageURL) +{ + String iconURL; + m_iconDatabase->synchronousIconURLForPageURL(pageURL, iconURL); + + if (iconURL.isEmpty()) + return String(); + + // Verify that the image data is actually available before reporting back + // a url, since clients assume that the url can be used directly. + WebCore::Image* iconImage = m_iconDatabase->imageForPageURL(pageURL); + if (!iconImage || iconImage->isNull()) + return String(); + + return iconURL; +} + +QImage QtWebIconDatabaseClient::iconImageForPageURL(const WTF::String& pageURL, const QSize& iconSize) { MutexLocker locker(m_imageLock); @@ -84,33 +100,6 @@ QImage QtWebIconDatabaseClient::iconImageForPageURL(const String& pageURL, const return nativeImage->toImage(); } -unsigned QtWebIconDatabaseClient::iconURLHashForPageURL(const String& pageURL) -{ - String iconURL; - m_iconDatabase->synchronousIconURLForPageURL(pageURL, iconURL); - return StringHash::hash(iconURL); -} - -void QtWebIconDatabaseClient::requestIconForPageURL(const QUrl& pageURL) -{ - String pageURLString = WebCore::KURL(pageURL).string(); - if (iconImageForPageURL(pageURLString).isNull()) - return; - - unsigned iconID = iconURLHashForPageURL(pageURLString); - QUrl url; - url.setScheme(QStringLiteral("image")); - url.setHost(QStringLiteral("webicon")); - QString path; - path.append(QLatin1Char('/')); - path.append(QString::number(m_contextId)); - path.append(QLatin1Char('/')); - path.append(QString::number(iconID)); - url.setPath(path); - url.setEncodedFragment(pageURL.toEncoded()); - emit iconChangedForPageURL(pageURL, url); -} - void QtWebIconDatabaseClient::retainIconForPageURL(const String& pageURL) { m_iconDatabase->retainIconForPageURL(pageURL); diff --git a/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.h b/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.h index 933ad9abe517..65e86e18cd6f 100644 --- a/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.h +++ b/Source/WebKit2/UIProcess/qt/QtWebIconDatabaseClient.h @@ -49,18 +49,16 @@ class QtWebIconDatabaseClient : public QObject { QtWebIconDatabaseClient(QtWebContext*); ~QtWebIconDatabaseClient(); + WTF::String iconForPageURL(const WTF::String& pageURL); QImage iconImageForPageURL(const WTF::String& pageURL, const QSize& iconSize = QSize(32, 32)); + void retainIconForPageURL(const WTF::String&); void releaseIconForPageURL(const WTF::String&); -public Q_SLOTS: - void requestIconForPageURL(const QUrl&); - public: - Q_SIGNAL void iconChangedForPageURL(const QUrl& pageURL, const QUrl& iconURL); + Q_SIGNAL void iconChangedForPageURL(const QString& pageURL); private: - unsigned iconURLHashForPageURL(const WTF::String&); static void didChangeIconForPageURL(WKIconDatabaseRef, WKURLRef pageURL, const void* clientInfo); uint64_t m_contextId; RefPtr m_iconDatabase; diff --git a/Tools/ChangeLog b/Tools/ChangeLog index 88d35dce3589..95e7b3773983 100644 --- a/Tools/ChangeLog +++ b/Tools/ChangeLog @@ -1,3 +1,22 @@ +2012-05-29 Tor Arne Vestbø + + [Qt] Sync up favicon-implementation with WebView url changes in r118158 + + https://bugs.webkit.org/show_bug.cgi?id=87133 + + We now base64-encode the page url in the image-provider url, so that any + normalization done by QUrl will not mess up the page-url. The logic of + creating and parsing the provider-url has been moved into the image + provider, to keep it in one place. + + We were also releasing icons (even ones we hadn't retained), which we can't + do since we don't know when the icon url is no longer in use. + + Reviewed-by Simon Hausmann. + + * MiniBrowser/qt/icons/favicon.png: + * MiniBrowser/qt/qml/BrowserWindow.qml: + 2012-05-29 Mikhail Pozdnyakov [EFL] Refactoring. Get rid of unnecessary singleCharacterString() function diff --git a/Tools/MiniBrowser/qt/icons/favicon.png b/Tools/MiniBrowser/qt/icons/favicon.png index 4462752a53baeb05d9a98f8ae23fa807e7ceee4a..325d5bd1e1e1e0acfaf94a52dccb54612a2e8e18 100644 GIT binary patch delta 791 zcmV+y1L*ww2CfE>B!3BTNLh0L01FcU01FcV0GgZ_0008uNklv@oo1X@GMPK~a{KpdPw~H4?$7iq1zW!?d?ek}`3>o21IxVU4 zz)vx0oEmElw0|qrZ7Bji0T2NU=cVc6_^HLC{7l}>SQuJ@D2fT=KkDXIi|vCxcOJ&H z-I;t>FD?qs`RQQ-PdRfT$c`1eErCYYr{_g{al6j^gvG}z`&?gd5QH(^fln_~2%XbK zsol5$Y)AmHn>#1w^XRt5t(`8FMju0y_-N&TR8q!F%YTF+s9u62IYB!bC2YFqh6oAM zoJu(sc~c`261@9mg=#b8+0zy~jeyC5MZwh>wKa04hU+@0x$M*sK{gcZw1i_SSSbxf zmf32=?6iE|dLhrkgu$n`8hmsAHxxxg5CZ~3{`(H}B%7AX6Ha;r%hX9FH6%qr6h+>c z)&aQme1C?QC)2$D^{+&O6FRcLIYdxJe|1FkFw;7YW#YIt*^EIpV^D4hh@ya@CK$^l zu~P3x15djVaTIc|1AmpHkp82CT70~}So-X}jiEtiVX089 z`sMPSmF2y)A8UvEH3nV}S&o>HdQ_SnzAe|OtgY3y*S=f6z1}Ei7M2RbB?_M03FVXE zm+H}tPUps9Z7=g;HfN8gY(2Lciv&Sb->V$_yu0)0`-jb7Jr?3X@U+fj&-7pQJ4($h V@(@ZLx�K002ovPDHLkV1mmgfr9`5 delta 868 zcmV-q1DpJ=2Kxq(B!2;OQb$4nuFf3k0009uNklBa*(Klaj3_GoF^E1;VLScnU6nN;rfkbCMy+`Wr1Z-u2u_2 zjmE8Kzx^VVA>?=Y=^|0;Q=X}jdPDMVftlJoi}gB|vM3Y^ShkHHMTBXBpT!i5E>Y?~ zG^V87s4gurUVkhhg^g`l6x|AQa|_H&%^;;h8j_rCBM}@P9MIT(gH9!(G?5~gN2)Q# z-3o@#l!`^-RFj4=%@1u_-E%BwoI-wra%GD7kFF7oQX;QUzPx}k90$WufI-!rqSx;5 z?qHvt#t~X)7-`1M)la#1=MKlM7Egcw13%7)v_st7Mt@0DkcKI*b~Z`-0kidMxaBKM zOh}FoPJo2Hyo{px=I>HWT}BM zTbti#emJIB$g|%(z*H7)*(K-LY`xxMI2w@`4u5$&4>3q(((ZR?o}4l0^-z&Mr*~%Y z^1oLkNycfnhudml+ZL&YOP8myl}Rv+NTkLx;PkA`z`sE21f|Rhxk3@sv>CU@Xm&cp znWo<#aMWrdga9%eQ;|fPt~a3H>l60|lK(B8ePm#0Ceyg%3{$>6lzVd#fk z3|)sLI-^)D;!aMmcX)_D3b`U27E6;)jK-U-=WA=9%`DYxw-)MkI-NFy{soa12*V`S u326p{VaQ46oHzyL`BYI)zW?dRAN~g}424===`9cd0000