| Index: third_party/WebKit/Source/core/frame/VisualViewport.cpp
|
| diff --git a/third_party/WebKit/Source/core/frame/VisualViewport.cpp b/third_party/WebKit/Source/core/frame/VisualViewport.cpp
|
| index fe5ac4494ee2ecb6dc58e36d675b0f7f4d2dad20..10dc1070e81a75b20fa7a35c97402a392bee694d 100644
|
| --- a/third_party/WebKit/Source/core/frame/VisualViewport.cpp
|
| +++ b/third_party/WebKit/Source/core/frame/VisualViewport.cpp
|
| @@ -36,6 +36,7 @@
|
| #include "core/frame/LocalFrame.h"
|
| #include "core/frame/PageScaleConstraints.h"
|
| #include "core/frame/PageScaleConstraintsSet.h"
|
| +#include "core/frame/ScrollAndScaleEmulator.h"
|
| #include "core/frame/Settings.h"
|
| #include "core/inspector/InspectorInstrumentation.h"
|
| #include "core/layout/TextAutosizer.h"
|
| @@ -86,6 +87,7 @@ VisualViewport::~VisualViewport()
|
| DEFINE_TRACE(VisualViewport)
|
| {
|
| visitor->trace(m_frameHost);
|
| + visitor->trace(m_scrollAndScaleEmulator);
|
| ScrollableArea::trace(visitor);
|
| }
|
|
|
| @@ -222,6 +224,12 @@ void VisualViewport::setScale(float scale)
|
| setScaleAndLocation(scale, m_offset);
|
| }
|
|
|
| +void VisualViewport::setScrollAndScaleEmulator(ScrollAndScaleEmulator* emulator)
|
| +{
|
| + m_scrollAndScaleEmulator = emulator;
|
| + clampToBoundaries();
|
| +}
|
| +
|
| double VisualViewport::scrollLeft()
|
| {
|
| if (!mainFrame())
|
| @@ -542,6 +550,12 @@ bool VisualViewport::shouldUseIntegerScrollOffset() const
|
| return ScrollableArea::shouldUseIntegerScrollOffset();
|
| }
|
|
|
| +void VisualViewport::setScrollPosition(const DoublePoint& scrollPoint, ScrollType scrollType, ScrollBehavior scrollBehavior)
|
| +{
|
| + DoublePoint newScrollPosition = clampScrollPosition(scrollPoint);
|
| + ScrollableArea::setScrollPosition(newScrollPosition, scrollType, scrollBehavior);
|
| +}
|
| +
|
| int VisualViewport::scrollSize(ScrollbarOrientation orientation) const
|
| {
|
| IntSize scrollDimensions = maximumScrollPosition() - minimumScrollPosition();
|
| @@ -550,7 +564,24 @@ int VisualViewport::scrollSize(ScrollbarOrientation orientation) const
|
|
|
| IntPoint VisualViewport::minimumScrollPosition() const
|
| {
|
| - return IntPoint();
|
| + return flooredIntPoint(minimumScrollPositionDouble());
|
| +}
|
| +
|
| +DoublePoint VisualViewport::minimumScrollPositionDouble() const
|
| +{
|
| + DoublePoint minimum = calculateMinimumScrollPositionDouble();
|
| +
|
| + if (m_scrollAndScaleEmulator) {
|
| + DoublePoint maximum = calculateMaximumScrollPositionDouble();
|
| + return m_scrollAndScaleEmulator->applyVisualViewportPositionOverride(minimum).shrunkTo(maximum).expandedTo(minimum);
|
| + }
|
| +
|
| + return minimum;
|
| +}
|
| +
|
| +DoublePoint VisualViewport::calculateMinimumScrollPositionDouble() const
|
| +{
|
| + return DoublePoint();
|
| }
|
|
|
| IntPoint VisualViewport::maximumScrollPosition() const
|
| @@ -560,6 +591,18 @@ IntPoint VisualViewport::maximumScrollPosition() const
|
|
|
| DoublePoint VisualViewport::maximumScrollPositionDouble() const
|
| {
|
| + DoublePoint maximum = calculateMaximumScrollPositionDouble();
|
| +
|
| + if (m_scrollAndScaleEmulator) {
|
| + DoublePoint minimum = calculateMinimumScrollPositionDouble();
|
| + return m_scrollAndScaleEmulator->applyVisualViewportPositionOverride(maximum).shrunkTo(maximum).expandedTo(minimum);
|
| + }
|
| +
|
| + return maximum;
|
| +}
|
| +
|
| +DoublePoint VisualViewport::calculateMaximumScrollPositionDouble() const
|
| +{
|
| if (!mainFrame())
|
| return IntPoint();
|
|
|
|
|