diff options
-rw-r--r-- | src/core/web_contents_adapter.cpp | 10 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview.cpp | 15 | ||||
-rw-r--r-- | src/webengine/api/qquickwebengineview_p_p.h | 1 | ||||
-rw-r--r-- | tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp | 20 | ||||
-rw-r--r-- | tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp | 26 |
5 files changed, 70 insertions, 2 deletions
diff --git a/src/core/web_contents_adapter.cpp b/src/core/web_contents_adapter.cpp index b77a56b9b..0c1dd0cc8 100644 --- a/src/core/web_contents_adapter.cpp +++ b/src/core/web_contents_adapter.cpp @@ -665,7 +665,15 @@ void WebContentsAdapter::setZoomFactor(qreal factor) Q_D(WebContentsAdapter); if (factor < content::kMinimumZoomFactor || factor > content::kMaximumZoomFactor) return; - content::HostZoomMap::SetZoomLevel(d->webContents.get(), content::ZoomFactorToZoomLevel(static_cast<double>(factor))); + + double zoomLevel = content::ZoomFactorToZoomLevel(static_cast<double>(factor)); + content::HostZoomMap *zoomMap = content::HostZoomMap::GetForWebContents(d->webContents.get()); + + if (zoomMap) { + int render_process_id = d->webContents->GetRenderProcessHost()->GetID(); + int render_view_id = d->webContents->GetRenderViewHost()->GetRoutingID(); + zoomMap->SetTemporaryZoomLevel(render_process_id, render_view_id, zoomLevel); + } } qreal WebContentsAdapter::currentZoomFactor() const diff --git a/src/webengine/api/qquickwebengineview.cpp b/src/webengine/api/qquickwebengineview.cpp index 3768c3ac6..a9ca47598 100644 --- a/src/webengine/api/qquickwebengineview.cpp +++ b/src/webengine/api/qquickwebengineview.cpp @@ -114,6 +114,7 @@ QQuickWebEngineViewPrivate::QQuickWebEngineViewPrivate() , m_webChannel(0) , m_dpiScale(1.0) , m_backgroundColor(Qt::white) + , m_defaultZoomFactor(1.0) { // The gold standard for mobile web content is 160 dpi, and the devicePixelRatio expected // is the (possibly quantized) ratio of device dpi to 160 dpi. @@ -721,6 +722,10 @@ void QQuickWebEngineViewPrivate::adoptWebContents(WebContentsAdapter *webContent Q_FOREACH (QQuickWebEngineScript *script, m_userScripts) script->d_func()->bind(browserContextAdapter()->userScriptController(), adapter.data()); + // set the zoomFactor if it had been changed on the old adapter. + if (!qFuzzyCompare(adapter->currentZoomFactor(), m_defaultZoomFactor)) + q->setZoomFactor(m_defaultZoomFactor); + // Emit signals for values that might be different from the previous WebContentsAdapter. emit q->titleChanged(); emit q->urlChanged(); @@ -753,6 +758,7 @@ QQuickWebEngineView::~QQuickWebEngineView() void QQuickWebEngineViewPrivate::ensureContentsAdapter() { + Q_Q(QQuickWebEngineView); if (!adapter) { adapter = new WebContentsAdapter(); adapter->initialize(this); @@ -765,6 +771,10 @@ void QQuickWebEngineViewPrivate::ensureContentsAdapter() // push down the page's user scripts Q_FOREACH (QQuickWebEngineScript *script, m_userScripts) script->d_func()->bind(browserContextAdapter()->userScriptController(), adapter.data()); + // set the zoomFactor if it had been changed on the old adapter. + if (!qFuzzyCompare(adapter->currentZoomFactor(), m_defaultZoomFactor)) + q->setZoomFactor(m_defaultZoomFactor); + } } @@ -856,8 +866,11 @@ void QQuickWebEngineView::stop() void QQuickWebEngineView::setZoomFactor(qreal arg) { Q_D(QQuickWebEngineView); + d->m_defaultZoomFactor = arg; + if (!d->adapter) return; + qreal oldFactor = d->adapter->currentZoomFactor(); d->adapter->setZoomFactor(arg); if (qFuzzyCompare(oldFactor, d->adapter->currentZoomFactor())) @@ -1045,7 +1058,7 @@ qreal QQuickWebEngineView::zoomFactor() const { Q_D(const QQuickWebEngineView); if (!d->adapter) - return 1.0; + return d->m_defaultZoomFactor; return d->adapter->currentZoomFactor(); } diff --git a/src/webengine/api/qquickwebengineview_p_p.h b/src/webengine/api/qquickwebengineview_p_p.h index 65bf25e67..65360dcac 100644 --- a/src/webengine/api/qquickwebengineview_p_p.h +++ b/src/webengine/api/qquickwebengineview_p_p.h @@ -213,6 +213,7 @@ private: QList<QQuickWebEngineScript *> m_userScripts; qreal m_dpiScale; QColor m_backgroundColor; + qreal m_defaultZoomFactor; }; #ifndef QT_NO_ACCESSIBILITY diff --git a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp index a1900a77d..60e495137 100644 --- a/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp +++ b/tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp @@ -60,6 +60,7 @@ private Q_SLOTS: void inputMethod(); void inputMethodHints(); void basicRenderingSanity(); + void setZoomFactor(); private: inline QQuickWebEngineView *newWebEngineView(); @@ -461,5 +462,24 @@ void tst_QQuickWebEngineView::inputMethodHints() #endif } +void tst_QQuickWebEngineView::setZoomFactor() +{ + QQuickWebEngineView *view = webEngineView(); + + QVERIFY(qFuzzyCompare(view->zoomFactor(), 1.0)); + view->setZoomFactor(2.5); + QVERIFY(qFuzzyCompare(view->zoomFactor(), 2.5)); + + view->setUrl(urlFromTestPath("html/basic_page.html")); + QVERIFY(waitForLoadSucceeded(view)); + QVERIFY(qFuzzyCompare(view->zoomFactor(), 2.5)); + + view->setZoomFactor(0.1); + QVERIFY(qFuzzyCompare(view->zoomFactor(), 2.5)); + + view->setZoomFactor(5.5); + QVERIFY(qFuzzyCompare(view->zoomFactor(), 2.5)); +} + QTEST_MAIN(tst_QQuickWebEngineView) #include "tst_qquickwebengineview.moc" diff --git a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp index 06b19216d..715050fcc 100644 --- a/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp +++ b/tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp @@ -236,6 +236,7 @@ private Q_SLOTS: void restoreHistory(); void toPlainTextLoadFinishedRace_data(); void toPlainTextLoadFinishedRace(); + void setZoomFactor(); private: QWebEngineView* m_view; @@ -4980,5 +4981,30 @@ void tst_QWebEnginePage::toPlainTextLoadFinishedRace() QVERIFY(spy.count() == 3); } +void tst_QWebEnginePage::setZoomFactor() +{ + QWebEnginePage *page = new QWebEnginePage; + + QVERIFY(qFuzzyCompare(page->zoomFactor(), 1.0)); + page->setZoomFactor(2.5); + QVERIFY(qFuzzyCompare(page->zoomFactor(), 2.5)); + + const QUrl urlToLoad("qrc:/resources/test1.html"); + + QSignalSpy finishedSpy(m_page, SIGNAL(loadFinished(bool))); + m_page->setUrl(urlToLoad); + QTRY_COMPARE(finishedSpy.count(), 1); + QVERIFY(finishedSpy.at(0).first().toBool()); + QVERIFY(qFuzzyCompare(page->zoomFactor(), 2.5)); + + page->setZoomFactor(5.5); + QVERIFY(qFuzzyCompare(page->zoomFactor(), 2.5)); + + page->setZoomFactor(0.1); + QVERIFY(qFuzzyCompare(page->zoomFactor(), 2.5)); + + delete page; +} + QTEST_MAIN(tst_QWebEnginePage) #include "tst_qwebenginepage.moc" |