Changeset 287845 in webkit


Ignore:
Timestamp:
Jan 10, 2022 10:50:39 AM (6 months ago)
Author:
ntim@apple.com
Message:

REGRESSION(r287683): <dialog> elements inside clipped/overflowed elements are no longer shown
https://bugs.webkit.org/show_bug.cgi?id=234984

Reviewed by Simon Fraser.

Source/WebCore:

Paint at the right place by fixing isContainerForPositioned, also fix clip rects.

  • rendering/RenderLayer.cpp:

(WebCore::isContainerForPositioned):
(WebCore::RenderLayer::enclosingAncestorForPosition const):
(WebCore::accumulateOffsetTowardsAncestor):
(WebCore::RenderLayer::calculateClipRects const):

LayoutTests:

Enable relevant tests. Set the asserting test as Crash instead of Skipping.

Location:
trunk
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/ChangeLog

    r287843 r287845  
     12022-01-10  Tim Nguyen  <ntim@apple.com>
     2
     3        REGRESSION(r287683): <dialog> elements inside clipped/overflowed elements are no longer shown
     4        https://bugs.webkit.org/show_bug.cgi?id=234984
     5
     6        Reviewed by Simon Fraser.
     7
     8        Enable relevant tests. Set the asserting test as Crash instead of Skipping.
     9
     10        * TestExpectations:
     11
    1122022-01-10  Simon Fraser  <simon.fraser@apple.com>
    213
  • trunk/LayoutTests/TestExpectations

    r287823 r287845  
    23592359webkit.org/b/229315 imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/modal-dialog-in-replaced-renderer.html [ ImageOnlyFailure ]
    23602360webkit.org/b/229315 imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/modal-dialog-in-table-column.html [ ImageOnlyFailure ]
    2361 webkit.org/b/231292 imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-containing-block.html [ ImageOnlyFailure ]
    2362 webkit.org/b/231292 imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-stacking.html [ ImageOnlyFailure ]
    2363 webkit.org/b/231292 imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-parent-overflow-clip.html [ ImageOnlyFailure ]
    2364 webkit.org/b/231292 imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-parent-overflow-scroll.html [ ImageOnlyFailure ]
    23652361# Needs layer re-parenting
    2366 webkit.org/b/231292 [ Debug ] imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-parent-transform.html [ Skip ]
     2362webkit.org/b/234980 [ Debug ] imported/w3c/web-platform-tests/html/semantics/interactive-elements/the-dialog-element/top-layer-parent-transform.html [ Crash ]
    23672363
    23682364# Assertion failure in MessagePort::contextDestroyed, usually attributed to later tests
  • trunk/Source/WebCore/ChangeLog

    r287838 r287845  
     12022-01-10  Tim Nguyen  <ntim@apple.com>
     2
     3        REGRESSION(r287683): <dialog> elements inside clipped/overflowed elements are no longer shown
     4        https://bugs.webkit.org/show_bug.cgi?id=234984
     5
     6        Reviewed by Simon Fraser.
     7
     8        Paint at the right place by fixing isContainerForPositioned, also fix clip rects.
     9
     10        * rendering/RenderLayer.cpp:
     11        (WebCore::isContainerForPositioned):
     12        (WebCore::RenderLayer::enclosingAncestorForPosition const):
     13        (WebCore::accumulateOffsetTowardsAncestor):
     14        (WebCore::RenderLayer::calculateClipRects const):
     15
    1162022-01-10  Sam Weinig  <weinig@apple.com>
    217
  • trunk/Source/WebCore/rendering/RenderLayer.cpp

    r287829 r287845  
    17781778}
    17791779
    1780 static inline bool isContainerForPositioned(RenderLayer& layer, PositionType position)
    1781 {
     1780static inline bool isContainerForPositioned(RenderLayer& layer, PositionType position, bool establishesTopLayer)
     1781{
     1782    if (establishesTopLayer)
     1783        return layer.isRenderViewLayer();
     1784
    17821785    switch (position) {
    17831786    case PositionType::Fixed:
     
    18161819
    18171820    RenderLayer* curr = parent();
    1818     while (curr && !isContainerForPositioned(*curr, position))
     1821    while (curr && !isContainerForPositioned(*curr, position, establishesTopLayer()))
    18191822        curr = curr->parent();
    18201823
     
    22932296                foundAncestor = true;
    22942297
    2295             if (isContainerForPositioned(*currLayer, PositionType::Fixed)) {
     2298            if (isContainerForPositioned(*currLayer, PositionType::Fixed, layer->establishesTopLayer())) {
    22962299                fixedPositionContainerLayer = currLayer;
    22972300                ASSERT_UNUSED(foundAncestor, foundAncestor);
     
    23322335            // This implies that, for out-of-flow positioned elements inside a RenderFragmentedFlow,
    23332336            // we are bailing out before reaching root layer.
    2334             if (isContainerForPositioned(*parentLayer, position))
     2337            if (isContainerForPositioned(*parentLayer, position, layer->establishesTopLayer()))
    23352338                break;
    23362339
     
    45424545Ref<ClipRects> RenderLayer::parentClipRects(const ClipRectsContext& clipRectsContext) const
    45434546{
    4544     ASSERT(parent());
    4545 
     4547    ASSERT(parent() || establishesTopLayer());
     4548
     4549    auto containerLayer = establishesTopLayer() ? renderer().view().layer() : parent();
    45464550    auto temporaryParentClipRects = [&](const ClipRectsContext& clipContext) {
    45474551        auto parentClipRects = ClipRects::create();
    4548         parent()->calculateClipRects(clipContext, parentClipRects);
     4552        containerLayer->calculateClipRects(clipContext, parentClipRects);
    45494553        return parentClipRects;
    45504554    };
     
    45594563    }
    45604564
    4561     return parent()->updateClipRects(clipRectsContext);
     4565    return containerLayer->updateClipRects(clipRectsContext);
    45624566}
    45634567
Note: See TracChangeset for help on using the changeset viewer.