[webkit-changes] [WebKit/WebKit] 88587e: Support contain-intrinsic-size auto && <length>

cathiechen noreply at github.com
Mon Feb 20 04:48:31 PST 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 88587e7bd5451f3504cfc7576d2f7617ab1b7cf8
      https://github.com/WebKit/WebKit/commit/88587e7bd5451f3504cfc7576d2f7617ab1b7cf8
  Author: Cathie Chen <cathiechen at igalia.com>
  Date:   2023-02-20 (Mon, 20 Feb 2023)

  Changed paths:
    M LayoutTests/TestExpectations
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-005-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-007-expected.txt
    M LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-008-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/css/css-sizing/contain-intrinsic-size/auto-011-expected.txt
    A LayoutTests/resize-observer/contain-instrinsic-size-should-not-leak-nodes-expected.txt
    A LayoutTests/resize-observer/contain-instrinsic-size-should-not-leak-nodes.html
    M Source/WebCore/dom/ContainerNode.cpp
    M Source/WebCore/dom/Document.cpp
    M Source/WebCore/dom/Document.h
    M Source/WebCore/page/ResizeObservation.cpp
    M Source/WebCore/page/ResizeObservation.h
    M Source/WebCore/page/ResizeObserver.cpp
    M Source/WebCore/page/ResizeObserver.h
    M Source/WebCore/rendering/style/RenderStyle.h
    M Source/WebCore/rendering/updating/RenderTreeUpdater.cpp

  Log Message:
  -----------
  Support contain-intrinsic-size auto && <length>
https://bugs.webkit.org/show_bug.cgi?id=239450

Reviewed by Oriol Brufau.

This patch adds support to value auto && <length> for contain-intrinsic-size. Per [1], with the auto && <length> value,
the last remembered size is the explicit intrinsic size if the box is skipping its content.
The last remembered size is determined when ResizeObserver events are delivered. m_resizeObserverForContainIntrinsicSize
in Document is created specifically to handle the last remembered size. CallbackForContainIntrinsicSize in Document is
used to handle the lastRememberedSize. Because this ResizeObserver is for inside use, so we create a interface
NativeResizeObserverCallback for native use. Now in ResizeObserver there are two kinds of callbacks:
JSResizeObserverCallback and NativeResizeObserverCallback, only one could be initialized.
The resizeObserver would observe the target if contain-intrinsic-size is valued auto && <length>, otherwise unobserve
it and clear the lastRememberedSize. If an observed target is hidden or skipping its content, unobserve it. Similarly,
if an observed target is removed from DOM tree, unobserve it and clear the lastRememberedSize.

[1] https://www.w3.org/TR/css-sizing-4/#valdef-contain-intrinsic-width-auto--length

* LayoutTests/TestExpectations:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-005-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-007-expected.txt:
* LayoutTests/imported/w3c/web-platform-tests/css/css-sizing/contain-intrinsic-size/auto-008-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/css/css-sizing/contain-intrinsic-size/auto-011-expected.txt:
* LayoutTests/resize-observer/contain-instrinsic-size-should-not-leak-nodes-expected.txt: Added.
* LayoutTests/resize-observer/contain-instrinsic-size-should-not-leak-nodes.html: Added.
* Source/WebCore/dom/ContainerNode.cpp:
(WebCore::ContainerNode::removeChild):
* Source/WebCore/dom/Document.cpp:
(WebCore::CallbackForContainIntrinsicSize):
(WebCore::Document::gatherResizeObservationsForContainIntrinsicSize):
(WebCore::Document::deliverResizeObservations):
(WebCore::Document::updateResizeObservations):
(WebCore::Document::ensureResizeObserverForContainIntrinsicSize):
(WebCore::Document::observeForContainIntrinsicSize):
(WebCore::Document::unobserveForContainIntrinsicSize):
(WebCore::Document::resetObservationSizeForContainIntrinsicSize):
* Source/WebCore/dom/Document.h:
* Source/WebCore/page/ResizeObservation.cpp:
(WebCore::ResizeObservation::resetObservationSize):
* Source/WebCore/page/ResizeObservation.h:
* Source/WebCore/page/ResizeObserver.cpp:
(WebCore::ResizeObserver::create):
(WebCore::ResizeObserver::createNativeObserver):
(WebCore::ResizeObserver::ResizeObserver):
(WebCore::ResizeObserver::observeInternal):
(WebCore::ResizeObserver::observe):
(WebCore::ResizeObserver::deliverObservations):
(WebCore::ResizeObserver::isJSCallback):
(WebCore::ResizeObserver::isNativeCallback):
(WebCore::ResizeObserver::callbackConcurrently):
(WebCore::ResizeObserver::resetObservationSize):
* Source/WebCore/page/ResizeObserver.h:
(WebCore::ResizeObserver::callbackConcurrently): Deleted.
* Source/WebCore/rendering/style/RenderStyle.h:
(WebCore::RenderStyle::hasAutoLengthContainIntrinsicSize const):
* Source/WebCore/rendering/updating/RenderTreeUpdater.cpp:
(WebCore::RenderTreeUpdater::updateElementRenderer):

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




More information about the webkit-changes mailing list