Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: b2c322a1aa1808d972bc2b50dd2e79281b853701
https://github.com/WebKit/WebKit/commit/b2c322a1aa1808d972bc2b50dd2e79281b853701
Author: Jean Haberer <[email protected]>
Date: 2026-02-05 (Thu, 05 Feb 2026)
Changed paths:
M LayoutTests/model-element/immersive/model-element-immersive-basic.html
M
LayoutTests/model-element/immersive/model-element-immersive-no-client-approval.html
A
LayoutTests/model-element/immersive/model-element-immersive-state-consistency-expected.txt
A
LayoutTests/model-element/immersive/model-element-immersive-state-consistency.html
M Source/WebCore/dom/Document.h
M Source/WebCore/dom/DocumentFullscreen.cpp
M Source/WebCore/dom/DocumentFullscreen.h
M Source/WebCore/dom/DocumentImmersive.cpp
M Source/WebCore/dom/DocumentImmersive.h
Log Message:
-----------
Support immersive request cancellation
rdar://168579428
https://bugs.webkit.org/show_bug.cgi?id=306774
Reviewed by Etienne Segonzac.
Refactor DocumentImmersive to properly handle lifecycle edge cases including
request superseding, cancellation, and element removal during async operations.
This patch introduces proper lifecycle management:
- Track active request stage (Permission, ModelPlayer, Presentation)
- Track pending immersive element to detect superseding
- Cancel active requests before starting new ones
- Queue requests during exit and resume after exit completes
- Add CompletionHandlerScope to ensure completion handlers are always called
similarly to fullscreen's logic
Test: model-element/immersive/model-element-immersive-state-consistency.html
* LayoutTests/model-element/immersive/model-element-immersive-basic.html:
*
LayoutTests/model-element/immersive/model-element-immersive-no-client-approval.html:
*
LayoutTests/model-element/immersive/model-element-immersive-state-consistency-expected.txt:
Added.
*
LayoutTests/model-element/immersive/model-element-immersive-state-consistency.html:
Added.
* Source/WebCore/dom/Document.h:
* Source/WebCore/dom/DocumentFullscreen.cpp:
* Source/WebCore/dom/DocumentFullscreen.h:
* Source/WebCore/dom/DocumentImmersive.cpp:
(WebCore::DocumentImmersive::requestImmersive):
Refactored to use new lifecycle methods.
(WebCore::DocumentImmersive::exitImmersive):
Added proper cancellation and exit queueing.
(WebCore::DocumentImmersive::handleImmersiveError):
New centralized error handling.
(WebCore::DocumentImmersive::checkRequestStillValid):
Validate request hasn't been superseded/cancelled.
(WebCore::DocumentImmersive::cancelActiveRequest):
Cancel active request with stage-specific cleanup.
(WebCore::DocumentImmersive::beginImmersiveRequest):
Start immersive request flow.
(WebCore::DocumentImmersive::createModelPlayerForImmersive):
Create model player with queueing support.
(WebCore::DocumentImmersive::presentImmersiveElement):
Present immersive element.
(WebCore::DocumentImmersive::clear):
Clear all state including pending handlers.
* Source/WebCore/dom/DocumentImmersive.h:
Canonical link: https://commits.webkit.org/306871@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications