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

Reply via email to