⚠ Archived content — this site is no longer maintained.   Current WebKit documentation is at docs.webkit.org.

Changeset 185834 in webkit


Ignore:
Timestamp:
Jun 22, 2015, 10:41:59 AM (11 years ago)
Author:
commit-queue@webkit.org
Message:

Do not exit fullscreen when starting PiP since this is done automatically.
https://bugs.webkit.org/show_bug.cgi?id=144871

Patch by Jeremy Jones <jeremyj@apple.com> on 2015-06-22
Reviewed by Darin Adler.

Since we don't explicitly exit fullscreen, update state in shouldExitFullscreenWithReason()

  • platform/ios/WebVideoFullscreenInterfaceAVKit.h: Declare shouldExitFullscreenWithReason().
  • platform/ios/WebVideoFullscreenInterfaceAVKit.mm:

(-[WebAVPlayerController playerViewController:shouldExitFullScreenWithReason:]): Forward to WebVideoFullscreenInterfaceAVKit.
(WebVideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason): Added.
(WebVideoFullscreenInterfaceAVKit::willStartPictureInPicture): Remove enter fullscreen code.

  • platform/spi/cocoa/AVKitSPI.h: Add missing enums.
Location:
trunk/Source/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r185828 r185834  
     12015-06-22  Jeremy Jones  <jeremyj@apple.com>
     2
     3        Do not exit fullscreen when starting PiP since this is done automatically.
     4        https://bugs.webkit.org/show_bug.cgi?id=144871
     5
     6        Reviewed by Darin Adler.
     7
     8        Since we don't explicitly exit fullscreen, update state in shouldExitFullscreenWithReason()
     9
     10        * platform/ios/WebVideoFullscreenInterfaceAVKit.h: Declare shouldExitFullscreenWithReason().
     11        * platform/ios/WebVideoFullscreenInterfaceAVKit.mm:
     12        (-[WebAVPlayerController playerViewController:shouldExitFullScreenWithReason:]): Forward to WebVideoFullscreenInterfaceAVKit.
     13        (WebVideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason): Added.
     14        (WebVideoFullscreenInterfaceAVKit::willStartPictureInPicture): Remove enter fullscreen code.
     15        * platform/spi/cocoa/AVKitSPI.h: Add missing enums.
     16
    1172015-06-22  Daniel Bates  <dabates@apple.com>
    218
  • trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.h

    r185727 r185834  
    100100    WEBCORE_EXPORT virtual void preparedToReturnToInline(bool visible, const IntRect& inlineRect);
    101101
     102    enum class ExitFullScreenReason {
     103        DoneButtonTapped,
     104        FullScreenButtonTapped,
     105        PinchGestureHandled,
     106        RemoteControlStopEventReceived,
     107        PictureInPictureStarted
     108    };
     109
     110    bool shouldExitFullscreenWithReason(ExitFullScreenReason);
    102111    HTMLMediaElementEnums::VideoFullscreenMode mode() const { return m_mode; }
    103112    bool allowsPictureInPicturePlayback() const { return m_allowsPictureInPicturePlayback; }
  • trunk/Source/WebCore/platform/ios/WebVideoFullscreenInterfaceAVKit.mm

    r185761 r185834  
    223223}
    224224
     225static WebVideoFullscreenInterfaceAVKit::ExitFullScreenReason convertToExitFullScreenReason(AVPlayerViewControllerExitFullScreenReason reason)
     226{
     227    switch (reason) {
     228    case AVPlayerViewControllerExitFullScreenReasonDoneButtonTapped:
     229        return WebVideoFullscreenInterfaceAVKit::ExitFullScreenReason::DoneButtonTapped;
     230    case AVPlayerViewControllerExitFullScreenReasonFullScreenButtonTapped:
     231        return WebVideoFullscreenInterfaceAVKit::ExitFullScreenReason::FullScreenButtonTapped;
     232    case AVPlayerViewControllerExitFullScreenReasonPictureInPictureStarted:
     233        return WebVideoFullscreenInterfaceAVKit::ExitFullScreenReason::PictureInPictureStarted;
     234    case AVPlayerViewControllerExitFullScreenReasonPinchGestureHandled:
     235        return WebVideoFullscreenInterfaceAVKit::ExitFullScreenReason::PinchGestureHandled;
     236    case AVPlayerViewControllerExitFullScreenReasonRemoteControlStopEventReceived:
     237        return WebVideoFullscreenInterfaceAVKit::ExitFullScreenReason::RemoteControlStopEventReceived;
     238    }
     239}
     240
    225241- (BOOL)playerViewController:(AVPlayerViewController *)playerViewController shouldExitFullScreenWithReason:(AVPlayerViewControllerExitFullScreenReason)reason
    226242{
    227243    UNUSED_PARAM(playerViewController);
    228     UNUSED_PARAM(reason);
    229     if (!self.delegate)
    230         return YES;
    231    
    232     if (reason == AVPlayerViewControllerExitFullScreenReasonDoneButtonTapped || reason == AVPlayerViewControllerExitFullScreenReasonRemoteControlStopEventReceived)
    233         self.delegate->pause();
    234    
    235     self.delegate->requestExitFullscreen();
    236     return NO;
     244    return self.fullscreenInterface->shouldExitFullscreenWithReason(convertToExitFullScreenReason(reason));
    237245}
    238246
     
    11461154    LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::willStartPictureInPicture(%p)", this);
    11471155    setMode(HTMLMediaElementEnums::VideoFullscreenModePictureInPicture);
    1148 
    1149     if (!hasMode(HTMLMediaElementEnums::VideoFullscreenModeStandard))
    1150         return;
    1151 
    1152     RefPtr<WebVideoFullscreenInterfaceAVKit> strongThis(this);
    1153     fullscreenMayReturnToInline([strongThis, this](bool visible) {
    1154         LOG(Fullscreen, "WebVideoFullscreenInterfaceAVKit::willStartPictureInPicture - lambda(%p) - visible(%s)", this, boolString(visible));
    1155 
    1156         if (!visible) {
    1157             [m_window setHidden:YES];
    1158             [[m_playerViewController view] setHidden:YES];
    1159             return;
    1160         }
    1161 
    1162         [[m_playerViewController view] layoutIfNeeded];
    1163 
    1164         [m_playerViewController exitFullScreenAnimated:YES completionHandler:[strongThis, this] (BOOL completed, NSError*) {
    1165             if (!completed)
    1166                 return;
    1167             clearMode(HTMLMediaElementEnums::VideoFullscreenModeStandard);
    1168             [m_window setHidden:YES];
    1169             [[m_playerViewController view] setHidden:YES];
    1170         }];
    1171     });
    11721156}
    11731157
     
    12411225}
    12421226
     1227bool WebVideoFullscreenInterfaceAVKit::shouldExitFullscreenWithReason(WebVideoFullscreenInterfaceAVKit::ExitFullScreenReason reason)
     1228{
     1229    if (!m_videoFullscreenModel)
     1230        return true;
     1231
     1232    if (reason == ExitFullScreenReason::PictureInPictureStarted) {
     1233        clearMode(HTMLMediaElementEnums::VideoFullscreenModeStandard);
     1234        return true;
     1235    }
     1236
     1237    if (reason == ExitFullScreenReason::DoneButtonTapped || reason == ExitFullScreenReason::RemoteControlStopEventReceived)
     1238        m_videoFullscreenModel->pause();
     1239   
     1240    m_videoFullscreenModel->requestExitFullscreen();
     1241   
     1242    return false;
     1243}
     1244
    12431245void WebVideoFullscreenInterfaceAVKit::setMode(HTMLMediaElementEnums::VideoFullscreenMode mode)
    12441246{
  • trunk/Source/WebCore/platform/spi/cocoa/AVKitSPI.h

    r185727 r185834  
    7575@optional
    7676typedef NS_ENUM(NSInteger, AVPlayerViewControllerExitFullScreenReason) {
    77     AVPlayerViewControllerExitFullScreenReasonDoneButtonTapped = 0,
    78     AVPlayerViewControllerExitFullScreenReasonRemoteControlStopEventReceived = 3,
     77    AVPlayerViewControllerExitFullScreenReasonDoneButtonTapped,
     78    AVPlayerViewControllerExitFullScreenReasonFullScreenButtonTapped,
     79    AVPlayerViewControllerExitFullScreenReasonPinchGestureHandled,
     80    AVPlayerViewControllerExitFullScreenReasonRemoteControlStopEventReceived,
     81    AVPlayerViewControllerExitFullScreenReasonPictureInPictureStarted
    7982};
    8083- (BOOL)playerViewController:(AVPlayerViewController *)playerViewController shouldExitFullScreenWithReason:(AVPlayerViewControllerExitFullScreenReason)reason;
Note: See TracChangeset for help on using the changeset viewer.