Source/WebCore/ChangeLog

 12012-07-10 Julien Chaffraix <jchaffraix@webkit.org>
 2
 3 REGRESSION (r116203): overflow sections don't have scrollbars
 4 https://bugs.webkit.org/show_bug.cgi?id=90052
 5
 6 Reviewed by NOBODY (OOPS!).
 7
 8 This issue stems from RenderLayers with overlay scrollbars not being considered
 9 self-painting.
 10
 11 After r120395 (follow-up of r116203), we ignore subtree that have no self-painting layers for
 12 painting. Normal scrollbars are painted by their renderer so they were properly painted. However
 13 overlay scrollbars needs to be painted by the RenderLayer as a separate phase (see bug 57057) so
 14 they were not painted anymore. The fix is simple: make RenderLayer with overlay scrollbars
 15 self-painting as they should have been in the first place.
 16
 17 Unfortunately no tests as I don't think we have a good way of testing overlay
 18 scrollbars. Tested manually though on the super simple test case from the bug.
 19
 20 * rendering/RenderLayer.cpp:
 21 (WebCore::RenderLayer::shouldBeSelfPaintingLayer):
 22 Overlay scrollbars make the layer self-painting.
 23
 24 (WebCore::RenderLayer::updateScrollbarsAfterLayout):
 25 Added a call to updateSelfPaintingLayer.
 26
 27 (WebCore::RenderLayer::styleChanged):
 28 Moved the call to updateSelfPaintingLayer after recomputing the scrollbars to ensure proper behavior.
 29 Added a comment underlining the reason.
 30
 31 (WebCore::RenderLayer::updateSelfPaintingLayer):
 32 Renamed as it is now called during layout too.
 33
 34 * rendering/RenderLayer.h:
 35 (RenderLayer): Updated after updateSelfPaintingLayer rename.
 36
1372012-07-10 Ojan Vafai <ojan@chromium.org>
238
339 Add support for min-height:auto and min-width:auto

Source/WebCore/rendering/RenderLayer.cpp

@@void RenderLayer::updateScrollbarsAfterLayout()
25342534 if (box->hasAutoVerticalScrollbar())
25352535 setHasVerticalScrollbar(hasVerticalOverflow);
25362536
 2537 updateSelfPaintingLayer();
 2538
25372539#if ENABLE(DASHBOARD_SUPPORT)
25382540 // Force an update since we know the scrollbars have changed things.
25392541 if (renderer()->document()->hasDashboardRegions())

@@bool RenderLayer::shouldBeNormalFlowOnly() const
47404742bool RenderLayer::shouldBeSelfPaintingLayer() const
47414743{
47424744 return !isNormalFlowOnly()
 4745 || hasOverlayScrollbars()
47434746 || renderer()->hasReflection()
47444747 || renderer()->hasMask()
47454748 || renderer()->isTableRow()

@@bool RenderLayer::shouldBeSelfPaintingLayer() const
47504753 || renderer()->isRenderIFrame();
47514754}
47524755
4753 void RenderLayer::updateSelfPaintingLayerAfterStyleChange(const RenderStyle*)
 4756void RenderLayer::updateSelfPaintingLayer()
47544757{
47554758 bool isSelfPaintingLayer = shouldBeSelfPaintingLayer();
47564759 if (m_isSelfPaintingLayer == isSelfPaintingLayer)

@@void RenderLayer::styleChanged(StyleDifference, const RenderStyle* oldStyle)
48454848 m_marquee = 0;
48464849 }
48474850
4848  updateSelfPaintingLayerAfterStyleChange(oldStyle);
48494851 updateStackingContextsAfterStyleChange(oldStyle);
48504852 updateScrollbarsAfterStyleChange(oldStyle);
 4853 // Overlay scrollbars can make this layer self-painting so we need
 4854 // to recompute the bit once scrollbars have been updated.
 4855 updateSelfPaintingLayer();
48514856
48524857 if (!hasReflection() && m_reflection)
48534858 removeReflection();

Source/WebCore/rendering/RenderLayer.h

@@private:
679679
680680 bool shouldRepaintAfterLayout() const;
681681
682  void updateSelfPaintingLayerAfterStyleChange(const RenderStyle* oldStyle);
 682 void updateSelfPaintingLayer();
683683 void updateStackingContextsAfterStyleChange(const RenderStyle* oldStyle);
684684
685685 void updateScrollbarsAfterStyleChange(const RenderStyle* oldStyle);