diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-01-08 10:12:58 +0100 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-01-08 10:47:57 +0100 |
commit | 233258f132134caaa3c4acf924b47d7e548865e7 (patch) | |
tree | 2afbcb2923f13b03fbb1dc15c1c5b3622842ef1e /tests/auto | |
parent | 6666e23ed6252c3ef53c5f17d4f28bfe63736e33 (diff) | |
parent | 9ef3a8263098c6a32db8b824aabf85587d1f1140 (diff) |
Merge remote-tracking branch 'origin/5.9' into 5.10
Conflicts:
.qmake.conf
src/core/api/qwebengineurlrequestjob.cpp
src/core/browser_context_adapter.cpp
src/core/renderer/user_resource_controller.cpp
src/core/web_engine_context.cpp
src/webenginewidgets/api/qwebenginepage.cpp
Change-Id: I5278e5e22e1776d42975fc94d70ff8ca4f81fb9a
Diffstat (limited to 'tests/auto')
3 files changed, 115 insertions, 26 deletions
diff --git a/tests/auto/quick/qmltests/data/tst_favicon.qml b/tests/auto/quick/qmltests/data/tst_favicon.qml index ea474e0dc..1159f3194 100644 --- a/tests/auto/quick/qmltests/data/tst_favicon.qml +++ b/tests/auto/quick/qmltests/data/tst_favicon.qml @@ -54,6 +54,35 @@ TestWebEngineView { return url.toString().substring(16) } + function getFaviconPixel(faviconImage) { + var grabImage = Qt.createQmlObject(" + import QtQuick 2.5\n + Image { }", test) + var faviconCanvas = Qt.createQmlObject(" + import QtQuick 2.5\n + Canvas { }", test) + + test.tryVerify(function() { return faviconImage.status == Image.Ready }); + faviconImage.grabToImage(function(result) { + grabImage.source = result.url + }); + test.tryVerify(function() { return grabImage.status == Image.Ready }); + + faviconCanvas.width = faviconImage.width; + faviconCanvas.height = faviconImage.height; + var ctx = faviconCanvas.getContext("2d"); + ctx.drawImage(grabImage, 0, 0, grabImage.width, grabImage.height); + var imageData = ctx.getImageData(Math.round(faviconCanvas.width/2), + Math.round(faviconCanvas.height/2), + faviconCanvas.width, + faviconCanvas.height); + + grabImage.destroy(); + faviconCanvas.destroy(); + + return imageData.data; + } + SignalSpy { id: iconChangedSpy target: webEngineView @@ -285,12 +314,6 @@ TestWebEngineView { var faviconImage = Qt.createQmlObject(" import QtQuick 2.5\n Image { sourceSize: Qt.size(width, height) }", test) - var grabImage = Qt.createQmlObject(" - import QtQuick 2.5\n - Image { }", test) - var faviconCanvas = Qt.createQmlObject(" - import QtQuick 2.5\n - Canvas { }", test) compare(iconChangedSpy.count, 0) @@ -303,27 +326,53 @@ TestWebEngineView { faviconImage.width = row.size faviconImage.height = row.size faviconImage.source = webEngineView.icon - verify(_waitFor(function() { return faviconImage.status == Image.Ready } )) - faviconImage.grabToImage(function(result) { - grabImage.source = result.url - }) - verify(_waitFor(function() { return grabImage.status == Image.Ready } )) + var pixel = getFaviconPixel(faviconImage); + compare(pixel[0], row.value) - faviconCanvas.width = faviconImage.width - faviconCanvas.height = faviconImage.height - var ctx = faviconCanvas.getContext("2d") - ctx.drawImage(grabImage, 0, 0, grabImage.width, grabImage.height) + faviconImage.destroy() + } - var center = Math.round(row.size/2) - var imageData = ctx.getImageData(center, center, center, center) - var pixel = imageData.data + function test_dynamicFavicon() { + var faviconImage = Qt.createQmlObject(" + import QtQuick 2.5\n + Image { width: 16; height: 16; sourceSize: Qt.size(width, height); }", test) + faviconImage.source = Qt.binding(function() { return webEngineView.icon; }); - compare(pixel[0], row.value) + var colors = [ + {"url": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==", "r": 255, "g": 0, "b": 0}, + {"url": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg==", "r": 0, "g": 255, "b": 0}, + {"url": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg==", "r": 0, "g": 0, "b": 255}, + ]; + var pixel; + + compare(iconChangedSpy.count, 0); + webEngineView.loadHtml( + "<html>" + + "<link rel='icon' type='image/png' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII='/>" + + "</html>" + ); + verify(webEngineView.waitForLoadSucceeded()); + tryCompare(iconChangedSpy, "count", 1); + + pixel = getFaviconPixel(faviconImage); + compare(pixel[0], 0); + compare(pixel[1], 0); + compare(pixel[2], 0); + + for (var i = 0; i < colors.length; ++i) { + iconChangedSpy.clear(); + runJavaScript("document.getElementsByTagName('link')[0].href = 'data:image/png;base64," + colors[i]["url"] + "';"); + tryCompare(faviconImage, "source", "image://favicon/data:image/png;base64," + colors[i]["url"]); + compare(iconChangedSpy.count, 1); + + pixel = getFaviconPixel(faviconImage); + compare(pixel[0], colors[i]["r"]); + compare(pixel[1], colors[i]["g"]); + compare(pixel[2], colors[i]["b"]); + } faviconImage.destroy() - grabImage.destroy() - faviconCanvas.destroy() } } } diff --git a/tests/auto/widgets/qwebenginefaviconmanager/tst_qwebenginefaviconmanager.cpp b/tests/auto/widgets/qwebenginefaviconmanager/tst_qwebenginefaviconmanager.cpp index 38311cad2..8dcdb9f7a 100644 --- a/tests/auto/widgets/qwebenginefaviconmanager/tst_qwebenginefaviconmanager.cpp +++ b/tests/auto/widgets/qwebenginefaviconmanager/tst_qwebenginefaviconmanager.cpp @@ -60,6 +60,7 @@ private Q_SLOTS: void downloadIconsDisabled(); void downloadTouchIconsEnabled_data(); void downloadTouchIconsEnabled(); + void dynamicFavicon(); private: QWebEngineView *m_view; @@ -473,6 +474,35 @@ void tst_QWebEngineFaviconManager::downloadTouchIconsEnabled() QVERIFY(icon.availableSizes().contains(expectedIconSize)); } +void tst_QWebEngineFaviconManager::dynamicFavicon() +{ + QSignalSpy loadFinishedSpy(m_page, SIGNAL(loadFinished(bool))); + QSignalSpy iconUrlChangedSpy(m_page, SIGNAL(iconUrlChanged(QUrl))); + QSignalSpy iconChangedSpy(m_page, SIGNAL(iconChanged(QIcon))); + + QMap<Qt::GlobalColor, QString> colors; + colors.insert(Qt::red, QString("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==")); + colors.insert(Qt::green, QString("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk+M/wHwAEBgIApD5fRAAAAABJRU5ErkJggg==")); + colors.insert(Qt::blue, QString("iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNkYPj/HwADBwIAMCbHYQAAAABJRU5ErkJggg==")); + + m_page->setHtml("<html>" + "<link rel='icon' type='image/png' href='data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNk+A8AAQUBAScY42YAAAAASUVORK5CYII='/>" + "</html>"); + QTRY_COMPARE(loadFinishedSpy.count(), 1); + QTRY_COMPARE(iconUrlChangedSpy.count(), 1); + QTRY_COMPARE(iconChangedSpy.count(), 1); + + QCOMPARE(m_page->icon().pixmap(1, 1).toImage().pixelColor(0, 0), QColor(Qt::black)); + + for (Qt::GlobalColor color : colors.keys()) { + iconChangedSpy.clear(); + evaluateJavaScriptSync(m_page, "document.getElementsByTagName('link')[0].href = 'data:image/png;base64," + colors[color] + "';"); + QTRY_COMPARE(iconChangedSpy.count(), 1); + QTRY_COMPARE(m_page->iconUrl().toString(), QString("data:image/png;base64," + colors[color])); + QCOMPARE(m_page->icon().pixmap(1, 1).toImage().pixelColor(0, 0), QColor(color)); + } +} + QTEST_MAIN(tst_QWebEngineFaviconManager) #include "tst_qwebenginefaviconmanager.moc" diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp index 294cc52b1..6961f3b6d 100644 --- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp +++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp @@ -163,20 +163,25 @@ public: class ReplyingUrlSchemeHandler : public QWebEngineUrlSchemeHandler { - QBuffer m_buffer; - QByteArray m_bufferData; public: ReplyingUrlSchemeHandler(QObject *parent = nullptr) : QWebEngineUrlSchemeHandler(parent) { - m_buffer.setBuffer(&m_bufferData); + } + ~ReplyingUrlSchemeHandler() + { } void requestStarted(QWebEngineUrlRequestJob *job) { - m_bufferData = job->requestUrl().toString().toUtf8(); - job->reply("text/plain;charset=utf-8", &m_buffer); + QBuffer *buffer = new QBuffer; + buffer->setData(job->requestUrl().toString().toUtf8()); + connect(buffer, &QIODevice::aboutToClose, buffer, &QObject::deleteLater); + m_buffers.append(buffer); + job->reply("text/plain;charset=utf-8", buffer); } + + QList<QPointer<QBuffer>> m_buffers; }; class StreamingIODevice : public QIODevice { @@ -309,6 +314,11 @@ void tst_QWebEngineProfile::urlSchemeHandlers() url = QUrl(QStringLiteral("aviancarrier:inspector.mortensen@politistyrke.dk")); QVERIFY(loadSync(&view, url)); QCOMPARE(toPlainTextSync(view.page()), url.toString()); + + // Check that all buffers got deleted + QCOMPARE(gopherHandler.m_buffers.count(), 2); + for (int i = 0; i < gopherHandler.m_buffers.count(); ++i) + QVERIFY(gopherHandler.m_buffers.at(i).isNull()); } class FailingUrlSchemeHandler : public QWebEngineUrlSchemeHandler |