| Index: Source/core/frame/PinchViewport.cpp
|
| diff --git a/Source/core/frame/PinchViewport.cpp b/Source/core/frame/PinchViewport.cpp
|
| index 2c1bc055f5171ea4af3b7277212afb360887dc45..95e9054d34a3fc81ebda13cab38c9815f57bf6e9 100644
|
| --- a/Source/core/frame/PinchViewport.cpp
|
| +++ b/Source/core/frame/PinchViewport.cpp
|
| @@ -67,6 +67,7 @@ namespace blink {
|
| PinchViewport::PinchViewport(FrameHost& owner)
|
| : m_frameHost(owner)
|
| , m_scale(1)
|
| + , m_topControlsAdjustment(0)
|
| {
|
| reset();
|
| }
|
| @@ -88,8 +89,6 @@ void PinchViewport::setSize(const IntSize& size)
|
| TRACE_EVENT2("blink", "PinchViewport::setSize", "width", size.width(), "height", size.height());
|
| m_size = size;
|
|
|
| - clampToBoundaries();
|
| -
|
| if (m_innerViewportContainerLayer) {
|
| m_innerViewportContainerLayer->setSize(m_size);
|
|
|
| @@ -118,6 +117,7 @@ void PinchViewport::mainFrameDidChangeSize()
|
| FloatRect PinchViewport::visibleRect() const
|
| {
|
| FloatSize scaledSize(m_size);
|
| + scaledSize.expand(0, m_topControlsAdjustment);
|
| scaledSize.scale(1 / m_scale);
|
| return FloatRect(m_offset, scaledSize);
|
| }
|
| @@ -365,7 +365,25 @@ IntPoint PinchViewport::minimumScrollPosition() const
|
|
|
| IntPoint PinchViewport::maximumScrollPosition() const
|
| {
|
| - return flooredIntPoint(FloatSize(contentsSize()) - visibleRect().size());
|
| + // FIXME: We probably shouldn't be storing the bounds in a float. crbug.com/422331.
|
| + FloatSize frameViewSize(contentsSize());
|
| +
|
| + if (m_topControlsAdjustment) {
|
| + float aspectRatio = visibleRect().width() / visibleRect().height();
|
| + float adjustment = frameViewSize.width() / aspectRatio - frameViewSize.height();
|
| + frameViewSize.expand(0, adjustment);
|
| + }
|
| +
|
| + frameViewSize.scale(m_scale);
|
| + frameViewSize = flooredIntSize(frameViewSize);
|
| +
|
| + FloatSize viewportSize(m_size);
|
| + viewportSize.expand(0, m_topControlsAdjustment);
|
| +
|
| + FloatSize maxPosition = frameViewSize - viewportSize;
|
| + maxPosition.scale(1 / m_scale);
|
| +
|
| + return flooredIntPoint(maxPosition);
|
| }
|
|
|
| IntPoint PinchViewport::clampDocumentOffsetAtScale(const IntPoint& offset, float scale)
|
| @@ -388,6 +406,11 @@ IntPoint PinchViewport::clampDocumentOffsetAtScale(const IntPoint& offset, float
|
| return clamped;
|
| }
|
|
|
| +void PinchViewport::setTopControlsAdjustment(float adjustment)
|
| +{
|
| + m_topControlsAdjustment = adjustment;
|
| +}
|
| +
|
| IntRect PinchViewport::scrollableAreaBoundingBox() const
|
| {
|
| // This method should return the bounding box in the parent view's coordinate
|
|
|