Title: [184907] trunk/Source/WebCore
- Revision
- 184907
- Author
- [email protected]
- Date
- 2015-05-27 10:12:14 -0700 (Wed, 27 May 2015)
Log Message
Handle case where -startOptimizedFullscreen fails.
https://bugs.webkit.org/show_bug.cgi?id=145340
Patch by Jeremy Jones <[email protected]> on 2015-05-27
Reviewed by Eric Carlson.
Add new AVPlayerViewController delegate methods and remove old ones.
-startOptimizedFullscreen can either fail silently because it is not allowed or it will call a delegate.
We prevent silent failure by testing preconditions in enterFullscreenOptimized, and add the
delegate -playerViewControllerFailedToStartOptimizedFullscreen to handle explicitly failure.
* platform/ios/WebVideoFullscreenInterfaceAVKit.h: added/removed method declarations.
* platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
(-[WebAVPlayerController playerViewControllerFailedToStartOptimizedFullscreen:withError:]): Added.
(WebVideoFullscreenInterfaceAVKit::enterFullscreenOptimized): Handle silent failure.
(WebVideoFullscreenInterfaceAVKit::didStartOptimizedFullscreen): Hide window on main thread.
(WebVideoFullscreenInterfaceAVKit::failedToStartOptimizedFullscreen): Added
(-[WebAVPlayerController playerViewControllerWillCancelOptimizedFullscreen:]): Deleted.
(-[WebAVPlayerController playerViewControllerDidCancelOptimizedFullscreen:]): Deleted.
(WebVideoFullscreenInterfaceAVKit::willCancelOptimizedFullscreen): Deleted.
(WebVideoFullscreenInterfaceAVKit::didCancelOptimizedFullscreen): Deleted.
* platform/spi/cocoa/AVKitSPI.h: Remove dead SPI. Add isOptimizedFullscreenPossible.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (184906 => 184907)
--- trunk/Source/WebCore/ChangeLog 2015-05-27 16:52:51 UTC (rev 184906)
+++ trunk/Source/WebCore/ChangeLog 2015-05-27 17:12:14 UTC (rev 184907)
@@ -1,3 +1,27 @@
+2015-05-27 Jeremy Jones <[email protected]>
+
+ Handle case where -startOptimizedFullscreen fails.
+ https://bugs.webkit.org/show_bug.cgi?id=145340
+
+ Reviewed by Eric Carlson.
+
+ Add new AVPlayerViewController delegate methods and remove old ones.
+ -startOptimizedFullscreen can either fail silently because it is not allowed or it will call a delegate.
+ We prevent silent failure by testing preconditions in enterFullscreenOptimized, and add the
+ delegate -playerViewControllerFailedToStartOptimizedFullscreen to handle explicitly failure.
+
+ * platform/ios/WebVideoFullscreenInterfaceAVKit.h: added/removed method declarations.
+ * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
+ (-[WebAVPlayerController playerViewControllerFailedToStartOptimizedFullscreen:withError:]): Added.
+ (WebVideoFullscreenInterfaceAVKit::enterFullscreenOptimized): Handle silent failure.
+ (WebVideoFullscreenInterfaceAVKit::didStartOptimizedFullscreen): Hide window on main thread.
+ (WebVideoFullscreenInterfaceAVKit::failedToStartOptimizedFullscreen): Added
+ (-[WebAVPlayerController playerViewControllerWillCancelOptimizedFullscreen:]): Deleted.
+ (-[WebAVPlayerController playerViewControllerDidCancelOptimizedFullscreen:]): Deleted.
+ (WebVideoFullscreenInterfaceAVKit::willCancelOptimizedFullscreen): Deleted.
+ (WebVideoFullscreenInterfaceAVKit::didCancelOptimizedFullscreen): Deleted.
+ * platform/spi/cocoa/AVKitSPI.h: Remove dead SPI. Add isOptimizedFullscreenPossible.
+
2015-05-27 Myles C. Maxfield <[email protected]>
[iOS] Arabic ligatures are broken in Google Maps
Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h (184906 => 184907)
--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h 2015-05-27 16:52:51 UTC (rev 184906)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h 2015-05-27 17:12:14 UTC (rev 184907)
@@ -107,10 +107,9 @@
void willStartOptimizedFullscreen();
void didStartOptimizedFullscreen();
+ void failedToStartOptimizedFullscreen();
void willStopOptimizedFullscreen();
void didStopOptimizedFullscreen();
- void willCancelOptimizedFullscreen();
- void didCancelOptimizedFullscreen();
void prepareForOptimizedFullscreenStopWithCompletionHandler(void (^)(BOOL));
void setMode(HTMLMediaElementEnums::VideoFullscreenMode);
Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm (184906 => 184907)
--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm 2015-05-27 16:52:51 UTC (rev 184906)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm 2015-05-27 17:12:14 UTC (rev 184907)
@@ -204,6 +204,13 @@
self.fullscreenInterface->didStartOptimizedFullscreen();
}
+- (void)playerViewControllerFailedToStartOptimizedFullscreen:(AVPlayerViewController *)playerViewController withError:(NSError *)error
+{
+ UNUSED_PARAM(playerViewController);
+ UNUSED_PARAM(error);
+ self.fullscreenInterface->failedToStartOptimizedFullscreen();
+}
+
- (void)playerViewControllerWillStopOptimizedFullscreen:(AVPlayerViewController *)playerViewController
{
UNUSED_PARAM(playerViewController);
@@ -216,18 +223,6 @@
self.fullscreenInterface->didStopOptimizedFullscreen();
}
-- (void)playerViewControllerWillCancelOptimizedFullscreen:(AVPlayerViewController *)playerViewController
-{
- UNUSED_PARAM(playerViewController);
- self.fullscreenInterface->willCancelOptimizedFullscreen();
-}
-
-- (void)playerViewControllerDidCancelOptimizedFullscreen:(AVPlayerViewController *)playerViewController
-{
- UNUSED_PARAM(playerViewController);
- self.fullscreenInterface->didCancelOptimizedFullscreen();
-}
-
- (BOOL)playerViewController:(AVPlayerViewController *)playerViewController shouldExitFullScreenWithReason:(AVPlayerViewControllerExitFullScreenReason)reason
{
UNUSED_PARAM(playerViewController);
@@ -1033,7 +1028,11 @@
RefPtr<WebVideoFullscreenInterfaceAVKit> strongThis(this);
LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::enterFullscreenOptimized(%p)", this);
- [m_playerViewController startOptimizedFullscreen];
+
+ if ([m_playerViewController isOptimizedFullscreenPossible])
+ [m_playerViewController startOptimizedFullscreen];
+ else
+ failedToStartOptimizedFullscreen();
}
void WebVideoFullscreenInterfaceAVKit::enterFullscreenStandard()
@@ -1270,15 +1269,35 @@
{
LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::didStartOptimizedFullscreen(%p)", this);
[m_playerViewController setShowsPlaybackControls:YES];
+ [m_window setHidden:YES];
RefPtr<WebVideoFullscreenInterfaceAVKit> strongThis(this);
WebThreadRun([strongThis] {
- [strongThis->m_window setHidden:YES];
if (strongThis->m_fullscreenChangeObserver)
strongThis->m_fullscreenChangeObserver->didEnterFullscreen();
});
}
+void WebVideoFullscreenInterfaceAVKit::failedToStartOptimizedFullscreen()
+{
+ LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::failedToStartOptimizedFullscreen(%p)", this);
+ [m_playerViewController setShowsPlaybackControls:YES];
+
+ RefPtr<WebVideoFullscreenInterfaceAVKit> strongThis(this);
+ WebThreadRun([strongThis, this] {
+ if (hasMode(HTMLMediaElementEnums::VideoFullscreenModeStandard))
+ return;
+
+ m_exitCompleted = true;
+
+ if (m_fullscreenChangeObserver)
+ m_fullscreenChangeObserver->didEnterFullscreen();
+
+ if (m_videoFullscreenModel)
+ m_videoFullscreenModel->requestExitFullscreen();
+ });
+}
+
void WebVideoFullscreenInterfaceAVKit::willStopOptimizedFullscreen()
{
LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::willStopOptimizedFullscreen(%p)", this);
@@ -1311,35 +1330,6 @@
});
}
-void WebVideoFullscreenInterfaceAVKit::willCancelOptimizedFullscreen()
-{
- LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::willCancelOptimizedFullscreen(%p)", this);
- [m_window setHidden:NO];
- [m_videoLayerContainer setBackgroundColor:[[getUIColorClass() clearColor] CGColor]];
- [[m_playerViewController view] setBackgroundColor:[getUIColorClass() clearColor]];
-
- RefPtr<WebVideoFullscreenInterfaceAVKit> strongThis(this);
- WebThreadRun([strongThis] {
- if (strongThis->m_videoFullscreenModel)
- strongThis->m_videoFullscreenModel->requestExitFullscreen();
- });
-}
-
-void WebVideoFullscreenInterfaceAVKit::didCancelOptimizedFullscreen()
-{
- LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::didCancelOptimizedFullscreen(%p)", this);
- if (hasMode(HTMLMediaElementEnums::VideoFullscreenModeStandard))
- return;
-
- RefPtr<WebVideoFullscreenInterfaceAVKit> strongThis(this);
- WebThreadRun([strongThis] {
- strongThis->clearMode(HTMLMediaElementEnums::VideoFullscreenModeOptimized);
- [strongThis->m_window setHidden:YES];
- if (strongThis->m_fullscreenChangeObserver)
- strongThis->m_fullscreenChangeObserver->didExitFullscreen();
- });
-}
-
void WebVideoFullscreenInterfaceAVKit::prepareForOptimizedFullscreenStopWithCompletionHandler(void (^completionHandler)(BOOL restored))
{
LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::prepareForOptimizedFullscreenStopWithCompletionHandler(%p)", this);
Modified: trunk/Source/WebCore/platform/spi/cocoa/AVKitSPI.h (184906 => 184907)
--- trunk/Source/WebCore/platform/spi/cocoa/AVKitSPI.h 2015-05-27 16:52:51 UTC (rev 184906)
+++ trunk/Source/WebCore/platform/spi/cocoa/AVKitSPI.h 2015-05-27 17:12:14 UTC (rev 184907)
@@ -88,8 +88,8 @@
- (void)enterFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError *))completionHandler;
- (void)exitFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError *))completionHandler;
+- (BOOL)isOptimizedFullscreenPossible;
- (void)startOptimizedFullscreen;
-- (void)startOptimizedFullscreenWithStartCompletionHandler:(void (^)(BOOL success, NSError*))startCompletionHandler stopCompletionHandler:(void (^)(AVPlayerViewControllerOptimizedFullscreenStopReason))stopCompletionHandler;
- (void)stopOptimizedFullscreen;
- (void)setAllowsOptimizedFullscreen:(BOOL)allowsOptimizedFullscreen;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes