Title: [139905] tags/Safari-537.26/Source

Diff

Modified: tags/Safari-537.26/Source/WebCore/ChangeLog (139904 => 139905)


--- tags/Safari-537.26/Source/WebCore/ChangeLog	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebCore/ChangeLog	2013-01-16 19:49:57 UTC (rev 139905)
@@ -1,3 +1,31 @@
+2013-01-16  Lucas Forschler  <[email protected]>
+
+        Merge r139822
+
+    2013-01-15  Tim Horton  <[email protected]>
+
+            Clamp TileCache visibleRect to WKView's visibleRect
+            https://bugs.webkit.org/show_bug.cgi?id=106601
+            <rdar://problem/12843164>
+
+            Reviewed by Simon Fraser.
+
+            * platform/graphics/TiledBacking.h:
+            (TiledBacking): Add setExposedRect and setClipsToExposedRect.
+            * platform/graphics/ca/mac/TileCache.h:
+            (TileCache): Add setExposedRect, setClipsToExposedRect, and storage for their respective values.
+            * platform/graphics/ca/mac/TileCache.mm:
+            (WebCore::TileCache::TileCache): Initialize m_clipsToExposedRect to false.
+            (WebCore::TileCache::setExposedRect): Update exposedRect and revalidate tiles.
+            (WebCore::TileCache::setClipsToExposedRect): Update clipsToExposedRect and revalidate tiles;
+            if we're going from unclipped to clipped, we already have tiles, so we can skip tile revalidation.
+            (WebCore::TileCache::computeTileCoverageRect): Intersect exisiting visible rect with
+            exposed rect to get the visible rect we actually care about.
+            (WebCore::TileCache::revalidateTiles): Ditto.
+            * rendering/RenderLayerCompositor.cpp:
+            (WebCore::RenderLayerCompositor::requiresOverhangAreasLayer): Don't create an overhang layer if the frame isn't scrollable.
+            (WebCore::RenderLayerCompositor::requiresContentShadowLayer): Don't create a shadow layer if the frame isn't scrollable.
+
 2013-01-14  Kentaro Hara  <[email protected]>
 
         [V8] Make an Isolate parameter mandatory in associateObjectWithWrapper()

Modified: tags/Safari-537.26/Source/WebCore/platform/graphics/TiledBacking.h (139904 => 139905)


--- tags/Safari-537.26/Source/WebCore/platform/graphics/TiledBacking.h	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebCore/platform/graphics/TiledBacking.h	2013-01-16 19:49:57 UTC (rev 139905)
@@ -47,6 +47,9 @@
     virtual void setVisibleRect(const IntRect&) = 0;
     virtual IntRect visibleRect() const = 0;
 
+    virtual void setExposedRect(const IntRect&) = 0;
+    virtual void setClipsToExposedRect(bool) = 0;
+
     virtual void prepopulateRect(const IntRect&) = 0;
 
     virtual void setIsInWindow(bool) = 0;

Modified: tags/Safari-537.26/Source/WebCore/platform/graphics/ca/mac/TileCache.h (139904 => 139905)


--- tags/Safari-537.26/Source/WebCore/platform/graphics/ca/mac/TileCache.h	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebCore/platform/graphics/ca/mac/TileCache.h	2013-01-16 19:49:57 UTC (rev 139905)
@@ -106,6 +106,8 @@
 
     // TiledBacking member functions.
     virtual void setVisibleRect(const IntRect&) OVERRIDE;
+    virtual void setExposedRect(const IntRect&) OVERRIDE;
+    virtual void setClipsToExposedRect(bool) OVERRIDE;
     virtual void prepopulateRect(const IntRect&) OVERRIDE;
     virtual void setIsInWindow(bool) OVERRIDE;
     virtual void setTileCoverage(TileCoverage) OVERRIDE;
@@ -168,6 +170,7 @@
     IntSize m_tileSize;
     IntRect m_visibleRect;
     IntRect m_visibleRectAtLastRevalidate;
+    IntRect m_exposedRect; // The exposed area of containing platform views.
 
     typedef HashMap<TileIndex, TileInfo> TileMap;
     TileMap m_tiles;
@@ -197,6 +200,7 @@
     bool m_unparentsOffscreenTiles;
     bool m_acceleratesDrawing;
     bool m_tilesAreOpaque;
+    bool m_clipsToExposedRect;
 
     RetainPtr<CGColorRef> m_tileDebugBorderColor;
     float m_tileDebugBorderWidth;

Modified: tags/Safari-537.26/Source/WebCore/platform/graphics/ca/mac/TileCache.mm (139904 => 139905)


--- tags/Safari-537.26/Source/WebCore/platform/graphics/ca/mac/TileCache.mm	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebCore/platform/graphics/ca/mac/TileCache.mm	2013-01-16 19:49:57 UTC (rev 139905)
@@ -109,6 +109,7 @@
     , m_unparentsOffscreenTiles(false)
     , m_acceleratesDrawing(false)
     , m_tilesAreOpaque(false)
+    , m_clipsToExposedRect(false)
     , m_tileDebugBorderWidth(0)
     , m_indicatorMode(ThreadedScrollingIndication)
 {
@@ -305,6 +306,27 @@
     revalidateTiles();
 }
 
+void TileCache::setExposedRect(const IntRect& exposedRect)
+{
+    if (m_exposedRect == exposedRect)
+        return;
+
+    m_exposedRect = exposedRect;
+    revalidateTiles();
+}
+
+void TileCache::setClipsToExposedRect(bool clipsToExposedRect)
+{
+    if (m_clipsToExposedRect == clipsToExposedRect)
+        return;
+
+    m_clipsToExposedRect = clipsToExposedRect;
+
+    // Going from not clipping to clipping, we don't need to revalidate right away.
+    if (clipsToExposedRect)
+        revalidateTiles();
+}
+
 void TileCache::prepopulateRect(const IntRect& rect)
 {
     ensureTilesForRect(rect);
@@ -393,17 +415,22 @@
 
 IntRect TileCache::computeTileCoverageRect(const IntRect& previousVisibleRect) const
 {
+    IntRect visibleRect = m_visibleRect;
+
+    if (m_clipsToExposedRect)
+        visibleRect.intersect(m_exposedRect);
+
     // If the page is not in a window (for example if it's in a background tab), we limit the tile coverage rect to the visible rect.
     // Furthermore, if the page can't have scrollbars (for example if its body element has overflow:hidden) it's very unlikely that the
     // page will ever be scrolled so we limit the tile coverage rect as well.
     if (!m_isInWindow || m_tileCoverage & CoverageForSlowScrolling)
-        return m_visibleRect;
+        return visibleRect;
 
-    bool largeVisibleRectChange = !previousVisibleRect.isEmpty() && !m_visibleRect.intersects(previousVisibleRect);
+    bool largeVisibleRectChange = !previousVisibleRect.isEmpty() && !visibleRect.intersects(previousVisibleRect);
     
     // FIXME: look at how far the document can scroll in each dimension.
-    int coverageHorizontalSize = m_visibleRect.width();
-    int coverageVerticalSize = m_visibleRect.height();
+    int coverageHorizontalSize = visibleRect.width();
+    int coverageVerticalSize = visibleRect.height();
     
     // Inflate the coverage rect so that it covers 2x of the visible width and 3x of the visible height.
     // These values were chosen because it's more common to have tall pages and to scroll vertically,
@@ -416,11 +443,11 @@
 
     // Don't extend coverage before 0 or after the end.
     IntRect coverageBounds = bounds();
-    int coverageLeft = m_visibleRect.x() - (coverageHorizontalSize - m_visibleRect.width()) / 2;
+    int coverageLeft = visibleRect.x() - (coverageHorizontalSize - visibleRect.width()) / 2;
     coverageLeft = min(coverageLeft, coverageBounds.maxX() - coverageHorizontalSize);
     coverageLeft = max(coverageLeft, coverageBounds.x());
 
-    int coverageTop = m_visibleRect.y() - (coverageVerticalSize - m_visibleRect.height()) / 2;
+    int coverageTop = visibleRect.y() - (coverageVerticalSize - visibleRect.height()) / 2;
     coverageTop = min(coverageTop, coverageBounds.maxY() - coverageVerticalSize);
     coverageTop = max(coverageTop, coverageBounds.y());
 
@@ -547,7 +574,12 @@
     if (!platformLayer)
         return;
 
-    if (m_visibleRect.isEmpty() || bounds().isEmpty())
+    IntRect visibleRect = m_visibleRect;
+
+    if (m_clipsToExposedRect)
+        visibleRect.intersect(m_exposedRect);
+
+    if (visibleRect.isEmpty() || bounds().isEmpty())
         return;
     
     TileValidationPolicyFlags validationPolicy = m_isInWindow ? foregroundValidationPolicy : backgroundValidationPolicy;
@@ -653,7 +685,7 @@
     if (m_tiledScrollingIndicatorLayer)
         updateTileCoverageMap();
 
-    m_visibleRectAtLastRevalidate = m_visibleRect;
+    m_visibleRectAtLastRevalidate = visibleRect;
 
     if (dirtyRects.isEmpty())
         return;

Modified: tags/Safari-537.26/Source/WebCore/rendering/RenderLayerCompositor.cpp (139904 => 139905)


--- tags/Safari-537.26/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebCore/rendering/RenderLayerCompositor.cpp	2013-01-16 19:49:57 UTC (rev 139905)
@@ -2222,8 +2222,8 @@
     if (m_renderView->document()->ownerElement())
         return false;
 
-    // We do want a layer if we have a scrolling coordinator.
-    if (scrollingCoordinator())
+    // We do want a layer if we have a scrolling coordinator and can scroll.
+    if (scrollingCoordinator() && !m_renderView->frameView()->prohibitsScrolling())
         return true;
 
     // Chromium always wants a layer.
@@ -2241,8 +2241,8 @@
         return false;
 
 #if PLATFORM(MAC)
-    // On Mac, we want a content shadow layer if we have a scrolling coordinator.
-    if (scrollingCoordinator())
+    // On Mac, we want a content shadow layer if we have a scrolling coordinator and can scroll.
+    if (scrollingCoordinator() && !m_renderView->frameView()->prohibitsScrolling())
         return true;
 #endif
 

Modified: tags/Safari-537.26/Source/WebKit2/ChangeLog (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/ChangeLog	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/ChangeLog	2013-01-16 19:49:57 UTC (rev 139905)
@@ -1,3 +1,63 @@
+2013-01-16  Lucas Forschler  <[email protected]>
+
+        Merge r139822
+
+    2013-01-15  Tim Horton  <[email protected]>
+
+            Clamp TileCache visibleRect to WKView's visibleRect
+            https://bugs.webkit.org/show_bug.cgi?id=106601
+            <rdar://problem/12843164>
+
+            Reviewed by Simon Fraser.
+
+            Some clients expand the WKView to be much larger than what is visible on screen, and
+            control scrolling with their own view. Currently, we will create tiles for the entire
+            view, consuming a great deal of memory, and can sometimes factor scrollbars which can
+            never exist into layout. Piggyback on WKView SPI (the property minimumWidthForAutoLayout,
+            renamed from minimumLayoutWidth) to drop into a mode where we disable main frame scrolling
+            and respect the WKView's visibleRect when creating tiles.
+
+            * UIProcess/API/mac/WKView.mm:
+            (-[WKView setFrameSize:]): Update the page's viewExposedRect from our visibleRect.
+            (-[WKView _updateWindowAndViewFrames]): Update the page's viewExposedRect from our visibleRect.
+            (-[WKView initWithFrame:contextRef:pageGroupRef:relatedToPage:]): The main frame is scrollable by default.
+            (-[WKView enableFrameSizeUpdates]): If frame size updates become enabled, update the
+            page's viewExposedRect from our visibleRect.
+            (-[WKView setMinimumLayoutWidth:]): Rename minimumLayoutWidth property to minimumWidthForAutoLayout.
+            Warn once if the old one is used.
+            (-[WKView minimumWidthForAutoLayout]):
+            (-[WKView setMinimumWidthForAutoLayout:]): Adjust the minimum layout width, whether the main frame
+            is scrollable, and update the page's viewExposedRect if needed.
+            * UIProcess/API/mac/WKViewPrivate.h: Added minimumWidthForAutoLayout property.
+            * UIProcess/WebPageProxy.h:
+            (WebPageProxy): Add viewExposedRectChanged/setMainFrameIsScrollable.
+            * UIProcess/mac/WebPageProxyMac.mm:
+            (WebKit::WebPageProxy::viewExposedRectChanged): Forward viewExposedRectChanged to WebPage.
+            (WebKit::WebPageProxy::setMainFrameIsScrollable): Forward setMainFrameIsScrollable to WebPage.
+            * WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp:
+            (WebKit::WebFrameLoaderClient::transitionToCommittedForNewPage): Disable scrollbars and scrolling if
+            main frame scrollability is disabled.
+            * WebProcess/WebPage/DrawingArea.h:
+            (WebKit::DrawingArea::setExposedRect): Added empty default implementation.
+            (WebKit::DrawingArea::mainFrameScrollabilityChanged): Added empty default implementation.
+            (DrawingArea):
+            * WebProcess/WebPage/WebPage.cpp:
+            (WebKit::WebPage::windowAndViewFramesChanged): We don't need the WebCore:: namespace.
+            (WebKit::WebPage::viewExposedRectChanged): Forward exposed rect changes to DrawingArea (only TiledCoreAnimationDrawingArea cares, for now).
+            (WebKit::WebPage::setMainFrameIsScrollable): Forward scrollability changes to DrawingArea and the main FrameView.
+            (WebKit::WebPage::drawRectToImage): We don't need the WebCore:: namespace.
+            * WebProcess/WebPage/WebPage.h:
+            (WebPage): Add mainFrameIsScrollable, viewExposedRectChanged, setMainFrameIsScrollable, and storage for m_mainFrameIsScrollable.
+            (WebKit::WebPage::mainFrameIsScrollable):
+            * WebProcess/WebPage/WebPage.messages.in: Add ViewExposedRectChanged and SetMainFrameIsScrollable messages.
+            * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h:
+            (TiledCoreAnimationDrawingArea):
+            * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+            (WebKit::TiledCoreAnimationDrawingArea::setExposedRect): Forward new exposed rect to TiledBacking (only TileCache cares, for now).
+            (WebKit::TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged): Ask TiledBacking to clip to the exposedRect if main frame scrolling is disabled.
+            (WebKit::TiledCoreAnimationDrawingArea::updateGeometry): Use size instead of viewSize in case we've changed it because of m_minimumLayoutWidth.
+            (WebKit::TiledCoreAnimationDrawingArea::setRootCompositingLayer): Update exposedRect and clipsToExposedRect.
+
 2013-01-14  Lucas Forschler  <[email protected]>
 
         Merge r139655

Modified: tags/Safari-537.26/Source/WebKit2/UIProcess/API/mac/WKView.mm (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/UIProcess/API/mac/WKView.mm	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/UIProcess/API/mac/WKView.mm	2013-01-16 19:49:57 UTC (rev 139905)
@@ -210,6 +210,7 @@
     String _promisedURL;
 
     NSSize _intrinsicContentSize;
+    BOOL _expandsToFitContentViaAutoLayout;
 }
 
 @end
@@ -362,9 +363,12 @@
         _data->_windowHasValidBackingStore = NO;
 
     [super setFrameSize:size];
-    
-    if (![self frameSizeUpdatesDisabled])
+
+    if (![self frameSizeUpdatesDisabled]) {
+        if (_data->_expandsToFitContentViaAutoLayout)
+            _data->_page->viewExposedRectChanged(enclosingIntRect([self visibleRect]));
         [self _setDrawingAreaSize:size];
+    }
 }
 
 - (void)_updateWindowAndViewFrames
@@ -377,6 +381,8 @@
     NSPoint accessibilityPosition = [[self accessibilityAttributeValue:NSAccessibilityPositionAttribute] pointValue];
     
     _data->_page->windowAndViewFramesChanged(enclosingIntRect(windowFrameInScreenCoordinates), enclosingIntRect(viewFrameInWindowCoordinates), IntPoint(accessibilityPosition));
+    if (_data->_expandsToFitContentViaAutoLayout)
+        _data->_page->viewExposedRectChanged(enclosingIntRect([self visibleRect]));
 }
 
 - (void)renewGState
@@ -2944,6 +2950,7 @@
 #endif
     _data->_mouseDownEvent = nil;
     _data->_ignoringMouseDraggedEvents = NO;
+    _data->_expandsToFitContentViaAutoLayout = NO;
 
     _data->_intrinsicContentSize = NSMakeSize(NSViewNoInstrinsicMetric, NSViewNoInstrinsicMetric);
 
@@ -3027,8 +3034,11 @@
     if (!_data->_frameSizeUpdatesDisabledCount)
         return;
     
-    if (!(--_data->_frameSizeUpdatesDisabledCount))
+    if (!(--_data->_frameSizeUpdatesDisabledCount)) {
+        if (_data->_expandsToFitContentViaAutoLayout)
+            _data->_page->viewExposedRectChanged(enclosingIntRect([self visibleRect]));
         [self _setDrawingAreaSize:[self frame].size];
+    }
 }
 
 - (BOOL)frameSizeUpdatesDisabled
@@ -3052,12 +3062,44 @@
 
 - (CGFloat)minimumLayoutWidth
 {
+    static BOOL loggedDeprecationWarning = NO;
+
+    if (!loggedDeprecationWarning) {
+        NSLog(@"Please use minimumWidthForAutoLayout instead of minimumLayoutWidth.");
+        loggedDeprecationWarning = YES;
+    }
+
     return _data->_page->minimumLayoutWidth();
 }
 
 - (void)setMinimumLayoutWidth:(CGFloat)minimumLayoutWidth
 {
+    static BOOL loggedDeprecationWarning = NO;
+
+    if (!loggedDeprecationWarning) {
+        NSLog(@"Please use minimumWidthForAutoLayout instead of minimumLayoutWidth.");
+        loggedDeprecationWarning = YES;
+    }
+
+    [self setMinimumWidthForAutoLayout:minimumLayoutWidth];
+}
+
+- (CGFloat)minimumWidthForAutoLayout
+{
+    return _data->_page->minimumLayoutWidth();
+}
+
+- (void)setMinimumWidthForAutoLayout:(CGFloat)minimumLayoutWidth
+{
+    BOOL expandsToFit = minimumLayoutWidth > 0;
+
+    _data->_expandsToFitContentViaAutoLayout = expandsToFit;
     _data->_page->setMinimumLayoutWidth(minimumLayoutWidth);
+
+    if (expandsToFit)
+        _data->_page->viewExposedRectChanged(enclosingIntRect([self visibleRect]));
+
+    _data->_page->setMainFrameIsScrollable(!expandsToFit);
 }
 
 @end

Modified: tags/Safari-537.26/Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/UIProcess/API/mac/WKViewPrivate.h	2013-01-16 19:49:57 UTC (rev 139905)
@@ -51,5 +51,6 @@
 + (void)hideWordDefinitionWindow;
 
 @property (readwrite) CGFloat minimumLayoutWidth;
+@property (readwrite) CGFloat minimumWidthForAutoLayout;
 
 @end

Modified: tags/Safari-537.26/Source/WebKit2/UIProcess/WebPageProxy.h (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/UIProcess/WebPageProxy.h	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/UIProcess/WebPageProxy.h	2013-01-16 19:49:57 UTC (rev 139905)
@@ -388,6 +388,8 @@
 #if PLATFORM(MAC)
     void updateWindowIsVisible(bool windowIsVisible);
     void windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates);
+    void viewExposedRectChanged(const WebCore::IntRect& exposedRect);
+    void setMainFrameIsScrollable(bool);
 
     void setComposition(const String& text, Vector<WebCore::CompositionUnderline> underlines, uint64_t selectionStart, uint64_t selectionEnd, uint64_t replacementRangeStart, uint64_t replacementRangeEnd);
     void confirmComposition();

Modified: tags/Safari-537.26/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/UIProcess/mac/WebPageProxyMac.mm	2013-01-16 19:49:57 UTC (rev 139905)
@@ -137,6 +137,22 @@
     process()->send(Messages::WebPage::WindowAndViewFramesChanged(windowFrameInScreenCoordinates, viewFrameInWindowCoordinates, accessibilityViewCoordinates), m_pageID);
 }
 
+void WebPageProxy::viewExposedRectChanged(const IntRect& exposedRect)
+{
+    if (!isValid())
+        return;
+
+    process()->send(Messages::WebPage::ViewExposedRectChanged(exposedRect), m_pageID);
+}
+
+void WebPageProxy::setMainFrameIsScrollable(bool isScrollable)
+{
+    if (!isValid())
+        return;
+
+    process()->send(Messages::WebPage::SetMainFrameIsScrollable(isScrollable), m_pageID);
+}
+
 void WebPageProxy::setComposition(const String& text, Vector<CompositionUnderline> underlines, uint64_t selectionStart, uint64_t selectionEnd, uint64_t replacementRangeStart, uint64_t replacementRangeEnd)
 {
     if (!isValid()) {

Modified: tags/Safari-537.26/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/WebProcess/WebCoreSupport/WebFrameLoaderClient.cpp	2013-01-16 19:49:57 UTC (rev 139905)
@@ -1228,26 +1228,29 @@
     bool isMainFrame = webPage->mainWebFrame() == m_frame;
     bool isTransparent = !webPage->drawsBackground();
     bool shouldUseFixedLayout = isMainFrame && webPage->useFixedLayout();
+    bool shouldDisableScrolling = isMainFrame && !webPage->mainFrameIsScrollable();
+    bool shouldHideScrollbars = shouldUseFixedLayout || shouldDisableScrolling;
     IntRect currentFixedVisibleContentRect = m_frame->coreFrame()->view() ? m_frame->coreFrame()->view()->fixedVisibleContentRect() : IntRect();
 
     const ResourceResponse& response = m_frame->coreFrame()->loader()->documentLoader()->response();
     m_frameHasCustomRepresentation = isMainFrame && webPage->shouldUseCustomRepresentationForResponse(response);
     m_frameCameFromPageCache = false;
 
+    ScrollbarMode defaultScrollbarMode = shouldHideScrollbars ? ScrollbarAlwaysOff : ScrollbarAuto;
+
+    m_frame->coreFrame()->createView(webPage->size(), backgroundColor, isTransparent,
+        IntSize(), currentFixedVisibleContentRect, shouldUseFixedLayout,
+        defaultScrollbarMode, /* lock */ shouldHideScrollbars, defaultScrollbarMode, /* lock */ shouldHideScrollbars);
+
+    m_frame->coreFrame()->view()->setProhibitsScrolling(shouldDisableScrolling);
+
 #if USE(TILED_BACKING_STORE)
     if (shouldUseFixedLayout) {
-        m_frame->coreFrame()->createView(webPage->size(), backgroundColor, isTransparent,
-            IntSize(), currentFixedVisibleContentRect, shouldUseFixedLayout,
-            ScrollbarAlwaysOff, /* lock */ true, ScrollbarAlwaysOff, /* lock */ true);
-
         m_frame->coreFrame()->view()->setDelegatesScrolling(shouldUseFixedLayout);
         m_frame->coreFrame()->view()->setPaintsEntireContents(shouldUseFixedLayout);
         return;
     }
 #endif
-
-    m_frame->coreFrame()->createView(webPage->size(), backgroundColor, isTransparent,
-        IntSize(), currentFixedVisibleContentRect, shouldUseFixedLayout);
 }
 
 void WebFrameLoaderClient::didSaveToPageCache()

Modified: tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/DrawingArea.h (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/DrawingArea.h	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/DrawingArea.h	2013-01-16 19:49:57 UTC (rev 139905)
@@ -84,6 +84,9 @@
     virtual void updatePreferences(const WebPreferencesStore&) { }
     virtual void mainFrameContentSizeChanged(const WebCore::IntSize&) { }
 
+    virtual void setExposedRect(const WebCore::IntRect&) { }
+    virtual void mainFrameScrollabilityChanged(bool) { }
+
 #if USE(ACCELERATED_COMPOSITING)
     virtual WebCore::GraphicsLayerFactory* graphicsLayerFactory() { return 0; }
     virtual void setRootCompositingLayer(WebCore::GraphicsLayer*) = 0;

Modified: tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/WebPage.cpp	2013-01-16 19:49:57 UTC (rev 139905)
@@ -239,6 +239,7 @@
     , m_asynchronousPluginInitializationEnabledForAllPlugins(false)
     , m_artificialPluginInitializationDelayEnabled(false)
     , m_scrollingPerformanceLoggingEnabled(false)
+    , m_mainFrameIsScrollable(true)
 #if PLATFORM(MAC)
     , m_pdfPluginEnabled(false)
     , m_windowIsVisible(false)
@@ -2899,7 +2900,7 @@
         (*it)->setWindowIsVisible(windowIsVisible);
 }
 
-void WebPage::windowAndViewFramesChanged(const WebCore::IntRect& windowFrameInScreenCoordinates, const WebCore::IntRect& viewFrameInWindowCoordinates, const WebCore::IntPoint& accessibilityViewCoordinates)
+void WebPage::windowAndViewFramesChanged(const IntRect& windowFrameInScreenCoordinates, const IntRect& viewFrameInWindowCoordinates, const IntPoint& accessibilityViewCoordinates)
 {
     m_windowFrameInScreenCoordinates = windowFrameInScreenCoordinates;
     m_viewFrameInWindowCoordinates = viewFrameInWindowCoordinates;
@@ -2911,6 +2912,22 @@
 }
 #endif
 
+void WebPage::viewExposedRectChanged(const IntRect& exposedRect)
+{
+    m_drawingArea->setExposedRect(exposedRect);
+}
+
+void WebPage::setMainFrameIsScrollable(bool isScrollable)
+{
+    m_mainFrameIsScrollable = isScrollable;
+    m_drawingArea->mainFrameScrollabilityChanged(isScrollable);
+
+    if (FrameView* frameView = m_mainFrame->coreFrame()->view()) {
+        frameView->setCanHaveScrollbars(isScrollable);
+        frameView->setProhibitsScrolling(!isScrollable);
+    }
+}
+
 bool WebPage::windowIsFocused() const
 {
     return m_page->focusController()->isActive();
@@ -3283,7 +3300,7 @@
 }
 
 #if PLATFORM(MAC)
-void WebPage::drawRectToImage(uint64_t frameID, const PrintInfo& printInfo, const WebCore::IntRect& rect, const WebCore::IntSize& imageSize, uint64_t callbackID)
+void WebPage::drawRectToImage(uint64_t frameID, const PrintInfo& printInfo, const IntRect& rect, const WebCore::IntSize& imageSize, uint64_t callbackID)
 {
     WebFrame* frame = WebProcess::shared().webFrame(frameID);
     Frame* coreFrame = frame ? frame->coreFrame() : 0;

Modified: tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/WebPage.h (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/WebPage.h	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/WebPage.h	2013-01-16 19:49:57 UTC (rev 139905)
@@ -604,6 +604,8 @@
     void savePDFToTemporaryFolderAndOpenWithNativeApplication(const String& suggestedFilename, const String& originatingURLString, const uint8_t* data, unsigned long size, const String& pdfUUID);
 #endif
 
+    bool mainFrameIsScrollable() const { return m_mainFrameIsScrollable; }
+
 private:
     WebPage(uint64_t pageID, const WebPageCreationParameters&);
 
@@ -724,6 +726,9 @@
     void drawPagesToPDFFromPDFDocument(CGContextRef, PDFDocument *, const PrintInfo&, uint32_t first, uint32_t count);
 #endif
 
+    void viewExposedRectChanged(const WebCore::IntRect& exposedRect);
+    void setMainFrameIsScrollable(bool);
+
     void unapplyEditCommand(uint64_t commandID);
     void reapplyEditCommand(uint64_t commandID);
     void didRemoveEditCommand(uint64_t commandID);
@@ -811,6 +816,8 @@
 
     bool m_scrollingPerformanceLoggingEnabled;
 
+    bool m_mainFrameIsScrollable;
+
 #if PLATFORM(MAC)
     bool m_pdfPluginEnabled;
 

Modified: tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in	2013-01-16 19:49:57 UTC (rev 139905)
@@ -259,6 +259,8 @@
 
     SetWindowIsVisible(bool windowIsVisible)
     WindowAndViewFramesChanged(WebCore::IntRect windowFrameInScreenCoordinates, WebCore::IntRect viewFrameInWindowCoordinates, WebCore::IntPoint accessibilityViewCoordinates)
+    ViewExposedRectChanged(WebCore::IntRect exposedRect)
+    SetMainFrameIsScrollable(bool isScrollable)
     RegisterUIProcessAccessibilityTokens(CoreIPC::DataReference elemenToken, CoreIPC::DataReference windowToken)
     GetStringSelectionForPasteboard() -> (WTF::String stringValue)
     GetDataSelectionForPasteboard(WTF::String pasteboardType) -> (WebKit::SharedMemory::Handle handle, uint64_t size)

Modified: tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.h	2013-01-16 19:49:57 UTC (rev 139905)
@@ -71,6 +71,9 @@
     virtual void updatePreferences(const WebPreferencesStore&) OVERRIDE;
     virtual void mainFrameContentSizeChanged(const WebCore::IntSize&) OVERRIDE;
 
+    virtual void setExposedRect(const WebCore::IntRect&) OVERRIDE;
+    virtual void mainFrameScrollabilityChanged(bool) OVERRIDE;
+
     virtual void dispatchAfterEnsuringUpdatedScrollPosition(const Function<void ()>&) OVERRIDE;
 
     // WebCore::GraphicsLayerClient
@@ -113,6 +116,8 @@
 
     bool m_isPaintingSuspended;
 
+    WebCore::IntRect m_exposedRect;
+
     double m_minimumLayoutWidth;
     WebCore::IntSize m_lastSentIntrinsicContentSize;
     bool m_inUpdateGeometry;

Modified: tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (139904 => 139905)


--- tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2013-01-16 19:48:44 UTC (rev 139904)
+++ tags/Safari-537.26/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm	2013-01-16 19:49:57 UTC (rev 139905)
@@ -341,6 +341,19 @@
         m_webPage->corePage()->resumeScriptedAnimations();
 }
 
+void TiledCoreAnimationDrawingArea::setExposedRect(const IntRect& exposedRect)
+{
+    // FIXME: This should be mapped through the scroll offset, but we need to keep it up to date.
+    m_exposedRect = exposedRect;
+
+    mainFrameTiledBacking()->setExposedRect(exposedRect);
+}
+
+void TiledCoreAnimationDrawingArea::mainFrameScrollabilityChanged(bool isScrollable)
+{
+    mainFrameTiledBacking()->setClipsToExposedRect(!isScrollable);
+}
+
 void TiledCoreAnimationDrawingArea::updateGeometry(const IntSize& viewSize, double minimumLayoutWidth)
 {
     m_inUpdateGeometry = true;
@@ -362,7 +375,7 @@
     m_webPage->layoutIfNeeded();
 
     if (m_pageOverlayLayer)
-        m_pageOverlayLayer->setSize(viewSize);
+        m_pageOverlayLayer->setSize(size);
 
     if (!m_layerTreeStateIsFrozen)
         flushLayers();
@@ -370,7 +383,7 @@
     [CATransaction begin];
     [CATransaction setDisableActions:YES];
 
-    m_rootLayer.get().frame = CGRectMake(0, 0, viewSize.width(), viewSize.height());
+    m_rootLayer.get().frame = CGRectMake(0, 0, size.width(), size.height());
 
     [CATransaction commit];
     
@@ -450,8 +463,11 @@
     if (m_pageOverlayLayer)
         [m_rootLayer.get() addSublayer:m_pageOverlayLayer->platformLayer()];
 
-    if (TiledBacking* tiledBacking = mainFrameTiledBacking())
+    if (TiledBacking* tiledBacking = mainFrameTiledBacking()) {
         tiledBacking->setAggressivelyRetainsTiles(m_webPage->corePage()->settings()->aggressiveTileRetentionEnabled());
+        tiledBacking->setExposedRect(m_exposedRect);
+        tiledBacking->setClipsToExposedRect(!m_webPage->mainFrameIsScrollable());
+    }
 
     updateDebugInfoLayer(m_webPage->corePage()->settings()->showTiledScrollingIndicator());
 
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to