Changeset 271053 in webkit


Ignore:
Timestamp:
Dec 22, 2020 8:09:03 AM (19 months ago)
Author:
Simon Fraser
Message:

Layout overflow is computed incorrectly inside flexbox (breaks sticky positioning)
https://bugs.webkit.org/show_bug.cgi?id=220075
Source/WebCore:

<rdar://problem/70956639>

Reviewed by Zalan Bujtas.

RenderBlock::endAndCommitUpdateScrollInfoAfterLayoutTransaction(), which is only called by grid
and flexbox layout, would unconditionally clear layout overflow on boxes with overflow clipping,
which resulted in incorrect sticky positioning because RenderBoxModelObject::computeStickyPositionConstraints()
consults layout overflow.

It was only through happenstance that overflow:scroll worked correctly, relying on the fact
that updateScrollInfoAfterLayout() would trigger caching of scroll dimensions on RenderLayer.

This clearing was added in r151360 but seems incorrect; layout overflow should be preserved
after layout.

Test: fast/flexbox/preserve-layout-overflow.html

  • rendering/RenderBlock.cpp:

(WebCore::RenderBlock::endAndCommitUpdateScrollInfoAfterLayoutTransaction):

LayoutTests:

Reviewed by Zalan Bujtas.

  • fast/flexbox/preserve-layout-overflow-expected.txt: Added.
  • fast/flexbox/preserve-layout-overflow.html: Added.
Location:
trunk
Files:
2 added
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r271048 r271053  
     12020-12-22  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Layout overflow is computed incorrectly inside flexbox (breaks sticky positioning)
     4        https://bugs.webkit.org/show_bug.cgi?id=220075
     5
     6        Reviewed by Zalan Bujtas.
     7
     8        * fast/flexbox/preserve-layout-overflow-expected.txt: Added.
     9        * fast/flexbox/preserve-layout-overflow.html: Added.
     10
    1112020-12-21  Beth Dakin  <bdakin@apple.com>
    212
  • trunk/Source/WebCore/ChangeLog

    r271052 r271053  
     12020-12-22  Simon Fraser  <simon.fraser@apple.com>
     2
     3        Layout overflow is computed incorrectly inside flexbox (breaks sticky positioning)
     4        https://bugs.webkit.org/show_bug.cgi?id=220075
     5        <rdar://problem/70956639>
     6
     7        Reviewed by Zalan Bujtas.
     8
     9        RenderBlock::endAndCommitUpdateScrollInfoAfterLayoutTransaction(), which is only called by grid
     10        and flexbox layout, would unconditionally clear layout overflow on boxes with overflow clipping,
     11        which resulted in incorrect sticky positioning because RenderBoxModelObject::computeStickyPositionConstraints()
     12        consults layout overflow.
     13
     14        It was only through happenstance that overflow:scroll worked correctly, relying on the fact
     15        that updateScrollInfoAfterLayout() would trigger caching of scroll dimensions on RenderLayer.
     16
     17        This clearing was added in r151360 but seems incorrect; layout overflow should be preserved
     18        after layout.
     19
     20        Test: fast/flexbox/preserve-layout-overflow.html
     21
     22        * rendering/RenderBlock.cpp:
     23        (WebCore::RenderBlock::endAndCommitUpdateScrollInfoAfterLayoutTransaction):
     24
    1252020-12-22  Zalan Bujtas  <zalan@apple.com>
    226
  • trunk/Source/WebCore/rendering/RenderBlock.cpp

    r271003 r271053  
    555555        ASSERT(block->hasOverflowClip());
    556556        block->layer()->updateScrollInfoAfterLayout();
    557         block->clearLayoutOverflow();
    558557    }
    559558}
Note: See TracChangeset for help on using the changeset viewer.