Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 03cc81b72b0cdaa1764ff13b80a025bea8a82b0d
https://github.com/WebKit/WebKit/commit/03cc81b72b0cdaa1764ff13b80a025bea8a82b0d
Author: Said Abou-Hallawa <[email protected]>
Date: 2026-09-21 (Mon, 21 Sep 2026)
Changed paths:
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/html/HTMLCanvasElement.cpp
M Source/WebCore/rendering/RenderHTMLCanvas.cpp
M Source/WebCore/rendering/RenderHTMLCanvas.h
M Source/WebCore/rendering/RenderReplaced.cpp
M Source/WebCore/rendering/updating/RenderTreeBuilder.cpp
M Source/WebCore/rendering/updating/RenderTreeBuilder.h
A Source/WebCore/rendering/updating/RenderTreeBuilderCanvas.cpp
A Source/WebCore/rendering/updating/RenderTreeBuilderCanvas.h
Log Message:
-----------
[HTML-in-Canvas] Support the HTMLCanvasElement attribute layoutsubtree
https://bugs.webkit.org/show_bug.cgi?id=316243
rdar://187645228
Reviewed by Cameron McCormack.
When the layoutsubtree attribute is present, RenderHTMLCanvas needs its children
to participate in layout, painting, and hit-testing.
This change makes that happen: the canvas's children are now routed through
layout,
painting, and hit-testing, and are visible and interactive if needed. This is an
intermediate stage, and it's safe because support for the `layoutsubtree`
attribute
is gated behind the HTMLInCanvasEnabled feature flag, which is off by default.
To make it easier to manage the canvas's DOM hierarchy, an anonymous RenderBlock
will be created to serve as the root of all descendants of the
HTMLCanvasElement.
In a future change, these descendants will instead only record their drawing
into
DisplayLists. At that point they will no longer be visible or active on their
own — they'll only appear once drawn onto the canvas via the drawElementImage()
canvas API.
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::canStartSelection const):
(WebCore::HTMLCanvasElement::attributeChanged):
* Source/WebCore/rendering/RenderHTMLCanvas.cpp:
(WebCore::RenderHTMLCanvas::setInnerRenderer):
(WebCore::RenderHTMLCanvas::canHaveChildren const):
(WebCore::RenderHTMLCanvas::layout):
(WebCore::RenderHTMLCanvas::paintReplaced):
(WebCore::RenderHTMLCanvas::nodeAtPoint):
* Source/WebCore/rendering/RenderHTMLCanvas.h:
* Source/WebCore/rendering/updating/RenderTreeBuilder.cpp:
(WebCore::RenderTreeBuilder::RenderTreeBuilder):
(WebCore::RenderTreeBuilder::attachInternal):
(WebCore::RenderTreeBuilder::detach):
* Source/WebCore/rendering/updating/RenderTreeBuilder.h:
* Source/WebCore/rendering/updating/RenderTreeBuilderCanvas.cpp: Added.
(WebCore::RenderTreeBuilder::Canvas::Canvas):
(WebCore::RenderTreeBuilder::Canvas::attach):
(WebCore::RenderTreeBuilder::Canvas::findOrCreateParentForChild):
(WebCore::RenderTreeBuilder::Canvas::detach):
* Source/WebCore/rendering/updating/RenderTreeBuilderCanvas.h: Added.
* Source/WebCore/rendering/RenderReplaced.cpp:
(WebCore::RenderReplaced::paint):
(WebCore::RenderReplaced::shouldPaint):
Canonical link: https://commits.webkit.org/321575@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications