| Differences between
and this patch
- a/Source/WebCore/ChangeLog +23 lines
Lines 1-3 a/Source/WebCore/ChangeLog_sec1
1
2021-12-03  Rob Buis  
2
3
        [css-contain] Prevent various kinds of propagation to RenderView
4
        https://bugs.webkit.org/show_bug.cgi?id=233535
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        Prevent direction/background/writing-mode propagation to RenderView
9
        in cases where contain is used. The reason is in the github issue
10
        and latest draft specification has been updated [1, 2].
11
12
        [1] https://github.com/w3c/csswg-drafts/issues/5913
13
        [2] https://drafts.csswg.org/css-contain-2/
14
15
        * rendering/RenderBox.cpp:
16
        (WebCore::RenderBox::styleDidChange):
17
        (WebCore::RenderBox::updateFromStyle):
18
        * rendering/RenderObject.cpp:
19
        (WebCore::shouldApplyAnyContainment):
20
        * rendering/RenderObject.h:
21
        * rendering/RenderView.cpp:
22
        (WebCore::RenderView::rendererForRootBackground const):
23
1
2021-12-03  Alicia Boya García  
24
2021-12-03  Alicia Boya García  
2
25
3
        [MSE] Fix erase range to prevent accidental deletion in files with changing durations
26
        [MSE] Fix erase range to prevent accidental deletion in files with changing durations
- a/Source/WebCore/rendering/RenderBox.cpp -21 / +23 lines
Lines 345-379 void RenderBox::styleDidChange(StyleDifference diff, const RenderStyle* oldStyle a/Source/WebCore/rendering/RenderBox.cpp_sec1
345
    bool isDocElementRenderer = isDocumentElementRenderer();
345
    bool isDocElementRenderer = isDocumentElementRenderer();
346
346
347
    if (isDocElementRenderer || isBodyRenderer) {
347
    if (isDocElementRenderer || isBodyRenderer) {
348
        // Propagate the new writing mode and direction up to the RenderView.
349
        auto* documentElementRenderer = document().documentElement()->renderer();
348
        auto* documentElementRenderer = document().documentElement()->renderer();
350
        auto& viewStyle = view().mutableStyle();
349
        auto& viewStyle = view().mutableStyle();
351
        bool rootStyleChanged = false;
350
        bool rootStyleChanged = false;
352
        bool viewDirectionOrWritingModeChanged = false;
351
        bool viewDirectionOrWritingModeChanged = false;
353
        auto* rootRenderer = isBodyRenderer ? documentElementRenderer : nullptr;
352
        auto* rootRenderer = isBodyRenderer ? documentElementRenderer : nullptr;
354
        if (viewStyle.direction() != newStyle.direction() && (isDocElementRenderer || !documentElementRenderer->style().hasExplicitlySetDirection())) {
353
        if (!isBodyRenderer || !(shouldApplyAnyContainment(*this) || shouldApplyAnyContainment(*documentElementRenderer))) {
355
            viewStyle.setDirection(newStyle.direction());
354
            // Propagate the new writing mode and direction up to the RenderView.
356
            viewDirectionOrWritingModeChanged = true;
355
            if (viewStyle.direction() != newStyle.direction() && (isDocElementRenderer || !documentElementRenderer->style().hasExplicitlySetDirection())) {
357
            if (isBodyRenderer) {
356
                viewStyle.setDirection(newStyle.direction());
358
                rootRenderer->mutableStyle().setDirection(newStyle.direction());
357
                viewDirectionOrWritingModeChanged = true;
359
                rootStyleChanged = true;
358
                if (isBodyRenderer) {
360
            }
359
                    rootRenderer->mutableStyle().setDirection(newStyle.direction());
361
            setNeedsLayoutAndPrefWidthsRecalc();
360
                    rootStyleChanged = true;
361
                }
362
                setNeedsLayoutAndPrefWidthsRecalc();
362
363
363
            view().frameView().topContentDirectionDidChange();
364
                view().frameView().topContentDirectionDidChange();
364
        }
365
            }
365
366
366
        if (viewStyle.writingMode() != newStyle.writingMode() && (isDocElementRenderer || !documentElementRenderer->style().hasExplicitlySetWritingMode())) {
367
            if (viewStyle.writingMode() != newStyle.writingMode() && (isDocElementRenderer || !documentElementRenderer->style().hasExplicitlySetWritingMode())) {
367
            viewStyle.setWritingMode(newStyle.writingMode());
368
                viewStyle.setWritingMode(newStyle.writingMode());
368
            viewDirectionOrWritingModeChanged = true;
369
                viewDirectionOrWritingModeChanged = true;
369
            view().setHorizontalWritingMode(newStyle.isHorizontalWritingMode());
370
                view().setHorizontalWritingMode(newStyle.isHorizontalWritingMode());
370
            view().markAllDescendantsWithFloatsForLayout();
371
                view().markAllDescendantsWithFloatsForLayout();
371
            if (isBodyRenderer) {
372
                if (isBodyRenderer) {
372
                rootStyleChanged = true;
373
                    rootStyleChanged = true;
373
                rootRenderer->mutableStyle().setWritingMode(newStyle.writingMode());
374
                    rootRenderer->mutableStyle().setWritingMode(newStyle.writingMode());
374
                rootRenderer->setHorizontalWritingMode(newStyle.isHorizontalWritingMode());
375
                    rootRenderer->setHorizontalWritingMode(newStyle.isHorizontalWritingMode());
376
                }
377
                setNeedsLayoutAndPrefWidthsRecalc();
375
            }
378
            }
376
            setNeedsLayoutAndPrefWidthsRecalc();
377
        }
379
        }
378
380
379
#if ENABLE(DARK_MODE_CSS)
381
#if ENABLE(DARK_MODE_CSS)
- a/Source/WebCore/rendering/RenderObject.cpp +9 lines
Lines 2559-2561 bool WebCore::shouldApplyPaintContainment(const WebCore::RenderObject& renderer) a/Source/WebCore/rendering/RenderObject.cpp_sec1
2559
    return renderer.style().containsPaint() && (!renderer.isInline() || renderer.isAtomicInlineLevelBox()) && !renderer.isRubyText() && (!renderer.isTablePart() || renderer.isRenderBlockFlow());
2559
    return renderer.style().containsPaint() && (!renderer.isInline() || renderer.isAtomicInlineLevelBox()) && !renderer.isRubyText() && (!renderer.isTablePart() || renderer.isRenderBlockFlow());
2560
}
2560
}
2561
2561
2562
bool WebCore::shouldApplyAnyContainment(const WebCore::RenderObject& renderer)
2563
{
2564
    if (renderer.style().contain().isEmpty())
2565
        return false;
2566
    if ((renderer.style().containsLayout() || renderer.style().containsPaint()) && (!renderer.isInline() || renderer.isAtomicInlineLevelBox()) && !renderer.isRubyText() && (!renderer.isTablePart() || renderer.isRenderBlockFlow()))
2567
        return true;
2568
    return (renderer.style().containsSize() || renderer.style().containsStyle()) && (!renderer.isInline() || renderer.isAtomicInlineLevelBox()) && !renderer.isRubyText() && (!renderer.isTablePart() || renderer.isTableCaption()) && !renderer.isTable();
2569
}
2570
- a/Source/WebCore/rendering/RenderObject.h +1 lines
Lines 1213-1218 bool shouldApplyLayoutContainment(const RenderObject&); a/Source/WebCore/rendering/RenderObject.h_sec1
1213
bool shouldApplySizeContainment(const RenderObject&);
1213
bool shouldApplySizeContainment(const RenderObject&);
1214
bool shouldApplyStyleContainment(const RenderObject&);
1214
bool shouldApplyStyleContainment(const RenderObject&);
1215
bool shouldApplyPaintContainment(const RenderObject&);
1215
bool shouldApplyPaintContainment(const RenderObject&);
1216
bool shouldApplyAnyContainment(const RenderObject&);
1216
1217
1217
} // namespace WebCore
1218
} // namespace WebCore
1218
1219
- a/Source/WebCore/rendering/RenderView.cpp -2 / +7 lines
Lines 329-337 RenderElement* RenderView::rendererForRootBackground() const a/Source/WebCore/rendering/RenderView.cpp_sec1
329
    if (!is(documentRenderer.element()))
329
    if (!is(documentRenderer.element()))
330
        return &documentRenderer;
330
        return &documentRenderer;
331
331
332
    if (shouldApplyAnyContainment(documentRenderer))
333
        return nullptr;
334
332
    if (auto* body = document().body()) {
335
    if (auto* body = document().body()) {
333
        if (auto* renderer = body->renderer())
336
        if (auto* renderer = body->renderer()) {
334
            return renderer;
337
            if (!shouldApplyAnyContainment(*renderer))
338
                return renderer;
339
        }
335
    }
340
    }
336
    return &documentRenderer;
341
    return &documentRenderer;
337
}
342
}
- a/LayoutTests/ChangeLog +9 lines
Lines 1-3 a/LayoutTests/ChangeLog_sec1
1
2021-12-03  Rob Buis  
2
3
        [css-contain] Prevent various kinds of propagation to RenderView
4
        https://bugs.webkit.org/show_bug.cgi?id=233535
5
6
        Reviewed by NOBODY (OOPS!).
7
8
        * TestExpectations:
9
1
2021-12-03  Arcady Goldmints-Orlov  
10
2021-12-03  Arcady Goldmints-Orlov  
2
11
3
        [GStreamer] test http/tests/security/webaudio-render-remote-audio-allowed-crossorigin.html fails
12
        [GStreamer] test http/tests/security/webaudio-render-remote-audio-allowed-crossorigin.html fails
- a/LayoutTests/TestExpectations -24 lines
Lines 4759-4795 imported/w3c/web-platform-tests/css/css-contain/quote-scoping-001.html [ ImageOn a/LayoutTests/TestExpectations_sec1
4759
imported/w3c/web-platform-tests/css/css-contain/quote-scoping-002.html [ ImageOnlyFailure ]
4759
imported/w3c/web-platform-tests/css/css-contain/quote-scoping-002.html [ ImageOnlyFailure ]
4760
imported/w3c/web-platform-tests/css/css-contain/quote-scoping-003.html [ ImageOnlyFailure ]
4760
imported/w3c/web-platform-tests/css/css-contain/quote-scoping-003.html [ ImageOnlyFailure ]
4761
imported/w3c/web-platform-tests/css/css-contain/quote-scoping-004.html [ ImageOnlyFailure ]
4761
imported/w3c/web-platform-tests/css/css-contain/quote-scoping-004.html [ ImageOnlyFailure ]
4762
imported/w3c/web-platform-tests/css/css-contain/contain-body-bg-001.html [ ImageOnlyFailure ]
4763
imported/w3c/web-platform-tests/css/css-contain/contain-body-bg-002.html [ ImageOnlyFailure ]
4764
imported/w3c/web-platform-tests/css/css-contain/contain-body-bg-003.html [ ImageOnlyFailure ]
4765
imported/w3c/web-platform-tests/css/css-contain/contain-body-bg-004.html [ ImageOnlyFailure ]
4766
imported/w3c/web-platform-tests/css/css-contain/contain-body-dir-001.html [ ImageOnlyFailure ]
4767
imported/w3c/web-platform-tests/css/css-contain/contain-body-dir-002.html [ ImageOnlyFailure ]
4768
imported/w3c/web-platform-tests/css/css-contain/contain-body-dir-003.html [ ImageOnlyFailure ]
4769
imported/w3c/web-platform-tests/css/css-contain/contain-body-dir-004.html [ ImageOnlyFailure ]
4770
imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-001.html [ ImageOnlyFailure ]
4762
imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-001.html [ ImageOnlyFailure ]
4771
imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-002.html [ ImageOnlyFailure ]
4763
imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-002.html [ ImageOnlyFailure ]
4772
imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-003.html [ ImageOnlyFailure ]
4764
imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-003.html [ ImageOnlyFailure ]
4773
imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-004.html [ ImageOnlyFailure ]
4765
imported/w3c/web-platform-tests/css/css-contain/contain-body-overflow-004.html [ ImageOnlyFailure ]
4774
imported/w3c/web-platform-tests/css/css-contain/contain-body-w-m-001.html [ ImageOnlyFailure ]
4775
imported/w3c/web-platform-tests/css/css-contain/contain-body-w-m-002.html [ ImageOnlyFailure ]
4776
imported/w3c/web-platform-tests/css/css-contain/contain-body-w-m-003.html [ ImageOnlyFailure ]
4777
imported/w3c/web-platform-tests/css/css-contain/contain-body-w-m-004.html [ ImageOnlyFailure ]
4778
imported/w3c/web-platform-tests/css/css-contain/contain-html-bg-001.html [ ImageOnlyFailure ]
4779
imported/w3c/web-platform-tests/css/css-contain/contain-html-bg-002.html [ ImageOnlyFailure ]
4780
imported/w3c/web-platform-tests/css/css-contain/contain-html-bg-003.html [ ImageOnlyFailure ]
4781
imported/w3c/web-platform-tests/css/css-contain/contain-html-bg-004.html [ ImageOnlyFailure ]
4782
imported/w3c/web-platform-tests/css/css-contain/contain-html-dir-001.html [ ImageOnlyFailure ]
4783
imported/w3c/web-platform-tests/css/css-contain/contain-html-dir-002.html [ ImageOnlyFailure ]
4784
imported/w3c/web-platform-tests/css/css-contain/contain-html-dir-003.html [ ImageOnlyFailure ]
4785
imported/w3c/web-platform-tests/css/css-contain/contain-html-dir-004.html [ ImageOnlyFailure ]
4786
imported/w3c/web-platform-tests/css/css-contain/contain-html-overflow-001.html [ ImageOnlyFailure ]
4766
imported/w3c/web-platform-tests/css/css-contain/contain-html-overflow-001.html [ ImageOnlyFailure ]
4787
imported/w3c/web-platform-tests/css/css-contain/contain-html-overflow-003.html [ ImageOnlyFailure ]
4767
imported/w3c/web-platform-tests/css/css-contain/contain-html-overflow-003.html [ ImageOnlyFailure ]
4788
imported/w3c/web-platform-tests/css/css-contain/contain-html-overflow-004.html [ ImageOnlyFailure ]
4768
imported/w3c/web-platform-tests/css/css-contain/contain-html-overflow-004.html [ ImageOnlyFailure ]
4789
imported/w3c/web-platform-tests/css/css-contain/contain-html-w-m-001.html [ ImageOnlyFailure ]
4790
imported/w3c/web-platform-tests/css/css-contain/contain-html-w-m-002.html [ ImageOnlyFailure ]
4791
imported/w3c/web-platform-tests/css/css-contain/contain-html-w-m-003.html [ ImageOnlyFailure ]
4792
imported/w3c/web-platform-tests/css/css-contain/contain-html-w-m-004.html [ ImageOnlyFailure ]
4793
4769
4794
# Flaky css-contain test
4770
# Flaky css-contain test
4795
imported/w3c/web-platform-tests/css/css-contain/content-visibility/animation-display-lock.html [ Failure Pass ]
4771
imported/w3c/web-platform-tests/css/css-contain/content-visibility/animation-display-lock.html [ Failure Pass ]

Return to Bug 233535