Changeset 289617 in webkit


Ignore:
Timestamp:
Feb 11, 2022 4:47:17 AM (5 months ago)
Author:
Antti Koivisto
Message:

[CSS Container Queries] Implement container name matching
https://bugs.webkit.org/show_bug.cgi?id=236495

Reviewed by Tim Nguyen.

LayoutTests/imported/w3c:

  • web-platform-tests/css/css-contain/container-queries/container-name-invalidation-expected.txt:
  • web-platform-tests/css/css-contain/container-queries/container-selection-expected.txt:

Source/WebCore:

Find the right container to evaluate against.

  • style/ContainerQueryEvaluator.cpp:

(WebCore::Style::ContainerQueryEvaluator::evaluate const):

Location:
trunk
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/LayoutTests/imported/w3c/ChangeLog

    r289615 r289617  
     12022-02-11  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Container Queries] Implement container name matching
     4        https://bugs.webkit.org/show_bug.cgi?id=236495
     5
     6        Reviewed by Tim Nguyen.
     7
     8        * web-platform-tests/css/css-contain/container-queries/container-name-invalidation-expected.txt:
     9        * web-platform-tests/css/css-contain/container-queries/container-selection-expected.txt:
     10
    1112022-02-11  Andreu Botella  <andreu@andreubotella.com>
    212
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/container-queries/container-name-invalidation-expected.txt

    r289222 r289617  
    11Test
    22
    3 FAIL Changing a named container invalidates relevant descendants assert_equals: expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)"
    4 FAIL Changing container-name invalidates relevant descendants assert_equals: expected "rgb(0, 128, 0)" but got "rgb(0, 0, 0)"
     3PASS Changing a named container invalidates relevant descendants
     4FAIL Changing container-name invalidates relevant descendants assert_equals: expected "rgb(0, 0, 0)" but got "rgb(0, 128, 0)"
    55
  • trunk/LayoutTests/imported/w3c/web-platform-tests/css/css-contain/container-queries/container-selection-expected.txt

    r289222 r289617  
    1313PASS name(c) size(width) for .a-size > .b-size > span
    1414FAIL name(a) size(width: 16px) for .a-size > .a-size > span assert_equals: expected "true" but got ""
    15 FAIL a size(width: 32px) for .a-size > .b-size > span assert_equals: expected "true" but got ""
     15PASS a size(width: 32px) for .a-size > .b-size > span
    1616PASS b size(width: 16px) for .a-size > .b-size > span
    17 FAIL c size(width) for .a-size > .b-size > span assert_equals: expected "" but got "true"
     17PASS c size(width) for .a-size > .b-size > span
    1818PASS a size(width: 16px) for .a-size > .a-size > span
    1919PASS a size(width: 32px) for .a-size > .a > span
  • trunk/Source/WebCore/ChangeLog

    r289616 r289617  
     12022-02-11  Antti Koivisto  <antti@apple.com>
     2
     3        [CSS Container Queries] Implement container name matching
     4        https://bugs.webkit.org/show_bug.cgi?id=236495
     5
     6        Reviewed by Tim Nguyen.
     7
     8        Find the right container to evaluate against.
     9
     10        * style/ContainerQueryEvaluator.cpp:
     11        (WebCore::Style::ContainerQueryEvaluator::evaluate const):
     12
    1132022-02-11  Tim Nguyen  <ntim@apple.com>
    214
  • trunk/Source/WebCore/style/ContainerQueryEvaluator.cpp

    r289252 r289617  
    6565        return false;
    6666
    67     // FIXME: Match the container selector.
    68     auto* renderer = m_containers.last()->renderer();
     67    auto rendererForContainerSelector = [&]() -> RenderBox* {
     68        for (auto& container : makeReversedRange(m_containers)) {
     69            auto* renderer = dynamicDowncast<RenderBox>(container->renderer());
     70            if (!renderer)
     71                return nullptr;
     72            if (containerQuery.containerName.isEmpty())
     73                return renderer;
     74            if (renderer->style().containerNames().contains(containerQuery.containerName))
     75                return renderer;
     76        }
     77        return nullptr;
     78    };
     79
     80    auto* renderer = rendererForContainerSelector();
    6981    if (!renderer)
    7082        return false;
     
    7587    auto evaluateSize = [&](const MediaQueryExpression& expression, Comparator comparator, auto&& sizeGetter)
    7688    {
    77         if (!is<RenderBox>(renderer))
    78             return false;
    79 
    8089        std::optional<LayoutUnit> expressionSize;
    8190
     
    8695        }
    8796
    88         auto size = sizeGetter(downcast<RenderBox>(*renderer));
     97        auto size = sizeGetter(*renderer);
    8998
    9099        switch (comparator) {
Note: See TracChangeset for help on using the changeset viewer.