diff options
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/quick/quick.pro | 1 | ||||
-rw-r--r-- | tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp | 85 | ||||
-rw-r--r-- | tests/auto/widgets/tests.pri | 1 | ||||
-rw-r--r-- | tests/auto/widgets/widgets.pro | 8 |
4 files changed, 90 insertions, 5 deletions
diff --git a/tests/auto/quick/quick.pro b/tests/auto/quick/quick.pro index 75217c1ec..2e6343469 100644 --- a/tests/auto/quick/quick.pro +++ b/tests/auto/quick/quick.pro @@ -1,4 +1,3 @@ -include($$QTWEBENGINE_OUT_ROOT/qtwebengine-config.pri) QT_FOR_CONFIG += webengine-private TEMPLATE = subdirs diff --git a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp index 093bc2e43..400105152 100644 --- a/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp +++ b/tests/auto/widgets/qwebengineprofile/tst_qwebengineprofile.cpp @@ -49,6 +49,7 @@ private Q_SLOTS: void urlSchemeHandlers(); void urlSchemeHandlerFailRequest(); void urlSchemeHandlerFailOnRead(); + void urlSchemeHandlerStreaming(); void customUserAgent(); void httpAcceptLanguage(); void downloadItem(); @@ -178,6 +179,74 @@ public: } }; +class StreamingIODevice : public QIODevice { + Q_OBJECT +public: + StreamingIODevice(QObject *parent) : QIODevice(parent), m_bytesRead(0), m_bytesAvailable(0) + { + setOpenMode(QIODevice::ReadOnly); + m_timer.start(100, this); + } + bool isSequential() const override { return true; } + qint64 bytesAvailable() const override + { return m_bytesAvailable; } + bool atEnd() const override + { + return (m_data.size() >= 1000 && m_bytesRead >= 1000); + } +protected: + void timerEvent(QTimerEvent *) override + { + QMutexLocker lock(&m_mutex); + m_bytesAvailable += 200; + m_data.append(200, 'c'); + emit readyRead(); + if (m_data.size() >= 1000) { + m_timer.stop(); + emit readChannelFinished(); + } + } + + qint64 readData(char *data, qint64 maxlen) override + { + QMutexLocker lock(&m_mutex); + qint64 len = qMin(qint64(m_bytesAvailable), maxlen); + if (len) { + memcpy(data, m_data.constData() + m_bytesRead, len); + m_bytesAvailable -= len; + m_bytesRead += len; + } else if (m_data.size() > 0) + return -1; + + return len; + } + qint64 writeData(const char *, qint64) override + { + return 0; + } + +private: + QMutex m_mutex; + QByteArray m_data; + QBasicTimer m_timer; + int m_bytesRead; + int m_bytesAvailable; +}; + +class StreamingUrlSchemeHandler : public QWebEngineUrlSchemeHandler +{ +public: + StreamingUrlSchemeHandler(QObject *parent = nullptr) + : QWebEngineUrlSchemeHandler(parent) + { + } + + void requestStarted(QWebEngineUrlRequestJob *job) + { + job->reply("text/plain;charset=utf-8", new StreamingIODevice(job)); + } +}; + static bool loadSync(QWebEngineView *view, const QUrl &url, int timeout = 5000) { // Ripped off QTRY_VERIFY. @@ -310,6 +379,22 @@ void tst_QWebEngineProfile::urlSchemeHandlerFailOnRead() QCOMPARE(toPlainTextSync(view.page()), QString()); } +void tst_QWebEngineProfile::urlSchemeHandlerStreaming() +{ + StreamingUrlSchemeHandler handler; + QWebEngineProfile profile; + profile.installUrlSchemeHandler("stream", &handler); + QWebEngineView view; + QSignalSpy loadFinishedSpy(&view, SIGNAL(loadFinished(bool))); + view.setPage(new QWebEnginePage(&profile, &view)); + view.settings()->setAttribute(QWebEngineSettings::ErrorPageEnabled, false); + view.load(QUrl(QStringLiteral("stream://whatever"))); + QVERIFY(loadFinishedSpy.wait()); + QByteArray result; + result.append(1000, 'c'); + QCOMPARE(toPlainTextSync(view.page()), QString::fromLatin1(result)); +} + void tst_QWebEngineProfile::customUserAgent() { QString defaultUserAgent = QWebEngineProfile::defaultProfile()->httpUserAgent(); diff --git a/tests/auto/widgets/tests.pri b/tests/auto/widgets/tests.pri index dc0461e2b..7bd00834c 100644 --- a/tests/auto/widgets/tests.pri +++ b/tests/auto/widgets/tests.pri @@ -1,4 +1,3 @@ -include($$QTWEBENGINE_OUT_ROOT/qtwebengine-config.pri) QT_FOR_CONFIG += webengine-private TEMPLATE = app diff --git a/tests/auto/widgets/widgets.pro b/tests/auto/widgets/widgets.pro index e007df711..fbabdeaad 100644 --- a/tests/auto/widgets/widgets.pro +++ b/tests/auto/widgets/widgets.pro @@ -1,10 +1,8 @@ -include($$QTWEBENGINE_OUT_ROOT/qtwebengine-config.pri) -QT_FOR_CONFIG += webengine-private +QT_FOR_CONFIG += webengine TEMPLATE = subdirs SUBDIRS += \ - qwebengineaccessibility \ qwebenginedefaultsurfaceformat \ qwebenginedownloads \ qwebenginefaviconmanager \ @@ -18,6 +16,10 @@ SUBDIRS += \ qwebenginesettings \ qwebengineview +qtConfig(accessibility) { + SUBDIRS += qwebengineaccessibility +} + qtConfig(spellchecker):!cross_compile { !qtConfig(native-spellchecker) { SUBDIRS += qwebenginespellcheck |