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

Reply via email to