summaryrefslogtreecommitdiffstats
path: root/tests/auto
diff options
context:
space:
mode:
authorAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-02-04 13:50:57 +0100
committerAllan Sandfeld Jensen <allan.jensen@theqtcompany.com>2016-02-04 14:13:39 +0100
commit6722bbbf4ea2ddcdd9194f26a883029ec3afc39a (patch)
treec3290b82fac21c4990be8472ae6cb4ca043205cf /tests/auto
parent41d69eb0fa2375f0da6ba9b35136f5598be4b3a4 (diff)
parent82f4d13a13b40d9cb7710f6dd4190175a272a394 (diff)
Merge branch '5.6' into dev
Diffstat (limited to 'tests/auto')
-rw-r--r--tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp32
-rw-r--r--tests/auto/quick/qquickwebengineviewgraphics/tst_qquickwebengineviewgraphics.cpp7
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp36
-rw-r--r--tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp105
4 files changed, 171 insertions, 9 deletions
diff --git a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp
index cb566c254..a1900a77d 100644
--- a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp
+++ b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp
@@ -21,10 +21,13 @@
#include "util.h"
#include <QScopedPointer>
+#include <QtCore/qelapsedtimer.h>
#include <QtQml/QQmlEngine>
#include <QtTest/QtTest>
#include <private/qquickwebengineview_p.h>
+#include <functional>
+
class tst_QQuickWebEngineView : public QObject {
Q_OBJECT
public:
@@ -313,6 +316,21 @@ void tst_QQuickWebEngineView::multipleWebEngineViews()
QTest::qWait(200);
}
+QImage tryToGrabWindowUntil(QQuickWindow *window, std::function<bool(const QImage &)> checkImage,
+ int timeout = 5000)
+{
+ QImage grabbed;
+ QElapsedTimer t;
+ t.start();
+ do {
+ QTest::qWait(200);
+ grabbed = window->grabWindow();
+ if (checkImage(grabbed))
+ break;
+ } while (!t.hasExpired(timeout));
+ return grabbed;
+}
+
void tst_QQuickWebEngineView::basicRenderingSanity()
{
showWebEngineView();
@@ -322,9 +340,12 @@ void tst_QQuickWebEngineView::basicRenderingSanity()
// This should not crash.
webEngineView()->setVisible(true);
- QTest::qWait(200);
- QImage grabbedWindow = m_window->grabWindow();
+
QRgb testColor = qRgba(0, 0xff, 0, 0xff);
+ const QImage grabbedWindow = tryToGrabWindowUntil(m_window.data(),
+ [testColor] (const QImage &image) {
+ return image.pixel(10, 10) == testColor;
+ });
QVERIFY(grabbedWindow.pixel(10, 10) == testColor);
QVERIFY(grabbedWindow.pixel(100, 10) == testColor);
QVERIFY(grabbedWindow.pixel(10, 100) == testColor);
@@ -370,12 +391,11 @@ void tst_QQuickWebEngineView::transparentWebEngineViews()
webEngineView2->setSize(QSizeF(300, 400));
webEngineView2->setUrl(urlFromTestPath("/html/basic_page.html"));
QVERIFY(waitForLoadSucceeded(webEngineView2.data()));
- webEngineView2->setVisible(true);
-
- QTest::qWait(200);
// Result image: black text on red background.
- QImage grabbedWindow = m_window->grabWindow();
+ const QImage grabbedWindow = tryToGrabWindowUntil(m_window.data(), [] (const QImage &image) {
+ return image.pixelColor(0, 0) == QColor(Qt::red);
+ });
QSet<int> redComponents;
for (int i = 0, width = grabbedWindow.width(); i < width; i++) {
diff --git a/tests/auto/quick/qquickwebengineviewgraphics/tst_qquickwebengineviewgraphics.cpp b/tests/auto/quick/qquickwebengineviewgraphics/tst_qquickwebengineviewgraphics.cpp
index 2e85ab802..cd1d1ac44 100644
--- a/tests/auto/quick/qquickwebengineviewgraphics/tst_qquickwebengineviewgraphics.cpp
+++ b/tests/auto/quick/qquickwebengineviewgraphics/tst_qquickwebengineviewgraphics.cpp
@@ -178,13 +178,14 @@ void tst_QQuickWebEngineViewGraphics::reparentToOtherWindow()
void tst_QQuickWebEngineViewGraphics::setHtml(const QString &html)
{
QString htmlData = QUrl::toPercentEncoding(html);
- QString qmlData = QUrl::toPercentEncoding(QStringLiteral("import QtQuick 2.0; import QtWebEngine 1.2; WebEngineView { width: 150; height: 150; url: loadUrl }"));
- m_view->rootContext()->setContextProperty("loadUrl", QUrl(QStringLiteral("data:text/html,%1").arg(htmlData)));
+ QString qmlData = QUrl::toPercentEncoding(QStringLiteral("import QtQuick 2.0; import QtWebEngine 1.2; WebEngineView { width: 150; height: 150 }"));
m_view->setSource(QUrl(QStringLiteral("data:text/plain,%1").arg(qmlData)));
m_view->create();
QQuickWebEngineView *webEngineView = static_cast<QQuickWebEngineView *>(m_view->rootObject());
- QVERIFY(waitForSignal(reinterpret_cast<QObject *>(webEngineView->experimental()), SIGNAL(loadVisuallyCommitted())));
+ QSignalSpy spy(reinterpret_cast<QObject *>(webEngineView->experimental()), SIGNAL(loadVisuallyCommitted()));
+ webEngineView->setProperty("url", QUrl(QStringLiteral("data:text/html,%1").arg(htmlData)));
+ QVERIFY(!spy.isEmpty() || spy.wait());
QCOMPARE(m_view->rootObject()->property("loading"), QVariant(false));
}
diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
index 8fd71c701..690cf70e4 100644
--- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
+++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp
@@ -33,6 +33,7 @@
#include <QStyle>
#include <QtTest/QtTest>
#include <QTextCharFormat>
+#include <QWebChannel>
#include <private/qinputmethod_p.h>
#include <qnetworkcookiejar.h>
#include <qnetworkreply.h>
@@ -42,6 +43,8 @@
#include <qwebenginehistory.h>
#include <qwebenginepage.h>
#include <qwebengineprofile.h>
+#include <qwebenginescript.h>
+#include <qwebenginescriptcollection.h>
#include <qwebenginesettings.h>
#include <qwebengineview.h>
#include <qimagewriter.h>
@@ -237,6 +240,8 @@ private Q_SLOTS:
void loadInSignalHandlers_data();
void loadInSignalHandlers();
+ void restoreHistory();
+
private:
QWebEngineView* m_view;
QWebEnginePage* m_page;
@@ -5079,5 +5084,36 @@ void tst_QWebEnginePage::loadInSignalHandlers()
QCOMPARE(m_page->url(), urlForSetter);
}
+void tst_QWebEnginePage::restoreHistory()
+{
+ QWebChannel *channel = new QWebChannel;
+ QWebEnginePage *page = new QWebEnginePage;
+ page->setWebChannel(channel);
+
+ QWebEngineScript script;
+ script.setName(QStringLiteral("script"));
+ page->scripts().insert(script);
+
+ QSignalSpy spy(page, SIGNAL(loadFinished(bool)));
+ page->load(QUrl(QStringLiteral("qrc:/resources/test1.html")));
+ QTRY_COMPARE(spy.count(), 1);
+
+ QCOMPARE(page->webChannel(), channel);
+ QVERIFY(page->scripts().contains(script));
+
+ QByteArray data;
+ QDataStream out(&data, QIODevice::ReadWrite);
+ out << *page->history();
+ QDataStream in(&data, QIODevice::ReadOnly);
+ in >> *page->history();
+ QTRY_COMPARE(spy.count(), 2);
+
+ QCOMPARE(page->webChannel(), channel);
+ QVERIFY(page->scripts().contains(script));
+
+ delete page;
+ delete channel;
+}
+
QTEST_MAIN(tst_QWebEnginePage)
#include "tst_qwebenginepage.moc"
diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
index dfc1d39df..8c23af7ee 100644
--- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
+++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp
@@ -27,7 +27,11 @@
****************************************************************************/
#include "../util.h"
+#include <QtCore/qbuffer.h>
#include <QtTest/QtTest>
+#include <QtWebEngineCore/qwebengineurlrequestjob.h>
+#include <QtWebEngineCore/qwebengineurlschemehandler.h>
+#include <QtWebEngineWidgets/qwebengineview.h>
#include <qwebengineprofile.h>
#include <qwebenginepage.h>
@@ -40,6 +44,8 @@ private Q_SLOTS:
void profileConstructors();
void clearDataFromCache();
void disableCache();
+ void urlSchemeHandlers();
+ void urlSchemeHandlerFailRequest();
};
void tst_QWebEngineProfile::defaultProfile()
@@ -137,5 +143,104 @@ void tst_QWebEngineProfile::disableCache()
cacheDir.removeRecursively();
}
+class RedirectingUrlSchemeHandler : public QWebEngineUrlSchemeHandler
+{
+public:
+ void requestStarted(QWebEngineUrlRequestJob *job)
+ {
+ job->redirect(QUrl(QStringLiteral("data:text/plain;charset=utf-8,")
+ + job->requestUrl().fileName()));
+ }
+};
+
+class ReplyingUrlSchemeHandler : public QWebEngineUrlSchemeHandler
+{
+ QBuffer m_buffer;
+ QByteArray m_bufferData;
+public:
+ ReplyingUrlSchemeHandler(QObject *parent = nullptr)
+ : QWebEngineUrlSchemeHandler(parent)
+ {
+ m_buffer.setBuffer(&m_bufferData);
+ }
+
+ void requestStarted(QWebEngineUrlRequestJob *job)
+ {
+ m_bufferData = job->requestUrl().toString().toUtf8();
+ job->reply("text/plain;charset=utf-8", &m_buffer);
+ }
+};
+
+void tst_QWebEngineProfile::urlSchemeHandlers()
+{
+ RedirectingUrlSchemeHandler mailtoHandler;
+ QWebEngineProfile profile(QStringLiteral("urlSchemeHandlers"));
+ profile.installUrlSchemeHandler("mailto", &mailtoHandler);
+ QWebEngineView view;
+ QSignalSpy loadFinishedSpy(&view, SIGNAL(loadFinished(bool)));
+ view.setPage(new QWebEnginePage(&profile, &view));
+ QString emailAddress = QStringLiteral("egon@olsen-banden.dk");
+ view.load(QUrl(QStringLiteral("mailto:") + emailAddress));
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(toPlainTextSync(view.page()), emailAddress);
+
+ // Install a gopher handler after the view has been fully initialized.
+ ReplyingUrlSchemeHandler gopherHandler;
+ profile.installUrlSchemeHandler("gopher", &gopherHandler);
+ QUrl url = QUrl(QStringLiteral("gopher://olsen-banden.dk/benny"));
+ view.load(url);
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(toPlainTextSync(view.page()), url.toString());
+
+ // Remove the mailto scheme, and check whether it is not handled anymore.
+ profile.removeUrlScheme("mailto");
+ emailAddress = QStringLiteral("kjeld@olsen-banden.dk");
+ view.load(QUrl(QStringLiteral("mailto:") + emailAddress));
+ QVERIFY(loadFinishedSpy.wait());
+ QVERIFY(toPlainTextSync(view.page()) != emailAddress);
+
+ // Check if gopher is still working after removing mailto.
+ url = QUrl(QStringLiteral("gopher://olsen-banden.dk/yvonne"));
+ view.load(url);
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(toPlainTextSync(view.page()), url.toString());
+
+ // Does removeAll work?
+ profile.removeAllUrlSchemeHandlers();
+ url = QUrl(QStringLiteral("gopher://olsen-banden.dk/harry"));
+ view.load(url);
+ QVERIFY(loadFinishedSpy.wait());
+ QVERIFY(toPlainTextSync(view.page()) != url.toString());
+
+ // Install a handler that is owned by the view. Make sure this doesn't crash on shutdown.
+ profile.installUrlSchemeHandler("aviancarrier", new ReplyingUrlSchemeHandler(&view));
+ url = QUrl(QStringLiteral("aviancarrier:inspector.mortensen@politistyrke.dk"));
+ view.load(url);
+ QVERIFY(loadFinishedSpy.wait());
+ QCOMPARE(toPlainTextSync(view.page()), url.toString());
+}
+
+class FailingUrlSchemeHandler : public QWebEngineUrlSchemeHandler
+{
+public:
+ void requestStarted(QWebEngineUrlRequestJob *job) override
+ {
+ job->fail(QWebEngineUrlRequestJob::RequestFailed);
+ }
+};
+
+void tst_QWebEngineProfile::urlSchemeHandlerFailRequest()
+{
+ FailingUrlSchemeHandler handler;
+ QWebEngineProfile profile;
+ profile.installUrlSchemeHandler("foo", &handler);
+ QWebEngineView view;
+ QSignalSpy loadFinishedSpy(&view, SIGNAL(loadFinished(bool)));
+ view.setPage(new QWebEnginePage(&profile, &view));
+ view.load(QUrl(QStringLiteral("foo://bar")));
+ QVERIFY(loadFinishedSpy.wait());
+ QVERIFY(toPlainTextSync(view.page()).isEmpty());
+}
+
QTEST_MAIN(tst_QWebEngineProfile)
#include "tst_qwebengineprofile.moc"