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 d61236e70169dcb61a51dc89a9ade87c94667a65..4e8a1b3246ac01195692ab1205828935b06ac124 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" |
@@ -77,6 +78,7 @@ VisualViewport::~VisualViewport() |
DEFINE_TRACE(VisualViewport) |
{ |
visitor->trace(m_frameHost); |
+ visitor->trace(m_scrollAndScaleEmulator); |
ScrollableArea::trace(visitor); |
} |
@@ -213,6 +215,12 @@ void VisualViewport::setScale(float scale) |
setScaleAndLocation(scale, m_offset); |
} |
+void VisualViewport::setScrollAndScaleEmulator(ScrollAndScaleEmulator* emulator) |
+{ |
+ m_scrollAndScaleEmulator = emulator; |
+ clampToBoundaries(); |
+} |
+ |
double VisualViewport::scrollLeft() |
{ |
if (!mainFrame()) |
@@ -549,7 +557,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 |
@@ -559,6 +584,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(); |