diff options
Diffstat (limited to 'Source/WebKit2/UIProcess/mac')
3 files changed, 40 insertions, 4 deletions
diff --git a/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h b/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h index 08b16508d..c78610984 100644 --- a/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h +++ b/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h @@ -48,13 +48,15 @@ private: virtual void sizeDidChange() OVERRIDE; virtual void waitForPossibleGeometryUpdate() OVERRIDE; virtual void colorSpaceDidChange() OVERRIDE; + virtual void minimumLayoutWidthDidChange() OVERRIDE; virtual void enterAcceleratedCompositingMode(uint64_t backingStoreStateID, const LayerTreeContext&) OVERRIDE; virtual void exitAcceleratedCompositingMode(uint64_t backingStoreStateID, const UpdateInfo&) OVERRIDE; virtual void updateAcceleratedCompositingMode(uint64_t backingStoreStateID, const LayerTreeContext&) OVERRIDE; // Message handlers. - virtual void didUpdateGeometry() OVERRIDE; + virtual void didUpdateGeometry(const WebCore::IntSize& newIntrinsicContentSize) OVERRIDE; + virtual void intrinsicContentSizeDidChange(const WebCore::IntSize& newIntrinsicContentSize) OVERRIDE; void sendUpdateGeometry(); @@ -63,6 +65,9 @@ private: // The last size we sent to the web process. WebCore::IntSize m_lastSentSize; + + // The last minimum layout width we sent to the web process. + double m_lastSentMinimumLayoutWidth; }; } // namespace WebKit diff --git a/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm b/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm index a0c181768..3de8be7a6 100644 --- a/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm +++ b/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm @@ -47,6 +47,7 @@ PassOwnPtr<TiledCoreAnimationDrawingAreaProxy> TiledCoreAnimationDrawingAreaProx TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy(WebPageProxy* webPageProxy) : DrawingAreaProxy(DrawingAreaTypeTiledCoreAnimation, webPageProxy) , m_isWaitingForDidUpdateGeometry(false) + , m_lastSentMinimumLayoutWidth(0) { } @@ -103,6 +104,19 @@ void TiledCoreAnimationDrawingAreaProxy::colorSpaceDidChange() m_webPageProxy->process()->send(Messages::DrawingArea::SetColorSpace(m_webPageProxy->colorSpace()), m_webPageProxy->pageID()); } +void TiledCoreAnimationDrawingAreaProxy::minimumLayoutWidthDidChange() +{ + if (!m_webPageProxy->isValid()) + return; + + // We only want one UpdateGeometry message in flight at once, so if we've already sent one but + // haven't yet received the reply we'll just return early here. + if (m_isWaitingForDidUpdateGeometry) + return; + + sendUpdateGeometry(); +} + void TiledCoreAnimationDrawingAreaProxy::enterAcceleratedCompositingMode(uint64_t backingStoreStateID, const LayerTreeContext& layerTreeContext) { m_webPageProxy->enterAcceleratedCompositingMode(layerTreeContext); @@ -119,24 +133,36 @@ void TiledCoreAnimationDrawingAreaProxy::updateAcceleratedCompositingMode(uint64 m_webPageProxy->updateAcceleratedCompositingMode(layerTreeContext); } -void TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry() +void TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry(const IntSize& newIntrinsicContentSize) { ASSERT(m_isWaitingForDidUpdateGeometry); m_isWaitingForDidUpdateGeometry = false; + double minimumLayoutWidth = m_webPageProxy->minimumLayoutWidth(); + // If the WKView was resized while we were waiting for a DidUpdateGeometry reply from the web process, // we need to resend the new size here. - if (m_lastSentSize != m_size) + if (m_lastSentSize != m_size || m_lastSentMinimumLayoutWidth != minimumLayoutWidth) sendUpdateGeometry(); + + if (minimumLayoutWidth > 0) + m_webPageProxy->intrinsicContentSizeDidChange(newIntrinsicContentSize); +} + +void TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange(const IntSize& newIntrinsicContentSize) +{ + if (m_webPageProxy->minimumLayoutWidth() > 0) + m_webPageProxy->intrinsicContentSizeDidChange(newIntrinsicContentSize); } void TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry() { ASSERT(!m_isWaitingForDidUpdateGeometry); + m_lastSentMinimumLayoutWidth = m_webPageProxy->minimumLayoutWidth(); m_lastSentSize = m_size; - m_webPageProxy->process()->send(Messages::DrawingArea::UpdateGeometry(m_size), m_webPageProxy->pageID()); + m_webPageProxy->process()->send(Messages::DrawingArea::UpdateGeometry(m_size, m_lastSentMinimumLayoutWidth), m_webPageProxy->pageID()); m_isWaitingForDidUpdateGeometry = true; } diff --git a/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm b/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm index 137c22f2c..849ba20f8 100644 --- a/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm +++ b/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm @@ -474,6 +474,11 @@ WKView* WebPageProxy::wkView() const return m_pageClient->wkView(); } +void WebPageProxy::intrinsicContentSizeDidChange(const IntSize& intrinsicContentSize) +{ + m_pageClient->intrinsicContentSizeDidChange(intrinsicContentSize); +} + void WebPageProxy::setAcceleratedCompositingRootLayer(const GraphicsLayer* rootLayer) { m_pageClient->setAcceleratedCompositingRootLayer(rootLayer->platformLayer()); |