Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 6daf3354b443781966cd5717c06f7e9cc2a824d3
https://github.com/WebKit/WebKit/commit/6daf3354b443781966cd5717c06f7e9cc2a824d3
Author: Etienne Segonzac <[email protected]>
Date: 2026-08-11 (Tue, 11 Aug 2026)
Changed paths:
M LayoutTests/spatial-css/resources/spatial-portal-utils.js
A LayoutTests/spatial-css/spatial-portal-action-dynamic-expected.txt
A LayoutTests/spatial-css/spatial-portal-action-dynamic.html
A LayoutTests/spatial-css/spatial-portal-action-expected.txt
A LayoutTests/spatial-css/spatial-portal-action-multi-model-expected.txt
A LayoutTests/spatial-css/spatial-portal-action-multi-model.html
A LayoutTests/spatial-css/spatial-portal-action-off-expected.txt
A LayoutTests/spatial-css/spatial-portal-action-off.html
A LayoutTests/spatial-css/spatial-portal-action-parsing-expected.txt
A LayoutTests/spatial-css/spatial-portal-action-parsing.html
A
LayoutTests/spatial-css/spatial-portal-action-requires-auto-transform-expected.txt
A LayoutTests/spatial-css/spatial-portal-action-requires-auto-transform.html
A LayoutTests/spatial-css/spatial-portal-action.html
A
LayoutTests/spatial-css/spatial-portal-determines-if-scroll-gesture-updates-position-information-expected.txt
A
LayoutTests/spatial-css/spatial-portal-determines-if-scroll-gesture-updates-position-information.html
A LayoutTests/spatial-css/spatial-portal-nested-model-stagemode-expected.txt
A LayoutTests/spatial-css/spatial-portal-nested-model-stagemode.html
M Source/WebCore/Headers.cmake
M Source/WebCore/Modules/model-element/HTMLModelElement.cpp
M Source/WebCore/Modules/model-element/HTMLModelElement.h
M Source/WebCore/Modules/model-element/ModelPlayer.cpp
M Source/WebCore/Modules/model-element/ModelPlayer.h
A Source/WebCore/Modules/model-element/PortalAction.h
M Source/WebCore/Modules/model-element/SpatialPortalController.cpp
M Source/WebCore/Modules/model-element/SpatialPortalController.h
M Source/WebCore/WebCore.xcodeproj/project.pbxproj
M Source/WebCore/css/CSSProperties.json
M Source/WebCore/css/CSSValueKeywords.in
M Source/WebCore/dom/Element.cpp
M Source/WebCore/dom/Element.h
M Source/WebCore/page/ios/EventHandlerIOS.mm
M Source/WebCore/rendering/RenderBox.cpp
M Source/WebCore/rendering/style/RenderStyleConstants.cpp
M Source/WebCore/rendering/style/RenderStyleConstants.h
M Source/WebCore/style/computed/data/StyleNonInheritedRareData.cpp
M Source/WebCore/style/computed/data/StyleNonInheritedRareData.h
M Source/WebCore/style/values/primitives/StyleKeyword+Mappings.h
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/WebPage/Cocoa/PositionInformationForWebPage.mm
Log Message:
-----------
Add initial `portal-action` support
https://bugs.webkit.org/show_bug.cgi?id=321293
<rdar://182292331>
Reviewed by Mike Wyrzykowski.
Add initial `portal-orbit` support for Spatial Portals. Only `orbit` is
supported initially and it matches the `stagemode=orbit` behavior of
HTMLModelElement.
Tests: spatial-css/spatial-portal-action-dynamic.html
spatial-css/spatial-portal-action-multi-model.html
spatial-css/spatial-portal-action-off.html
spatial-css/spatial-portal-action-parsing.html
spatial-css/spatial-portal-action-requires-auto-transform.html
spatial-css/spatial-portal-action.html
spatial-css/spatial-portal-determines-if-scroll-gesture-updates-position-information.html
spatial-css/spatial-portal-nested-model-stagemode.html
* LayoutTests/spatial-css/resources/spatial-portal-utils.js:
(const.createPortal):
(const.appendModel):
* LayoutTests/spatial-css/spatial-portal-action-dynamic-expected.txt: Added.
* LayoutTests/spatial-css/spatial-portal-action-dynamic.html: Added.
* LayoutTests/spatial-css/spatial-portal-action-expected.txt: Added.
* LayoutTests/spatial-css/spatial-portal-action-multi-model-expected.txt: Added.
* LayoutTests/spatial-css/spatial-portal-action-multi-model.html: Added.
* LayoutTests/spatial-css/spatial-portal-action-off-expected.txt: Added.
* LayoutTests/spatial-css/spatial-portal-action-off.html: Added.
* LayoutTests/spatial-css/spatial-portal-action-parsing-expected.txt: Added.
* LayoutTests/spatial-css/spatial-portal-action-parsing.html: Added.
*
LayoutTests/spatial-css/spatial-portal-action-requires-auto-transform-expected.txt:
Added.
* LayoutTests/spatial-css/spatial-portal-action-requires-auto-transform.html:
Added.
* LayoutTests/spatial-css/spatial-portal-action.html: Added.
*
LayoutTests/spatial-css/spatial-portal-determines-if-scroll-gesture-updates-position-information-expected.txt:
Added.
*
LayoutTests/spatial-css/spatial-portal-determines-if-scroll-gesture-updates-position-information.html:
Added.
* LayoutTests/spatial-css/spatial-portal-nested-model-stagemode-expected.txt:
Added.
* LayoutTests/spatial-css/spatial-portal-nested-model-stagemode.html: Added.
Add new tests covering:
- the "fitting" behavior with multiple models
- the relationship between `portal-action` and `portal-transform`
- the relationship between `portal-action` and the HTMLModelElement
`stagemode` attribute
- the property parsing
- the gesture handlers / position information
* Source/WebCore/Headers.cmake:
* Source/WebCore/Modules/model-element/PortalAction.h: Added.
* Source/WebCore/WebCore.xcodeproj/project.pbxproj:
* Source/WebCore/css/CSSProperties.json:
* Source/WebCore/css/CSSValueKeywords.in:
* Source/WebCore/rendering/RenderBox.cpp:
(WebCore::RenderBox::willBeDestroyed):
(WebCore::portalTransformKind):
(WebCore::portalActionKind):
(WebCore::usedPortalActionKind):
(WebCore::pushSpatialPortalProperties):
(WebCore::updateSpatialPortalController):
(WebCore::spatialPortalStyleDidChange):
(WebCore::RenderBox::styleDidChange):
* Source/WebCore/rendering/style/RenderStyleConstants.cpp:
(WebCore::operator<<):
* Source/WebCore/rendering/style/RenderStyleConstants.h:
* Source/WebCore/style/computed/data/StyleNonInheritedRareData.cpp:
(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/primitives/StyleKeyword+Mappings.h:
Introduce the `portal-action` CSS property, defaults to `none`.
* Source/WebCore/Modules/model-element/HTMLModelElement.cpp:
(WebCore::HTMLModelElement::lastRegisteredPortalController const):
(WebCore::HTMLModelElement::spatialPortalContextDidChange):
(WebCore::HTMLModelElement::stageMode const):
`stagemode` is ignore while the model is nested inside of a portal.
(WebCore::HTMLModelElement::updateStageMode):
Remove superfluous calls to `didAddTouchEventHandler` /
`didRemoveTouchEventHandler`.
* Source/WebCore/Modules/model-element/HTMLModelElement.h:
* Source/WebCore/Modules/model-element/ModelPlayer.cpp:
(WebCore::ModelPlayer::setPortalAction):
* Source/WebCore/Modules/model-element/ModelPlayer.h:
* Source/WebCore/Modules/model-element/SpatialPortalController.cpp:
(WebCore::SpatialPortalController::SpatialPortalController):
(WebCore::SpatialPortalController::~SpatialPortalController):
(WebCore::SpatialPortalController::prepareForRemoval):
(WebCore::SpatialPortalController::ensureModelPlayer):
(WebCore::SpatialPortalController::setPortalAction):
(WebCore::SpatialPortalController::updateGestureHandling):
(WebCore::SpatialPortalController::interactiveControllerForHitTestedElement):
(WebCore::SpatialPortalController::supportsInteraction const):
(WebCore::SpatialPortalController::beginStageModeTransform):
(WebCore::SpatialPortalController::updateStageModeTransform):
(WebCore::SpatialPortalController::endStageModeInteraction):
* Source/WebCore/Modules/model-element/SpatialPortalController.h:
(WebCore::SpatialPortalController::portalElement const):
Add PortalAction and stage mode gesture support to the
SpatialPortalController.
Only configure gesture handlers / position information when the portal
wants orbit.
* Source/WebCore/dom/Element.cpp:
(WebCore::Element::clearSpatialPortalController):
Make sure we prepare (remove event handlers) before removging the
SpatialPortalController.
* Source/WebCore/dom/Element.h:
* Source/WebCore/page/ios/EventHandlerIOS.mm:
(WebCore::EventHandler::requestInteractiveModelElementAtPoint):
(WebCore::EventHandler::stageModeSessionDidUpdate):
(WebCore::EventHandler::stageModeSessionDidEnd):
* Source/WebKit/WebProcess/WebPage/Cocoa/PositionInformationForWebPage.mm:
(WebKit::positionInformationForWebPage):
Add portal support to the StageMode hit-testing code.
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h:
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.messages.in:
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm:
(WebKit::ModelProcessModelPlayerProxy::computeTransform):
(WebKit::ModelProcessModelPlayerProxy::updateTransformAfterLayout):
(WebKit::ModelProcessModelPlayerProxy::didFinishLoading):
(WebKit::ModelProcessModelPlayerProxy::stageModeInteractionDidUpdateModel):
(WebKit::ModelProcessModelPlayerProxy::setPortalTransform):
(WebKit::ModelProcessModelPlayerProxy::setPortalAction):
(WebKit::ModelProcessModelPlayerProxy::effectiveStageModeOperation const):
(WebKit::ModelProcessModelPlayerProxy::updateForCurrentStageMode):
(WebKit::ModelProcessModelPlayerProxy::applyStageModeOperationToDriver):
* Source/WebKit/Scripts/webkit/messages.py:
(headers_for_type):
* Source/WebKit/Shared/WebCoreArgumentCoders.serialization.in:
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.cpp:
(WebKit::ModelProcessModelPlayer::setPortalAction):
* Source/WebKit/WebProcess/Model/ModelProcessModelPlayer.h:
Implement `portal-action` for the ModelProcessModelPlayer.
Canonical link: https://commits.webkit.org/318961@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications