[webkit-changes] [WebKit/WebKit] 8da9da: [visionOS] Environment docking may fail if a video...

aestes noreply at github.com
Tue Aug 13 11:23:33 PDT 2024


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: 8da9da634316e1ff561390301de8f03b4c25886a
      https://github.com/WebKit/WebKit/commit/8da9da634316e1ff561390301de8f03b4c25886a
  Author: Andy Estes <aestes at apple.com>
  Date:   2024-08-13 (Tue, 13 Aug 2024)

  Changed paths:
    M Source/WebCore/platform/ios/VideoPresentationInterfaceIOS.h
    M Source/WebCore/platform/ios/VideoPresentationInterfaceIOS.mm
    M Source/WebKit/Platform/ios/VideoPresentationInterfaceLMK.mm
    M Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.mm
    M Source/WebKit/UIProcess/WebPageProxy.cpp

  Log Message:
  -----------
  [visionOS] Environment docking may fail if a video's src changes while in element fullscreen
https://bugs.webkit.org/show_bug.cgi?id=278004
rdar://130920037

Reviewed by Eric Carlson.

When a video's src (or srcObject) changes a new WebAVPlayerLayer will be created in the UI process,
removing the previous layer. VideoPresentationManagerProxy::removeClientForContext is called when
the old layer is removed, which invalidates and removes the video presentation model and interface
associated with the video element's context ID. When VideoPresentationInterfaceLMK is invalidated
it removes its LMPlayableViewController, even though an environment picker button owned by that
now-deallocated view controller may be presented in WKFullScreenViewController if the video is part
of an element fullscreen presentation. If the user were to tap that button and choose an
environment then docking would not occur since the LMPlayzableViewController and its associated
playable object no longer exist.

VideoPresentationInterfaceLMK attempted to account for this during invalidation by calling
VideoPresentationModel::didCleanupFullscreen(), which would ultimately call
-[WKFullScreenViewController configureEnvironmentPickerButtonView], re-creating a new video
presentation interface, LMPlayableViewController, playable object, and environment picker button if
the video was still in an element fullscreen presentation. While this re-creation did happen after
some forms of invalidation (e.g., when undocking and returning to element fullscreen) it did *not*
happen when a video layer changed because in VideoPresentationManagerProxy::removeClientForContext
the video presentation model had already been removed from the interface by the time
VideoPresentationInterface::invalidate was called.

To account ensure that a valid environment picker button is displayed in this case, this change
calls WebPageProxy::didCleanupFullscreen explicitly in VideoPresentationManagerProxy::removeClientForContext.
Also added additional logging to help diagnose bugs like this in the future.

* Source/WebCore/platform/ios/VideoPresentationInterfaceIOS.h:
* Source/WebCore/platform/ios/VideoPresentationInterfaceIOS.mm:
(WebCore::VideoPresentationInterfaceIOS::cleanupFullscreen):
* Source/WebKit/Platform/ios/VideoPresentationInterfaceLMK.mm:
(WebKit::VideoPresentationInterfaceLMK::invalidatePlayerViewController):
(WebKit::VideoPresentationInterfaceLMK::ensurePlayableViewController):
* Source/WebKit/UIProcess/Cocoa/VideoPresentationManagerProxy.mm:
(WebKit::VideoPresentationManagerProxy::removeClientForContext):
* Source/WebKit/UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::didCleanupFullscreen):

Canonical link: https://commits.webkit.org/282176@main



To unsubscribe from these emails, change your notification settings at https://github.com/WebKit/WebKit/settings/notifications


More information about the webkit-changes mailing list