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;