Changeset 224313 in webkit


Ignore:
Timestamp:
Nov 1, 2017 8:25:19 PM (6 years ago)
Author:
commit-queue@webkit.org
Message:

Implement WKFullscreenWindowController for iOS.
https://bugs.webkit.org/show_bug.cgi?id=178924
rdar://problem/34697120

Patch by Jeremy Jones <jeremyj@apple.com> on 2017-11-01
Reviewed by Simon Fraser.

Source/JavaScriptCore:

Enable ENABLE_FULLSCREEN_API for iOS.

  • Configurations/FeatureDefines.xcconfig:

Source/WebCore:

Enable ENABLE_FULLSCREEN_API for iOS.

  • Configurations/FeatureDefines.xcconfig:

Source/WebCore/PAL:

Enable ENABLE_FULLSCREEN_API for iOS;

  • Configurations/FeatureDefines.xcconfig:

Source/WebKit:

Plumb relevant calls through WKWebView and PageClientImplIOS.

This forms the base implementation for element fullscreen. This will animate an element into fullscreen and back to inline.
It does this by replacing the WKWebView with a placeholder image and presenting the WKWebView with a fullscreen view controller.
This also attempts to preserve UI state of the WKWebView when it is placed back inline.

To enable _WKFullscreenDelegate for iOS, this adds an iOS version of the delegate methods that passes WKWebView instead of NSView.
The iOS version of these functions are renamed to be more specific and disambiguate them from the video fullscreen delegate methods.

This also adds an image asset for the done button.

  • Configurations/FeatureDefines.xcconfig:
  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView hasFullScreenWindowController]):
(-[WKWebView fullScreenWindowController]):
(-[WKWebView closeFullScreenWindowController]):
(-[WKWebView fullScreenPlaceholderView]):

  • UIProcess/API/Cocoa/WKWebViewInternal.h:
  • UIProcess/API/Cocoa/_WKFullscreenDelegate.h:
  • UIProcess/Cocoa/FullscreenClient.h:
  • UIProcess/Cocoa/FullscreenClient.mm:

(WebKit::FullscreenClient::FullscreenClient):
(WebKit::FullscreenClient::setDelegate):
(WebKit::FullscreenClient::willEnterFullscreen):
(WebKit::FullscreenClient::didEnterFullscreen):
(WebKit::FullscreenClient::willExitFullscreen):
(WebKit::FullscreenClient::didExitFullscreen):

  • UIProcess/ios/PageClientImplIOS.mm:

(WebKit::PageClientImpl::closeFullScreenManager):
(WebKit::PageClientImpl::isFullScreen):
(WebKit::PageClientImpl::enterFullScreen):
(WebKit::PageClientImpl::exitFullScreen):
(WebKit::PageClientImpl::beganEnterFullScreen):
(WebKit::PageClientImpl::beganExitFullScreen):

  • UIProcess/ios/WKContentView.mm:
  • UIProcess/ios/WKFullScreenWindowControllerIOS.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKFullscreenDelegate.h.
  • UIProcess/ios/WKFullScreenWindowControllerIOS.mm: Added.

(WebKit::replaceViewWithView):
(WebKit::WKWebViewState::applyTo):
(WebKit::WKWebViewState::store):
(-[_WKTapDelgatingView setTarget:action:]):
(-[_WKTapDelgatingView hitTest:withEvent:]):
(-[_WKFullScreenViewController dealloc]):
(-[_WKFullScreenViewController viewWillTransitionToSize:withTransitionCoordinator:]):
(+[_WKFullScreenViewController configureView:withBackgroundFillOfColor:opacity:filter:]):
(-[_WKFullScreenViewController _updateTransparencyOfVisualEffectView:]):
(-[_WKFullScreenViewController createVisualEffectViewWithFrame:]):
(-[_WKFullScreenViewController loadView]):
(-[_WKFullScreenViewController viewWillAppear:]):
(-[_WKFullScreenViewController viewDidDisappear:]):
(-[_WKFullScreenViewController cancelAction:]):
(-[_WKFullScreenViewController hideCancelButton]):
(-[_WKFullScreenViewController showCancelButton]):
(-[_WKFullScreenViewController setTarget:action:]):
(-[_WKFullScreenViewController prefersStatusBarHidden]):
(-[WKFullscreenAnimationController transitionDuration:]):
(-[WKFullscreenAnimationController animateTransition:]):
(-[WKFullscreenAnimationController animationEnded:]):
(-[WKFullScreenWindowController initWithWebView:page:]):
(-[WKFullScreenWindowController dealloc]):
(-[WKFullScreenWindowController isFullScreen]):
(-[WKFullScreenWindowController webViewPlaceholder]):
(-[WKFullScreenWindowController enterFullScreen]):
(-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
(-[WKFullScreenWindowController completedEnterFullScreen]):
(-[WKFullScreenWindowController exitFullScreen]):
(-[WKFullScreenWindowController requestExitFullScreen]):
(-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
(-[WKFullScreenWindowController completedExitFullScreen]):
(-[WKFullScreenWindowController close]):
(-[WKFullScreenWindowController _manager]):
(-[WKFullScreenWindowController animationControllerForPresentedController:presentingController:sourceController:]):
(-[WKFullScreenWindowController animationControllerForDismissedController:]):

  • WebKit.xcassets/Contents.json: Added.
  • WebKit.xcassets/Done.imageset/Contents.json: Added.
  • WebKit.xcassets/Done.imageset/Done.pdf: Added.
  • WebKit.xcodeproj/project.pbxproj:
  • WebProcess/FullScreen/WebFullScreenManager.cpp:

(WebKit::WebFullScreenManager::willEnterFullScreen):
(WebKit::WebFullScreenManager::willExitFullScreen):

Source/WebKitLegacy/mac:

Enable ENABLE_FULLSCREEN_API for iOS. Fix a build error.

  • Configurations/FeatureDefines.xcconfig:
  • WebView/WebView.mm:

(-[WebView fullScreenPlaceholderView]):

Tools:

Enable ENABLE_FULLSCREEN_API for iOS.

  • TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
Location:
trunk
Files:
6 added
23 edited
1 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/JavaScriptCore/ChangeLog

    r224309 r224313  
     12017-11-01  Jeremy Jones  <jeremyj@apple.com>
     2
     3        Implement WKFullscreenWindowController for iOS.
     4        https://bugs.webkit.org/show_bug.cgi?id=178924
     5        rdar://problem/34697120
     6
     7        Reviewed by Simon Fraser.
     8
     9        Enable ENABLE_FULLSCREEN_API for iOS.
     10
     11        * Configurations/FeatureDefines.xcconfig:
     12
    1132017-11-01  Mark Lam  <mark.lam@apple.com>
    214
  • trunk/Source/JavaScriptCore/Configurations/FeatureDefines.xcconfig

    r224263 r224313  
    8888ENABLE_DEVICE_ORIENTATION[sdk=iphone*] = ENABLE_DEVICE_ORIENTATION;
    8989ENABLE_FILTERS_LEVEL_2 = ENABLE_FILTERS_LEVEL_2;
     90ENABLE_FULLSCREEN_API[sdk=iphone*] = ENABLE_FULLSCREEN_API;
    9091ENABLE_FULLSCREEN_API[sdk=macosx*] = ENABLE_FULLSCREEN_API;
    9192ENABLE_GAMEPAD = ENABLE_GAMEPAD;
  • trunk/Source/WebCore/ChangeLog

    r224312 r224313  
     12017-11-01  Jeremy Jones  <jeremyj@apple.com>
     2
     3        Implement WKFullscreenWindowController for iOS.
     4        https://bugs.webkit.org/show_bug.cgi?id=178924
     5        rdar://problem/34697120
     6
     7        Reviewed by Simon Fraser.
     8
     9        Enable ENABLE_FULLSCREEN_API for iOS.
     10
     11        * Configurations/FeatureDefines.xcconfig:
     12
    1132017-11-01  Simon Fraser  <simon.fraser@apple.com>
    214
  • trunk/Source/WebCore/Configurations/FeatureDefines.xcconfig

    r224263 r224313  
    8888ENABLE_DEVICE_ORIENTATION[sdk=iphone*] = ENABLE_DEVICE_ORIENTATION;
    8989ENABLE_FILTERS_LEVEL_2 = ENABLE_FILTERS_LEVEL_2;
     90ENABLE_FULLSCREEN_API[sdk=iphone*] = ENABLE_FULLSCREEN_API;
    9091ENABLE_FULLSCREEN_API[sdk=macosx*] = ENABLE_FULLSCREEN_API;
    9192ENABLE_GAMEPAD = ENABLE_GAMEPAD;
  • trunk/Source/WebCore/PAL/ChangeLog

    r224299 r224313  
     12017-11-01  Jeremy Jones  <jeremyj@apple.com>
     2
     3        Implement WKFullscreenWindowController for iOS.
     4        https://bugs.webkit.org/show_bug.cgi?id=178924
     5        rdar://problem/34697120
     6
     7        Reviewed by Simon Fraser.
     8
     9        Enable ENABLE_FULLSCREEN_API for iOS;
     10
     11        * Configurations/FeatureDefines.xcconfig:
     12
    1132017-11-01  Daniel Bates  <dabates@apple.com>
    214
  • trunk/Source/WebCore/PAL/Configurations/FeatureDefines.xcconfig

    r224263 r224313  
    8888ENABLE_DEVICE_ORIENTATION[sdk=iphone*] = ENABLE_DEVICE_ORIENTATION;
    8989ENABLE_FILTERS_LEVEL_2 = ENABLE_FILTERS_LEVEL_2;
     90ENABLE_FULLSCREEN_API[sdk=iphone*] = ENABLE_FULLSCREEN_API;
    9091ENABLE_FULLSCREEN_API[sdk=macosx*] = ENABLE_FULLSCREEN_API;
    9192ENABLE_GAMEPAD = ENABLE_GAMEPAD;
  • trunk/Source/WebKit/ChangeLog

    r224299 r224313  
     12017-11-01  Jeremy Jones  <jeremyj@apple.com>
     2
     3        Implement WKFullscreenWindowController for iOS.
     4        https://bugs.webkit.org/show_bug.cgi?id=178924
     5        rdar://problem/34697120
     6
     7        Reviewed by Simon Fraser.
     8
     9        Plumb relevant calls through WKWebView and PageClientImplIOS.
     10
     11        This forms the base implementation for element fullscreen. This will animate an element into fullscreen and back to inline.
     12        It does this by replacing the WKWebView with a placeholder image and presenting the WKWebView with a fullscreen view controller.
     13        This also attempts to preserve UI state of the WKWebView when it is placed back inline.
     14
     15        To enable _WKFullscreenDelegate for iOS, this adds an iOS version of the delegate methods that passes WKWebView instead of NSView.
     16        The iOS version of these functions are renamed to be more specific and disambiguate them from the video fullscreen delegate methods.
     17
     18        This also adds an image asset for the done button.
     19
     20        * Configurations/FeatureDefines.xcconfig:
     21        * UIProcess/API/Cocoa/WKWebView.mm:
     22        (-[WKWebView hasFullScreenWindowController]):
     23        (-[WKWebView fullScreenWindowController]):
     24        (-[WKWebView closeFullScreenWindowController]):
     25        (-[WKWebView fullScreenPlaceholderView]):
     26        * UIProcess/API/Cocoa/WKWebViewInternal.h:
     27        * UIProcess/API/Cocoa/_WKFullscreenDelegate.h:
     28        * UIProcess/Cocoa/FullscreenClient.h:
     29        * UIProcess/Cocoa/FullscreenClient.mm:
     30        (WebKit::FullscreenClient::FullscreenClient):
     31        (WebKit::FullscreenClient::setDelegate):
     32        (WebKit::FullscreenClient::willEnterFullscreen):
     33        (WebKit::FullscreenClient::didEnterFullscreen):
     34        (WebKit::FullscreenClient::willExitFullscreen):
     35        (WebKit::FullscreenClient::didExitFullscreen):
     36        * UIProcess/ios/PageClientImplIOS.mm:
     37        (WebKit::PageClientImpl::closeFullScreenManager):
     38        (WebKit::PageClientImpl::isFullScreen):
     39        (WebKit::PageClientImpl::enterFullScreen):
     40        (WebKit::PageClientImpl::exitFullScreen):
     41        (WebKit::PageClientImpl::beganEnterFullScreen):
     42        (WebKit::PageClientImpl::beganExitFullScreen):
     43        * UIProcess/ios/WKContentView.mm:
     44        * UIProcess/ios/WKFullScreenWindowControllerIOS.h: Copied from Source/WebKit/UIProcess/API/Cocoa/_WKFullscreenDelegate.h.
     45        * UIProcess/ios/WKFullScreenWindowControllerIOS.mm: Added.
     46        (WebKit::replaceViewWithView):
     47        (WebKit::WKWebViewState::applyTo):
     48        (WebKit::WKWebViewState::store):
     49        (-[_WKTapDelgatingView setTarget:action:]):
     50        (-[_WKTapDelgatingView hitTest:withEvent:]):
     51        (-[_WKFullScreenViewController dealloc]):
     52        (-[_WKFullScreenViewController viewWillTransitionToSize:withTransitionCoordinator:]):
     53        (+[_WKFullScreenViewController configureView:withBackgroundFillOfColor:opacity:filter:]):
     54        (-[_WKFullScreenViewController _updateTransparencyOfVisualEffectView:]):
     55        (-[_WKFullScreenViewController createVisualEffectViewWithFrame:]):
     56        (-[_WKFullScreenViewController loadView]):
     57        (-[_WKFullScreenViewController viewWillAppear:]):
     58        (-[_WKFullScreenViewController viewDidDisappear:]):
     59        (-[_WKFullScreenViewController cancelAction:]):
     60        (-[_WKFullScreenViewController hideCancelButton]):
     61        (-[_WKFullScreenViewController showCancelButton]):
     62        (-[_WKFullScreenViewController setTarget:action:]):
     63        (-[_WKFullScreenViewController prefersStatusBarHidden]):
     64        (-[WKFullscreenAnimationController transitionDuration:]):
     65        (-[WKFullscreenAnimationController animateTransition:]):
     66        (-[WKFullscreenAnimationController animationEnded:]):
     67        (-[WKFullScreenWindowController initWithWebView:page:]):
     68        (-[WKFullScreenWindowController dealloc]):
     69        (-[WKFullScreenWindowController isFullScreen]):
     70        (-[WKFullScreenWindowController webViewPlaceholder]):
     71        (-[WKFullScreenWindowController enterFullScreen]):
     72        (-[WKFullScreenWindowController beganEnterFullScreenWithInitialFrame:finalFrame:]):
     73        (-[WKFullScreenWindowController completedEnterFullScreen]):
     74        (-[WKFullScreenWindowController exitFullScreen]):
     75        (-[WKFullScreenWindowController requestExitFullScreen]):
     76        (-[WKFullScreenWindowController beganExitFullScreenWithInitialFrame:finalFrame:]):
     77        (-[WKFullScreenWindowController completedExitFullScreen]):
     78        (-[WKFullScreenWindowController close]):
     79        (-[WKFullScreenWindowController _manager]):
     80        (-[WKFullScreenWindowController animationControllerForPresentedController:presentingController:sourceController:]):
     81        (-[WKFullScreenWindowController animationControllerForDismissedController:]):
     82        * WebKit.xcassets/Contents.json: Added.
     83        * WebKit.xcassets/Done.imageset/Contents.json: Added.
     84        * WebKit.xcassets/Done.imageset/Done.pdf: Added.
     85        * WebKit.xcodeproj/project.pbxproj:
     86        * WebProcess/FullScreen/WebFullScreenManager.cpp:
     87        (WebKit::WebFullScreenManager::willEnterFullScreen):
     88        (WebKit::WebFullScreenManager::willExitFullScreen):
     89
    1902017-11-01  Daniel Bates  <dabates@apple.com>
    291
  • trunk/Source/WebKit/Configurations/FeatureDefines.xcconfig

    r224263 r224313  
    8888ENABLE_DEVICE_ORIENTATION[sdk=iphone*] = ENABLE_DEVICE_ORIENTATION;
    8989ENABLE_FILTERS_LEVEL_2 = ENABLE_FILTERS_LEVEL_2;
     90ENABLE_FULLSCREEN_API[sdk=iphone*] = ENABLE_FULLSCREEN_API;
    9091ENABLE_FULLSCREEN_API[sdk=macosx*] = ENABLE_FULLSCREEN_API;
    9192ENABLE_GAMEPAD = ENABLE_GAMEPAD;
  • trunk/Source/WebKit/Platform/spi/ios/UIKitSPI.h

    r224029 r224313  
    3131#import <UIKit/UIApplication_Private.h>
    3232#import <UIKit/UIBarButtonItem_Private.h>
     33#import <UIKit/UIBlurEffect_Private.h>
    3334#import <UIKit/UICalloutBar.h>
     35#import <UIKit/UIColorEffect.h>
    3436#import <UIKit/UIDatePicker_Private.h>
    3537#import <UIKit/UIDevice_Private.h>
     
    6365#import <UIKit/UIViewController_ViewService.h>
    6466#import <UIKit/UIView_Private.h>
     67#import <UIKit/UIVisualEffect_Private.h>
    6568#import <UIKit/UIWKSelectionAssistant.h>
    6669#import <UIKit/UIWKTextInteractionAssistant.h>
     
    471474- (void)safeAreaInsetsDidChange;
    472475#endif
     476@property (nonatomic, setter=_setContinuousCornerRadius:) CGFloat _continuousCornerRadius;
    473477@end
    474478
     
    888892
    889893NSTimeInterval _UIDragInteractionDefaultLiftDelay();
     894CGFloat UIRoundToScreenScale(CGFloat value, UIScreen *);
    890895
    891896WTF_EXTERN_C_END
     
    932937#endif
    933938
     939@interface _UIVisualEffectLayerConfig : NSObject
     940+ (instancetype)layerWithFillColor:(UIColor *)fillColor opacity:(CGFloat)opacity filterType:(NSString *)filterType;
     941- (void)configureLayerView:(UIView *)view;
     942@end
     943
     944@interface _UIVisualEffectConfig : NSObject
     945@property (nonatomic, readonly) _UIVisualEffectLayerConfig *contentConfig;
     946+ (_UIVisualEffectConfig *)configWithContentConfig:(_UIVisualEffectLayerConfig *)contentConfig;
     947@end
     948
     949@interface UIVisualEffect ()
     950+ (UIVisualEffect *)emptyEffect;
     951+ (UIVisualEffect *)effectCombiningEffects:(NSArray<UIVisualEffect *> *)effects;
     952@end
     953
     954@interface UIColorEffect : UIVisualEffect
     955+ (UIColorEffect *)colorEffectSaturate:(CGFloat)saturationAmount;
     956@end
     957
     958@interface UIBlurEffect ()
     959+ (UIBlurEffect *)effectWithBlurRadius:(CGFloat)blurRadius;
     960@end
     961
    934962#endif // USE(APPLE_INTERNAL_SDK)
    935963
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r224238 r224313  
    261261    RetainPtr<WKScrollView> _scrollView;
    262262    RetainPtr<WKContentView> _contentView;
     263
     264#if ENABLE(FULLSCREEN_API)
     265    RetainPtr<WKFullScreenWindowController> _fullScreenWindowController;
     266#endif
    263267
    264268    BOOL _overridesMinimumLayoutSize;
     
    60796083
    60806084
     6085#if ENABLE(FULLSCREEN_API) && PLATFORM(IOS)
     6086
     6087@implementation WKWebView (FullScreenAPI)
     6088
     6089- (BOOL)hasFullScreenWindowController
     6090{
     6091    return !!_fullScreenWindowController;
     6092}
     6093
     6094- (WKFullScreenWindowController *)fullScreenWindowController
     6095{
     6096    if (!_fullScreenWindowController)
     6097        _fullScreenWindowController = adoptNS([[WKFullScreenWindowController alloc] initWithWebView:self]);
     6098
     6099    return _fullScreenWindowController.get();
     6100}
     6101
     6102- (void)closeFullScreenWindowController
     6103{
     6104    if (!_fullScreenWindowController)
     6105        return;
     6106
     6107    [_fullScreenWindowController close];
     6108    _fullScreenWindowController = nullptr;
     6109}
     6110
     6111- (WebCoreFullScreenPlaceholderView *)fullScreenPlaceholderView
     6112{
     6113    if ([_fullScreenWindowController isFullScreen])
     6114        return [_fullScreenWindowController webViewPlaceholder];
     6115    return nil;
     6116}
     6117
     6118@end
     6119#endif // ENABLE(FULLSCREEN_API) && PLATFORM(IOS)
     6120
    60816121#if PLATFORM(MAC)
    60826122
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebViewInternal.h

    r224238 r224313  
    3838#import "WKContentView.h"
    3939#import "WKContentViewInteraction.h"
     40#import "WKFullScreenWindowControllerIOS.h"
    4041#import <WebCore/FloatRect.h>
    4142#import <WebCore/LengthBox.h>
     
    155156WKWebView* fromWebPageProxy(WebKit::WebPageProxy&);
    156157
     158#if ENABLE(FULLSCREEN_API) && PLATFORM(IOS)
     159@interface WKWebView (FullScreenAPI)
     160-(BOOL)hasFullScreenWindowController;
     161-(WKFullScreenWindowController *)fullScreenWindowController;
     162-(void)closeFullScreenWindowController;
     163-(WebCoreFullScreenPlaceholderView *)fullScreenPlaceholderView;
     164@end
     165#endif // ENABLE(FULLSCREEN_API) && PLATFORM(IOS)
     166
    157167#if PLATFORM(IOS)
    158168@interface WKWebView (_WKWebViewPrintFormatter)
  • trunk/Source/WebKit/UIProcess/API/Cocoa/_WKFullscreenDelegate.h

    r221930 r224313  
    2828#if WK_API_ENABLED
    2929
    30 WK_API_AVAILABLE(macosx(10.13))
     30WK_API_AVAILABLE(macosx(10.13), ios(WK_IOS_TBA))
    3131@protocol _WKFullscreenDelegate <NSObject>
    3232
    3333@optional
    3434
     35#if TARGET_OS_IPHONE
     36- (void)_webViewWillEnterElementFullscreen:(WKWebView *)webView;
     37- (void)_webViewDidEnterElementFullscreen:(WKWebView *)webView;
     38- (void)_webViewWillExitElementFullscreen:(WKWebView *)webView;
     39- (void)_webViewDidExitElementFullscreen:(WKWebView *)webView;
     40#else
    3541- (void)_webViewWillEnterFullscreen:(NSView *)webView;
    3642- (void)_webViewDidEnterFullscreen:(NSView *)webView;
    3743- (void)_webViewWillExitFullscreen:(NSView *)webView;
    3844- (void)_webViewDidExitFullscreen:(NSView *)webView;
     45#endif
    3946
    4047@end
  • trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.h

    r211891 r224313  
    3434#import <wtf/RetainPtr.h>
    3535
     36#if PLATFORM(MAC)
    3637@class NSView;
     38using WKFullscreenClientView = NSView;
     39#else
     40@class WKWebView;
     41using WKFullscreenClientView = WKWebView;
     42#endif
     43
    3744@protocol _WKFullscreenDelegate;
    3845
     
    4148class FullscreenClient : public API::FullscreenClient {
    4249public:
    43     explicit FullscreenClient(NSView *);
     50    explicit FullscreenClient(WKFullscreenClientView *);
    4451    ~FullscreenClient() { };
    4552
     
    5360
    5461private:
    55     NSView *m_webView;
     62    WKFullscreenClientView *m_webView;
    5663    WeakObjCPtr<id <_WKFullscreenDelegate> > m_delegate;
    5764
    5865    struct {
     66#if PLATFORM(MAC)
    5967        bool webViewWillEnterFullscreen : 1;
    6068        bool webViewDidEnterFullscreen : 1;
    6169        bool webViewWillExitFullscreen : 1;
    6270        bool webViewDidExitFullscreen : 1;
     71#else
     72        bool webViewWillEnterElementFullscreen : 1;
     73        bool webViewDidEnterElementFullscreen : 1;
     74        bool webViewWillExitElementFullscreen : 1;
     75        bool webViewDidExitElementFullscreen : 1;
     76#endif
    6377    } m_delegateMethods;
    6478};
  • trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.mm

    r211891 r224313  
    3333namespace WebKit {
    3434
    35 FullscreenClient::FullscreenClient(NSView *webView)
     35FullscreenClient::FullscreenClient(WKFullscreenClientView *webView)
    3636    : m_webView(webView)
    3737{
     
    4747    m_delegate = delegate;
    4848
     49#if PLATFORM(MAC)
    4950    m_delegateMethods.webViewWillEnterFullscreen = [delegate respondsToSelector:@selector(_webViewWillEnterFullscreen:)];
    5051    m_delegateMethods.webViewDidEnterFullscreen = [delegate respondsToSelector:@selector(_webViewDidEnterFullscreen:)];
    5152    m_delegateMethods.webViewWillExitFullscreen = [delegate respondsToSelector:@selector(_webViewWillExitFullscreen:)];
    5253    m_delegateMethods.webViewDidExitFullscreen = [delegate respondsToSelector:@selector(_webViewDidExitFullscreen:)];
     54#else
     55    m_delegateMethods.webViewWillEnterElementFullscreen = [delegate respondsToSelector:@selector(_webViewWillEnterElementFullscreen:)];
     56    m_delegateMethods.webViewDidEnterElementFullscreen = [delegate respondsToSelector:@selector(_webViewDidEnterElementFullscreen:)];
     57    m_delegateMethods.webViewWillExitElementFullscreen = [delegate respondsToSelector:@selector(_webViewWillExitElementFullscreen:)];
     58    m_delegateMethods.webViewDidExitElementFullscreen = [delegate respondsToSelector:@selector(_webViewDidExitElementFullscreen:)];
     59#endif
    5360}
    5461
    5562void FullscreenClient::willEnterFullscreen(WebPageProxy*)
    5663{
     64#if PLATFORM(MAC)
    5765    if (m_delegateMethods.webViewWillEnterFullscreen)
    5866        [m_delegate.get() _webViewWillEnterFullscreen:m_webView];
     67#else
     68    if (m_delegateMethods.webViewWillEnterElementFullscreen)
     69        [m_delegate.get() _webViewWillEnterElementFullscreen:m_webView];
     70#endif
    5971}
    6072
    6173void FullscreenClient::didEnterFullscreen(WebPageProxy*)
    6274{
     75#if PLATFORM(MAC)
    6376    if (m_delegateMethods.webViewDidEnterFullscreen)
    6477        [m_delegate.get() _webViewDidEnterFullscreen:m_webView];
     78#else
     79    if (m_delegateMethods.webViewDidEnterElementFullscreen)
     80        [m_delegate.get() _webViewDidEnterElementFullscreen:m_webView];
     81#endif
    6582}
    6683
    6784void FullscreenClient::willExitFullscreen(WebPageProxy*)
    6885{
     86#if PLATFORM(MAC)
    6987    if (m_delegateMethods.webViewWillExitFullscreen)
    7088        [m_delegate.get() _webViewWillExitFullscreen:m_webView];
     89#else
     90    if (m_delegateMethods.webViewWillExitElementFullscreen)
     91        [m_delegate.get() _webViewWillExitElementFullscreen:m_webView];
     92#endif
    7193}
    7294
    7395void FullscreenClient::didExitFullscreen(WebPageProxy*)
    7496{
     97#if PLATFORM(MAC)
    7598    if (m_delegateMethods.webViewDidExitFullscreen)
    7699        [m_delegate.get() _webViewDidExitFullscreen:m_webView];
     100#else
     101    if (m_delegateMethods.webViewDidExitElementFullscreen)
     102        [m_delegate.get() _webViewDidExitElementFullscreen:m_webView];
     103#endif
    77104}
    78105
  • trunk/Source/WebKit/UIProcess/ios/PageClientImplIOS.mm

    r224057 r224313  
    627627void PageClientImpl::closeFullScreenManager()
    628628{
     629    [m_webView closeFullScreenWindowController];
    629630}
    630631
    631632bool PageClientImpl::isFullScreen()
    632633{
    633     return false;
     634    if (![m_webView hasFullScreenWindowController])
     635        return false;
     636
     637    return [m_webView fullScreenWindowController].isFullScreen;
    634638}
    635639
    636640void PageClientImpl::enterFullScreen()
    637641{
     642    [[m_webView fullScreenWindowController] enterFullScreen];
    638643}
    639644
    640645void PageClientImpl::exitFullScreen()
    641646{
    642 }
    643 
    644 void PageClientImpl::beganEnterFullScreen(const IntRect&, const IntRect&)
    645 {
    646 }
    647 
    648 void PageClientImpl::beganExitFullScreen(const IntRect&, const IntRect&)
    649 {
     647    [[m_webView fullScreenWindowController] exitFullScreen];
     648}
     649
     650void PageClientImpl::beganEnterFullScreen(const IntRect& initialFrame, const IntRect& finalFrame)
     651{
     652    [[m_webView fullScreenWindowController] beganEnterFullScreenWithInitialFrame:initialFrame finalFrame:finalFrame];
     653}
     654
     655void PageClientImpl::beganExitFullScreen(const IntRect& initialFrame, const IntRect& finalFrame)
     656{
     657    [[m_webView fullScreenWindowController] beganExitFullScreenWithInitialFrame:initialFrame finalFrame:finalFrame];
    650658}
    651659
  • trunk/Source/WebKit/UIProcess/ios/WKContentView.mm

    r224063 r224313  
    3232#import "AccessibilityIOS.h"
    3333#import "ApplicationStateTracker.h"
     34#import "FullscreenClient.h"
    3435#import "InputViewUpdateDeferrer.h"
    3536#import "Logging.h"
  • trunk/Source/WebKit/UIProcess/ios/WKFullScreenWindowControllerIOS.h

    r224312 r224313  
    11/*
    2  * Copyright (C) 2016 Apple Inc. All rights reserved.
     2 * Copyright (C) 2017 Apple Inc. All rights reserved.
    33 *
    44 * Redistribution and use in source and binary forms, with or without
     
    2424 */
    2525
    26 #import <WebKit/WKFoundation.h>
     26#if ENABLE(FULLSCREEN_API) && PLATFORM(IOS)
    2727
    28 #if WK_API_ENABLED
     28#import <UIKit/UIViewControllerTransitioning.h>
    2929
    30 WK_API_AVAILABLE(macosx(10.13))
    31 @protocol _WKFullscreenDelegate <NSObject>
     30namespace WebKit {
     31class WebPageProxy;
     32}
    3233
    33 @optional
     34namespace WebCore {
     35class IntRect;
     36}
    3437
    35 - (void)_webViewWillEnterFullscreen:(NSView *)webView;
    36 - (void)_webViewDidEnterFullscreen:(NSView *)webView;
    37 - (void)_webViewWillExitFullscreen:(NSView *)webView;
    38 - (void)_webViewDidExitFullscreen:(NSView *)webView;
     38@class WebCoreFullScreenPlaceholderView;
     39@class WKWebView;
     40
     41@interface WKFullScreenWindowController : NSObject <UIViewControllerTransitioningDelegate>
     42
     43- (id)initWithWebView:(WKWebView *)webView;
     44
     45- (WebCoreFullScreenPlaceholderView*)webViewPlaceholder;
     46
     47- (BOOL)isFullScreen;
     48
     49- (void)enterFullScreen;
     50- (void)exitFullScreen;
     51- (void)requestExitFullScreen;
     52- (void)close;
     53- (void)beganEnterFullScreenWithInitialFrame:(CGRect)initialFrame finalFrame:(CGRect)finalFrame;
     54- (void)beganExitFullScreenWithInitialFrame:(CGRect)initialFrame finalFrame:(CGRect)finalFrame;
    3955
    4056@end
  • trunk/Source/WebKit/WebKit.xcodeproj/project.pbxproj

    r224238 r224313  
    877877                3F87B9BE158940190090FF62 /* WebColorChooser.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F87B9BB15893F630090FF62 /* WebColorChooser.h */; };
    878878                3F87B9C0158940D80090FF62 /* WebColorPicker.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F87B9BF158940D80090FF62 /* WebColorPicker.h */; };
     879                3F915C101F564DEE00183CE9 /* WKFullScreenWindowControllerIOS.mm in Headers */ = {isa = PBXBuildFile; fileRef = 3F915C0E1F564DED00183CE9 /* WKFullScreenWindowControllerIOS.mm */; };
     880                3FB08E431F60B240005E5312 /* WebKit.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 3FB08E421F60B240005E5312 /* WebKit.xcassets */; };
     881                3FFDDB961F577F480050E593 /* WKFullScreenWindowControllerIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 3F915C0F1F564DED00183CE9 /* WKFullScreenWindowControllerIOS.h */; };
     882                3FFDDB971F5780E10050E593 /* WKFullScreenWindowControllerIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 3F915C0E1F564DED00183CE9 /* WKFullScreenWindowControllerIOS.mm */; };
    879883                410482CD1DDD324C00F006D0 /* RTCNetwork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 410482CB1DDD2FB500F006D0 /* RTCNetwork.cpp */; };
    880884                410482CE1DDD324F00F006D0 /* RTCNetwork.h in Headers */ = {isa = PBXBuildFile; fileRef = 410482CC1DDD2FB500F006D0 /* RTCNetwork.h */; };
     
    31823186                3F87B9BB15893F630090FF62 /* WebColorChooser.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebColorChooser.h; sourceTree = "<group>"; };
    31833187                3F87B9BF158940D80090FF62 /* WebColorPicker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebColorPicker.h; sourceTree = "<group>"; };
     3188                3F915C0E1F564DED00183CE9 /* WKFullScreenWindowControllerIOS.mm */ = {isa = PBXFileReference; indentWidth = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = WKFullScreenWindowControllerIOS.mm; path = ios/WKFullScreenWindowControllerIOS.mm; sourceTree = "<group>"; };
     3189                3F915C0F1F564DED00183CE9 /* WKFullScreenWindowControllerIOS.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = WKFullScreenWindowControllerIOS.h; path = ios/WKFullScreenWindowControllerIOS.h; sourceTree = "<group>"; };
     3190                3FB08E421F60B240005E5312 /* WebKit.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = WebKit.xcassets; path = ../../../Opensource/Source/WebKit/WebKit.xcassets; sourceTree = "<group>"; };
    31843191                410482CB1DDD2FB500F006D0 /* RTCNetwork.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RTCNetwork.cpp; sourceTree = "<group>"; };
    31853192                410482CC1DDD2FB500F006D0 /* RTCNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RTCNetwork.h; sourceTree = "<group>"; };
     
    47094716                                E1D26A4C1759634E0095BFD1 /* WebContentProcess.xib */,
    47104717                                E133FD891423DD7F00FC7BFB /* WebKit.icns */,
     4718                                3FB08E421F60B240005E5312 /* WebKit.xcassets */,
    47114719                        );
    47124720                        name = Resources;
     
    56325640                                0FCB4E6A18BBF26A000FCFC9 /* WKContentViewInteraction.h */,
    56335641                                0FCB4E6B18BBF26A000FCFC9 /* WKContentViewInteraction.mm */,
     5642                                3F915C0F1F564DED00183CE9 /* WKFullScreenWindowControllerIOS.h */,
     5643                                3F915C0E1F564DED00183CE9 /* WKFullScreenWindowControllerIOS.mm */,
    56345644                                0FCB4E3F18BBE044000FCFC9 /* WKGeolocationProviderIOS.h */,
    56355645                                0FCB4E4018BBE044000FCFC9 /* WKGeolocationProviderIOS.mm */,
     
    92609270                                E1AEA22F14687BDB00804569 /* WKFullKeyboardAccessWatcher.h in Headers */,
    92619271                                CDCA85C9132ABA4E00E961DF /* WKFullScreenWindowController.h in Headers */,
     9272                                3FFDDB961F577F480050E593 /* WKFullScreenWindowControllerIOS.h in Headers */,
     9273                                3F915C101F564DEE00183CE9 /* WKFullScreenWindowControllerIOS.mm in Headers */,
    92629274                                BC54CC1212D674EE005C67B0 /* WKGeolocationManager.h in Headers */,
    92639275                                BC06F44E12DBDF3F002D78DE /* WKGeolocationPermissionRequest.h in Headers */,
     
    97319743                                8DC2EF530486A6940098B216 /* InfoPlist.strings in Resources */,
    97329744                                93A2A3461D246125002B59D3 /* mediaIcon.pdf in Resources */,
     9745                                3FB08E431F60B240005E5312 /* WebKit.xcassets in Resources */,
    97339746                        );
    97349747                        runOnlyForDeploymentPostprocessing = 0;
     
    1087510888                                E1AEA23014687BDB00804569 /* WKFullKeyboardAccessWatcher.mm in Sources */,
    1087610889                                CDCA85C8132ABA4E00E961DF /* WKFullScreenWindowController.mm in Sources */,
     10890                                3FFDDB971F5780E10050E593 /* WKFullScreenWindowControllerIOS.mm in Sources */,
    1087710891                                BC54CC1312D674EE005C67B0 /* WKGeolocationManager.cpp in Sources */,
    1087810892                                BC06F44F12DBDF3F002D78DE /* WKGeolocationPermissionRequest.cpp in Sources */,
  • trunk/Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.cpp

    r204668 r224313  
    110110    ASSERT(m_element);
    111111    m_element->document().webkitWillEnterFullScreenForElement(m_element.get());
     112#if !PLATFORM(IOS)
    112113    m_page->hidePageBanners();
     114#endif
    113115    m_element->document().updateLayout();
    114116    m_page->forceRepaintWithoutCallback();
     
    128130    m_finalFrame = screenRectOfContents(m_element.get());
    129131    m_element->document().webkitWillExitFullScreenForElement(m_element.get());
     132#if !PLATFORM(IOS)
    130133    m_page->showPageBanners();
     134#endif
    131135    m_page->injectedBundleFullScreenClient().beganExitFullScreen(m_page.get(), m_finalFrame, m_initialFrame);
    132136}
  • trunk/Source/WebKitLegacy/mac/ChangeLog

    r224263 r224313  
     12017-11-01  Jeremy Jones  <jeremyj@apple.com>
     2
     3        Implement WKFullscreenWindowController for iOS.
     4        https://bugs.webkit.org/show_bug.cgi?id=178924
     5        rdar://problem/34697120
     6
     7        Reviewed by Simon Fraser.
     8
     9        Enable ENABLE_FULLSCREEN_API for iOS. Fix a build error.
     10
     11        * Configurations/FeatureDefines.xcconfig:
     12        * WebView/WebView.mm:
     13        (-[WebView fullScreenPlaceholderView]):
     14
    1152017-10-31  Tim Horton  <timothy_horton@apple.com>
    216
  • trunk/Source/WebKitLegacy/mac/Configurations/FeatureDefines.xcconfig

    r224263 r224313  
    8888ENABLE_DEVICE_ORIENTATION[sdk=iphone*] = ENABLE_DEVICE_ORIENTATION;
    8989ENABLE_FILTERS_LEVEL_2 = ENABLE_FILTERS_LEVEL_2;
     90ENABLE_FULLSCREEN_API[sdk=iphone*] = ENABLE_FULLSCREEN_API;
    9091ENABLE_FULLSCREEN_API[sdk=macosx*] = ENABLE_FULLSCREEN_API;
    9192ENABLE_GAMEPAD = ENABLE_GAMEPAD;
  • trunk/Source/WebKitLegacy/mac/WebView/WebView.mm

    r223779 r224313  
    1009710097- (NSView*)fullScreenPlaceholderView
    1009810098{
    10099 #if ENABLE(FULLSCREEN_API)
     10099#if ENABLE(FULLSCREEN_API) && !PLATFORM(IOS)
    1010010100    if (_private->newFullscreenController && [_private->newFullscreenController isFullScreen])
    1010110101        return [_private->newFullscreenController webViewPlaceholder];
  • trunk/Tools/ChangeLog

    r224312 r224313  
     12017-11-01  Jeremy Jones  <jeremyj@apple.com>
     2
     3        Implement WKFullscreenWindowController for iOS.
     4        https://bugs.webkit.org/show_bug.cgi?id=178924
     5        rdar://problem/34697120
     6
     7        Reviewed by Simon Fraser.
     8
     9        Enable ENABLE_FULLSCREEN_API for iOS.
     10
     11        * TestWebKitAPI/Configurations/FeatureDefines.xcconfig:
     12
    1132017-11-01  Simon Fraser  <simon.fraser@apple.com>
    214
  • trunk/Tools/TestWebKitAPI/Configurations/FeatureDefines.xcconfig

    r224263 r224313  
    8888ENABLE_DEVICE_ORIENTATION[sdk=iphone*] = ENABLE_DEVICE_ORIENTATION;
    8989ENABLE_FILTERS_LEVEL_2 = ENABLE_FILTERS_LEVEL_2;
     90ENABLE_FULLSCREEN_API[sdk=iphone*] = ENABLE_FULLSCREEN_API;
    9091ENABLE_FULLSCREEN_API[sdk=macosx*] = ENABLE_FULLSCREEN_API;
    9192ENABLE_GAMEPAD = ENABLE_GAMEPAD;
Note: See TracChangeset for help on using the changeset viewer.