[webkit-changes] [WebKit/WebKit] 48d3a2: [Cocoa] Continue fine-tuning fixed-position page s...

Wenson Hsieh noreply at github.com
Tue Mar 11 23:08:51 PDT 2025


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 48d3a2b6aeb68c595ab0a00d54828145095e09c6
      https://github.com/WebKit/WebKit/commit/48d3a2b6aeb68c595ab0a00d54828145095e09c6
  Author: Wenson Hsieh <wenson_hsieh at apple.com>
  Date:   2025-03-11 (Tue, 11 Mar 2025)

  Changed paths:
    A LayoutTests/fast/page-color-sampling/color-sampling-ignores-non-fixed-content-expected.txt
    A LayoutTests/fast/page-color-sampling/color-sampling-ignores-non-fixed-content.html
    A LayoutTests/fast/page-color-sampling/color-sampling-ignores-text-expected.txt
    A LayoutTests/fast/page-color-sampling/color-sampling-ignores-text.html
    A LayoutTests/fast/page-color-sampling/color-sampling-includes-subframes-expected.txt
    A LayoutTests/fast/page-color-sampling/color-sampling-includes-subframes.html
    M Source/WebCore/page/FrameSnapshotting.cpp
    M Source/WebCore/page/FrameSnapshotting.h
    M Source/WebCore/page/LocalFrameView.cpp
    M Source/WebCore/page/PageColorSampler.cpp
    M Source/WebCore/page/TextIndicator.cpp
    M Source/WebCore/rendering/PaintPhase.h
    M Source/WebCore/rendering/RenderLayer.cpp
    M Source/WebCore/rendering/RenderReplaced.cpp
    M Source/WebCore/rendering/TextBoxPainter.cpp

  Log Message:
  -----------
  [Cocoa] Continue fine-tuning fixed-position page sampling heuristics
https://bugs.webkit.org/show_bug.cgi?id=289573
rdar://146801107

Reviewed by Abrar Rahman Protyasha.

Make various adjustments to the page color sampling heuristic. See below for more details.

* LayoutTests/fast/page-color-sampling/color-sampling-ignores-non-fixed-content-expected.txt: Added.
* LayoutTests/fast/page-color-sampling/color-sampling-ignores-non-fixed-content.html: Added.

Add a test to verify that sampling doesn't include content behind the fixed-position container, if
the fixed-position container is partially transparent.

* LayoutTests/fast/page-color-sampling/color-sampling-ignores-text-expected.txt: Added.
* LayoutTests/fast/page-color-sampling/color-sampling-ignores-text.html: Added.

Add a test to verify that text painting is skipped for the purposes of color sampling. To check
this, we include lots of white text inside an orange fixed-position container (with a fairly large
font size, and also decreased `letter-spacing` to maximize the likelihood of sampling the text). At
various offsets relative to the top of the viewport, the sampled color should always remain orange.

* LayoutTests/fast/page-color-sampling/color-sampling-includes-subframes-expected.txt: Added.
* LayoutTests/fast/page-color-sampling/color-sampling-includes-subframes.html: Added.

Add a test to verify that content inside subframes in fixed-position containers are included in the
sampled color.

* Source/WebCore/page/FrameSnapshotting.cpp:
(WebCore::snapshotFrameRectWithClip):
* Source/WebCore/page/FrameSnapshotting.h:

Make several changes to the frame snapshotting flags:

•   `ExcludeReplacedContent`: rename this to `ExcludeReplacedContentExceptForIFrames`. Adjust
    `RenderReplaced::shouldPaint` below to avoid bailing for subframes.

•   `ExcludeText`: add a flag to exclude text from being painted in the snapshot. This is passed
    down as a `PaintBehavior` flag, and eventually checked in `TextBoxPainter::paint`.

•   `FixedAndStickyLayersOnly`: add a flag to limit painting to content in fixed and sticky layers,
    or layers underneath fixed layers. Add a FIXME to include layers inside sticky layers, once we
    have the ability to (quickly) check if we have a sticky ancestor.

* Source/WebCore/page/LocalFrameView.cpp:
(WebCore::LocalFrameView::willPaintContents):
* Source/WebCore/page/PageColorSampler.cpp:
(WebCore::PageColorSampler::predominantColor):

If the sampled color is close to being totally transparent, revert to returning an invalid color.

* Source/WebCore/page/TextIndicator.cpp:
(WebCore::snapshotOptionsForTextIndicatorOptions):
* Source/WebCore/rendering/PaintPhase.h:
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::paintLayerContents):
(WebCore::RenderLayer::paintForegroundForFragments):
(WebCore::RenderLayer::calculateClipRects const):
* Source/WebCore/rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::paint):
* Source/WebCore/rendering/TextBoxPainter.cpp:
(WebCore::TextBoxPainter::paint):

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



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list