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

Changeset 285741 in webkit


Ignore:
Timestamp:
Nov 12, 2021, 2:14:26 PM (5 years ago)
Author:
Peng Liu
Message:

Promote WKPreferences._fullScreenEnabled to API
https://bugs.webkit.org/show_bug.cgi?id=230784
<rdar://83255308>

Reviewed by Jer Noble.

Source/WebKit:

  • UIProcess/API/Cocoa/WKPreferences.h:
  • UIProcess/API/Cocoa/WKPreferences.mm:

(-[WKPreferences isElementFullscreenEnabled]):
(-[WKPreferences setElementFullscreenEnabled:]):

  • UIProcess/API/Cocoa/WKWebView.h:
  • UIProcess/API/Cocoa/WKWebView.mm:

(-[WKWebView fullscreenState]):

  • UIProcess/Cocoa/FullscreenClient.h:
  • UIProcess/Cocoa/FullscreenClient.mm:

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

  • UIProcess/Cocoa/WebViewImpl.mm:

(WebKit::WebViewImpl::WebViewImpl):

  • UIProcess/WebFullScreenManagerProxy.cpp:

(WebKit::WebFullScreenManagerProxy::willEnterFullScreen):
(WebKit::WebFullScreenManagerProxy::didEnterFullScreen):
(WebKit::WebFullScreenManagerProxy::willExitFullScreen):
(WebKit::WebFullScreenManagerProxy::didExitFullScreen):

  • UIProcess/WebFullScreenManagerProxy.h:

(WebKit::WebFullScreenManagerProxy::fullscreenState const):

Tools:

  • MiniBrowser/mac/AppDelegate.m:

(-[BrowserAppDelegate defaultConfiguration]):

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r285739 r285741  
     12021-11-12  Peng Liu  <peng.liu6@apple.com>
     2
     3        Promote WKPreferences._fullScreenEnabled to API
     4        https://bugs.webkit.org/show_bug.cgi?id=230784
     5        <rdar://83255308>
     6
     7        Reviewed by Jer Noble.
     8
     9        * UIProcess/API/Cocoa/WKPreferences.h:
     10        * UIProcess/API/Cocoa/WKPreferences.mm:
     11        (-[WKPreferences isElementFullscreenEnabled]):
     12        (-[WKPreferences setElementFullscreenEnabled:]):
     13        * UIProcess/API/Cocoa/WKWebView.h:
     14        * UIProcess/API/Cocoa/WKWebView.mm:
     15        (-[WKWebView fullscreenState]):
     16        * UIProcess/Cocoa/FullscreenClient.h:
     17        * UIProcess/Cocoa/FullscreenClient.mm:
     18        (WebKit::FullscreenClient::willEnterFullscreen):
     19        (WebKit::FullscreenClient::didEnterFullscreen):
     20        (WebKit::FullscreenClient::willExitFullscreen):
     21        (WebKit::FullscreenClient::didExitFullscreen):
     22        * UIProcess/Cocoa/WebViewImpl.mm:
     23        (WebKit::WebViewImpl::WebViewImpl):
     24        * UIProcess/WebFullScreenManagerProxy.cpp:
     25        (WebKit::WebFullScreenManagerProxy::willEnterFullScreen):
     26        (WebKit::WebFullScreenManagerProxy::didEnterFullScreen):
     27        (WebKit::WebFullScreenManagerProxy::willExitFullScreen):
     28        (WebKit::WebFullScreenManagerProxy::didExitFullScreen):
     29        * UIProcess/WebFullScreenManagerProxy.h:
     30        (WebKit::WebFullScreenManagerProxy::fullscreenState const):
     31
    1322021-11-12  Chris Dumez  <cdumez@apple.com>
    233
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.h

    r284214 r285741  
    7171@property (nonatomic, getter=isSiteSpecificQuirksModeEnabled) BOOL siteSpecificQuirksModeEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
    7272
     73/*! @abstract A Boolean value indicating whether Fullscreen API is enabled.
     74 @discussion The default value is NO. We can set it to YES to enable support for the fullscreen API.
     75 */
     76@property (nonatomic, getter=isElementFullscreenEnabled) BOOL elementFullscreenEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     77
    7378@end
    7479
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm

    r285047 r285741  
    164164}
    165165
     166- (BOOL)isElementFullscreenEnabled
     167{
     168    return _preferences->fullScreenEnabled();
     169}
     170
     171- (void)setElementFullscreenEnabled:(BOOL)elementFullscreenEnabled
     172{
     173    _preferences->setFullScreenEnabled(elementFullscreenEnabled);
     174}
     175
    166176#pragma mark OS X-specific methods
    167177
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.h

    r281780 r285741  
    7575} WK_API_AVAILABLE(macos(12.0), ios(15.0));
    7676
     77typedef NS_ENUM(NSInteger, WKFullscreenState) {
     78    WKFullscreenStateNotInFullscreen,
     79    WKFullscreenStateEnteringFullscreen,
     80    WKFullscreenStateInFullscreen,
     81    WKFullscreenStateExitingFullscreen,
     82} NS_SWIFT_NAME(WKWebView.FullscreenState) WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     83
    7784/*! @abstract A copy of the configuration with which the web view was
    7885 initialized. */
     
    605612#endif
    606613
     614/*! @abstract A WKWebView's fullscreen state.
     615 @discussion @link WKWebView @link is key-value observing (KVO) compliant for this property. When an element
     616 in the WKWebView enters fullscreen, WebKit will replace the WKWebView in the application view hierarchy with
     617 a "placeholder" view, and move the WKWebView into a fullscreen window. When the element exits fullscreen later,
     618 the WKWebView will be moved back into the application view hierarchy. An application may need to adjust/restore
     619 its native UI components when the fullscreen state changes. The application should observe the fullscreenState
     620 property of WKWebView in order to receive notifications regarding the fullscreen state change.
     621 */
     622@property (nonatomic, readonly) WKFullscreenState fullscreenState WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
     623
    607624@end
    608625
  • trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm

    r285345 r285741  
    7171#import "WKNSData.h"
    7272#import "WKNSURLExtras.h"
    73 #import <WebKit/WKNavigationDelegate.h>
     73#import "WKNavigationDelegate.h"
    7474#import "WKNavigationInternal.h"
    7575#import "WKPDFConfiguration.h"
     
    7979#import "WKSharedAPICast.h"
    8080#import "WKSnapshotConfiguration.h"
    81 #import <WebKit/WKUIDelegate.h>
    82 #import <WebKit/WKUIDelegatePrivate.h>
     81#import "WKUIDelegate.h"
     82#import "WKUIDelegatePrivate.h"
    8383#import "WKUserContentControllerInternal.h"
    8484#import "WKWebViewConfigurationInternal.h"
     
    17921792}
    17931793
     1794- (WKFullscreenState)fullscreenState
     1795{
     1796#if ENABLE(FULLSCREEN_API)
     1797    auto* fullscreenManager = _page->fullScreenManager();
     1798    if (!fullscreenManager)
     1799        return WKFullscreenStateNotInFullscreen;
     1800
     1801    WKFullscreenState state = WKFullscreenStateNotInFullscreen;
     1802    switch (fullscreenManager->fullscreenState()) {
     1803    case WebKit::WebFullScreenManagerProxy::FullscreenState::EnteringFullscreen:
     1804        state = WKFullscreenStateEnteringFullscreen;
     1805        break;
     1806    case WebKit::WebFullScreenManagerProxy::FullscreenState::InFullscreen:
     1807        state = WKFullscreenStateInFullscreen;
     1808        break;
     1809    case WebKit::WebFullScreenManagerProxy::FullscreenState::ExitingFullscreen:
     1810        state = WKFullscreenStateExitingFullscreen;
     1811        break;
     1812    default:
     1813        state = WKFullscreenStateNotInFullscreen;
     1814        break;
     1815    }
     1816
     1817    return state;
     1818#else
     1819    return WKFullscreenStateNotInFullscreen;
     1820#endif
     1821}
     1822
    17941823@end
    17951824
     
    35663595}
    35673596
     3597// FIXME: Remove this after Safari adopts the new API
    35683598- (void)_setFullscreenDelegate:(id<_WKFullscreenDelegate>)delegate
    35693599{
     
    35743604}
    35753605
     3606// FIXME: Remove this after Safari adopts the new API
    35763607- (id<_WKFullscreenDelegate>)_fullscreenDelegate
    35773608{
     
    35833614}
    35843615
     3616// FIXME: Remove this after Safari adopts the new API
    35853617- (BOOL)_isInFullscreen
    35863618{
  • trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.h

    r242339 r285741  
    3232#import <wtf/WeakObjCPtr.h>
    3333
    34 #if PLATFORM(MAC)
    35 @class NSView;
    36 using WKFullscreenClientView = NSView;
    37 #else
    3834@class WKWebView;
    3935using WKFullscreenClientView = WKWebView;
    40 #endif
    4136
    4237@protocol _WKFullscreenDelegate;
  • trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.mm

    r242339 r285741  
    6060void FullscreenClient::willEnterFullscreen(WebPageProxy*)
    6161{
     62    [m_webView willChangeValueForKey:@"fullscreenState"];
     63    [m_webView didChangeValueForKey:@"fullscreenState"];
    6264#if PLATFORM(MAC)
    6365    if (m_delegateMethods.webViewWillEnterFullscreen)
    64         [m_delegate.get() _webViewWillEnterFullscreen:m_webView];
     66        [m_delegate.get() _webViewWillEnterFullscreen:static_cast<NSView *>(m_webView)];
    6567#else
    6668    if (m_delegateMethods.webViewWillEnterElementFullscreen)
     
    7173void FullscreenClient::didEnterFullscreen(WebPageProxy*)
    7274{
     75    [m_webView willChangeValueForKey:@"fullscreenState"];
     76    [m_webView didChangeValueForKey:@"fullscreenState"];
    7377#if PLATFORM(MAC)
    7478    if (m_delegateMethods.webViewDidEnterFullscreen)
    75         [m_delegate.get() _webViewDidEnterFullscreen:m_webView];
     79        [m_delegate.get() _webViewDidEnterFullscreen:static_cast<NSView *>(m_webView)];
    7680#else
    7781    if (m_delegateMethods.webViewDidEnterElementFullscreen)
     
    8286void FullscreenClient::willExitFullscreen(WebPageProxy*)
    8387{
     88    [m_webView willChangeValueForKey:@"fullscreenState"];
     89    [m_webView didChangeValueForKey:@"fullscreenState"];
    8490#if PLATFORM(MAC)
    8591    if (m_delegateMethods.webViewWillExitFullscreen)
    86         [m_delegate.get() _webViewWillExitFullscreen:m_webView];
     92        [m_delegate.get() _webViewWillExitFullscreen:static_cast<NSView *>(m_webView)];
    8793#else
    8894    if (m_delegateMethods.webViewWillExitElementFullscreen)
     
    9399void FullscreenClient::didExitFullscreen(WebPageProxy*)
    94100{
     101    [m_webView willChangeValueForKey:@"fullscreenState"];
     102    [m_webView didChangeValueForKey:@"fullscreenState"];
    95103#if PLATFORM(MAC)
    96104    if (m_delegateMethods.webViewDidExitFullscreen)
    97         [m_delegate.get() _webViewDidExitFullscreen:m_webView];
     105        [m_delegate.get() _webViewDidExitFullscreen:static_cast<NSView *>(m_webView)];
    98106#else
    99107    if (m_delegateMethods.webViewDidExitElementFullscreen)
  • trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm

    r285047 r285741  
    15381538
    15391539#if ENABLE(FULLSCREEN_API)
    1540     m_page->setFullscreenClient(makeUnique<WebKit::FullscreenClient>(view));
     1540    m_page->setFullscreenClient(makeUnique<WebKit::FullscreenClient>(outerWebView));
    15411541#endif
    15421542
  • trunk/Source/WebKit/UIProcess/WebFullScreenManagerProxy.cpp

    r271970 r285741  
    5757void WebFullScreenManagerProxy::willEnterFullScreen()
    5858{
     59    m_fullscreenState = FullscreenState::EnteringFullscreen;
    5960    m_page.fullscreenClient().willEnterFullscreen(&m_page);
    6061    m_page.send(Messages::WebFullScreenManager::WillEnterFullScreen());
     
    6364void WebFullScreenManagerProxy::didEnterFullScreen()
    6465{
     66    m_fullscreenState = FullscreenState::InFullscreen;
    6567    m_page.fullscreenClient().didEnterFullscreen(&m_page);
    6668    m_page.send(Messages::WebFullScreenManager::DidEnterFullScreen());
     
    7476void WebFullScreenManagerProxy::willExitFullScreen()
    7577{
     78    m_fullscreenState = FullscreenState::ExitingFullscreen;
    7679    m_page.fullscreenClient().willExitFullscreen(&m_page);
    7780    m_page.send(Messages::WebFullScreenManager::WillExitFullScreen());
     
    9396void WebFullScreenManagerProxy::didExitFullScreen()
    9497{
     98    m_fullscreenState = FullscreenState::NotInFullscreen;
    9599    m_page.fullscreenClient().didExitFullscreen(&m_page);
    96100    m_page.send(Messages::WebFullScreenManager::DidExitFullScreen());
  • trunk/Source/WebKit/UIProcess/WebFullScreenManagerProxy.h

    r274189 r285741  
    6868    void close();
    6969
     70    enum class FullscreenState : uint8_t {
     71        NotInFullscreen,
     72        EnteringFullscreen,
     73        InFullscreen,
     74        ExitingFullscreen,
     75    };
     76    FullscreenState fullscreenState() const { return m_fullscreenState; }
     77
    7078    void willEnterFullScreen();
    7179    void didEnterFullScreen();
     
    95103    WebPageProxy& m_page;
    96104    WebFullScreenManagerProxyClient& m_client;
     105    FullscreenState m_fullscreenState { FullscreenState::NotInFullscreen };
    97106    bool m_blocksReturnToFullscreenFromPictureInPicture { false };
    98107    Vector<CompletionHandler<void()>> m_closeCompletionHandlers;
  • trunk/Tools/ChangeLog

    r285739 r285741  
     12021-11-12  Peng Liu  <peng.liu6@apple.com>
     2
     3        Promote WKPreferences._fullScreenEnabled to API
     4        https://bugs.webkit.org/show_bug.cgi?id=230784
     5        <rdar://83255308>
     6
     7        Reviewed by Jer Noble.
     8
     9        * MiniBrowser/mac/AppDelegate.m:
     10        (-[BrowserAppDelegate defaultConfiguration]):
     11
    1122021-11-12  Chris Dumez  <cdumez@apple.com>
    213
  • trunk/Tools/MiniBrowser/mac/AppDelegate.m

    r284887 r285741  
    146146        }
    147147
    148         configuration.preferences._fullScreenEnabled = YES;
     148        configuration.preferences.elementFullscreenEnabled = YES;
    149149        configuration.preferences._allowsPictureInPictureMediaPlayback = YES;
    150150        configuration.preferences._developerExtrasEnabled = YES;
Note: See TracChangeset for help on using the changeset viewer.