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

Reply via email to