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();