WebKit Bugzilla
New
Browse
Search+
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
[patch]
Patch
bug-183742-20180319075719.patch (text/plain), 40.81 KB, created by
Eric Carlson
on 2018-03-19 07:57:20 PDT
(
hide
)
Description:
Patch
Filename:
MIME Type:
Creator:
Eric Carlson
Created:
2018-03-19 07:57:20 PDT
Size:
40.81 KB
patch
obsolete
>Subversion Revision: 229705 >diff --git a/Source/WTF/ChangeLog b/Source/WTF/ChangeLog >index 323ec65232ab368414fa30b0fe8a8c04bcba6102..73bf90a15876ac5d45fd447c4c2ccb1df79ec13c 100644 >--- a/Source/WTF/ChangeLog >+++ b/Source/WTF/ChangeLog >@@ -1,3 +1,13 @@ >+2018-03-19 Eric Carlson <eric.carlson@apple.com> >+ >+ [Extra zoom mode] Require fullscreen for video playback >+ https://bugs.webkit.org/show_bug.cgi?id=183742 >+ <rdar://problem/38235862> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * wtf/Platform.h: >+ > 2018-03-15 Tim Horton <timothy_horton@apple.com> > > Avoid defining commonly-named system macros on all Cocoa platforms >diff --git a/Source/WebCore/ChangeLog b/Source/WebCore/ChangeLog >index 54e94b59225fbff363246acea0c185aca0b23931..2cda95cb72198d54c1a932167b7d5d30e8728401 100644 >--- a/Source/WebCore/ChangeLog >+++ b/Source/WebCore/ChangeLog >@@ -1,3 +1,58 @@ >+2018-03-19 Eric Carlson <eric.carlson@apple.com> >+ >+ [Extra zoom mode] Require fullscreen for video playback >+ https://bugs.webkit.org/show_bug.cgi?id=183742 >+ <rdar://problem/38235862> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * Modules/modern-media-controls/media/playback-support.js: >+ (PlaybackSupport.prototype.syncControl): Always show the play button. >+ * html/HTMLMediaElement.cpp: >+ (WebCore::HTMLMediaElement::updatePlayState): Return immediately if playback requires fullscreen >+ (WebCore::HTMLMediaElement::didBecomeFullscreenElement): Call updatePlayState in case >+ playback is pending. >+ * html/HTMLMediaElement.h: >+ * platform/cocoa/VideoFullscreenModel.h: >+ (WebCore::VideoFullscreenModel::presentingViewController): New. >+ (WebCore::VideoFullscreenModel::createVideoFullscreenViewController): New. >+ * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: >+ (WebCore::MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer): >+ (WebCore::MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenMode): >+ * platform/ios/PlaybackSessionInterfaceAVKit.mm: >+ (WebCore::PlaybackSessionInterfaceAVKit::seekableRangesChanged): >+ >+ * platform/ios/VideoFullscreenInterfaceAVKit.h: >+ * platform/ios/VideoFullscreenInterfaceAVKit.mm: Wrap AVPlayerLayerView so we can change its >+ behavior. >+ (WebAVPlayerLayerView_playerLayer): >+ (WebAVPlayerLayerView_videoView): >+ (allocWebAVPlayerLayerViewInstance): >+ (-[WebAVPlayerViewController initWithFullscreenInterface:]): >+ (-[WebAVPlayerViewController playerViewControllerShouldHandleDoneButtonTap:]): >+ (-[WebAVPlayerViewController enterFullScreenAnimated:completionHandler:]): >+ (-[WebAVPlayerViewController exitFullScreenAnimated:completionHandler:]): >+ (-[WebAVPlayerViewController NO_RETURN_DUE_TO_ASSERT]): >+ (-[WebAVPlayerViewController isPictureInPicturePossible]): >+ (-[WebAVPlayerViewController isPictureInPictureActive]): >+ (-[WebAVPlayerViewController isPictureInPictureSuspended]): >+ (-[WebAVPlayerViewController pictureInPictureActive]): >+ (-[WebAVPlayerViewController pictureInPictureWasStartedWhenEnteringBackground]): >+ (-[WebAVPlayerViewController view]): >+ (-[WebAVPlayerViewController showsPlaybackControls]): >+ (-[WebAVPlayerViewController setShowsPlaybackControls:]): >+ (-[WebAVPlayerViewController setAllowsPictureInPicturePlayback:]): >+ (-[WebAVPlayerViewController setDelegate:]): >+ (-[WebAVPlayerViewController setPlayerController:]): >+ (-[WebAVPlayerViewController avPlayerViewController]): >+ (-[WebAVPlayerViewController removeFromParentViewController]): >+ (VideoFullscreenInterfaceAVKit::setupFullscreen): >+ (fallbackViewController): >+ (VideoFullscreenInterfaceAVKit::presentingViewController): >+ (VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason): >+ (VideoFullscreenInterfaceAVKit::doSetup): >+ (WebCore::supportsPictureInPicture): >+ > 2018-03-19 Zan Dobersek <zdobersek@igalia.com> > > Unreviewed GCC 4.9 build-fix after r229672. >diff --git a/Source/WebCore/PAL/ChangeLog b/Source/WebCore/PAL/ChangeLog >index e7ef373586c437901006d8a915c589085629837c..1ce2d433265f06697048a89eee64324f6a8186c7 100644 >--- a/Source/WebCore/PAL/ChangeLog >+++ b/Source/WebCore/PAL/ChangeLog >@@ -1,3 +1,13 @@ >+2018-03-19 Eric Carlson <eric.carlson@apple.com> >+ >+ [Extra zoom mode] Require fullscreen for video playback >+ https://bugs.webkit.org/show_bug.cgi?id=183742 >+ <rdar://problem/38235862> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * pal/spi/cocoa/AVKitSPI.h: >+ > 2018-03-17 Jiewen Tan <jiewen_tan@apple.com> > > [WebAuthN] Implement authenticatorMakeCredential >diff --git a/Source/WebKit/ChangeLog b/Source/WebKit/ChangeLog >index 251115bcbcba03d22d14fb80ee324328332e35c3..25b00eda021e07ce754efb2591e2d61b1c52c59d 100644 >--- a/Source/WebKit/ChangeLog >+++ b/Source/WebKit/ChangeLog >@@ -1,3 +1,21 @@ >+2018-03-19 Eric Carlson <eric.carlson@apple.com> >+ >+ [Extra zoom mode] Require fullscreen for video playback >+ https://bugs.webkit.org/show_bug.cgi?id=183742 >+ <rdar://problem/38235862> >+ >+ Reviewed by NOBODY (OOPS!). >+ >+ * UIProcess/Cocoa/VideoFullscreenManagerProxy.h: >+ * UIProcess/Cocoa/VideoFullscreenManagerProxy.mm: >+ (-[WKVideoFullScreenViewController initWithAVPlayerViewController:]): >+ (-[WKVideoFullScreenViewController viewDidLoad]): >+ (-[WKVideoFullScreenViewController prefersStatusBarHidden]): >+ (WebKit::VideoFullscreenModelContext::presentingViewController): >+ (WebKit::VideoFullscreenModelContext::createVideoFullscreenViewController): >+ * WebProcess/cocoa/VideoFullscreenManager.mm: >+ (WebKit::VideoFullscreenManager::didEnterFullscreen): >+ > 2018-03-17 Jiewen Tan <jiewen_tan@apple.com> > > [WebAuthN] Implement authenticatorMakeCredential >diff --git a/Source/WTF/wtf/Platform.h b/Source/WTF/wtf/Platform.h >index 5668a306dd6c020927cf356bb7def2179251cf20..735f8b3fbde2f5fc06268fa48d3b3da6cb90776b 100644 >--- a/Source/WTF/wtf/Platform.h >+++ b/Source/WTF/wtf/Platform.h >@@ -1042,10 +1042,13 @@ > > #if !PLATFORM(WATCHOS) && !PLATFORM(APPLETV) && !ENABLE(MINIMAL_SIMULATOR) > #define ENABLE_DATA_DETECTION 1 >-#define HAVE_AVKIT 1 > #define HAVE_PARENTAL_CONTROLS 1 > #endif > >+#if !PLATFORM(APPLETV) && !ENABLE(MINIMAL_SIMULATOR) >+#define HAVE_AVKIT 1 >+#endif >+ > #if ENABLE(WEBGL) > #if PLATFORM(MAC) > #define USE_OPENGL 1 >diff --git a/Source/WebCore/Modules/modern-media-controls/media/playback-support.js b/Source/WebCore/Modules/modern-media-controls/media/playback-support.js >index 4d8d77711ef51fa63438c700f8924890e5ed144b..e5018550feb24c56bc17d4d005eb978003ebd1b5 100644 >--- a/Source/WebCore/Modules/modern-media-controls/media/playback-support.js >+++ b/Source/WebCore/Modules/modern-media-controls/media/playback-support.js >@@ -47,9 +47,9 @@ class PlaybackSupport extends MediaControllerSupport > { > const isPaused = this.mediaController.media.paused; > >- // We always show the play button when the media is paused with compact layout. >+ // We always show the play button with compact layout. > if (this.mediaController.layoutTraits & LayoutTraits.Compact) >- this.control.visible = isPaused; >+ this.control.visible = true; > else > this.control.playing = !isPaused; > } >diff --git a/Source/WebCore/PAL/pal/spi/cocoa/AVKitSPI.h b/Source/WebCore/PAL/pal/spi/cocoa/AVKitSPI.h >index 437c57668bd2f64f0dbf60dcc1123f4f8259cbf2..f218f05af0b292ce444523eece786a964d73e44a 100644 >--- a/Source/WebCore/PAL/pal/spi/cocoa/AVKitSPI.h >+++ b/Source/WebCore/PAL/pal/spi/cocoa/AVKitSPI.h >@@ -41,6 +41,53 @@ > #import <AVKit/AVPlayerViewController_Private.h> > #import <AVKit/AVPlayerViewController_WebKitOnly.h> > >+#if ENABLE(EXTRA_ZOOM_MODE) >+ >+#import <AVFoundation/AVPlayerLayer.h> >+ >+NS_ASSUME_NONNULL_BEGIN >+ >+@interface AVPictureInPicturePlayerLayerView : UIView >+@property (nonatomic, readonly) AVPlayerLayer *playerLayer; >+@end >+ >+@interface __AVPlayerLayerView (Details) >+@property (nonatomic, readonly) AVPlayerLayer *playerLayer; >+- (AVPictureInPicturePlayerLayerView*) pictureInPicturePlayerLayerView; >+- (void)startRoutingVideoToPictureInPicturePlayerLayerView; >+- (void)stopRoutingVideoToPictureInPicturePlayerLayerView; >+@end >+ >+@class AVPlayerLayerView; >+@interface AVPlayerViewController (AVPlayerViewController_WebKitOnly_Internal) >+- (void)enterFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError * __nullable error))completionHandler; >+- (void)exitFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError * __nullable error))completionHandler; >+- (void)startPictureInPicture; >+- (void)stopPictureInPicture; >+ >+@property (nonatomic) BOOL showsExitFullScreenButton; >+@property (nonatomic, readonly, getter=isPictureInPicturePossible) BOOL pictureInPicturePossible; >+@property (nonatomic, readonly, getter=isPictureInPictureActive) BOOL pictureInPictureActive; >+@property (nonatomic, readonly, getter=isPictureInPictureSuspended) BOOL pictureInPictureSuspended; >+@property (nonatomic, readonly) BOOL pictureInPictureWasStartedWhenEnteringBackground; >+@end >+ >+@protocol AVPlayerViewControllerDelegate_WebKitOnly <AVPlayerViewControllerDelegate> >+@optional >+typedef NS_ENUM(NSInteger, AVPlayerViewControllerExitFullScreenReason) { >+ AVPlayerViewControllerExitFullScreenReasonDoneButtonTapped, >+ AVPlayerViewControllerExitFullScreenReasonFullScreenButtonTapped, >+ AVPlayerViewControllerExitFullScreenReasonPinchGestureHandled, >+ AVPlayerViewControllerExitFullScreenReasonRemoteControlStopEventReceived, >+ AVPlayerViewControllerExitFullScreenReasonPictureInPictureStarted >+}; >+- (BOOL)playerViewController:(AVPlayerViewController *)playerViewController shouldExitFullScreenWithReason:(AVPlayerViewControllerExitFullScreenReason)reason; >+@end >+ >+NS_ASSUME_NONNULL_END >+ >+#endif >+ > #else > > @interface AVPlayerController : UIResponder >diff --git a/Source/WebCore/html/HTMLMediaElement.cpp b/Source/WebCore/html/HTMLMediaElement.cpp >index f00c437853654ab6371c51892f27f4cd2de69236..334227733a5aef5d8b2e07768d0a0893a527d405 100644 >--- a/Source/WebCore/html/HTMLMediaElement.cpp >+++ b/Source/WebCore/html/HTMLMediaElement.cpp >@@ -5264,8 +5264,12 @@ void HTMLMediaElement::updatePlayState(UpdateState updateState) > if (playerPaused) { > m_mediaSession->clientWillBeginPlayback(); > >- if (m_mediaSession->requiresFullscreenForVideoPlayback(*this) && !isFullscreen()) >+ if (m_mediaSession->requiresFullscreenForVideoPlayback(*this) && !isFullscreen()) { > enterFullscreen(); >+#if ENABLE(EXTRA_ZOOM_MODE) >+ return; >+#endif >+ } > > // Set rate, muted before calling play in case they were set before the media engine was setup. > // The media engine should just stash the rate and muted values since it isn't already playing. >@@ -5967,6 +5971,9 @@ void HTMLMediaElement::didBecomeFullscreenElement() > { > if (hasMediaControls()) > mediaControls()->enteredFullscreen(); >+#if ENABLE(EXTRA_ZOOM_MODE) >+ updatePlayState(UpdateState::Asynchronously); >+#endif > } > > void HTMLMediaElement::willStopBeingFullscreenElement() >diff --git a/Source/WebCore/html/HTMLMediaElement.h b/Source/WebCore/html/HTMLMediaElement.h >index fc81dc2f0fb7a0adbf9e3bcb50ae65b05214eda7..478254f859788314229d7168cd617b929b6f221a 100644 >--- a/Source/WebCore/html/HTMLMediaElement.h >+++ b/Source/WebCore/html/HTMLMediaElement.h >@@ -553,6 +553,8 @@ public: > > bool isSuspended() const final; > >+ WEBCORE_EXPORT void didBecomeFullscreenElement() override; >+ > protected: > HTMLMediaElement(const QualifiedName&, Document&, bool createdByParser); > virtual void finishInitialization(); >@@ -603,7 +605,6 @@ private: > void didRecalcStyle(Style::Change) override; > > void willBecomeFullscreenElement() override; >- void didBecomeFullscreenElement() override; > void willStopBeingFullscreenElement() override; > > // ActiveDOMObject API. >diff --git a/Source/WebCore/platform/cocoa/VideoFullscreenModel.h b/Source/WebCore/platform/cocoa/VideoFullscreenModel.h >index 387f753391da20107964a615147178991c9b61ca..da52175074706def1f3db50c42f116c0609b45fb 100644 >--- a/Source/WebCore/platform/cocoa/VideoFullscreenModel.h >+++ b/Source/WebCore/platform/cocoa/VideoFullscreenModel.h >@@ -32,6 +32,11 @@ > #include "HTMLMediaElementEnums.h" > #include "PlaybackSessionModel.h" > >+#if PLATFORM(IOS) >+OBJC_CLASS AVPlayerViewController; >+OBJC_CLASS UIViewController; >+#endif >+ > namespace WebCore { > > class VideoFullscreenModelClient; >@@ -51,6 +56,11 @@ public: > virtual bool isVisible() const = 0; > virtual FloatSize videoDimensions() const = 0; > virtual bool hasVideo() const = 0; >+ >+#if PLATFORM(IOS) >+ virtual UIViewController *presentingViewController() { return nullptr; } >+ virtual UIViewController *createVideoFullscreenViewController(AVPlayerViewController *) { return nullptr; } >+#endif > }; > > class VideoFullscreenModelClient { >diff --git a/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm b/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm >index 966e97a05cbc84a6d05bb46732597f1e896f2762..675dcf4303f4aa29fd71144ab0494fd550342368 100644 >--- a/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm >+++ b/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm >@@ -710,7 +710,7 @@ void MediaPlayerPrivateAVFoundationObjC::createAVPlayerLayer() > #if PLATFORM(IOS) || (PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)) > m_videoFullscreenLayerManager->setVideoLayer(m_videoLayer.get(), defaultSize); > >-#if PLATFORM(IOS) >+#if PLATFORM(IOS) && !ENABLE(EXTRA_ZOOM_MODE) > if ([m_videoLayer respondsToSelector:@selector(setPIPModeEnabled:)]) > [m_videoLayer setPIPModeEnabled:(player()->fullscreenMode() & MediaPlayer::VideoFullscreenModePictureInPicture)]; > #endif >@@ -1232,7 +1232,7 @@ void MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenGravity(MediaPlayer:: > > void MediaPlayerPrivateAVFoundationObjC::setVideoFullscreenMode(MediaPlayer::VideoFullscreenMode mode) > { >-#if PLATFORM(IOS) >+#if PLATFORM(IOS) && !ENABLE(EXTRA_ZOOM_MODE) > if ([m_videoLayer respondsToSelector:@selector(setPIPModeEnabled:)]) > [m_videoLayer setPIPModeEnabled:(mode & MediaPlayer::VideoFullscreenModePictureInPicture)]; > updateDisableExternalPlayback(); >diff --git a/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.mm b/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.mm >index e37a2eac57d11c34af8fe3c1409c00966ab0f4cd..0a3695a70b582ade74d0c4d3c9c3c5e92a19d319 100644 >--- a/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.mm >+++ b/Source/WebCore/platform/ios/PlaybackSessionInterfaceAVKit.mm >@@ -128,6 +128,7 @@ void PlaybackSessionInterfaceAVKit::seekableRangesChanged(const TimeRanges& time > { > RetainPtr<NSMutableArray> seekableRanges = adoptNS([[NSMutableArray alloc] init]); > >+#if !ENABLE(EXTRA_ZOOM_MODE) > for (unsigned i = 0; i < timeRanges.length(); i++) { > double start = timeRanges.start(i).releaseReturnValue(); > double end = timeRanges.end(i).releaseReturnValue(); >@@ -135,6 +136,9 @@ void PlaybackSessionInterfaceAVKit::seekableRangesChanged(const TimeRanges& time > CMTimeRange range = CMTimeRangeMake(CMTimeMakeWithSeconds(start, 1000), CMTimeMakeWithSeconds(end-start, 1000)); > [seekableRanges addObject:[NSValue valueWithCMTimeRange:range]]; > } >+#else >+ UNUSED_PARAM(timeRanges); >+#endif > > [m_playerController setSeekableTimeRanges:seekableRanges.get()]; > [m_playerController setSeekableTimeRangesLastModifiedTime: lastModifiedTime]; >diff --git a/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.h b/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.h >index 52f8a12b3d47a4c1522815686e817b0ea1fea5ef..e11fc2503ad9aeb2c2d8e3ede6e0fbe4f58ff5f7 100644 >--- a/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.h >+++ b/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.h >@@ -1,5 +1,5 @@ > /* >- * Copyright (C) 2014 Apple Inc. All rights reserved. >+ * Copyright (C) 2014-2018 Apple Inc. All rights reserved. > * > * Redistribution and use in source and binary forms, with or without > * modification, are permitted provided that the following conditions >@@ -40,7 +40,6 @@ > #include <wtf/RetainPtr.h> > #include <wtf/RunLoop.h> > >-OBJC_CLASS AVPlayerViewController; > OBJC_CLASS UIViewController; > OBJC_CLASS UIWindow; > OBJC_CLASS UIView; >@@ -48,6 +47,7 @@ OBJC_CLASS CALayer; > OBJC_CLASS WebAVPlayerController; > OBJC_CLASS WebAVPlayerLayerView; > OBJC_CLASS WebAVPlayerLayer; >+OBJC_CLASS WebAVPlayerViewController; > OBJC_CLASS WebAVPlayerViewControllerDelegate; > OBJC_CLASS NSError; > >@@ -157,6 +157,12 @@ public: > void clearMode(HTMLMediaElementEnums::VideoFullscreenMode); > bool hasMode(HTMLMediaElementEnums::VideoFullscreenMode mode) const { return m_currentMode.hasMode(mode); } > >+#if PLATFORM(IOS) >+ UIViewController *presentingViewController(); >+ UIViewController *fullscreenViewController() const { return m_viewController.get(); } >+ WebAVPlayerLayerView* playerLayerView() const { return m_playerLayerView.get(); } >+#endif >+ > protected: > WEBCORE_EXPORT VideoFullscreenInterfaceAVKit(PlaybackSessionInterfaceAVKit&); > >@@ -175,7 +181,7 @@ protected: > > Ref<PlaybackSessionInterfaceAVKit> m_playbackSessionInterface; > RetainPtr<WebAVPlayerViewControllerDelegate> m_playerViewControllerDelegate; >- RetainPtr<AVPlayerViewController> m_playerViewController; >+ RetainPtr<WebAVPlayerViewController> m_playerViewController; > VideoFullscreenModel* m_videoFullscreenModel { nullptr }; > VideoFullscreenChangeObserver* m_fullscreenChangeObserver { nullptr }; > >diff --git a/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm b/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm >index 03efbde23f3a72cafedae544ec823c769626df2d..7edc81cb3c36280a66c0785c32757ea8a0d82482 100644 >--- a/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm >+++ b/Source/WebCore/platform/ios/VideoFullscreenInterfaceAVKit.mm >@@ -1,5 +1,5 @@ > /* >- * Copyright (C) 2014, 2015 Apple Inc. All rights reserved. >+ * Copyright (C) 2014-2018 Apple Inc. All rights reserved. > * > * Redistribution and use in source and binary forms, with or without > * modification, are permitted provided that the following conditions >@@ -40,9 +40,11 @@ > #import "WebAVPlayerController.h" > #import <AVFoundation/AVTime.h> > #import <UIKit/UIKit.h> >+#import <UIKit/UIWindow.h> > #import <objc/message.h> > #import <objc/runtime.h> > #import <pal/spi/cocoa/AVKitSPI.h> >+#import <pal/spi/ios/UIKitSPI.h> > #import <wtf/RetainPtr.h> > #import <wtf/text/CString.h> > #import <wtf/text/WTFString.h> >@@ -93,6 +95,12 @@ static const char* boolString(bool val) > #endif > > static const Seconds defaultWatchdogTimerInterval { 1_s }; >+static bool ignoreWatchdogForDebugging = false; >+ >+@interface AVPlayerViewController (Details) >+@property (nonatomic) BOOL showsPlaybackControls; >+@property (nonatomic) UIView* view; >+@end > > @class WebAVMediaSelectionOption; > >@@ -412,10 +420,23 @@ static void WebAVPlayerLayerView_setPlayerController(id aSelf, SEL, AVPlayerCont > [webAVPlayerLayer setPlayerController: playerController]; > } > >+static AVPlayerLayer *WebAVPlayerLayerView_playerLayer(id aSelf, SEL) >+{ >+ __AVPlayerLayerView *playerLayerView = aSelf; >+ >+ if ([get__AVPlayerLayerViewClass() instancesRespondToSelector:@selector(playerLayer)]) { >+ objc_super superClass { playerLayerView, get__AVPlayerLayerViewClass() }; >+ auto superClassMethod = reinterpret_cast<AVPlayerLayer *(*)(objc_super *, SEL)>(objc_msgSendSuper); >+ return superClassMethod(&superClass, @selector(playerLayer)); >+ } >+ >+ return (AVPlayerLayer *)[playerLayerView layer]; >+} >+ > static UIView *WebAVPlayerLayerView_videoView(id aSelf, SEL) > { >- __AVPlayerLayerView *playerLayer = aSelf; >- WebAVPlayerLayer *webAVPlayerLayer = (WebAVPlayerLayer *)[playerLayer playerLayer]; >+ __AVPlayerLayerView *playerLayerView = aSelf; >+ WebAVPlayerLayer *webAVPlayerLayer = (WebAVPlayerLayer *)[playerLayerView playerLayer]; > CALayer* videoLayer = [webAVPlayerLayer videoSublayer]; > if (!videoLayer || !videoLayer.delegate) > return nil; >@@ -486,12 +507,14 @@ static WebAVPlayerLayerView *allocWebAVPlayerLayerViewInstance() > static Class theClass = nil; > static dispatch_once_t onceToken; > dispatch_once(&onceToken, ^{ >+ ASSERT(get__AVPlayerLayerViewClass()); > theClass = objc_allocateClassPair(get__AVPlayerLayerViewClass(), "WebAVPlayerLayerView", 0); > class_addMethod(theClass, @selector(dealloc), (IMP)WebAVPlayerLayerView_dealloc, "v@:"); > class_addMethod(theClass, @selector(setPlayerController:), (IMP)WebAVPlayerLayerView_setPlayerController, "v@:@"); > class_addMethod(theClass, @selector(playerController), (IMP)WebAVPlayerLayerView_playerController, "@@:"); > class_addMethod(theClass, @selector(setVideoView:), (IMP)WebAVPlayerLayerView_setVideoView, "v@:@"); > class_addMethod(theClass, @selector(videoView), (IMP)WebAVPlayerLayerView_videoView, "@@:"); >+ class_addMethod(theClass, @selector(playerLayer), (IMP)WebAVPlayerLayerView_playerLayer, "@@:"); > class_addMethod(theClass, @selector(startRoutingVideoToPictureInPicturePlayerLayerView), (IMP)WebAVPlayerLayerView_startRoutingVideoToPictureInPicturePlayerLayerView, "v@:"); > class_addMethod(theClass, @selector(stopRoutingVideoToPictureInPicturePlayerLayerView), (IMP)WebAVPlayerLayerView_stopRoutingVideoToPictureInPicturePlayerLayerView, "v@:"); > class_addMethod(theClass, @selector(pictureInPicturePlayerLayerView), (IMP)WebAVPlayerLayerView_pictureInPicturePlayerLayerView, "@@:"); >@@ -505,6 +528,191 @@ static WebAVPlayerLayerView *allocWebAVPlayerLayerViewInstance() > return (WebAVPlayerLayerView *)[theClass alloc]; > } > >+NS_ASSUME_NONNULL_BEGIN >+@interface WebAVPlayerViewController : NSObject<AVPlayerViewControllerDelegate> >+- (instancetype)initWithFullscreenInterface:(VideoFullscreenInterfaceAVKit *)interface; >+- (void)enterFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError *))completionHandler; >+- (void)exitFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError *))completionHandler; >+- (void)startPictureInPicture; >+- (void)stopPictureInPicture; >+ >+- (BOOL)playerViewControllerShouldHandleDoneButtonTap:(AVPlayerViewController *)playerViewController; >+@end >+NS_ASSUME_NONNULL_END >+ >+@implementation WebAVPlayerViewController { >+ VideoFullscreenInterfaceAVKit *_fullscreenInterface; >+ RetainPtr<UIViewController> _presentingViewController; >+ RetainPtr<AVPlayerViewController> _avPlayerViewController; >+ id<AVPlayerViewControllerDelegate_WebKitOnly> _delegate; >+} >+ >+- (instancetype)initWithFullscreenInterface:(VideoFullscreenInterfaceAVKit *)interface >+{ >+ if (!(self = [super init])) >+ return nil; >+ >+ _fullscreenInterface = interface; >+ _avPlayerViewController = adoptNS([allocAVPlayerViewControllerInstance() initWithPlayerLayerView:interface->playerLayerView()]); >+#if ENABLE(EXTRA_ZOOM_MODE) >+ _avPlayerViewController.get().delegate = self; >+#endif >+ >+ return self; >+} >+ >+- (BOOL)playerViewControllerShouldHandleDoneButtonTap:(AVPlayerViewController *)playerViewController >+{ >+ ASSERT(playerViewController == _avPlayerViewController.get()); >+ if (_delegate) >+ return [_delegate playerViewController:playerViewController shouldExitFullScreenWithReason:AVPlayerViewControllerExitFullScreenReasonDoneButtonTapped]; >+ >+ return YES; >+} >+ >+- (void)enterFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError * __nullable error))completionHandler >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ _presentingViewController = _fullscreenInterface->presentingViewController(); >+ >+ _avPlayerViewController.get().view.frame = _presentingViewController.get().view.frame; >+ [_presentingViewController presentViewController:_fullscreenInterface->fullscreenViewController() animated:animated completion:^{ >+ if (completionHandler) >+ completionHandler(YES, nil); >+ }]; >+#else >+ [_avPlayerViewController.get() enterFullScreenAnimated:animated completionHandler:completionHandler]; >+#endif >+} >+ >+- (void)exitFullScreenAnimated:(BOOL)animated completionHandler:(void (^)(BOOL success, NSError * __nullable error))completionHandler >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ if (!_presentingViewController) >+ return; >+ >+ [_presentingViewController dismissViewControllerAnimated:animated completion:^{ >+ _presentingViewController = nil; >+ if (completionHandler) >+ completionHandler(YES, nil); >+ }]; >+#else >+ [_avPlayerViewController.get() exitFullScreenAnimated:animated completionHandler:completionHandler]; >+#endif >+} >+ >+- (void)startPictureInPicture NO_RETURN_DUE_TO_ASSERT >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ ASSERT_NOT_REACHED(); >+#else >+ [_avPlayerViewController.get() startPictureInPicture]; >+#endif >+} >+ >+- (void)stopPictureInPicture NO_RETURN_DUE_TO_ASSERT >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ ASSERT_NOT_REACHED(); >+#else >+ [_avPlayerViewController.get() stopPictureInPicture]; >+#endif >+} >+ >+- (BOOL)isPictureInPicturePossible >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ return NO; >+#else >+ return _avPlayerViewController.get().isPictureInPicturePossible; >+#endif >+} >+ >+- (BOOL)isPictureInPictureActive >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ return NO; >+#else >+ return _avPlayerViewController.get().isPictureInPictureActive; >+#endif >+} >+ >+- (BOOL)pictureInPictureActive >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ return NO; >+#else >+ return _avPlayerViewController.get().pictureInPictureActive; >+#endif >+} >+ >+- (BOOL)pictureInPictureWasStartedWhenEnteringBackground >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ return NO; >+#else >+ return _avPlayerViewController.get().pictureInPictureWasStartedWhenEnteringBackground; >+#endif >+} >+ >+- (UIView *) view >+{ >+ return _avPlayerViewController.get().view; >+} >+ >+- (BOOL)showsPlaybackControls >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ return YES; >+#else >+ return _avPlayerViewController.get().showsPlaybackControls; >+#endif >+} >+ >+- (void)setShowsPlaybackControls:(BOOL)showsPlaybackControls >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ UNUSED_PARAM(showsPlaybackControls); >+#else >+ _avPlayerViewController.get().showsPlaybackControls = showsPlaybackControls; >+#endif >+} >+ >+- (void)setAllowsPictureInPicturePlayback:(BOOL)allowsPictureInPicturePlayback >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ UNUSED_PARAM(allowsPictureInPicturePlayback); >+#else >+ _avPlayerViewController.get().allowsPictureInPicturePlayback = allowsPictureInPicturePlayback; >+#endif >+} >+ >+- (void)setDelegate:(id <AVPlayerViewControllerDelegate>)delegate >+{ >+#if ENABLE(EXTRA_ZOOM_MODE) >+ ASSERT(!delegate || [delegate respondsToSelector:@selector(playerViewController:shouldExitFullScreenWithReason:)]); >+ _delegate = id<AVPlayerViewControllerDelegate_WebKitOnly>(delegate); >+#else >+ _avPlayerViewController.get().delegate = delegate; >+#endif >+} >+ >+- (void)setPlayerController:(AVPlayerController *)playerController >+{ >+ _avPlayerViewController.get().playerController = playerController; >+} >+ >+- (AVPlayerViewController *) avPlayerViewController >+{ >+ return _avPlayerViewController.get(); >+} >+ >+- (void)removeFromParentViewController >+{ >+ [_avPlayerViewController.get() removeFromParentViewController]; >+} >+@end >+ > Ref<VideoFullscreenInterfaceAVKit> VideoFullscreenInterfaceAVKit::create(PlaybackSessionInterfaceAVKit& playbackSessionInterface) > { > Ref<VideoFullscreenInterfaceAVKit> interface = adoptRef(*new VideoFullscreenInterfaceAVKit(playbackSessionInterface)); >@@ -619,6 +827,7 @@ void VideoFullscreenInterfaceAVKit::setupFullscreen(UIView& videoView, const Int > [CATransaction begin]; > [CATransaction setDisableActions:YES]; > >+#if !ENABLE(EXTRA_ZOOM_MODE) > if (![[m_parentView window] _isHostedInAnotherProcess]) { > if (!m_window) > m_window = adoptNS([allocUIWindowInstance() initWithFrame:[[getUIScreenClass() mainScreen] bounds]]); >@@ -631,6 +840,7 @@ void VideoFullscreenInterfaceAVKit::setupFullscreen(UIView& videoView, const Int > [m_window setWindowLevel:getUITextEffectsBeneathStatusBarWindowLevel() + 1]; > [m_window makeKeyAndVisible]; > } >+#endif > > if (!m_playerLayerView) > m_playerLayerView = adoptNS([allocWebAVPlayerLayerViewInstance() init]); >@@ -643,29 +853,30 @@ void VideoFullscreenInterfaceAVKit::setupFullscreen(UIView& videoView, const Int > } > > WebAVPlayerLayer *playerLayer = (WebAVPlayerLayer *)[m_playerLayerView playerLayer]; >- > [playerLayer setModelVideoLayerFrame:CGRectMake(0, 0, m_inlineRect.width(), m_inlineRect.height())]; > [playerLayer setVideoDimensions:[playerController() contentDimensions]]; > playerLayer.fullscreenInterface = this; > > if (!m_playerViewController) >- m_playerViewController = adoptNS([allocAVPlayerViewControllerInstance() initWithPlayerLayerView:m_playerLayerView.get()]); >+ m_playerViewController = adoptNS([[WebAVPlayerViewController alloc] initWithFullscreenInterface:this]); > > [m_playerViewController setShowsPlaybackControls:NO]; > [m_playerViewController setPlayerController:(AVPlayerController *)playerController()]; > [m_playerViewController setDelegate:m_playerViewControllerDelegate.get()]; > [m_playerViewController setAllowsPictureInPicturePlayback:m_allowsPictureInPicturePlayback]; >- > [playerController() setPictureInPicturePossible:m_allowsPictureInPicturePlayback]; > >+#if ENABLE(EXTRA_ZOOM_MODE) >+ m_viewController = model()->createVideoFullscreenViewController(m_playerViewController.get().avPlayerViewController); >+#endif >+ > if (m_viewController) { >- [m_viewController addChildViewController:m_playerViewController.get()]; >+ [m_viewController addChildViewController:m_playerViewController.get().avPlayerViewController]; > [[m_viewController view] addSubview:[m_playerViewController view]]; > } else > [m_parentView addSubview:[m_playerViewController view]]; > > [m_playerViewController view].frame = [m_parentView convertRect:m_inlineRect toView:[m_playerViewController view].superview]; >- > [[m_playerViewController view] setBackgroundColor:clearUIColor()]; > [[m_playerViewController view] setAutoresizingMask:(UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin)]; > >@@ -706,6 +917,28 @@ void VideoFullscreenInterfaceAVKit::enterPictureInPicture() > failedToStartPictureInPicture(); > } > >+static UIViewController *fallbackViewController(UIView *view) >+{ >+ for (UIView *currentView = view; currentView; currentView = currentView.superview) { >+ if (UIViewController *viewController = [getUIViewControllerClass() viewControllerForView:currentView]) { >+ if (![viewController parentViewController]) >+ return viewController; >+ } >+ } >+ >+ LOG_ERROR("Failed to find a view controller suitable to present fullscreen video"); >+ return nil; >+} >+ >+UIViewController *VideoFullscreenInterfaceAVKit::presentingViewController() >+{ >+ auto *controller = model()->presentingViewController(); >+ if (!controller) >+ controller = fallbackViewController(m_parentView.get()); >+ >+ return controller; >+} >+ > void VideoFullscreenInterfaceAVKit::enterFullscreenStandard() > { > LOG(Fullscreen, "VideoFullscreenInterfaceAVKit::enterFullscreenStandard(%p)", this); >@@ -1015,7 +1248,7 @@ bool VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason(VideoFullscre > BOOL finished = reason == ExitFullScreenReason::DoneButtonTapped || reason == ExitFullScreenReason::PinchGestureHandled; > m_videoFullscreenModel->requestFullscreenMode(HTMLMediaElementEnums::VideoFullscreenModeNone, finished); > >- if (!m_watchdogTimer.isActive()) >+ if (!m_watchdogTimer.isActive() && !ignoreWatchdogForDebugging) > m_watchdogTimer.startOneShot(defaultWatchdogTimerInterval); > > return false; >@@ -1301,7 +1534,7 @@ bool VideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason(VideoFullscre > BOOL finished = reason == ExitFullScreenReason::DoneButtonTapped || reason == ExitFullScreenReason::PinchGestureHandled; > m_videoFullscreenModel->requestFullscreenMode(HTMLMediaElementEnums::VideoFullscreenModeNone, finished); > >- if (!m_watchdogTimer.isActive()) >+ if (!m_watchdogTimer.isActive() && !ignoreWatchdogForDebugging) > m_watchdogTimer.startOneShot(defaultWatchdogTimerInterval); > > return false; >@@ -1360,6 +1593,7 @@ void VideoFullscreenInterfaceAVKit::doSetup() > } > m_setupNeedsInlineRect = false; > >+#if !ENABLE(EXTRA_ZOOM_MODE) > [CATransaction begin]; > [CATransaction setDisableActions:YES]; > if (![[m_parentView window] _isHostedInAnotherProcess] && !m_window) { >@@ -1374,6 +1608,7 @@ void VideoFullscreenInterfaceAVKit::doSetup() > [m_window setWindowLevel:getUITextEffectsBeneathStatusBarWindowLevel() + 1]; > [m_window makeKeyAndVisible]; > } >+#endif > > if (!m_playerLayerView) > m_playerLayerView = adoptNS([allocWebAVPlayerLayerViewInstance() init]); >@@ -1392,23 +1627,25 @@ void VideoFullscreenInterfaceAVKit::doSetup() > playerLayer.fullscreenInterface = this; > > if (!m_playerViewController) >- m_playerViewController = adoptNS([allocAVPlayerViewControllerInstance() initWithPlayerLayerView:m_playerLayerView.get()]); >+ m_playerViewController = adoptNS([[WebAVPlayerViewController alloc] initWithFullscreenInterface:this]); > > [m_playerViewController setShowsPlaybackControls:NO]; > [m_playerViewController setPlayerController:(AVPlayerController *)playerController()]; > [m_playerViewController setDelegate:m_playerViewControllerDelegate.get()]; > [m_playerViewController setAllowsPictureInPicturePlayback:m_allowsPictureInPicturePlayback]; >- > [playerController() setPictureInPicturePossible:m_allowsPictureInPicturePlayback]; > >+#if ENABLE(EXTRA_ZOOM_MODE) >+ m_viewController = model()->createVideoFullscreenViewController(m_playerViewController.get().avPlayerViewController); >+#endif >+ > if (m_viewController) { >- [m_viewController addChildViewController:m_playerViewController.get()]; >+ [m_viewController addChildViewController:m_playerViewController.get().avPlayerViewController]; > [[m_viewController view] addSubview:[m_playerViewController view]]; > } else > [m_parentView addSubview:[m_playerViewController view]]; > > [m_playerViewController view].frame = [m_parentView convertRect:m_inlineRect toView:[m_playerViewController view].superview]; >- > [[m_playerViewController view] setBackgroundColor:clearUIColor()]; > [[m_playerViewController view] setAutoresizingMask:(UIViewAutoresizingFlexibleBottomMargin | UIViewAutoresizingFlexibleRightMargin)]; > >@@ -1629,7 +1866,7 @@ bool VideoFullscreenInterfaceAVKit::isPlayingVideoInEnhancedFullscreen() const > > bool WebCore::supportsPictureInPicture() > { >-#if PLATFORM(IOS) && HAVE(AVKIT) >+#if PLATFORM(IOS) && HAVE(AVKIT) && !ENABLE(EXTRA_ZOOM_MODE) > return [getAVPictureInPictureControllerClass() isPictureInPictureSupported]; > #else > return false; >diff --git a/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm b/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm >index 3cc98df80302575962be60b6696322ba687186a6..0402fece6969c382bafd75d9fccd32eb3e075006 100644 >--- a/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm >+++ b/Source/WebCore/platform/ios/WebVideoFullscreenControllerAVKit.mm >@@ -878,7 +878,7 @@ void VideoFullscreenControllerContext::setUpFullscreen(HTMLVideoElement& videoEl > m_interface->setVideoFullscreenChangeObserver(this); > > m_videoFullscreenView = adoptNS([allocUIViewInstance() init]); >- >+ > m_interface->setupFullscreen(*m_videoFullscreenView.get(), videoElementClientRect, viewRef.get(), mode, allowsPictureInPicture, false); > }); > } >diff --git a/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h b/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h >index 3cb81a77d4aaa399112598a79991d6a685e12a4c..2b63632a1f3c57ae0c8fdda65f8b423ef32f6f30 100644 >--- a/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h >+++ b/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.h >@@ -85,6 +85,10 @@ private: > bool isVisible() const override; > bool hasVideo() const override { return m_hasVideo; } > WebCore::FloatSize videoDimensions() const override { return m_videoDimensions; } >+#if PLATFORM(IOS) >+ UIViewController *presentingViewController() final; >+ UIViewController *createVideoFullscreenViewController(AVPlayerViewController*) final; >+#endif > > // VideoFullscreenChangeObserver > void requestUpdateInlineRect() override; >diff --git a/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm b/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm >index 4ff277431a6cc8a170e174ccb02d09337502cf15..7bf265907e24e4825cd7461705bd60abf1d83410 100644 >--- a/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm >+++ b/Source/WebKit/UIProcess/Cocoa/VideoFullscreenManagerProxy.mm >@@ -1,5 +1,5 @@ > /* >- * Copyright (C) 2014 Apple Inc. All rights reserved. >+ * Copyright (C) 2014-2018 Apple Inc. All rights reserved. > * > * Redistribution and use in source and binary forms, with or without > * modification, are permitted provided that the following conditions >@@ -33,6 +33,7 @@ > #import "PlaybackSessionManagerProxy.h" > #import "VideoFullscreenManagerMessages.h" > #import "VideoFullscreenManagerProxyMessages.h" >+#import "WeakObjCPtr.h" > #import "WebPageProxy.h" > #import "WebProcessProxy.h" > #import <QuartzCore/CoreAnimation.h> >@@ -44,8 +45,11 @@ > #if PLATFORM(IOS) > #import "RemoteLayerTreeDrawingAreaProxy.h" > #import "UIKitSPI.h" >+#import <pal/spi/cocoa/AVKitSPI.h> > #endif > >+using namespace WebKit; >+ > @interface WKLayerHostView : PlatformView > @property (nonatomic, assign) uint32_t contextID; > @end >@@ -77,6 +81,48 @@ > > @end > >+#if PLATFORM(IOS) >+@interface WKVideoFullScreenViewController : UIViewController >+- (instancetype)initWithAVPlayerViewController:(AVPlayerViewController *)viewController NS_DESIGNATED_INITIALIZER; >+- (instancetype)initWithNibName:(NSString * _Nullable)nibNameOrNil bundle:(NSBundle * _Nullable)nibBundleOrNil NS_UNAVAILABLE; >+- (instancetype)initWithCoder:(NSCoder *)aDecoder NS_UNAVAILABLE; >+- (instancetype)init NS_UNAVAILABLE; >+@end >+ >+@implementation WKVideoFullScreenViewController { >+ WeakObjCPtr<AVPlayerViewController> _avPlayerViewController; >+} >+ >+- (instancetype)initWithAVPlayerViewController:(AVPlayerViewController *)controller >+{ >+ if (!(self = [super initWithNibName:nil bundle:nil])) >+ return nil; >+ >+ _avPlayerViewController = controller; >+ self.modalPresentationCapturesStatusBarAppearance = YES; >+ self.modalPresentationStyle = UIModalPresentationOverFullScreen; >+ >+ return self; >+} >+ >+- (void)viewDidLoad >+{ >+ [super viewDidLoad]; >+ >+ self.view.frame = UIScreen.mainScreen.bounds; >+ self.view.backgroundColor = [UIColor blackColor]; >+ [_avPlayerViewController view].autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight; >+} >+ >+- (BOOL)prefersStatusBarHidden >+{ >+ return YES; >+} >+ >+@end >+ >+#endif >+ > using namespace WebCore; > > namespace WebKit { >@@ -167,6 +213,21 @@ bool VideoFullscreenModelContext::isVisible() const > return m_manager ? m_manager->isVisible() : false; > } > >+#if PLATFORM(IOS) >+UIViewController *VideoFullscreenModelContext::presentingViewController() >+{ >+ if (m_manager) >+ return m_manager->m_page->uiClient().presentingViewController(); >+ >+ return nullptr; >+} >+ >+UIViewController *VideoFullscreenModelContext::createVideoFullscreenViewController(AVPlayerViewController *avPlayerViewController) >+{ >+ return [[WKVideoFullScreenViewController alloc] initWithAVPlayerViewController:avPlayerViewController]; >+} >+#endif >+ > void VideoFullscreenModelContext::requestUpdateInlineRect() > { > if (m_manager) >diff --git a/Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.mm b/Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.mm >index 53361f275fc96a3847fb8bd0a3da269558d6e22a..2140bdd19ea512763e321b432653002a3d75b1cf 100644 >--- a/Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.mm >+++ b/Source/WebKit/WebProcess/cocoa/VideoFullscreenManager.mm >@@ -439,13 +439,17 @@ void VideoFullscreenManager::didEnterFullscreen(uint64_t contextId) > interface->setIsAnimating(false); > interface->setIsFullscreen(false); > >- if (interface->targetIsFullscreen()) >- return; >- > RefPtr<HTMLVideoElement> videoElement = model->videoElement(); > if (!videoElement) > return; > >+ dispatch_async(dispatch_get_main_queue(), [protectedThis = makeRefPtr(this), videoElement] { >+ videoElement->didBecomeFullscreenElement(); >+ }); >+ >+ if (interface->targetIsFullscreen()) >+ return; >+ > // exit fullscreen now if it was previously requested during an animation. > dispatch_async(dispatch_get_main_queue(), [protectedThis = makeRefPtr(this), videoElement] { > if (protectedThis->m_page)
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Formatted Diff
|
Diff
Attachments on
bug 183742
:
336042
|
336044
|
336049
|
336060