[webkit-changes] [WebKit/WebKit] a428fb: [iOS] Exiting PiP by navigation then restoring pag...

Jer Noble noreply at github.com
Sun Jul 23 23:55:29 PDT 2023


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: a428fb0a4209061f8d73cffbeb955556f7a0147d
      https://github.com/WebKit/WebKit/commit/a428fb0a4209061f8d73cffbeb955556f7a0147d
  Author: Jer Noble <jer.noble at apple.com>
  Date:   2023-07-23 (Sun, 23 Jul 2023)

  Changed paths:
    M Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
    M Source/WebCore/platform/graphics/cocoa/NullVideoFullscreenInterface.h
    M Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.h
    M Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm
    M Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm
    M Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.mm

  Log Message:
  -----------
  [iOS] Exiting PiP by navigation then restoring page from back/forward cache results in missing video content
https://bugs.webkit.org/show_bug.cgi?id=259377
rdar://112448871

Reviewed by Eric Carlson.

A few interrelated fixes are needed to resolve this behavior:

- Add a new method to VideoFullscreenInterfaceAVKit, exitFullscreenWithoutAnimationToMode(),
  which will tear down fullscreen and PiP without invalidating the interface itself.
- In MediaPlayerPrivateAVFoundationObjC, reset m_haveBeenAskedToCreateLayer to false when
  destroying the video layer so that the next creation request won't bail out early.
- A refcount mismatch occurs when moving from video fullscreen to pip, as the WebContent
  process calls setupFullscreenWithID() again in this case, but does not call
  removeClientForContext(). Only add an additional refcount if the interface is not already
  in fullscreen mode.
- Remove the iOS-only direct call of removeClientForContext() from
  exitVideoFullscreenToModeWithoutAnimation(). This call will now correctly result in
  the interface calling removeClientForContext() on both macOS and iOS.

* Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm:
(WebCore::MediaPlayerPrivateAVFoundationObjC::destroyVideoLayer):
* Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.h:
* Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm:
(VideoFullscreenInterfaceAVKit::exitFullscreen):
(VideoFullscreenInterfaceAVKit::exitFullscreenWithoutAnimationToMode):
* Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm:
(WebKit::VideoFullscreenManagerProxy::setupFullscreenWithID):
(WebKit::VideoFullscreenManagerProxy::exitFullscreenWithoutAnimationToMode):
* Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.mm:
(WebKit::VideoFullscreenManager::exitVideoFullscreenToModeWithoutAnimation):

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




More information about the webkit-changes mailing list