Title: [185733] trunk/Source/WebCore
Revision
185733
Author
[email protected]
Date
2015-06-18 20:46:06 -0700 (Thu, 18 Jun 2015)

Log Message

Disable UIWindow for fullscreen video for selected clients.
https://bugs.webkit.org/show_bug.cgi?id=145852

Patch by Jeremy Jones <[email protected]> on 2015-06-18
Reviewed by Simon Fraser.

Disable UIWindow for fullscreen video doesn't work everywhere (rdar://problem/21315993), so just disable it when creating a UIWindow won't work.
Fix some interface hiding and layout problems that showed up in the non UIWindow code path.

* platform/RuntimeApplicationChecksIOS.h:
* platform/RuntimeApplicationChecksIOS.mm: Remove iAD bundle identifier.
* platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
(WebVideoFullscreenInterfaceAVKit::setupFullscreen): Opt out of UIWindow when hosted in another process. And fix view parenting for non-window case.
(WebVideoFullscreenInterfaceAVKit::exitFullscreen): Fix for AVKit exit fullscreen complaining about -needsLayout.

(WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen):
(WebVideoFullscreenInterfaceAVKit::preparedToReturnToInline):
(WebVideoFullscreenInterfaceAVKit::willStartOptimizedFullscreen):
(WebVideoFullscreenInterfaceAVKit::didStartOptimizedFullscreen):
(WebVideoFullscreenInterfaceAVKit::willStopOptimizedFullscreen):
(WebVideoFullscreenInterfaceAVKit::didStopOptimizedFullscreen):
These hide and show the view controller where we hide and show the window.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (185732 => 185733)


--- trunk/Source/WebCore/ChangeLog	2015-06-19 02:32:40 UTC (rev 185732)
+++ trunk/Source/WebCore/ChangeLog	2015-06-19 03:46:06 UTC (rev 185733)
@@ -1,3 +1,27 @@
+2015-06-18  Jeremy Jones  <[email protected]>
+
+        Disable UIWindow for fullscreen video for selected clients.
+        https://bugs.webkit.org/show_bug.cgi?id=145852
+
+        Reviewed by Simon Fraser.
+
+        Disable UIWindow for fullscreen video doesn't work everywhere (rdar://problem/21315993), so just disable it when creating a UIWindow won't work.
+        Fix some interface hiding and layout problems that showed up in the non UIWindow code path.
+
+        * platform/RuntimeApplicationChecksIOS.h:
+        * platform/RuntimeApplicationChecksIOS.mm: Remove iAD bundle identifier.
+        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
+        (WebVideoFullscreenInterfaceAVKit::setupFullscreen): Opt out of UIWindow when hosted in another process. And fix view parenting for non-window case.
+        (WebVideoFullscreenInterfaceAVKit::exitFullscreen): Fix for AVKit exit fullscreen complaining about -needsLayout.
+
+        (WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen):
+        (WebVideoFullscreenInterfaceAVKit::preparedToReturnToInline):
+        (WebVideoFullscreenInterfaceAVKit::willStartOptimizedFullscreen):
+        (WebVideoFullscreenInterfaceAVKit::didStartOptimizedFullscreen):
+        (WebVideoFullscreenInterfaceAVKit::willStopOptimizedFullscreen):
+        (WebVideoFullscreenInterfaceAVKit::didStopOptimizedFullscreen):
+        These hide and show the view controller where we hide and show the window.
+
 2015-06-18  Dean Jackson  <[email protected]>
 
         Provide a way for web developers to draw a Theme-specific Wireless Playback icon

Modified: trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.h (185732 => 185733)


--- trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.h	2015-06-19 02:32:40 UTC (rev 185732)
+++ trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.h	2015-06-19 03:46:06 UTC (rev 185733)
@@ -29,7 +29,6 @@
 // FIXME: We should consider merging this file with RuntimeApplicationChecks.h.
 namespace WebCore {
 
-bool applicationIsAdSheet();
 WEBCORE_EXPORT bool applicationIsMobileMail();
 WEBCORE_EXPORT bool applicationIsMobileSafari();
 bool applicationIsDumpRenderTree();

Modified: trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm (185732 => 185733)


--- trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm	2015-06-19 02:32:40 UTC (rev 185732)
+++ trunk/Source/WebCore/platform/RuntimeApplicationChecksIOS.mm	2015-06-19 03:46:06 UTC (rev 185733)
@@ -31,12 +31,6 @@
 
 namespace WebCore {
 
-bool applicationIsAdSheet()
-{
-    static const bool isAdSheet = [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.AdSheetPhone"];
-    return isAdSheet;
-}
-
 bool applicationIsMobileMail()
 {
     static const bool isMobileMail = [[[NSBundle mainBundle] bundleIdentifier] isEqualToString:@"com.apple.mobilemail"];

Modified: trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm (185732 => 185733)


--- trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm	2015-06-19 02:32:40 UTC (rev 185732)
+++ trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm	2015-06-19 03:46:06 UTC (rev 185733)
@@ -876,6 +876,10 @@
     [m_videoLayerContainer.get() setHidden:enabled];
 }
 
+@interface UIWindow ()
+-(BOOL)_isHostedInAnotherProcess;
+@end
+
 void WebVideoFullscreenInterfaceAVKit::setupFullscreen(PlatformLayer& videoLayer, const WebCore::IntRect& initialRect, UIView* parentView, HTMLMediaElementEnums::VideoFullscreenMode mode, bool allowsPictureInPicturePlayback)
 {
     ASSERT(mode != HTMLMediaElementEnums::VideoFullscreenModeNone);
@@ -890,7 +894,7 @@
     m_parentView = parentView;
     m_parentWindow = parentView.window;
 
-    if (!applicationIsAdSheet()) {
+    if (![[parentView window] _isHostedInAnotherProcess]) {
         m_window = adoptNS([allocUIWindowInstance() initWithFrame:[[getUIScreenClass() mainScreen] bounds]]);
         [m_window setBackgroundColor:[getUIColorClass() clearColor]];
         m_viewController = adoptNS([allocUIViewControllerInstance() init]);
@@ -926,12 +930,11 @@
     if (m_viewController) {
         [m_viewController addChildViewController:m_playerViewController.get()];
         [[m_viewController view] addSubview:[m_playerViewController view]];
-        [m_playerViewController view].frame = [parentView convertRect:initialRect toView:nil];
-    } else {
-        [parentView addSubview:[m_playerViewController view]];
-        [m_playerViewController view].frame = initialRect;
-    }
+    } else
+        [parentView.window addSubview:[m_playerViewController view]];
 
+    [m_playerViewController view].frame = [parentView convertRect:initialRect toView:nil];
+
     [[m_playerViewController view] setBackgroundColor:[getUIColorClass() clearColor]];
     [[m_playerViewController view] setNeedsLayout];
     [[m_playerViewController view] layoutIfNeeded];
@@ -1003,7 +1006,6 @@
         [m_videoLayerContainer setVideoLayerGravity:AVVideoLayerGravityResizeAspect];
     [[m_playerViewController view] layoutIfNeeded];
 
-
     if (isMode(HTMLMediaElementEnums::VideoFullscreenModePictureInPicture)) {
         [m_window setHidden:NO];
         [m_playerViewController stopPictureInPicture];
@@ -1105,6 +1107,7 @@
     LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::requestHideAndExitFullscreen(%p)", this);
 
     [m_window setHidden:YES];
+    [[m_playerViewController view] setHidden:YES];
 
     if (m_videoFullscreenModel && !m_exitRequested) {
         m_videoFullscreenModel->pause();
@@ -1117,10 +1120,7 @@
     LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::preparedToReturnToInline(%p) - visible(%s)", this, boolString(visible));
     if (m_prepareToInlineCallback) {
         
-        if (m_viewController)
-            [m_playerViewController view].frame = [m_parentView convertRect:inlineRect toView:nil];
-        else
-            [m_playerViewController view].frame = inlineRect;
+        [m_playerViewController view].frame = [m_parentView convertRect:inlineRect toView:nil];
 
         std::function<void(bool)> callback = WTF::move(m_prepareToInlineCallback);
         callback(visible);
@@ -1153,6 +1153,7 @@
 
         if (!visible) {
             [m_window setHidden:YES];
+            [[m_playerViewController view] setHidden:YES];
             return;
         }
 
@@ -1163,6 +1164,7 @@
                 return;
             clearMode(HTMLMediaElementEnums::VideoFullscreenModeStandard);
             [m_window setHidden:YES];
+            [[m_playerViewController view] setHidden:YES];
         }];
     });
 }
@@ -1172,6 +1174,7 @@
     LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::didStartPictureInPicture(%p)", this);
     [m_playerViewController setShowsPlaybackControls:YES];
     [m_window setHidden:YES];
+    [[m_playerViewController view] setHidden:YES];
 
     if (m_fullscreenChangeObserver)
         m_fullscreenChangeObserver->didEnterFullscreen();
@@ -1198,6 +1201,7 @@
 {
     LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::willStopPictureInPicture(%p)", this);
     [m_window setHidden:NO];
+    [[m_playerViewController view] setHidden:NO];
 
     if (m_videoFullscreenModel)
         m_videoFullscreenModel->requestExitFullscreen();
@@ -1216,6 +1220,7 @@
 
     clearMode(HTMLMediaElementEnums::VideoFullscreenModePictureInPicture);
     [m_window setHidden:YES];
+    [[m_playerViewController view] setHidden:YES];
     
     if (m_fullscreenChangeObserver)
         m_fullscreenChangeObserver->didExitFullscreen();
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to