Title: [285741] trunk
Revision
285741
Author
peng.l...@apple.com
Date
2021-11-12 14:14:26 -0800 (Fri, 12 Nov 2021)

Log 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]):

Modified Paths

Diff

Modified: trunk/Source/WebKit/ChangeLog (285740 => 285741)


--- trunk/Source/WebKit/ChangeLog	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/ChangeLog	2021-11-12 22:14:26 UTC (rev 285741)
@@ -1,3 +1,34 @@
+2021-11-12  Peng Liu  <peng.l...@apple.com>
+
+        Promote WKPreferences._fullScreenEnabled to API
+        https://bugs.webkit.org/show_bug.cgi?id=230784
+        <rdar://83255308>
+
+        Reviewed by Jer Noble.
+
+        * 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):
+
 2021-11-12  Chris Dumez  <cdu...@apple.com>
 
         Demote WKWebpagePreferences.captivePortalModeEnabled API to SPI

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.h (285740 => 285741)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.h	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.h	2021-11-12 22:14:26 UTC (rev 285741)
@@ -70,6 +70,11 @@
  */
 @property (nonatomic, getter=isSiteSpecificQuirksModeEnabled) BOOL siteSpecificQuirksModeEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
 
+/*! @abstract A Boolean value indicating whether Fullscreen API is enabled.
+ @discussion The default value is NO. We can set it to YES to enable support for the fullscreen API.
+ */
+@property (nonatomic, getter=isElementFullscreenEnabled) BOOL elementFullscreenEnabled WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
 @end
 
 @interface WKPreferences (WKDeprecated)

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm (285740 => 285741)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm	2021-11-12 22:14:26 UTC (rev 285741)
@@ -163,6 +163,16 @@
     _preferences->setNeedsSiteSpecificQuirks(enabled);
 }
 
+- (BOOL)isElementFullscreenEnabled
+{
+    return _preferences->fullScreenEnabled();
+}
+
+- (void)setElementFullscreenEnabled:(BOOL)elementFullscreenEnabled
+{
+    _preferences->setFullScreenEnabled(elementFullscreenEnabled);
+}
+
 #pragma mark OS X-specific methods
 
 #if PLATFORM(MAC)

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.h (285740 => 285741)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.h	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.h	2021-11-12 22:14:26 UTC (rev 285741)
@@ -74,6 +74,13 @@
     WKMediaCaptureStateMuted,
 } WK_API_AVAILABLE(macos(12.0), ios(15.0));
 
+typedef NS_ENUM(NSInteger, WKFullscreenState) {
+    WKFullscreenStateNotInFullscreen,
+    WKFullscreenStateEnteringFullscreen,
+    WKFullscreenStateInFullscreen,
+    WKFullscreenStateExitingFullscreen,
+} NS_SWIFT_NAME(WKWebView.FullscreenState) WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
 /*! @abstract A copy of the configuration with which the web view was
  initialized. */
 @property (nonatomic, readonly, copy) WKWebViewConfiguration *configuration;
@@ -604,6 +611,16 @@
 @property (nonatomic, null_resettable, copy) NSColor *underPageBackgroundColor WK_API_AVAILABLE(macos(12.0));
 #endif
 
+/*! @abstract A WKWebView's fullscreen state.
+ @discussion @link WKWebView @link is key-value observing (KVO) compliant for this property. When an element
+ in the WKWebView enters fullscreen, WebKit will replace the WKWebView in the application view hierarchy with
+ a "placeholder" view, and move the WKWebView into a fullscreen window. When the element exits fullscreen later,
+ the WKWebView will be moved back into the application view hierarchy. An application may need to adjust/restore
+ its native UI components when the fullscreen state changes. The application should observe the fullscreenState
+ property of WKWebView in order to receive notifications regarding the fullscreen state change.
+ */
+@property (nonatomic, readonly) WKFullscreenState fullscreenState WK_API_AVAILABLE(macos(WK_MAC_TBA), ios(WK_IOS_TBA));
+
 @end
 
 #if !TARGET_OS_IPHONE

Modified: trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm (285740 => 285741)


--- trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm	2021-11-12 22:14:26 UTC (rev 285741)
@@ -70,7 +70,7 @@
 #import "WKLayoutMode.h"
 #import "WKNSData.h"
 #import "WKNSURLExtras.h"
-#import <WebKit/WKNavigationDelegate.h>
+#import "WKNavigationDelegate.h"
 #import "WKNavigationInternal.h"
 #import "WKPDFConfiguration.h"
 #import "WKPreferencesInternal.h"
@@ -78,8 +78,8 @@
 #import "WKSafeBrowsingWarning.h"
 #import "WKSharedAPICast.h"
 #import "WKSnapshotConfiguration.h"
-#import <WebKit/WKUIDelegate.h>
-#import <WebKit/WKUIDelegatePrivate.h>
+#import "WKUIDelegate.h"
+#import "WKUIDelegatePrivate.h"
 #import "WKUserContentControllerInternal.h"
 #import "WKWebViewConfigurationInternal.h"
 #import "WKWebViewContentProvider.h"
@@ -1791,6 +1791,35 @@
     return NO;
 }
 
+- (WKFullscreenState)fullscreenState
+{
+#if ENABLE(FULLSCREEN_API)
+    auto* fullscreenManager = _page->fullScreenManager();
+    if (!fullscreenManager)
+        return WKFullscreenStateNotInFullscreen;
+
+    WKFullscreenState state = WKFullscreenStateNotInFullscreen;
+    switch (fullscreenManager->fullscreenState()) {
+    case WebKit::WebFullScreenManagerProxy::FullscreenState::EnteringFullscreen:
+        state = WKFullscreenStateEnteringFullscreen;
+        break;
+    case WebKit::WebFullScreenManagerProxy::FullscreenState::InFullscreen:
+        state = WKFullscreenStateInFullscreen;
+        break;
+    case WebKit::WebFullScreenManagerProxy::FullscreenState::ExitingFullscreen:
+        state = WKFullscreenStateExitingFullscreen;
+        break;
+    default:
+        state = WKFullscreenStateNotInFullscreen;
+        break;
+    }
+
+    return state;
+#else
+    return WKFullscreenStateNotInFullscreen;
+#endif
+}
+
 @end
 
 #pragma mark -
@@ -3565,6 +3594,7 @@
 #endif
 }
 
+// FIXME: Remove this after Safari adopts the new API
 - (void)_setFullscreenDelegate:(id<_WKFullscreenDelegate>)delegate
 {
 #if ENABLE(FULLSCREEN_API)
@@ -3573,6 +3603,7 @@
 #endif
 }
 
+// FIXME: Remove this after Safari adopts the new API
 - (id<_WKFullscreenDelegate>)_fullscreenDelegate
 {
 #if ENABLE(FULLSCREEN_API)
@@ -3582,6 +3613,7 @@
     return nil;
 }
 
+// FIXME: Remove this after Safari adopts the new API
 - (BOOL)_isInFullscreen
 {
 #if ENABLE(FULLSCREEN_API)

Modified: trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.h (285740 => 285741)


--- trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.h	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.h	2021-11-12 22:14:26 UTC (rev 285741)
@@ -31,13 +31,8 @@
 #import <wtf/RetainPtr.h>
 #import <wtf/WeakObjCPtr.h>
 
-#if PLATFORM(MAC)
-@class NSView;
-using WKFullscreenClientView = NSView;
-#else
 @class WKWebView;
 using WKFullscreenClientView = WKWebView;
-#endif
 
 @protocol _WKFullscreenDelegate;
 

Modified: trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.mm (285740 => 285741)


--- trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.mm	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/UIProcess/Cocoa/FullscreenClient.mm	2021-11-12 22:14:26 UTC (rev 285741)
@@ -59,9 +59,11 @@
 
 void FullscreenClient::willEnterFullscreen(WebPageProxy*)
 {
+    [m_webView willChangeValueForKey:@"fullscreenState"];
+    [m_webView didChangeValueForKey:@"fullscreenState"];
 #if PLATFORM(MAC)
     if (m_delegateMethods.webViewWillEnterFullscreen)
-        [m_delegate.get() _webViewWillEnterFullscreen:m_webView];
+        [m_delegate.get() _webViewWillEnterFullscreen:static_cast<NSView *>(m_webView)];
 #else
     if (m_delegateMethods.webViewWillEnterElementFullscreen)
         [m_delegate.get() _webViewWillEnterElementFullscreen:m_webView];
@@ -70,9 +72,11 @@
 
 void FullscreenClient::didEnterFullscreen(WebPageProxy*)
 {
+    [m_webView willChangeValueForKey:@"fullscreenState"];
+    [m_webView didChangeValueForKey:@"fullscreenState"];
 #if PLATFORM(MAC)
     if (m_delegateMethods.webViewDidEnterFullscreen)
-        [m_delegate.get() _webViewDidEnterFullscreen:m_webView];
+        [m_delegate.get() _webViewDidEnterFullscreen:static_cast<NSView *>(m_webView)];
 #else
     if (m_delegateMethods.webViewDidEnterElementFullscreen)
         [m_delegate.get() _webViewDidEnterElementFullscreen:m_webView];
@@ -81,9 +85,11 @@
 
 void FullscreenClient::willExitFullscreen(WebPageProxy*)
 {
+    [m_webView willChangeValueForKey:@"fullscreenState"];
+    [m_webView didChangeValueForKey:@"fullscreenState"];
 #if PLATFORM(MAC)
     if (m_delegateMethods.webViewWillExitFullscreen)
-        [m_delegate.get() _webViewWillExitFullscreen:m_webView];
+        [m_delegate.get() _webViewWillExitFullscreen:static_cast<NSView *>(m_webView)];
 #else
     if (m_delegateMethods.webViewWillExitElementFullscreen)
         [m_delegate.get() _webViewWillExitElementFullscreen:m_webView];
@@ -92,9 +98,11 @@
 
 void FullscreenClient::didExitFullscreen(WebPageProxy*)
 {
+    [m_webView willChangeValueForKey:@"fullscreenState"];
+    [m_webView didChangeValueForKey:@"fullscreenState"];
 #if PLATFORM(MAC)
     if (m_delegateMethods.webViewDidExitFullscreen)
-        [m_delegate.get() _webViewDidExitFullscreen:m_webView];
+        [m_delegate.get() _webViewDidExitFullscreen:static_cast<NSView *>(m_webView)];
 #else
     if (m_delegateMethods.webViewDidExitElementFullscreen)
         [m_delegate.get() _webViewDidExitElementFullscreen:m_webView];

Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (285740 => 285741)


--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm	2021-11-12 22:14:26 UTC (rev 285741)
@@ -1537,7 +1537,7 @@
     view.layerContentsPlacement = NSViewLayerContentsPlacementTopLeft;
 
 #if ENABLE(FULLSCREEN_API)
-    m_page->setFullscreenClient(makeUnique<WebKit::FullscreenClient>(view));
+    m_page->setFullscreenClient(makeUnique<WebKit::FullscreenClient>(outerWebView));
 #endif
 
 #if HAVE(NSSCROLLVIEW_SEPARATOR_TRACKING_ADAPTER)

Modified: trunk/Source/WebKit/UIProcess/WebFullScreenManagerProxy.cpp (285740 => 285741)


--- trunk/Source/WebKit/UIProcess/WebFullScreenManagerProxy.cpp	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/UIProcess/WebFullScreenManagerProxy.cpp	2021-11-12 22:14:26 UTC (rev 285741)
@@ -56,6 +56,7 @@
 
 void WebFullScreenManagerProxy::willEnterFullScreen()
 {
+    m_fullscreenState = FullscreenState::EnteringFullscreen;
     m_page.fullscreenClient().willEnterFullscreen(&m_page);
     m_page.send(Messages::WebFullScreenManager::WillEnterFullScreen());
 }
@@ -62,6 +63,7 @@
 
 void WebFullScreenManagerProxy::didEnterFullScreen()
 {
+    m_fullscreenState = FullscreenState::InFullscreen;
     m_page.fullscreenClient().didEnterFullscreen(&m_page);
     m_page.send(Messages::WebFullScreenManager::DidEnterFullScreen());
 
@@ -73,6 +75,7 @@
 
 void WebFullScreenManagerProxy::willExitFullScreen()
 {
+    m_fullscreenState = FullscreenState::ExitingFullscreen;
     m_page.fullscreenClient().willExitFullscreen(&m_page);
     m_page.send(Messages::WebFullScreenManager::WillExitFullScreen());
 }
@@ -92,6 +95,7 @@
 
 void WebFullScreenManagerProxy::didExitFullScreen()
 {
+    m_fullscreenState = FullscreenState::NotInFullscreen;
     m_page.fullscreenClient().didExitFullscreen(&m_page);
     m_page.send(Messages::WebFullScreenManager::DidExitFullScreen());
     

Modified: trunk/Source/WebKit/UIProcess/WebFullScreenManagerProxy.h (285740 => 285741)


--- trunk/Source/WebKit/UIProcess/WebFullScreenManagerProxy.h	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Source/WebKit/UIProcess/WebFullScreenManagerProxy.h	2021-11-12 22:14:26 UTC (rev 285741)
@@ -67,6 +67,14 @@
     bool blocksReturnToFullscreenFromPictureInPicture() const;
     void close();
 
+    enum class FullscreenState : uint8_t {
+        NotInFullscreen,
+        EnteringFullscreen,
+        InFullscreen,
+        ExitingFullscreen,
+    };
+    FullscreenState fullscreenState() const { return m_fullscreenState; }
+
     void willEnterFullScreen();
     void didEnterFullScreen();
     void willExitFullScreen();
@@ -94,6 +102,7 @@
 
     WebPageProxy& m_page;
     WebFullScreenManagerProxyClient& m_client;
+    FullscreenState m_fullscreenState { FullscreenState::NotInFullscreen };
     bool m_blocksReturnToFullscreenFromPictureInPicture { false };
     Vector<CompletionHandler<void()>> m_closeCompletionHandlers;
 };

Modified: trunk/Tools/ChangeLog (285740 => 285741)


--- trunk/Tools/ChangeLog	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Tools/ChangeLog	2021-11-12 22:14:26 UTC (rev 285741)
@@ -1,3 +1,14 @@
+2021-11-12  Peng Liu  <peng.l...@apple.com>
+
+        Promote WKPreferences._fullScreenEnabled to API
+        https://bugs.webkit.org/show_bug.cgi?id=230784
+        <rdar://83255308>
+
+        Reviewed by Jer Noble.
+
+        * MiniBrowser/mac/AppDelegate.m:
+        (-[BrowserAppDelegate defaultConfiguration]):
+
 2021-11-12  Chris Dumez  <cdu...@apple.com>
 
         Demote WKWebpagePreferences.captivePortalModeEnabled API to SPI

Modified: trunk/Tools/MiniBrowser/mac/AppDelegate.m (285740 => 285741)


--- trunk/Tools/MiniBrowser/mac/AppDelegate.m	2021-11-12 22:11:13 UTC (rev 285740)
+++ trunk/Tools/MiniBrowser/mac/AppDelegate.m	2021-11-12 22:14:26 UTC (rev 285741)
@@ -145,7 +145,7 @@
             [configuration.preferences _setEnabled:enabled forInternalDebugFeature:feature];
         }
 
-        configuration.preferences._fullScreenEnabled = YES;
+        configuration.preferences.elementFullscreenEnabled = YES;
         configuration.preferences._allowsPictureInPictureMediaPlayback = YES;
         configuration.preferences._developerExtrasEnabled = YES;
         configuration.preferences._mockCaptureDevicesEnabled = YES;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to