Title: [268035] trunk/Source/WebCore
Revision
268035
Author
peng.l...@apple.com
Date
2020-10-05 22:32:15 -0700 (Mon, 05 Oct 2020)

Log Message

MobileSafari crashes at WebCore: -[WebAVPlayerViewControllerDelegate playerViewControllerWillStartPictureInPicture:]
https://bugs.webkit.org/show_bug.cgi?id=217356

Reviewed by Alex Christensen.

Since we replaced the RefPtr of VideoFullscreenInterfaceAVKit with a WeakPtr in
WebAVPlayerViewControllerDelegate to fix a leak in r262185, self.fullscreenInterface
could be NULL and we need to add NULL checks.

* platform/ios/VideoFullscreenInterfaceAVKit.mm:
(-[WebAVPlayerViewControllerDelegate playerViewControllerWillStartPictureInPicture:]):
(-[WebAVPlayerViewControllerDelegate playerViewControllerDidStartPictureInPicture:]):
(-[WebAVPlayerViewControllerDelegate playerViewController:failedToStartPictureInPictureWithError:]):
(-[WebAVPlayerViewControllerDelegate playerViewControllerWillStopPictureInPicture:]):
(-[WebAVPlayerViewControllerDelegate playerViewControllerDidStopPictureInPicture:]):
(-[WebAVPlayerViewControllerDelegate playerViewController:shouldExitFullScreenWithReason:]):
(-[WebAVPlayerViewControllerDelegate playerViewController:restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:]):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (268034 => 268035)


--- trunk/Source/WebCore/ChangeLog	2020-10-06 05:16:33 UTC (rev 268034)
+++ trunk/Source/WebCore/ChangeLog	2020-10-06 05:32:15 UTC (rev 268035)
@@ -1,3 +1,23 @@
+2020-10-05  Peng Liu  <peng.l...@apple.com>
+
+        MobileSafari crashes at WebCore: -[WebAVPlayerViewControllerDelegate playerViewControllerWillStartPictureInPicture:]
+        https://bugs.webkit.org/show_bug.cgi?id=217356
+
+        Reviewed by Alex Christensen.
+
+        Since we replaced the RefPtr of VideoFullscreenInterfaceAVKit with a WeakPtr in
+        WebAVPlayerViewControllerDelegate to fix a leak in r262185, self.fullscreenInterface
+        could be NULL and we need to add NULL checks.
+
+        * platform/ios/VideoFullscreenInterfaceAVKit.mm:
+        (-[WebAVPlayerViewControllerDelegate playerViewControllerWillStartPictureInPicture:]):
+        (-[WebAVPlayerViewControllerDelegate playerViewControllerDidStartPictureInPicture:]):
+        (-[WebAVPlayerViewControllerDelegate playerViewController:failedToStartPictureInPictureWithError:]):
+        (-[WebAVPlayerViewControllerDelegate playerViewControllerWillStopPictureInPicture:]):
+        (-[WebAVPlayerViewControllerDelegate playerViewControllerDidStopPictureInPicture:]):
+        (-[WebAVPlayerViewControllerDelegate playerViewController:shouldExitFullScreenWithReason:]):
+        (-[WebAVPlayerViewControllerDelegate playerViewController:restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:]):
+
 2020-10-05  Simon Fraser  <simon.fra...@apple.com>
 
         Remove Page::scheduleImmediateRenderingUpdate()

Modified: trunk/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm (268034 => 268035)


--- trunk/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm	2020-10-06 05:16:33 UTC (rev 268034)
+++ trunk/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm	2020-10-06 05:32:15 UTC (rev 268035)
@@ -118,13 +118,15 @@
 - (void)playerViewControllerWillStartPictureInPicture:(AVPlayerViewController *)playerViewController
 {
     UNUSED_PARAM(playerViewController);
-    self.fullscreenInterface->willStartPictureInPicture();
+    if (self.fullscreenInterface)
+        self.fullscreenInterface->willStartPictureInPicture();
 }
 
 - (void)playerViewControllerDidStartPictureInPicture:(AVPlayerViewController *)playerViewController
 {
     UNUSED_PARAM(playerViewController);
-    self.fullscreenInterface->didStartPictureInPicture();
+    if (self.fullscreenInterface)
+        self.fullscreenInterface->didStartPictureInPicture();
 }
 
 - (void)playerViewController:(AVPlayerViewController *)playerViewController failedToStartPictureInPictureWithError:(NSError *)error
@@ -131,19 +133,22 @@
 {
     UNUSED_PARAM(playerViewController);
     UNUSED_PARAM(error);
-    self.fullscreenInterface->failedToStartPictureInPicture();
+    if (self.fullscreenInterface)
+        self.fullscreenInterface->failedToStartPictureInPicture();
 }
 
 - (void)playerViewControllerWillStopPictureInPicture:(AVPlayerViewController *)playerViewController
 {
     UNUSED_PARAM(playerViewController);
-    self.fullscreenInterface->willStopPictureInPicture();
+    if (self.fullscreenInterface)
+        self.fullscreenInterface->willStopPictureInPicture();
 }
 
 - (void)playerViewControllerDidStopPictureInPicture:(AVPlayerViewController *)playerViewController
 {
     UNUSED_PARAM(playerViewController);
-    self.fullscreenInterface->didStopPictureInPicture();
+    if (self.fullscreenInterface)
+        self.fullscreenInterface->didStopPictureInPicture();
 }
 
 - (BOOL)playerViewControllerShouldAutomaticallyDismissAtPictureInPictureStart:(AVPlayerViewController *)playerViewController
@@ -171,6 +176,9 @@
 - (BOOL)playerViewController:(AVPlayerViewController *)playerViewController shouldExitFullScreenWithReason:(AVPlayerViewControllerExitFullScreenReason)reason
 {
     UNUSED_PARAM(playerViewController);
+    if (!self.fullscreenInterface)
+        return YES;
+
     return self.fullscreenInterface->shouldExitFullscreenWithReason(convertToExitFullScreenReason(reason));
 }
 
@@ -177,7 +185,8 @@
 - (void)playerViewController:(AVPlayerViewController *)playerViewController restoreUserInterfaceForPictureInPictureStopWithCompletionHandler:(void (^)(BOOL restored))completionHandler
 {
     UNUSED_PARAM(playerViewController);
-    self.fullscreenInterface->prepareForPictureInPictureStopWithCompletionHandler(completionHandler);
+    if (self.fullscreenInterface)
+        self.fullscreenInterface->prepareForPictureInPictureStopWithCompletionHandler(completionHandler);
 }
 
 - (BOOL)playerViewControllerShouldStartPictureInPictureFromInlineWhenEnteringBackground:(AVPlayerViewController *)playerViewController
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to