Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: a76e340b35bc50788d5cdea53a31a425496882e5
      
https://github.com/WebKit/WebKit/commit/a76e340b35bc50788d5cdea53a31a425496882e5
  Author: Andy Estes <aes...@apple.com>
  Date:   2024-08-31 (Sat, 31 Aug 2024)

  Changed paths:
    M Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml
    M Source/WebCore/dom/FullscreenManager.cpp
    M Source/WebCore/html/HTMLMediaElement.cpp
    M Source/WebCore/html/HTMLVideoElement.cpp
    M Source/WebCore/page/Page.cpp
    M Source/WebCore/page/Page.h
    M Source/WebKit/Shared/WebPreferencesDefaultValues.cpp
    M Source/WebKit/Shared/WebPreferencesDefaultValues.h
    M Source/WebKit/UIProcess/API/Cocoa/WKPreferences.mm
    M Source/WebKit/UIProcess/API/Cocoa/WKPreferencesPrivate.h
    M Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm
    M Source/WebKit/UIProcess/WebFullScreenManagerProxy.messages.in
    M Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.cpp
    M Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.h
    M Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp
    M Tools/TestWebKitAPI/Tests/WebKitCocoa/FullscreenLifecycle.mm

  Log Message:
  -----------
  Cannot use element fullscreen for video fullscreen when Fullscreen API is 
disabled
https://bugs.webkit.org/show_bug.cgi?id=278796
rdar://134863159

Reviewed by Jer Noble and Ryosuke Niwa.

Clients that enable the VideoFullscreenRequiresElementFullscreen preference use 
the element
fullscreen infrastructure to implement video fullscreen by making the <video> 
element the
fullscreen element and rendering WebKit's built-in media controls. However, 
this mechanism does
not work in clients that choose not to expose the Fullscreen API to websites 
(by disabling the
FullScreenEnabled preference).

It should still be possible to enter video fullscreen (via element fullscreen) 
in clients that
disable the Fullscreen API, so this change makes it so by supporting internal 
calls to
FullscreenManager::requestFullscreenForElement() when either the
VideoFullscreenRequiresElementFullscreen or FullScreenEnabled preferences are 
enabled.

Added an API test.

* Source/WTF/Scripts/Preferences/UnifiedWebPreferences.yaml:
    Changed the conditional for VideoFullscreenRequiresElementFullscreen to 
ENABLE(FULLSCREEN_API)
    and moved the default value setter to here from WKWebView.mm.

* Source/WebCore/dom/FullscreenManager.cpp:
(WebCore::FullscreenManager::requestFullscreenForElement):
(WebCore::FullscreenManager::willEnterFullscreen):
    Used Page::isFullscreenManagerEnabled() to check if it's possible to enter 
element fullscreen.

* Source/WebCore/html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::videoUsesElementFullscreen const):
    Simplified compile-time conditionals.

(WebCore::HTMLMediaElement::enterFullscreen):
    Used Page::isFullscreenManagerEnabled() to check if it's possible to enter 
element fullscreen.

(WebCore::HTMLMediaElement::exitFullscreen):
    Removed the unnecessary fullScreenEnabled() check, since we couldn't have a
    currentFullscreenElement() if the feature weren't enabled.

* Source/WebCore/html/HTMLVideoElement.cpp:
(WebCore::HTMLVideoElement::supportsFullscreen const):
    Simplified compile-time conditionals.

* Source/WebCore/page/Page.cpp:
(WebCore::Page::isFullscreenManagerEnabled const):
* Source/WebCore/page/Page.h:
    Added. Returns true if VideoFullscreenRequiresElementFullscreen or 
FullScreenEnabled are enabled.

* Source/WebKit/Shared/WebPreferencesDefaultValues.cpp:
(WebKit::defaultVideoFullscreenRequiresElementFullscreen):
* Source/WebKit/Shared/WebPreferencesDefaultValues.h:
* Source/WebKit/UIProcess/API/Cocoa/WKWebView.mm:
(-[WKWebView _setupPageConfiguration:withPool:]):
    Set VideoFullscreenRequiresElementFullscreen to true by default on 
supported platforms.

* Source/WebKit/UIProcess/WebFullScreenManagerProxy.messages.in:
    Enabled IPC messages if VideoFullscreenRequiresElementFullscreen or 
FullScreenEnabled are enabled.

* Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.cpp:
(WebKit::WebFullScreenManager::supportsFullScreenForElement):
(WebKit::WebFullScreenManager::supportsFullScreen): Deleted.
* Source/WebKit/WebProcess/FullScreen/WebFullScreenManager.h:
* Source/WebKit/WebProcess/WebCoreSupport/WebChromeClient.cpp:
(WebKit::WebChromeClient::supportsFullScreenForElement):
    Used Page::isFullscreenManagerEnabled() to check if it's possible to enter 
element fullscreen.

* Tools/TestWebKitAPI/Tests/WebKitCocoa/FullscreenLifecycle.mm:
(runTest):
(TEST(Fullscreen, VideoLifecycle)):
(TEST(Fullscreen, VideoLifecycleElementFullscreenDisabled)):
    Added an API test.

Canonical link: https://commits.webkit.org/283033@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to