Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 8a311faa00bdeeb5197a3f3c7b4fdcb8fc3587e8
https://github.com/WebKit/WebKit/commit/8a311faa00bdeeb5197a3f3c7b4fdcb8fc3587e8
Author: Said Abou-Hallawa <[email protected]>
Date: 2026-10-10 (Sat, 10 Oct 2026)
Changed paths:
M Source/WebCore/dom/Element.cpp
M Source/WebCore/dom/Element.h
M Source/WebCore/dom/ElementInlines.h
M Source/WebCore/html/HTMLAttributeNames.in
M Source/WebCore/html/HTMLCanvasElement.cpp
M Source/WebCore/html/HTMLCanvasElement.h
M Source/WebCore/html/HTMLElement.cpp
M Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp
M Source/WebCore/rendering/RenderElement.cpp
M Source/WebCore/rendering/RenderElement.h
M Source/WebCore/rendering/RenderElementStyleInlines.h
M Source/WebCore/rendering/RenderHTMLCanvas.cpp
M Source/WebCore/rendering/RenderHTMLCanvas.h
M Source/WebCore/rendering/RenderLayer.cpp
M Source/WebCore/rendering/RenderLayerCompositor.cpp
M Source/WebCore/style/StyleAdjuster.cpp
Log Message:
-----------
[HTML-in-Canvas] Add drawable attribute to Element
https://bugs.webkit.org/show_bug.cgi?id=325991
rdar://188940346
Reviewed by Taher Ali and Cameron McCormack.
The specs[1] require the `drawable` attribute on <canvas> descendants for
drawing.
Without it, the element's drawing isn't recorded, and any drawElementImage()
call
for that element fails.
The drawable attribute makes the <canvas> descendant a containing block for all
of its descendants. This change sets up the style-related side effects of being
a stacking context.
This change also moves the recording of the RenderHTMLCanvas descendant out of
paintReplaced() and out into the descendant's RenderLayer::paintLayer. But
RenderHTMLCanvas still manages the recorders of the drawable descendants.
[1]: https://github.com/WICG/html-in-canvas
* Source/WebCore/dom/Element.h:
* Source/WebCore/dom/ElementInlines.h:
(WebCore::Element::isDrawable const):
(WebCore::Element::isCanvasDrawable const):
* Source/WebCore/html/HTMLAttributeNames.in:
* Source/WebCore/html/HTMLElement.cpp:
(WebCore::HTMLElement::attributeChanged):
* Source/WebCore/rendering/RenderElement.h:
* Source/WebCore/rendering/RenderElementStyleInlines.h:
(WebCore::RenderElement::isDrawable const):
(WebCore::RenderElement::isCanvasDrawable const):
* Source/WebCore/rendering/RenderHTMLCanvas.cpp:
(WebCore::RenderHTMLCanvas::paintReplaced):
(WebCore::RenderHTMLCanvas::hasDrawableContent const):
(WebCore::RenderHTMLCanvas::canHaveChildren const):
(WebCore::RenderHTMLCanvas::drawableRendererRecorder const):
(WebCore::RenderHTMLCanvas::drawableRendererSnapshot const):
(WebCore::RenderHTMLCanvas::canvasDrawableRecorder const):
(WebCore::RenderHTMLCanvas::canvasDrawableSnapshot const):
(WebCore::RenderHTMLCanvas::layout):
* Source/WebCore/rendering/RenderElement.cpp:
(WebCore::RenderElement::paintOrRecord):
(WebCore::RenderElement::paintAsInlineBlock):
(WebCore::RenderElement::layerCreationAllowedForSubtree const):
(WebCore::RenderElement::nearestDrawableCanvas const):
(WebCore::RenderElement::drawableCanvas const):
* Source/WebCore/rendering/RenderHTMLCanvas.h:
* Source/WebCore/style/StyleAdjuster.cpp:
(WebCore::Style::shouldTreatAutoZIndexAsZero):
(WebCore::Style::Adjuster::adjustFromBuilder):
(WebCore::Style::Adjuster::adjust const):
* Source/WebCore/rendering/RenderLayer.cpp:
(WebCore::RenderLayer::paintLayer):
(WebCore::paintRecorder):
(WebCore::canvasDrawableRecorder):
* Source/WebCore/rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::canBeComposited const):
* Source/WebCore/dom/Element.cpp:
(WebCore::Element::nearestCanvasAncestor const):
(WebCore::Element::isCanvasDrawable const):
* Source/WebCore/html/HTMLCanvasElement.cpp:
(WebCore::HTMLCanvasElement::hasDrawableContent const):
(WebCore::HTMLCanvasElement::canvasDrawableSnapshot const):
(WebCore::HTMLCanvasElement::captureElementImage):
(WebCore::HTMLCanvasElement::drawableElementSnapshot const): Deleted.
* Source/WebCore/html/HTMLCanvasElement.h:
* Source/WebCore/html/canvas/CanvasRenderingContext2DBase.cpp:
(WebCore::CanvasRenderingContext2DBase::drawElementImage):
Canonical link: https://commits.webkit.org/323295@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications