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..e492e3fdc74e67995ca234a83d1448d32609aefa 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(scale(), location()); |
+} |
+ |
double VisualViewport::scrollLeft() |
{ |
if (!mainFrame()) |
@@ -554,7 +561,23 @@ int VisualViewport::scrollSize(ScrollbarOrientation orientation) const |
IntPoint VisualViewport::minimumScrollPosition() const |
{ |
- return IntPoint(); |
+ return flooredIntPoint(minimumScrollPositionDouble()); |
+} |
+ |
+DoublePoint VisualViewport::minimumScrollPositionDouble() const |
+{ |
+ if (m_scrollAndScaleEmulator) { |
+ DoublePoint minimum = calculateMinimumScrollPositionDouble(); |
+ DoublePoint maximum = calculateMaximumScrollPositionDouble(); |
+ return m_scrollAndScaleEmulator->applyVisualViewportPositionOverride(minimum, minimum, maximum); |
+ } |
+ |
+ return calculateMinimumScrollPositionDouble(); |
+} |
+ |
+DoublePoint VisualViewport::calculateMinimumScrollPositionDouble() const |
+{ |
+ return DoublePoint(); |
} |
IntPoint VisualViewport::maximumScrollPosition() const |
@@ -564,6 +587,17 @@ IntPoint VisualViewport::maximumScrollPosition() const |
DoublePoint VisualViewport::maximumScrollPositionDouble() const |
{ |
+ if (m_scrollAndScaleEmulator) { |
+ DoublePoint minimum = calculateMinimumScrollPositionDouble(); |
+ DoublePoint maximum = calculateMaximumScrollPositionDouble(); |
+ return m_scrollAndScaleEmulator->applyVisualViewportPositionOverride(maximum, minimum, maximum); |
+ } |
+ |
+ return calculateMaximumScrollPositionDouble(); |
+} |
+ |
+DoublePoint VisualViewport::calculateMaximumScrollPositionDouble() const |
+{ |
if (!mainFrame()) |
return IntPoint(); |