| Index: third_party/WebKit/Source/web/WebViewImpl.cpp
|
| diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
|
| index fad565d27c6eaef57d89c1087056567fb40a7363..61eb90a8860713dfe19f8d7673ddaa8090241ed6 100644
|
| --- a/third_party/WebKit/Source/web/WebViewImpl.cpp
|
| +++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
|
| @@ -419,6 +419,7 @@ WebViewImpl::WebViewImpl(WebViewClient* client)
|
| , m_enableFakePageScaleAnimationForTesting(false)
|
| , m_fakePageScaleAnimationPageScaleFactor(0)
|
| , m_fakePageScaleAnimationUseAnchor(false)
|
| + , m_scrollOverrideEnabled(false)
|
| , m_doingDragAndDrop(false)
|
| , m_ignoreInputEvents(false)
|
| , m_compositorDeviceScaleFactorOverride(0)
|
| @@ -1818,7 +1819,11 @@ void WebViewImpl::performResize()
|
| updatePageDefinedViewportConstraints(mainFrameImpl()->frame()->document()->viewportDescription());
|
| updateMainFrameLayoutSize();
|
|
|
| - page()->frameHost().visualViewport().setSize(m_size);
|
| + if (!(m_scrollOverrideEnabled
|
| + && (m_scrollOverrideParams.visualViewportSize.width
|
| + || m_scrollOverrideParams.visualViewportSize.height))) {
|
| + page()->frameHost().visualViewport().setSize(m_size);
|
| + }
|
|
|
| if (mainFrameImpl()->frameView()) {
|
| if (!mainFrameImpl()->frameView()->needsLayout())
|
| @@ -3165,6 +3170,18 @@ float WebViewImpl::pageScaleFactor() const
|
| return page()->frameHost().visualViewport().scale();
|
| }
|
|
|
| +WebPoint WebViewImpl::mainFrameOffset() const
|
| +{
|
| + if (!page() || !mainFrameImpl())
|
| + return WebPoint();
|
| +
|
| + FrameView* view = mainFrameImpl()->frameView();
|
| + if (!view)
|
| + return WebPoint();
|
| +
|
| + return view->scrollPosition();
|
| +}
|
| +
|
| float WebViewImpl::clampPageScaleFactorToLimits(float scaleFactor) const
|
| {
|
| return pageScaleConstraintsSet().finalConstraints().clampToConstraints(scaleFactor);
|
| @@ -3188,6 +3205,56 @@ WebFloatSize WebViewImpl::visualViewportSize() const
|
| return page()->frameHost().visualViewport().visibleRect().size();
|
| }
|
|
|
| +void WebViewImpl::setScrollOverride(const WebDeviceEmulationParams& params)
|
| +{
|
| + if (m_scrollOverrideEnabled && m_scrollOverrideParams == params)
|
| + return;
|
| +
|
| + if (!page())
|
| + return;
|
| +
|
| + if (!mainFrameImpl())
|
| + return;
|
| +
|
| + FrameView * view = mainFrameImpl()->frameView();
|
| + if (!view)
|
| + return;
|
| +
|
| + m_scrollOverrideEnabled = true;
|
| + m_scrollOverrideParams = params;
|
| +
|
| + view->setScrollOverride(DoublePoint(
|
| + m_scrollOverrideParams.scrollPosition.x, m_scrollOverrideParams.scrollPosition.y));
|
| + page()->frameHost().visualViewport().setScaleAndScrollOverride(
|
| + m_scrollOverrideParams.visualViewportScale,
|
| + FloatPoint(
|
| + m_scrollOverrideParams.visualViewportPosition.x,
|
| + m_scrollOverrideParams.visualViewportPosition.y));
|
| +}
|
| +
|
| +void WebViewImpl::clearScrollOverride()
|
| +{
|
| + if (!m_scrollOverrideEnabled)
|
| + return;
|
| +
|
| + if (!page())
|
| + return;
|
| +
|
| + if (!mainFrameImpl())
|
| + return;
|
| +
|
| + FrameView * view = mainFrameImpl()->frameView();
|
| + if (!view)
|
| + return;
|
| +
|
| + m_scrollOverrideEnabled = false;
|
| +
|
| + view->clearScrollOverride();
|
| + page()->frameHost().visualViewport().clearScaleAndScrollOverride();
|
| +
|
| + resetScrollAndScaleState();
|
| +}
|
| +
|
| void WebViewImpl::scrollAndRescaleViewports(float scaleFactor,
|
| const IntPoint& mainFrameOrigin,
|
| const FloatPoint& visualViewportOrigin)
|
| @@ -3848,10 +3915,12 @@ void WebViewImpl::setRootLayerTransform(const WebSize& rootLayerOffset, float ro
|
| void WebViewImpl::enableDeviceEmulation(const WebDeviceEmulationParams& params)
|
| {
|
| m_devToolsEmulator->enableDeviceEmulation(params);
|
| + setScrollOverride(params);
|
| }
|
|
|
| void WebViewImpl::disableDeviceEmulation()
|
| {
|
| + clearScrollOverride();
|
| m_devToolsEmulator->disableDeviceEmulation();
|
| }
|
|
|
|
|