| Index: third_party/WebKit/Source/web/WebViewImpl.cpp
 | 
| diff --git a/third_party/WebKit/Source/web/WebViewImpl.cpp b/third_party/WebKit/Source/web/WebViewImpl.cpp
 | 
| index 0193aed219630e0291ae57305b3d54955c9f3d01..17424826a5900d818fc4cb0ba8fa7a196d27cb93 100644
 | 
| --- a/third_party/WebKit/Source/web/WebViewImpl.cpp
 | 
| +++ b/third_party/WebKit/Source/web/WebViewImpl.cpp
 | 
| @@ -1837,7 +1837,14 @@
 | 
|  
 | 
|  void WebViewImpl::performResize()
 | 
|  {
 | 
| -    pageScaleConstraintsSet().didChangeViewSize(m_size);
 | 
| +    // We'll keep the initial containing block size from changing when the top
 | 
| +    // controls hide so that the ICB will always be the same size as the
 | 
| +    // viewport with the top controls shown.
 | 
| +    IntSize ICBSize = m_size;
 | 
| +    if (!topControls().shrinkViewport())
 | 
| +        ICBSize.expand(0, -topControls().height());
 | 
| +
 | 
| +    pageScaleConstraintsSet().didChangeInitialContainingBlockSize(ICBSize);
 | 
|  
 | 
|      updatePageDefinedViewportConstraints(mainFrameImpl()->frame()->document()->viewportDescription());
 | 
|      updateMainFrameLayoutSize();
 | 
| @@ -1918,7 +1925,7 @@
 | 
|          // so that it can be used for initalization if the main frame gets
 | 
|          // swapped to a LocalFrame at a later time.
 | 
|          m_size = newSize;
 | 
| -        pageScaleConstraintsSet().didChangeViewSize(m_size);
 | 
| +        pageScaleConstraintsSet().didChangeInitialContainingBlockSize(m_size);
 | 
|          page()->frameHost().visualViewport().setSize(m_size);
 | 
|          return;
 | 
|      }
 | 
| @@ -3297,7 +3304,11 @@
 | 
|  
 | 
|  IntSize WebViewImpl::mainFrameSize()
 | 
|  {
 | 
| -    return pageScaleConstraintsSet().mainFrameSize();
 | 
| +    // The frame size should match the viewport size at minimum scale, since the
 | 
| +    // viewport must always be contained by the frame.
 | 
| +    FloatSize frameSize(m_size);
 | 
| +    frameSize.scale(1 / minimumPageScaleFactor());
 | 
| +    return expandedIntSize(frameSize);
 | 
|  }
 | 
|  
 | 
|  PageScaleConstraintsSet& WebViewImpl::pageScaleConstraintsSet() const
 | 
| @@ -4100,7 +4111,7 @@
 | 
|              m_size = frameSize;
 | 
|  
 | 
|              page()->frameHost().visualViewport().setSize(m_size);
 | 
| -            pageScaleConstraintsSet().didChangeViewSize(m_size);
 | 
| +            pageScaleConstraintsSet().didChangeInitialContainingBlockSize(m_size);
 | 
|  
 | 
|              m_client->didAutoResize(m_size);
 | 
|              sendResizeEventAndRepaint();
 | 
| 
 |