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 85c73df4a0db2517f8a404a18985d24c889f91ff..c3b4c98d779a3cb1b3b176d2d5c33cebd5d1b6d7 100644 |
--- a/third_party/WebKit/Source/core/frame/VisualViewport.cpp |
+++ b/third_party/WebKit/Source/core/frame/VisualViewport.cpp |
@@ -35,6 +35,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" |
@@ -211,6 +212,12 @@ void VisualViewport::setScale(float scale) |
setScaleAndLocation(scale, m_offset); |
} |
+void VisualViewport::setScrollAndScaleEmulator(const RefPtr<ScrollAndScaleEmulator>& emulator) |
+{ |
+ m_scrollAndScaleEmulator = emulator; |
+ setScaleAndLocation(this->scale(), this->location()); |
+} |
+ |
double VisualViewport::scrollLeft() |
{ |
if (!mainFrame()) |
@@ -554,7 +561,15 @@ int VisualViewport::scrollSize(ScrollbarOrientation orientation) const |
IntPoint VisualViewport::minimumScrollPosition() const |
{ |
- return IntPoint(); |
+ return flooredIntPoint(minimumScrollPositionDouble()); |
+} |
+ |
+DoublePoint VisualViewport::minimumScrollPositionDouble() const |
+{ |
+ if (m_scrollAndScaleEmulator) |
+ return m_scrollAndScaleEmulator->applyVisualViewportPositionOverride(DoublePoint()); |
+ |
+ return DoublePoint(); |
} |
IntPoint VisualViewport::maximumScrollPosition() const |
@@ -583,6 +598,10 @@ DoublePoint VisualViewport::maximumScrollPositionDouble() const |
FloatSize maxPosition = frameViewSize - viewportSize; |
maxPosition.scale(1 / m_scale); |
+ |
+ if (m_scrollAndScaleEmulator) |
+ return m_scrollAndScaleEmulator->applyVisualViewportPositionOverride(DoublePoint(maxPosition)); |
+ |
return DoublePoint(maxPosition); |
} |