| Index: Source/web/WebViewImpl.cpp
 | 
| diff --git a/Source/web/WebViewImpl.cpp b/Source/web/WebViewImpl.cpp
 | 
| index c0ec80d75148b9d2714f4e268510af5b4358fd19..de04fb106873d5b0effc1e140708bb5af77e6fe3 100644
 | 
| --- a/Source/web/WebViewImpl.cpp
 | 
| +++ b/Source/web/WebViewImpl.cpp
 | 
| @@ -413,6 +413,8 @@ WebViewImpl::WebViewImpl(WebViewClient* client)
 | 
|      , m_contextMenuAllowed(false)
 | 
|      , m_doingDragAndDrop(false)
 | 
|      , m_ignoreInputEvents(false)
 | 
| +    , m_compositorDeviceScaleFactorOverride(0)
 | 
| +    , m_rootLayerScale(1)
 | 
|      , m_suppressNextKeypressEvent(false)
 | 
|      , m_imeAcceptEvents(true)
 | 
|      , m_operationsAllowed(WebDragOperationNone)
 | 
| @@ -1723,13 +1725,11 @@ void WebViewImpl::resize(const WebSize& newSize)
 | 
|      WebDevToolsAgentPrivate* agentPrivate = devToolsAgentPrivate();
 | 
|      if (agentPrivate)
 | 
|          agentPrivate->webViewResized(newSize);
 | 
| -    if (!agentPrivate || !agentPrivate->metricsOverridden()) {
 | 
| -        WebFrameImpl* webFrame = mainFrameImpl();
 | 
| -        if (webFrame->frameView()) {
 | 
| -            webFrame->frameView()->resize(m_size);
 | 
| -            if (m_pinchViewports)
 | 
| -                m_pinchViewports->setViewportSize(m_size);
 | 
| -        }
 | 
| +    WebFrameImpl* webFrame = mainFrameImpl();
 | 
| +    if (webFrame->frameView()) {
 | 
| +        webFrame->frameView()->resize(m_size);
 | 
| +        if (m_pinchViewports)
 | 
| +            m_pinchViewports->setViewportSize(m_size);
 | 
|      }
 | 
|  
 | 
|      if (settings()->viewportEnabled() && !m_fixedLayoutSizeLock) {
 | 
| @@ -2923,7 +2923,7 @@ void WebViewImpl::setDeviceScaleFactor(float scaleFactor)
 | 
|      page()->setDeviceScaleFactor(scaleFactor);
 | 
|  
 | 
|      if (m_layerTreeView)
 | 
| -        m_layerTreeView->setDeviceScaleFactor(scaleFactor);
 | 
| +        updateLayerTreeDeviceScaleFactor();
 | 
|  }
 | 
|  
 | 
|  bool WebViewImpl::isFixedLayoutModeEnabled() const
 | 
| @@ -3482,10 +3482,17 @@ void WebViewImpl::setInspectorSetting(const WebString& key,
 | 
|  
 | 
|  void WebViewImpl::setCompositorDeviceScaleFactorOverride(float deviceScaleFactor)
 | 
|  {
 | 
| +    m_compositorDeviceScaleFactorOverride = deviceScaleFactor;
 | 
| +    if (page() && m_layerTreeView)
 | 
| +        updateLayerTreeDeviceScaleFactor();
 | 
|  }
 | 
|  
 | 
|  void WebViewImpl::setRootLayerScaleTransform(float rootLayerScale)
 | 
|  {
 | 
| +    m_rootLayerScale = rootLayerScale;
 | 
| +    if (mainFrameImpl())
 | 
| +        mainFrameImpl()->setInputEventsScaleFactorForEmulation(m_rootLayerScale);
 | 
| +    updateRootLayerTransform();
 | 
|  }
 | 
|  
 | 
|  WebDevToolsAgent* WebViewImpl::devToolsAgent()
 | 
| @@ -3890,6 +3897,8 @@ void WebViewImpl::setRootGraphicsLayer(GraphicsLayer* layer)
 | 
|  
 | 
|      setIsAcceleratedCompositingActive(layer);
 | 
|  
 | 
| +    updateRootLayerTransform();
 | 
| +
 | 
|      if (m_layerTreeView) {
 | 
|          if (m_rootLayer) {
 | 
|              m_layerTreeView->setRootLayer(*m_rootLayer);
 | 
| @@ -4012,7 +4021,7 @@ void WebViewImpl::setIsAcceleratedCompositingActive(bool active)
 | 
|  
 | 
|              bool visible = page()->visibilityState() == PageVisibilityStateVisible;
 | 
|              m_layerTreeView->setVisible(visible);
 | 
| -            m_layerTreeView->setDeviceScaleFactor(page()->deviceScaleFactor());
 | 
| +            updateLayerTreeDeviceScaleFactor();
 | 
|              m_layerTreeView->setPageScaleFactorAndLimits(pageScaleFactor(), minimumPageScaleFactor(), maximumPageScaleFactor());
 | 
|              m_layerTreeView->setBackgroundColor(backgroundColor());
 | 
|              m_layerTreeView->setHasTransparentBackground(isTransparent());
 | 
| @@ -4097,6 +4106,24 @@ void WebViewImpl::updateLayerTreeViewport()
 | 
|      m_layerTreeView->setPageScaleFactorAndLimits(pageScaleFactor(), minimumPageScaleFactor(), maximumPageScaleFactor());
 | 
|  }
 | 
|  
 | 
| +void WebViewImpl::updateLayerTreeDeviceScaleFactor()
 | 
| +{
 | 
| +    ASSERT(page());
 | 
| +    ASSERT(m_layerTreeView);
 | 
| +
 | 
| +    float deviceScaleFactor = m_compositorDeviceScaleFactorOverride ? m_compositorDeviceScaleFactorOverride : page()->deviceScaleFactor();
 | 
| +    m_layerTreeView->setDeviceScaleFactor(deviceScaleFactor);
 | 
| +}
 | 
| +
 | 
| +void WebViewImpl::updateRootLayerTransform()
 | 
| +{
 | 
| +    if (m_rootGraphicsLayer) {
 | 
| +        WebCore::TransformationMatrix transform;
 | 
| +        transform = transform.scale(m_rootLayerScale);
 | 
| +        m_rootGraphicsLayer->setChildrenTransform(transform);
 | 
| +    }
 | 
| +}
 | 
| +
 | 
|  void WebViewImpl::selectAutofillSuggestionAtIndex(unsigned listIndex)
 | 
|  {
 | 
|      if (m_autofillPopupClient && listIndex < m_autofillPopupClient->getSuggestionsCount())
 | 
| 
 |