Changeset 151360 in webkit


Ignore:
Timestamp:
Jun 9, 2013 2:22:03 PM (11 years ago)
Author:
roger_fong@apple.com
Message:

Layout info should never be cleared before delayed scroll information updates.
https://bugs.webkit.org/show_bug.cgi?id=116689.

Reviewed by Darin Adler.

Test: fast/flexbox/clear-overflow-before-scroll-update.html

Make sure that clearLayoutOverflow only gets called after layer()->updateScrollInfoAfterLayout().
Also move clearLayoutOverflow to RenderBlock so we can keep all the delayed scroll update logic in RenderBlock.

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::finishDelayUpdateScrollInfo): Call clearLayoutOverflow here.
(WebCore::RenderBlock::layout): Only call clearLayoutOverflow here if scrolling isn't being delayed.
(WebCore::RenderBlock::clearLayoutOverflow): Remove clearLayoutOverflow, move into RenderBlock to keep delayed scrolling logic in the same file.

  • rendering/RenderBlock.h:
  • rendering/RenderBox.cpp:
  • rendering/RenderBox.h:
  • rendering/RenderDeprecatedFlexibleBox.cpp: Should call updateScrollInfoAfterLayout, not layer()->updateScrollInfoAfterLayout(), so that it takes delayed scrolling logic into account.

(WebCore::RenderDeprecatedFlexibleBox::layoutBlock):

  • rendering/RenderGrid.cpp: Ditto

(WebCore::RenderGrid::layoutBlock):

Location:
trunk
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r151351 r151360  
     12013-06-07  Roger Fong  <roger_fong@apple.com>
     2
     3        Layout info should never be cleared before delayed scroll information updates.
     4        https://bugs.webkit.org/show_bug.cgi?id=116689.
     5
     6        Reviewed by Darin Adler.
     7
     8        * fast/flexbox/clear-overflow-before-scroll-update-expected.txt: Added.
     9        * fast/flexbox/clear-overflow-before-scroll-update.html: Added.
     10
    1112013-06-08  Igor Oliveira  <igor.o@sisa.samsung.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r151359 r151360  
     12013-06-09  Roger Fong  <roger_fong@apple.com>
     2
     3        Layout info should never be cleared before delayed scroll information updates.
     4        https://bugs.webkit.org/show_bug.cgi?id=116689.
     5
     6        Reviewed by Darin Adler.
     7
     8        Test: fast/flexbox/clear-overflow-before-scroll-update.html
     9
     10        Make sure that clearLayoutOverflow only gets called after layer()->updateScrollInfoAfterLayout().
     11        Also move clearLayoutOverflow to RenderBlock so we can keep all the delayed scroll update logic in RenderBlock.
     12
     13        * rendering/RenderBlock.cpp:
     14        (WebCore::RenderBlock::finishDelayUpdateScrollInfo): Call clearLayoutOverflow here.
     15        (WebCore::RenderBlock::layout): Only call clearLayoutOverflow here if scrolling isn't being delayed.
     16        (WebCore::RenderBlock::clearLayoutOverflow): Remove clearLayoutOverflow, move into RenderBlock to keep delayed scrolling logic in the same file.
     17        * rendering/RenderBlock.h:
     18        * rendering/RenderBox.cpp:
     19        * rendering/RenderBox.h:
     20        * rendering/RenderDeprecatedFlexibleBox.cpp: Should call updateScrollInfoAfterLayout, not layer()->updateScrollInfoAfterLayout(), so that it takes delayed scrolling logic into account.
     21        (WebCore::RenderDeprecatedFlexibleBox::layoutBlock):
     22        * rendering/RenderGrid.cpp: Ditto
     23        (WebCore::RenderGrid::layoutBlock):
     24
    1252013-06-09  Benjamin Poulain  <bpoulain@apple.com>
    226
  • trunk/Source/WebCore/rendering/RenderBlock.cpp

    r151307 r151360  
    13921392            if (block->hasOverflowClip()) {
    13931393                block->layer()->updateScrollInfoAfterLayout();
     1394                block->clearLayoutOverflow();
    13941395            }
    13951396        }
     
    14301431    // It's safe to check for control clip here, since controls can never be table cells.
    14311432    // If we have a lightweight clip, there can never be any overflow from children.
    1432     if (hasControlClip() && m_overflow)
     1433    if (hasControlClip() && m_overflow && !gDelayUpdateScrollInfo)
    14331434        clearLayoutOverflow();
    14341435
     
    18171818    if (isRenderFlowThread())
    18181819        toRenderFlowThread(this)->computeOverflowStateForRegions(oldClientAfterEdge);
     1820}
     1821
     1822void RenderBlock::clearLayoutOverflow()
     1823{
     1824    if (!m_overflow)
     1825        return;
     1826   
     1827    if (visualOverflowRect() == borderBoxRect()) {
     1828        m_overflow.clear();
     1829        return;
     1830    }
     1831   
     1832    m_overflow->setLayoutOverflow(borderBoxRect());
    18191833}
    18201834
  • trunk/Source/WebCore/rendering/RenderBlock.h

    r151295 r151360  
    555555public:
    556556    void computeOverflow(LayoutUnit oldClientAfterEdge, bool recomputeFloats = false);
     557    void clearLayoutOverflow();
    557558protected:
    558559    virtual void addOverflowFromChildren();
  • trunk/Source/WebCore/rendering/RenderBox.cpp

    r151309 r151360  
    42164216}
    42174217
    4218 void RenderBox::clearLayoutOverflow()
    4219 {
    4220     if (!m_overflow)
    4221         return;
    4222    
    4223     if (visualOverflowRect() == borderBoxRect()) {
    4224         m_overflow.clear();
    4225         return;
    4226     }
    4227    
    4228     m_overflow->setLayoutOverflow(borderBoxRect());
    4229 }
    4230 
    42314218inline static bool percentageLogicalHeightIsResolvable(const RenderBox* box)
    42324219{
  • trunk/Source/WebCore/rendering/RenderBox.h

    r151247 r151360  
    192192    void addOverflowFromChild(RenderBox* child) { addOverflowFromChild(child, child->locationOffset()); }
    193193    void addOverflowFromChild(RenderBox* child, const LayoutSize& delta);
    194     void clearLayoutOverflow();
    195194   
    196195    void updateLayerTransform();
  • trunk/Source/WebCore/rendering/RenderDeprecatedFlexibleBox.cpp

    r151178 r151360  
    379379    // Update our scrollbars if we're overflow:auto/scroll/hidden now that we know if
    380380    // we overflow or not.
    381     if (hasOverflowClip())
    382         layer()->updateScrollInfoAfterLayout();
     381    updateScrollInfoAfterLayout();
    383382
    384383    // Repaint with our new bounds if they are different from our old bounds.
  • trunk/Source/WebCore/rendering/RenderGrid.cpp

    r151178 r151360  
    181181    // Update our scroll information if we're overflow:auto/scroll/hidden now that we know if
    182182    // we overflow or not.
    183     if (hasOverflowClip())
    184         layer()->updateScrollInfoAfterLayout();
     183    updateScrollInfoAfterLayout();
    185184
    186185    repainter.repaintAfterLayout();
Note: See TracChangeset for help on using the changeset viewer.