summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/core/web_contents_adapter.cpp10
-rw-r--r--src/webengine/api/qquickwebengineview.cpp15
-rw-r--r--src/webengine/api/qquickwebengineview_p_p.h1
-rw-r--r--tests/auto/quick/qquickwebengineview/tst_qquickwebengineview.cpp20
-rw-r--r--tests/auto/widgets/qwebenginepage/tst_qwebenginepage.cpp26
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"