Diff
Modified: trunk/Source/WebKit2/ChangeLog (136177 => 136178)
--- trunk/Source/WebKit2/ChangeLog 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/ChangeLog 2012-11-30 00:01:59 UTC (rev 136178)
@@ -1,5 +1,99 @@
2012-11-29 Anders Carlsson <[email protected]>
+ Add a minimumLayoutWidth WKView property
+ https://bugs.webkit.org/show_bug.cgi?id=103660
+ <rdar://problem/11791729>
+
+ Reviewed by Beth Dakin.
+
+ When minimumLayoutWidth is set to a positive value, the WKView will update its intrinsic content size given the layout width.
+
+ * UIProcess/API/mac/PageClientImpl.h:
+ * UIProcess/API/mac/PageClientImpl.mm:
+ (WebKit::PageClientImpl::intrinsicContentSizeDidChange):
+ Call the WKView.
+
+ * UIProcess/API/mac/WKView.mm:
+ (-[WKView intrinsicContentSize]):
+ Override the intrinsicContentSize getter.
+
+ (-[WKView _setIntrinsicContentSize:]):
+ Update the intrinsic content size and mark it as invalid.
+
+ (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]):
+ By default, the WKView should have no intrinsic size.
+
+ (-[WKView minimumLayoutWidth]):
+ (-[WKView setMinimumLayoutWidth:]):
+ Call through to the WebPageProxy object.
+
+ * UIProcess/API/mac/WKViewPrivate.h:
+ Add the SPI here.
+
+ * UIProcess/DrawingAreaProxy.h:
+ (WebKit::DrawingAreaProxy::minimumLayoutWidthDidChange):
+ (WebKit::DrawingAreaProxy::didUpdateGeometry):
+ (WebKit::DrawingAreaProxy::intrinsicContentSizeDidChange):
+ Add empty stubs.
+
+ * UIProcess/DrawingAreaProxy.messages.in:
+ Update the DidUpdateGeometry signature and add IntrinsicContentSizeDidChange.
+
+ * UIProcess/WebPageProxy.cpp:
+ (WebKit::WebPageProxy::WebPageProxy):
+ Initialize the minimum layout width.
+
+ (WebKit::WebPageProxy::setMinimumLayoutWidth):
+ Update the minimum layout width and call the drawing area proxy.
+
+ * UIProcess/WebPageProxy.h:
+ (WebKit::WebPageProxy::minimumLayoutWidth):
+ Add getter.
+
+ * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h:
+ (TiledCoreAnimationDrawingAreaProxy):
+ * UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm:
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::minimumLayoutWidthDidChange):
+ Update the geometry if needed.
+
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::didUpdateGeometry):
+ Update the intrinsic content size.
+
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::intrinsicContentSizeDidChange):
+ Call through to WebPageProxy::intrinsicContentSizeDidChange.
+
+ (WebKit::TiledCoreAnimationDrawingAreaProxy::sendUpdateGeometry):
+ Pass along the minimum layout width.
+
+ * UIProcess/mac/WebPageProxyMac.mm:
+ (WebKit::WebPageProxy::intrinsicContentSizeDidChange):
+ Call through to the page client.
+
+ * WebProcess/WebCoreSupport/WebChromeClient.cpp:
+ (WebKit::WebChromeClient::contentsSizeChanged):
+ Call DrawingArea::mainFrameContentSizeChanged.
+
+ * WebProcess/WebPage/DrawingArea.h:
+ (WebKit::DrawingArea::mainFrameContentSizeChanged):
+ Add empty stub.
+
+ (WebKit::DrawingArea::updateGeometry):
+ Update signature.
+
+ * WebProcess/WebPage/DrawingArea.messages.in:
+ Add minimumLayoutWidth to UpdateGeometry.
+
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
+ * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+ (WebKit::TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged):
+ If the content size change is not coming from updateGeometry, send an InstrinsicContentSizeDidChange message.
+
+ (WebKit::TiledCoreAnimationDrawingArea::updateGeometry):
+ If m_minimumLayoutWidth is positive, do an initial layout pass to figure out the height of the page and then do another
+ layout with the viewport set to that height.
+
+2012-11-29 Anders Carlsson <[email protected]>
+
CoreIPC::Connection should retain its xpc_connection_t
https://bugs.webkit.org/show_bug.cgi?id=103671
<rdar://problem/12717331>
Modified: trunk/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/API/mac/PageClientImpl.h 2012-11-30 00:01:59 UTC (rev 136178)
@@ -139,6 +139,7 @@
virtual void recommendedScrollbarStyleDidChange(int32_t newStyle);
virtual WKView* wkView() const { return m_wkView; }
+ virtual void intrinsicContentSizeDidChange(const WebCore::IntSize& intrinsicContentSize) OVERRIDE;
#if USE(DICTATION_ALTERNATIVES)
virtual uint64_t addDictationAlternatives(const RetainPtr<NSTextAlternatives>&);
Modified: trunk/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/API/mac/PageClientImpl.mm 2012-11-30 00:01:59 UTC (rev 136178)
@@ -558,6 +558,11 @@
#endif
}
+void PageClientImpl::intrinsicContentSizeDidChange(const IntSize& intrinsicContentSize)
+{
+ [m_wkView _setIntrinsicContentSize:intrinsicContentSize];
+}
+
bool PageClientImpl::executeSavedCommandBySelector(const String& selectorString)
{
return [m_wkView _executeSavedCommandBySelector:NSSelectorFromString(selectorString)];
Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKView.mm 2012-11-30 00:01:59 UTC (rev 136178)
@@ -215,6 +215,8 @@
RefPtr<WebCore::Image> _promisedImage;
String _promisedFilename;
String _promisedURL;
+
+ NSSize _intrinsicContentSize;
}
@end
@@ -356,6 +358,11 @@
return YES;
}
+- (NSSize)intrinsicContentSize
+{
+ return _data->_intrinsicContentSize;
+}
+
- (void)setFrameSize:(NSSize)size
{
if (!NSEqualSizes(size, [self frame].size))
@@ -2925,6 +2932,12 @@
return ![sink.get() didReceiveUnhandledCommand];
}
+- (void)_setIntrinsicContentSize:(NSSize)intrinsicContentSize
+{
+ _data->_intrinsicContentSize = intrinsicContentSize;
+ [self invalidateIntrinsicContentSize];
+}
+
- (void)_cacheWindowBottomCornerRect
{
#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 1070
@@ -3021,6 +3034,8 @@
_data->_mouseDownEvent = nil;
_data->_ignoringMouseDraggedEvents = NO;
+ _data->_intrinsicContentSize = NSMakeSize(NSViewNoInstrinsicMetric, NSViewNoInstrinsicMetric);
+
[self _registerDraggedTypes];
if ([self _shouldUseTiledDrawingArea]) {
@@ -3126,6 +3141,16 @@
#endif
}
+- (CGFloat)minimumLayoutWidth
+{
+ return _data->_page->minimumLayoutWidth();
+}
+
+- (void)setMinimumLayoutWidth:(CGFloat)minimumLayoutWidth
+{
+ _data->_page->setMinimumLayoutWidth(minimumLayoutWidth);
+}
+
@end
@implementation WKResponderChainSink
Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKViewInternal.h 2012-11-30 00:01:59 UTC (rev 136178)
@@ -61,6 +61,7 @@
- (BOOL)_interpretKeyEvent:(NSEvent *)theEvent savingCommandsTo:(Vector<WebCore::KeypressCommand>&)commands;
- (void)_doneWithKeyEvent:(NSEvent *)event eventWasHandled:(BOOL)eventWasHandled;
- (bool)_executeSavedCommandBySelector:(SEL)selector;
+- (void)_setIntrinsicContentSize:(NSSize)intrinsicContentSize;
- (NSRect)_convertToDeviceSpace:(NSRect)rect;
- (NSRect)_convertToUserSpace:(NSRect)rect;
- (void)_setFindIndicator:(PassRefPtr<WebKit::FindIndicator>)findIndicator fadeOut:(BOOL)fadeOut animate:(BOOL)animate;
Modified: trunk/Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h 2012-11-30 00:01:59 UTC (rev 136178)
@@ -50,4 +50,6 @@
- (void)performDictionaryLookupAtCurrentMouseLocation;
+ (void)hideWordDefinitionWindow;
+@property (readwrite) CGFloat minimumLayoutWidth;
+
@end
Modified: trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.h (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.h 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.h 2012-11-30 00:01:59 UTC (rev 136178)
@@ -81,6 +81,7 @@
virtual void waitForPossibleGeometryUpdate() { }
virtual void colorSpaceDidChange() { }
+ virtual void minimumLayoutWidthDidChange() { }
#if USE(COORDINATED_GRAPHICS)
virtual void updateViewport();
@@ -118,7 +119,8 @@
virtual void updateAcceleratedCompositingMode(uint64_t /* backingStoreStateID */, const LayerTreeContext&) { }
#endif
#if PLATFORM(MAC)
- virtual void didUpdateGeometry() { }
+ virtual void didUpdateGeometry(const WebCore::IntSize& newIntrinsicContentSize) { }
+ virtual void intrinsicContentSizeDidChange(const WebCore::IntSize& newIntrinsicContentSize) { }
#endif
};
Modified: trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.messages.in (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.messages.in 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/DrawingAreaProxy.messages.in 2012-11-30 00:01:59 UTC (rev 136178)
@@ -31,6 +31,7 @@
#if PLATFORM(MAC)
// Used by TiledCoreAnimationDrawingAreaProxy.
- DidUpdateGeometry()
+ DidUpdateGeometry(WebCore::IntSize newIntrinsicContentSize)
+ IntrinsicContentSizeDidChange(WebCore::IntSize newIntrinsicContentSize)
#endif
}
Modified: trunk/Source/WebKit2/UIProcess/PageClient.h (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/PageClient.h 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/PageClient.h 2012-11-30 00:01:59 UTC (rev 136178)
@@ -225,6 +225,7 @@
#if USE(APPKIT)
virtual WKView* wkView() const = 0;
+ virtual void intrinsicContentSizeDidChange(const WebCore::IntSize& intrinsicContentSize) = 0;
#if USE(DICTATION_ALTERNATIVES)
virtual uint64_t addDictationAlternatives(const RetainPtr<NSTextAlternatives>&) = 0;
virtual void removeDictationAlternatives(uint64_t dictationContext) = 0;
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp 2012-11-30 00:01:59 UTC (rev 136178)
@@ -233,6 +233,7 @@
, m_renderTreeSize(0)
, m_shouldSendEventsSynchronously(false)
, m_suppressVisibilityUpdates(false)
+ , m_minimumLayoutWidth(0)
, m_mediaVolume(1)
, m_mayStartMediaWhenInWindow(true)
#if ENABLE(PAGE_VISIBILITY_API)
@@ -4129,8 +4130,22 @@
m_process->send(Messages::WebPage::LinkClicked(url, event), m_pageID, 0);
}
+void WebPageProxy::setMinimumLayoutWidth(double minimumLayoutWidth)
+{
+ if (m_minimumLayoutWidth == minimumLayoutWidth)
+ return;
+
+ m_minimumLayoutWidth = minimumLayoutWidth;
+ m_drawingArea->minimumLayoutWidthDidChange();
+
#if PLATFORM(MAC)
+ if (m_minimumLayoutWidth <= 0)
+ intrinsicContentSizeDidChange(IntSize(-1, -1));
+#endif
+}
+#if PLATFORM(MAC)
+
void WebPageProxy::substitutionsPanelIsShowing(bool& isShowing)
{
isShowing = TextChecker::substitutionsPanelIsShowing();
Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h 2012-11-30 00:01:59 UTC (rev 136178)
@@ -409,6 +409,7 @@
#if USE(APPKIT)
WKView* wkView() const;
+ void intrinsicContentSizeDidChange(const WebCore::IntSize& intrinsicContentSize);
#endif
#endif
#if PLATFORM(WIN)
@@ -757,6 +758,9 @@
const WebLoaderClient& loaderClient() { return m_loaderClient; }
+ double minimumLayoutWidth() const { return m_minimumLayoutWidth; }
+ void setMinimumLayoutWidth(double);
+
private:
WebPageProxy(PageClient*, PassRefPtr<WebProcessProxy>, WebPageGroup*, uint64_t pageID);
@@ -1242,6 +1246,7 @@
bool m_shouldSendEventsSynchronously;
bool m_suppressVisibilityUpdates;
+ float m_minimumLayoutWidth;
float m_mediaVolume;
bool m_mayStartMediaWhenInWindow;
Modified: trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.h 2012-11-30 00:01:59 UTC (rev 136178)
@@ -48,13 +48,15 @@
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 @@
// 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
Modified: trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/mac/TiledCoreAnimationDrawingAreaProxy.mm 2012-11-30 00:01:59 UTC (rev 136178)
@@ -47,6 +47,7 @@
TiledCoreAnimationDrawingAreaProxy::TiledCoreAnimationDrawingAreaProxy(WebPageProxy* webPageProxy)
: DrawingAreaProxy(DrawingAreaTypeTiledCoreAnimation, webPageProxy)
, m_isWaitingForDidUpdateGeometry(false)
+ , m_lastSentMinimumLayoutWidth(0)
{
}
@@ -103,6 +104,19 @@
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 @@
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;
}
Modified: trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm (136177 => 136178)
--- trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm 2012-11-30 00:01:59 UTC (rev 136178)
@@ -474,6 +474,11 @@
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());
Modified: trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp (136177 => 136178)
--- trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/WebProcess/WebCoreSupport/WebChromeClient.cpp 2012-11-30 00:01:59 UTC (rev 136178)
@@ -432,7 +432,7 @@
return 0;
}
-void WebChromeClient::contentsSizeChanged(Frame* frame, const IntSize& /*size*/) const
+void WebChromeClient::contentsSizeChanged(Frame* frame, const IntSize& size) const
{
if (!m_page->corePage()->settings()->frameFlatteningEnabled()) {
WebFrame* largestFrame = findLargestFrameInFrameSet(m_page);
@@ -456,6 +456,8 @@
#endif
+ m_page->drawingArea()->mainFrameContentSizeChanged(size);
+
FrameView* frameView = frame->view();
if (frameView && !frameView->delegatesScrolling()) {
bool hasHorizontalScrollbar = frameView->horizontalScrollbar();
Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h (136177 => 136178)
--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.h 2012-11-30 00:01:59 UTC (rev 136178)
@@ -86,6 +86,7 @@
virtual void setPaintingEnabled(bool) { }
virtual void updatePreferences(const WebPreferencesStore&) { }
+ virtual void mainFrameContentSizeChanged(const WebCore::IntSize&) { }
#if USE(ACCELERATED_COMPOSITING)
virtual WebCore::GraphicsLayerFactory* graphicsLayerFactory() { return 0; }
@@ -121,7 +122,7 @@
#if PLATFORM(MAC)
// Used by TiledCoreAnimationDrawingArea.
- virtual void updateGeometry(const WebCore::IntSize& viewSize) { }
+ virtual void updateGeometry(const WebCore::IntSize& viewSize, double minimumLayoutWidth) { }
virtual void setDeviceScaleFactor(float) { }
virtual void setColorSpace(const ColorSpaceData&) { }
#endif
Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.messages.in (136177 => 136178)
--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.messages.in 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingArea.messages.in 2012-11-30 00:01:59 UTC (rev 136178)
@@ -30,7 +30,7 @@
#if PLATFORM(MAC)
// Used by TiledCoreAnimationDrawingArea.
- UpdateGeometry(WebCore::IntSize viewSize)
+ UpdateGeometry(WebCore::IntSize viewSize, double minimumLayoutWidth)
SetDeviceScaleFactor(float deviceScaleFactor)
SetColorSpace(WebKit::ColorSpaceData colorSpace)
#endif
Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (136177 => 136178)
--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h 2012-11-30 00:01:59 UTC (rev 136178)
@@ -65,6 +65,7 @@
virtual void didUninstallPageOverlay() OVERRIDE;
virtual void setPageOverlayNeedsDisplay(const WebCore::IntRect&) OVERRIDE;
virtual void updatePreferences(const WebPreferencesStore&) OVERRIDE;
+ virtual void mainFrameContentSizeChanged(const WebCore::IntSize&) OVERRIDE;
virtual void dispatchAfterEnsuringUpdatedScrollPosition(const Function<void ()>&) OVERRIDE;
@@ -80,7 +81,7 @@
// Message handlers.
virtual void suspendPainting() OVERRIDE;
virtual void resumePainting() OVERRIDE;
- virtual void updateGeometry(const WebCore::IntSize& viewSize) OVERRIDE;
+ virtual void updateGeometry(const WebCore::IntSize& viewSize, double minimumLayoutWidth) OVERRIDE;
virtual void setDeviceScaleFactor(float) OVERRIDE;
virtual void setLayerHostingMode(uint32_t) OVERRIDE;
virtual void setColorSpace(const ColorSpaceData&) OVERRIDE;
@@ -105,6 +106,10 @@
OwnPtr<WebCore::GraphicsLayer> m_pageOverlayLayer;
bool m_isPaintingSuspended;
+
+ double m_minimumLayoutWidth;
+ WebCore::IntSize m_lastSentIntrinsicContentSize;
+ bool m_inUpdateGeometry;
};
} // namespace WebKit
Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (136177 => 136178)
--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2012-11-29 23:40:23 UTC (rev 136177)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm 2012-11-30 00:01:59 UTC (rev 136178)
@@ -33,6 +33,7 @@
#import "EventDispatcher.h"
#import "LayerHostingContext.h"
#import "LayerTreeContext.h"
+#import "WebFrame.h"
#import "WebPage.h"
#import "WebPageCreationParameters.h"
#import "WebPageProxyMessages.h"
@@ -69,6 +70,7 @@
, m_layerTreeStateIsFrozen(false)
, m_layerFlushScheduler(this)
, m_isPaintingSuspended(!parameters.isVisible)
+ , m_minimumLayoutWidth(0)
{
Page* page = m_webPage->corePage();
@@ -229,6 +231,21 @@
ScrollingThread::dispatch(bind(&ScrollingTree::setDebugRootLayer, m_webPage->corePage()->scrollingCoordinator()->scrollingTree(), m_debugInfoLayer));
}
+void TiledCoreAnimationDrawingArea::mainFrameContentSizeChanged(const IntSize& contentSize)
+{
+ if (!m_minimumLayoutWidth)
+ return;
+
+ if (m_inUpdateGeometry)
+ return;
+
+ if (m_lastSentIntrinsicContentSize == contentSize)
+ return;
+
+ m_lastSentIntrinsicContentSize = contentSize;
+ m_webPage->send(Messages::DrawingAreaProxy::IntrinsicContentSizeDidChange(contentSize));
+}
+
void TiledCoreAnimationDrawingArea::dispatchAfterEnsuringUpdatedScrollPosition(const Function<void ()>& functionRef)
{
m_webPage->ref();
@@ -330,9 +347,24 @@
m_webPage->corePage()->resumeScriptedAnimations();
}
-void TiledCoreAnimationDrawingArea::updateGeometry(const IntSize& viewSize)
+void TiledCoreAnimationDrawingArea::updateGeometry(const IntSize& viewSize, double minimumLayoutWidth)
{
- m_webPage->setSize(viewSize);
+ m_inUpdateGeometry = true;
+
+ m_minimumLayoutWidth = minimumLayoutWidth;
+
+ IntSize size = viewSize;
+ IntSize contentSize = IntSize(-1, -1);
+
+ if (m_minimumLayoutWidth > 0) {
+ m_webPage->setSize(IntSize(m_minimumLayoutWidth, 0));
+ m_webPage->layoutIfNeeded();
+
+ contentSize = m_webPage->mainWebFrame()->contentBounds().size();
+ size = contentSize;
+ }
+
+ m_webPage->setSize(size);
m_webPage->layoutIfNeeded();
if (m_pageOverlayLayer)
@@ -351,7 +383,10 @@
[CATransaction flush];
[CATransaction synchronize];
- m_webPage->send(Messages::DrawingAreaProxy::DidUpdateGeometry());
+ m_lastSentIntrinsicContentSize = contentSize;
+ m_webPage->send(Messages::DrawingAreaProxy::DidUpdateGeometry(contentSize));
+
+ m_inUpdateGeometry = false;
}
void TiledCoreAnimationDrawingArea::setDeviceScaleFactor(float deviceScaleFactor)