[Webkit-unassigned] [Bug 264989] New: [content-visibility] REGRESSION(267547 at main): Blank panels on bing.com (content-visibility: auto)
bugzilla-daemon at webkit.org
bugzilla-daemon at webkit.org
Thu Nov 16 15:55:33 PST 2023
https://bugs.webkit.org/show_bug.cgi?id=264989
Bug ID: 264989
Summary: [content-visibility] REGRESSION(267547 at main): Blank
panels on bing.com (content-visibility: auto)
Product: WebKit
Version: WebKit Nightly Build
Hardware: Unspecified
OS: Unspecified
Status: NEW
Keywords: InRadar
Severity: Normal
Priority: P2
Component: Layout and Rendering
Assignee: webkit-unassigned at lists.webkit.org
Reporter: ntim at apple.com
CC: bfulgham at webkit.org, rbuis at igalia.com,
simon.fraser at apple.com, zalan at apple.com
Created attachment 468635
--> https://bugs.webkit.org/attachment.cgi?id=468635&action=review
Test reduction (from Alan Baradlay)
rdar://116822168
Some notes from Alan:
Layer content is not getting painted due to stale m_visibleDescendantStatusDirty on the “un-skipped” (scrolled back to viewport) self-painting layer’s parent layer.
RenderElement::styleWillChange’s willBeVisible branch needs some more involved dirty-ing
<div id=A style="content-visibility: auto">
<div id=B style="position: relative;"></div>
</div>
1. When renderer (A) gets scrolled out, we call dirtyVisibleContentStatus() on its render layer (see RenderElement::styleWillChange)
2. It triggers computeHasVisibleContent() call: we compute its visibility status ‘visible’ (note that renderer().isSkippedContent() is false as this is the root of the skipped content and not the actual skipped content)
3. we also compute renderer (B)’s layer’s visibility status. It’s hidden as it is a “skipped content”.
4. Now when renderer (A) gets scrolled back in, RenderElement::styleWillChange calls setHasVisibleContent on RenderLayer(A) but its m_hasVisibleContent is already true (see #2) so we early return (which makes RenderLayer (B) stay hidden).
The bug here is that when the content gets scrolled back in, and we get the RenderElement::styleWillChange() call on the content-visibility block (A), we treat it as if this layer was hidden (i.e. when it initially got scrolled out), but the layer (renderer) is not hidden at all, its subtree is. The current invalidation is not sufficient (and incorrect) and instead we should call dirtyVisibleContentStatus().
--
You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20231116/da202c22/attachment.htm>
More information about the webkit-unassigned
mailing list