Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 4dcc225071c9dad4c6d86fbb4e461f6349c91f1d
https://github.com/WebKit/WebKit/commit/4dcc225071c9dad4c6d86fbb4e461f6349c91f1d
Author: Etienne Segonzac <[email protected]>
Date: 2026-08-04 (Tue, 04 Aug 2026)
Changed paths:
M LayoutTests/spatial-css/resources/spatial-portal-utils.js
A LayoutTests/spatial-css/spatial-portal-transform-auto-dynamic-expected.txt
A LayoutTests/spatial-css/spatial-portal-transform-auto-dynamic.html
A LayoutTests/spatial-css/spatial-portal-transform-auto-expected.txt
A LayoutTests/spatial-css/spatial-portal-transform-auto.html
A LayoutTests/spatial-css/spatial-portal-transform-none-expected.txt
A LayoutTests/spatial-css/spatial-portal-transform-none.html
A LayoutTests/spatial-css/spatial-portal-transform-off-expected.txt
A LayoutTests/spatial-css/spatial-portal-transform-off.html
A
LayoutTests/spatial-css/spatial-portal-transform-parsing-expected.txt
A LayoutTests/spatial-css/spatial-portal-transform-parsing.html
M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
M Source/WebCore/Headers.cmake
M Source/WebCore/Modules/model-element/HTMLModelElement.h
M Source/WebCore/Modules/model-element/ModelPlayer.cpp
M Source/WebCore/Modules/model-element/ModelPlayer.h
M Source/WebCore/Modules/model-element/ModelPlayerClient.h
A Source/WebCore/Modules/model-element/PortalTransform.h
M Source/WebCore/Modules/model-element/SpatialPortalController.cpp
M Source/WebCore/Modules/model-element/SpatialPortalController.h
M Source/WebCore/Sources.txt
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/css/CSSProperties.json
M Source/WebCore/rendering/RenderBox.cpp
M Source/WebCore/rendering/RenderLayerBacking.cpp
M Source/WebCore/style/computed/StyleComputedStyleBase.h
M
Source/WebCore/style/computed/data/StyleNonInheritedRareData.cpp
M Source/WebCore/style/computed/data/StyleNonInheritedRareData.h
A Source/WebCore/style/values/transforms/StylePortalTransform.cpp
A Source/WebCore/style/values/transforms/StylePortalTransform.h
M Source/WebCore/testing/Internals.cpp
M Source/WebCore/testing/Internals.h
M Source/WebCore/testing/Internals.idl
M Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h
M Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.messages.in
M Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm
M Source/WebKit/Scripts/webkit/messages.py
M Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in
M Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp
M Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.h
M Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.messages.in
Log Message:
-----------
Add initial
`portal-transform` support
https://bugs.webkit.org/show_bug.cgi?id=320915
<rdar://182292321>
Reviewed by Mike Wyrzykowski.
Add initial support `portal-transform` support to Spatial Portals. For
now just auto / none to expose the "auto fit" behavior.
Tests: spatial-css/spatial-portal-transform-auto-dynamic.html
spatial-css/spatial-portal-transform-auto.html
spatial-css/spatial-portal-transform-none.html
spatial-css/spatial-portal-transform-off.html
spatial-css/spatial-portal-transform-parsing.html
* LayoutTests/spatial-css/resources/spatial-portal-utils.js:
(const.createPortal):
(const.portalTransformsApproxEqual):
(async waitForPortalTransform):
* LayoutTests/spatial-css/spatial-portal-transform-auto-dynamic-expected.txt:
Added.
* LayoutTests/spatial-css/spatial-portal-transform-auto-dynamic.html: Added.
* LayoutTests/spatial-css/spatial-portal-transform-auto-expected.txt: Added.
*
LayoutTests/spatial-css/spatial-portal-transform-auto.html: Added.
* LayoutTests/spatial-css/spatial-portal-transform-none-expected.txt: Added.
* LayoutTests/spatial-css/spatial-portal-transform-none.html: Added.
* LayoutTests/spatial-css/spatial-portal-transform-off-expected.txt: Added.
* LayoutTests/spatial-css/spatial-portal-transform-off.html: Added.
* LayoutTests/spatial-css/spatial-portal-transform-parsing-expected.txt: Added.
* LayoutTests/spatial-css/spatial-portal-transform-parsing.html: Added.
Add a new batch of tests covering the portal-transform property, dynamic
toggle and adding/removing nested models.
* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
Make sure we can flag the new IPC call with
`[EnabledBy=SpatialPortalEnabled]`.
* Source/WebCore/Sources.txt:
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/css/CSSProperties.json:
* Source/WebCore/Headers.cmake:
*
Source/WebCore/style/computed/StyleComputedStyleBase.h:
* Source/WebCore/style/computed/data/StyleNonInheritedRareData.cpp:
(WebCore::Style::portalTransform):
(WebCore::Style::NonInheritedRareData::NonInheritedRareData):
(WebCore::Style::NonInheritedRareData::operator== const):
(WebCore::Style::NonInheritedRareData::dumpDifferences const):
* Source/WebCore/style/computed/data/StyleNonInheritedRareData.h:
* Source/WebCore/style/values/transforms/StylePortalTransform.cpp: Added.
(WebCore::Style::CSSValueConversion<PortalTransform>::operator):
* Source/WebCore/style/values/transforms/StylePortalTransform.h: Added.
(WebCore::Style::PortalTransform::PortalTransform):
(WebCore::Style::PortalTransform::switchOn const):
* Source/WebCore/Modules/model-element/PortalTransform.h: Added.
* Source/WebKit/Scripts/webkit/messages.py:
(headers_for_type):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
Add the `portal-transform` CSS property, defaults to `auto`.
*
Source/WebCore/Modules/model-element/HTMLModelElement.h:
* Source/WebCore/Modules/model-element/ModelPlayer.cpp:
(WebCore::ModelPlayer::setPortalTransform):
* Source/WebCore/Modules/model-element/ModelPlayer.h:
* Source/WebCore/Modules/model-element/ModelPlayerClient.h:
* Source/WebCore/Modules/model-element/SpatialPortalController.cpp:
(WebCore::SpatialPortalController::ensureModelPlayer):
(WebCore::SpatialPortalController::setPortalTransform):
(WebCore::SpatialPortalController::deleteModelPlayer):
(WebCore::SpatialPortalController::sizeMayHaveChanged):
(WebCore::SpatialPortalController::modelDidUpdatePortalTransform):
* Source/WebCore/Modules/model-element/SpatialPortalController.h:
(WebCore::SpatialPortalController::resolvedPortalTransform const):
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::portalTransformKind):
(WebCore::RenderBox::styleDidChange):
* Source/WebCore/rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateGeometry):
*
Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp:
(WebKit::ModelProcessModelPlayer::didUpdatePortalTransform):
(WebKit::ModelProcessModelPlayer::setPortalTransform):
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.h:
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.messages.in:
Wire the `portal-transform` property and formalize the portal transform
concept with its own IPC.
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h:
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.messages.in:
*
Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm:
(WebKit::computeUnfittedSRT):
(WebKit::ModelProcessModelPlayerProxy::modelStandardizedTransformSRT):
(WebKit::ModelProcessModelPlayerProxy::modelLocalizedTransformSRT):
(WebKit::ModelProcessModelPlayerProxy::computeTransform):
(WebKit::ModelProcessModelPlayerProxy::notifyModelPlayerOfTransformChange):
(WebKit::ModelProcessModelPlayerProxy::notifyModelPlayerOfEntityTransformChange):
Deleted.
Renamed now that is handles entity and global transforms.
(WebKit::ModelProcessModelPlayerProxy::didFinishLoading):
(WebKit::ModelProcessModelPlayerProxy::setPortalTransform):
(WebKit::ModelProcessModelPlayerProxy::updateTransformSRT):
In parallel of standalone model concerns (StageMode, Immersive etc...),
clearly skip the "auto fit" behavior on Spatial Portals when the
`spatial-transform` is set to `none`.
This keeps the model at true scale but still positions it "behind the
glass".
*
Source/WebCore/testing/Internals.cpp:
(WebCore::Internals::spatialPortalResolvedTransform):
* Source/WebCore/testing/Internals.h:
* Source/WebCore/testing/Internals.idl:
Expose the computed portal transform to tests. Still debating how to
expose it to Web Content in general.
Canonical link:
https://flagged.apple.com:443/proxy?t2=Do3V9e9sp9&o=aHR0cHM6Ly9jb21taXRzLndlYmtpdC5vcmcvMzE4NTM2QG1haW4=&emid=6e7b4653-90f7-4511-adb5-6df29df9ff84&c=11
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications