[webkit-changes] [WebKit/WebKit] 34f748: Add support for css content-visibility: hidden

Rob Buis noreply at github.com
Tue Nov 1 07:42:45 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 34f748c71e8db1f627d0cc3a1f55166ebd135404
      https://github.com/WebKit/WebKit/commit/34f748c71e8db1f627d0cc3a1f55166ebd135404
  Author: Rob Buis <rbuis at igalia.com>
  Date:   2022-11-01 (Tue, 01 Nov 2022)

  Changed paths:
    M LayoutTests/TestExpectations
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-015-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-016-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-017-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-018-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-029-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-035-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-038-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-047-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-072-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-img-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-input-image-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-svg-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-006-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-009-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-010-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr-expected.txt
    M Source/WebCore/dom/Element.cpp
    M Source/WebCore/page/FrameView.cpp
    M Source/WebCore/rendering/RenderBlock.cpp
    M Source/WebCore/rendering/RenderElement.h
    M Source/WebCore/rendering/RenderLayer.cpp
    M Source/WebCore/rendering/RenderLayerBacking.cpp
    M Source/WebCore/rendering/RenderObject.cpp
    M Source/WebCore/rendering/RenderObject.h
    M Source/WebCore/rendering/RenderReplaced.cpp
    M Source/WebCore/rendering/RenderWidget.cpp
    M Source/WebCore/rendering/style/RenderStyle.h
    M Source/WebCore/rendering/style/StyleRareInheritedData.cpp
    M Source/WebCore/rendering/style/StyleRareInheritedData.h
    M Source/WebCore/style/StyleAdjuster.cpp

  Log Message:
  -----------
  Add support for css content-visibility: hidden
https://bugs.webkit.org/show_bug.cgi?id=236710

Reviewed by Antti Koivisto.

This patch implements support for content-visibility: hidden [1].
It introduces the fake inherited property effectiveSkipsContent to keep
track for Elements whether content-visibility is hidden and whether elements
should be skipped for painting and hit testing.

Several points in 4.3. Restrictions and Clarifications [2] are addressed too:
- scrollIntoView is adapted [4.3.5]
- tab-order navigation and focusing take skipped contents into account [3].

[1] https://drafts.csswg.org/css-contain/#using-cv-hidden
[2] https://drafts.csswg.org/css-contain/#cv-notes
[3] https://drafts.csswg.org/css-contain/#valdef-content-visibility-hidden

* LayoutTests/TestExpectations:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-015-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-016-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-017-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-018-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-029-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-035-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-038-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-047-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-072-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-img-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-input-image-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-contain/content-visibility/content-visibility-svg-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-006-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-009-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-010-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-focus-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/html/semantics/embedded-content/the-embed-element/embed-document-under-content-visibility-gbcr-expected.txt:
* Source/WebCore/dom/Element.cpp:
(WebCore::Element::isFocusable const): skipped contents are not focusable
* Source/WebCore/page/FrameView.cpp:
(WebCore::FrameView::scrollRectToVisible): do not scroll if the RenderObject is skipped content
* Source/WebCore/rendering/RenderBlock.cpp:
(WebCore::RenderBlock::paintContents): do not paint contents for c-v: hidden
* Source/WebCore/rendering/RenderElement.h:
(WebCore::RenderElement::visibleToHitTesting const): mark skipped content as not visible to hit testing
(WebCore::RenderElement::shouldApplyLayoutContainment const): c-v: hidden forces containment
(WebCore::RenderElement::shouldApplyPaintContainment const): c-v: hidden forces containment
(WebCore::RenderElement::shouldApplyLayoutOrPaintContainment const): c-v: hidden forces containment
(WebCore::RenderElement::shouldApplySizeContainment const): c-v: hidden forces containment
(WebCore::RenderElement::shouldApplyInlineSizeContainment const): c-v: hidden forces containment
(WebCore::RenderElement::shouldApplySizeOrInlineSizeContainment const): c-v: hidden forces containment
(WebCore::RenderElement::shouldApplyStyleContainment const): c-v: hidden forces containment
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::paintList): do not paint child layers of a c-v: hidden container
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateAfterDescendants):
* Source/WebCore/rendering/RenderObject.cpp:
(WebCore::RenderObject::isSkippedContent const):
(WebCore::RenderObject::shouldSkipContent const):
* Source/WebCore/rendering/RenderObject.h:
* Source/WebCore/rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::paint): do not paint contents for content-visibility: hidden
* Source/WebCore/rendering/RenderWidget.cpp:
(WebCore::RenderWidget::paint): do not paint contents for content-visibility: hidden
* Source/WebCore/rendering/style/RenderStyle.h:
(WebCore::RenderStyle::effectiveSkipsContent const):
(WebCore::RenderStyle::setEffectiveSkipsContent):
* Source/WebCore/rendering/style/StyleRareInheritedData.cpp:
(WebCore::StyleRareInheritedData::StyleRareInheritedData):
(WebCore::StyleRareInheritedData::operator== const):
* Source/WebCore/rendering/style/StyleRareInheritedData.h:
* Source/WebCore/style/StyleAdjuster.cpp:
(WebCore::Style::Adjuster::adjust const):

Canonical link: https://commits.webkit.org/256186@main




More information about the webkit-changes mailing list