Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 4490cd9a89cc244a137d6b0cea780e61b76dbe12
https://github.com/WebKit/WebKit/commit/4490cd9a89cc244a137d6b0cea780e61b76dbe12
Author: Aleksei Marchenko <[email protected]>
Date: 2026-08-21 (Fri, 21 Aug 2026)
Changed paths:
M LayoutTests/spatial-css/resources/spatial-portal-utils.js
A LayoutTests/spatial-css/spatial-portal-model-entity-transform-expected.txt
A LayoutTests/spatial-css/spatial-portal-model-entity-transform.html
A LayoutTests/spatial-css/spatial-portal-model-transform-expected.txt
A
LayoutTests/spatial-css/spatial-portal-model-transform-transition-expected.txt
A LayoutTests/spatial-css/spatial-portal-model-transform-transition.html
A
LayoutTests/spatial-css/spatial-portal-model-transform-unsupported-expected.txt
A LayoutTests/spatial-css/spatial-portal-model-transform-unsupported.html
A LayoutTests/spatial-css/spatial-portal-model-transform.html
M LayoutTests/spatial-css/spatial-portal-nested-model-stagemode-expected.txt
M LayoutTests/spatial-css/spatial-portal-nested-model-stagemode.html
M LayoutTests/spatial-css/spatial-portal-transform-auto-expected.txt
M LayoutTests/spatial-css/spatial-portal-transform-auto.html
M LayoutTests/spatial-css/spatial-portal-transform-none-expected.txt
M LayoutTests/spatial-css/spatial-portal-transform-none.html
M Source/WebCore/Modules/model-element/HTMLModelElement.cpp
M Source/WebCore/Modules/model-element/HTMLModelElement.h
M Source/WebCore/Modules/model-element/SpatialPortalController.cpp
M Source/WebCore/Modules/model-element/SpatialPortalController.h
M Source/WebCore/animation/KeyframeEffect.cpp
M Source/WebCore/dom/Element.cpp
M Source/WebCore/rendering/updating/RenderTreeUpdater.cpp
M Source/WebCore/style/StyleTransformResolver.cpp
M Source/WebCore/style/StyleTransformResolver.h
M Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h
M Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm
M Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp
Log Message:
-----------
Support per-child entity transforms for <model> inside a spatial portal
https://bugs.webkit.org/show_bug.cgi?id=322166
rdar://182292326
Reviewed by Mike Wyrzykowski.
CSS transform/translate/rotate/scale on a <model> nested in a spatial: portal
now drive that child's entity, composed as (CSS) x (asset's original scale),
CSS outermost. The container still owns auto-fit, stage mode and
portal-transform, and a child's transform stays out of the auto containing
volume. Translations convert from CSS px to meters with pointsPerMeter,
and are deliberately not divided out of the container's scale: a child
sits inside the back spatial context, so portal-transform fits its position
along with its size.
CSS wins for a nested child: entityTransform throws InvalidStateError while a
CSS transform applies, and CSS overrides one set through the attribute.
stagemode no longer blocks entityTransform in a portal -- it drives the
container, this drives the child. Non-uniform and shearing transforms are
refused, keeping the last accepted one.
Such a child has no renderer, so RenderTreeUpdater keeps its resolved style,
Element::renderOrDisplayContentsStyle() returns it, and
KeyframeEffect::ticksContinuouslyWhileActive() keeps ticking without one;
otherwise transitions only snap.
Tests: spatial-css/spatial-portal-model-entity-transform.html
spatial-css/spatial-portal-model-transform-transition.html
spatial-css/spatial-portal-model-transform-unsupported.html
spatial-css/spatial-portal-model-transform.html
* LayoutTests/spatial-css/resources/spatial-portal-utils.js:
* LayoutTests/spatial-css/spatial-portal-model-entity-transform-expected.txt:
Added.
* LayoutTests/spatial-css/spatial-portal-model-entity-transform.html: Added.
* LayoutTests/spatial-css/spatial-portal-model-transform-expected.txt: Added.
*
LayoutTests/spatial-css/spatial-portal-model-transform-transition-expected.txt:
Added.
* LayoutTests/spatial-css/spatial-portal-model-transform-transition.html: Added.
*
LayoutTests/spatial-css/spatial-portal-model-transform-unsupported-expected.txt:
Added.
* LayoutTests/spatial-css/spatial-portal-model-transform-unsupported.html:
Added.
* LayoutTests/spatial-css/spatial-portal-model-transform.html: Added.
* LayoutTests/spatial-css/spatial-portal-nested-model-stagemode-expected.txt:
* LayoutTests/spatial-css/spatial-portal-nested-model-stagemode.html:
* LayoutTests/spatial-css/spatial-portal-transform-auto-expected.txt:
* LayoutTests/spatial-css/spatial-portal-transform-auto.html:
* LayoutTests/spatial-css/spatial-portal-transform-none-expected.txt:
* LayoutTests/spatial-css/spatial-portal-transform-none.html:
* Source/WebCore/Modules/model-element/HTMLModelElement.cpp:
(WebCore::HTMLModelElement::effectiveModelPlayer const):
(WebCore::HTMLModelElement::updateEntityTransformFromCSS):
(WebCore::HTMLModelElement::didUpdateEntityTransformInsidePortal):
(WebCore::HTMLModelElement::setEntityTransform):
(WebCore::HTMLModelElement::setPlaybackRate):
(WebCore::HTMLModelElement::duration const):
(WebCore::HTMLModelElement::paused const):
(WebCore::HTMLModelElement::setPaused):
(WebCore::HTMLModelElement::updateAutoplay):
(WebCore::HTMLModelElement::updateLoop):
(WebCore::HTMLModelElement::currentTime const):
(WebCore::HTMLModelElement::setCurrentTime):
(WebCore::HTMLModelElement::modelPlayerForAnimation const): Deleted.
* Source/WebCore/Modules/model-element/HTMLModelElement.h:
* Source/WebCore/Modules/model-element/SpatialPortalController.cpp:
(WebCore::SpatialPortalController::loadChildModelIfReady):
(WebCore::SpatialPortalController::childTransformDidChange):
* Source/WebCore/Modules/model-element/SpatialPortalController.h:
* Source/WebCore/animation/KeyframeEffect.cpp:
(WebCore::KeyframeEffect::ticksContinuouslyWhileActive const):
* Source/WebCore/dom/Element.cpp:
(WebCore::Element::storeDisplayContentsOrNoneStyle):
(WebCore::Element::renderOrDisplayContentsStyle const):
* Source/WebCore/rendering/updating/RenderTreeUpdater.cpp:
(WebCore::RenderTreeUpdater::updateElementRenderer):
* Source/WebCore/style/StyleTransformResolver.cpp:
(WebCore::Style::TransformResolver::hasTransformRelatedProperty):
* Source/WebCore/style/StyleTransformResolver.h:
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h:
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm:
(WebKit::ModelProcessModelPlayerProxy::childEntityTransformSRT const):
(WebKit::ModelProcessModelPlayerProxy::updateTransform):
(WebKit::ModelProcessModelPlayerProxy::didFinishLoading):
(WebKit::ModelProcessModelPlayerProxy::setEntityTransform):
(WebKit::ModelProcessModelPlayerProxy::setPortalTransform):
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp:
(WebKit::ModelProcessModelPlayer::setPortalTransform):
Canonical link: https://commits.webkit.org/319629@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications