Title: [199846] trunk/Source/WebKit/mac
Revision
199846
Author
jer.no...@apple.com
Date
2016-04-21 16:56:03 -0700 (Thu, 21 Apr 2016)

Log Message

[WK1] Add WebPlaybackSession support to WebKit
https://bugs.webkit.org/show_bug.cgi?id=156854

Reviewed by Beth Dakin.

Add support for WebPlaybackSession and the ChromeClient methods setUpPlaybackControlsManager() and
clearPlaybackControlsManager() to WebKit.

* WebCoreSupport/WebChromeClient.h:
* WebCoreSupport/WebChromeClient.mm:
(WebChromeClient::setUpPlaybackControlsManager):
(WebChromeClient::clearPlaybackControlsManager):
* WebView/WebView.mm:
(-[WebView _hasActiveVideoForControlsInterface]):
(-[WebView _setUpPlaybackControlsManagerForMediaElement:]):
(-[WebView _clearPlaybackControlsManagerForMediaElement:]):
* WebView/WebViewData.h:
* WebView/WebViewData.mm:
* WebView/WebViewInternal.h:

Modified Paths

Diff

Modified: trunk/Source/WebKit/mac/ChangeLog (199845 => 199846)


--- trunk/Source/WebKit/mac/ChangeLog	2016-04-21 23:30:36 UTC (rev 199845)
+++ trunk/Source/WebKit/mac/ChangeLog	2016-04-21 23:56:03 UTC (rev 199846)
@@ -1,3 +1,25 @@
+2016-04-21  Jer Noble  <jer.no...@apple.com>
+
+        [WK1] Add WebPlaybackSession support to WebKit
+        https://bugs.webkit.org/show_bug.cgi?id=156854
+
+        Reviewed by Beth Dakin.
+
+        Add support for WebPlaybackSession and the ChromeClient methods setUpPlaybackControlsManager() and
+        clearPlaybackControlsManager() to WebKit.
+
+        * WebCoreSupport/WebChromeClient.h:
+        * WebCoreSupport/WebChromeClient.mm:
+        (WebChromeClient::setUpPlaybackControlsManager):
+        (WebChromeClient::clearPlaybackControlsManager):
+        * WebView/WebView.mm:
+        (-[WebView _hasActiveVideoForControlsInterface]):
+        (-[WebView _setUpPlaybackControlsManagerForMediaElement:]):
+        (-[WebView _clearPlaybackControlsManagerForMediaElement:]):
+        * WebView/WebViewData.h:
+        * WebView/WebViewData.mm:
+        * WebView/WebViewInternal.h:
+
 2016-04-21  Anders Carlsson  <ander...@apple.com>
 
         Stop using ApplicationCacheStorage::singleton() in WebKitLegacy

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h (199845 => 199846)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h	2016-04-21 23:30:36 UTC (rev 199845)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.h	2016-04-21 23:56:03 UTC (rev 199846)
@@ -175,6 +175,11 @@
     }
 
 #if ENABLE(VIDEO)
+#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
+    void setUpPlaybackControlsManager(WebCore::HTMLMediaElement&) override;
+    void clearPlaybackControlsManager(WebCore::HTMLMediaElement&) override;
+#endif
+
     bool supportsVideoFullscreen(WebCore::HTMLMediaElementEnums::VideoFullscreenMode) override;
     void enterVideoFullscreenForVideoElement(WebCore::HTMLVideoElement&, WebCore::HTMLMediaElementEnums::VideoFullscreenMode) override;
     void exitVideoFullscreenForVideoElement(WebCore::HTMLVideoElement&) override;

Modified: trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm (199845 => 199846)


--- trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm	2016-04-21 23:30:36 UTC (rev 199845)
+++ trunk/Source/WebKit/mac/WebCoreSupport/WebChromeClient.mm	2016-04-21 23:56:03 UTC (rev 199846)
@@ -909,7 +909,6 @@
 }
 
 #if ENABLE(VIDEO)
-
 bool WebChromeClient::supportsVideoFullscreen(HTMLMediaElementEnums::VideoFullscreenMode)
 {
 #if PLATFORM(IOS)
@@ -934,8 +933,19 @@
     END_BLOCK_OBJC_EXCEPTIONS;    
 }
 
-#endif
+#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
+void WebChromeClient::setUpPlaybackControlsManager(HTMLMediaElement& element)
+{
+    [m_webView _setUpPlaybackControlsManagerForMediaElement:element];
+}
 
+void WebChromeClient::clearPlaybackControlsManager(HTMLMediaElement& element)
+{
+    [m_webView _clearPlaybackControlsManagerForMediaElement:element];
+}
+#endif // PLATFORM(MAC)
+#endif // ENABLE(VIDEO)
+
 #if ENABLE(FULLSCREEN_API)
 
 bool WebChromeClient::supportsFullScreenForElement(const Element* element, bool withKeyboard)

Modified: trunk/Source/WebKit/mac/WebView/WebView.mm (199845 => 199846)


--- trunk/Source/WebKit/mac/WebView/WebView.mm	2016-04-21 23:30:36 UTC (rev 199845)
+++ trunk/Source/WebKit/mac/WebView/WebView.mm	2016-04-21 23:56:03 UTC (rev 199846)
@@ -301,6 +301,11 @@
 #import <WebKitAdditions/WebViewIncludes.h>
 #endif
 
+#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
+#import <WebCore/WebPlaybackSessionInterfaceMac.h>
+#import <WebCore/WebPlaybackSessionModelMediaElement.h>
+#endif
+
 #if PLATFORM(MAC)
 SOFT_LINK_CONSTANT_MAY_FAIL(Lookup, LUNotificationPopoverWillClose, NSString *)
 #endif
@@ -8517,6 +8522,50 @@
     _private->fullscreenController = nil;
 }
 
+#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
+- (BOOL)_hasActiveVideoForControlsInterface
+{
+    if (!_private->playbackSessionModel)
+        return false;
+
+    HTMLMediaElement* mediaElement = _private->playbackSessionModel->mediaElement();
+    if (!mediaElement)
+        return false;
+
+    return mediaElement->hasAudio() || mediaElement->hasVideo();
+}
+
+- (void)_setUpPlaybackControlsManagerForMediaElement:(WebCore::HTMLMediaElement&)mediaElement
+{
+    if (_private->playbackSessionModel && _private->playbackSessionModel->mediaElement() == &mediaElement)
+        return;
+
+    if (!_private->playbackSessionModel)
+        _private->playbackSessionModel = WebPlaybackSessionModelMediaElement::create();
+    _private->playbackSessionModel->setMediaElement(&mediaElement);
+
+    if (!_private->playbackSessionInterface)
+        _private->playbackSessionInterface = WebPlaybackSessionInterfaceMac::create();
+
+    _private->playbackSessionInterface->setWebPlaybackSessionModel(_private->playbackSessionModel.get());
+    _private->playbackSessionModel->setWebPlaybackSessionInterface(_private->playbackSessionInterface.get());
+    [self updateWebViewAdditions];
+}
+
+- (void)_clearPlaybackControlsManagerForMediaElement:(WebCore::HTMLMediaElement&)mediaElement
+{
+    if (!_private->playbackSessionModel || _private->playbackSessionModel->mediaElement() != &mediaElement)
+        return;
+
+    _private->playbackSessionModel->setMediaElement(nullptr);
+    _private->playbackSessionModel->setWebPlaybackSessionInterface(nullptr);
+    _private->playbackSessionInterface->setWebPlaybackSessionModel(nullptr);
+
+    _private->playbackSessionModel = nullptr;
+    _private->playbackSessionInterface = nullptr;
+    [self updateWebViewAdditions];
+}
+#endif // PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
 #endif // ENABLE(VIDEO)
 
 #if ENABLE(FULLSCREEN_API) && !PLATFORM(IOS)

Modified: trunk/Source/WebKit/mac/WebView/WebViewData.h (199845 => 199846)


--- trunk/Source/WebKit/mac/WebView/WebViewData.h	2016-04-21 23:30:36 UTC (rev 199845)
+++ trunk/Source/WebKit/mac/WebView/WebViewData.h	2016-04-21 23:56:03 UTC (rev 199846)
@@ -48,6 +48,10 @@
 class HistoryItem;
 class Page;
 class TextIndicatorWindow;
+#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
+class WebPlaybackSessionInterfaceMac;
+class WebPlaybackSessionModelMediaElement;
+#endif
 }
 
 @class WebImmediateActionController;
@@ -288,6 +292,11 @@
 #if ENABLE(VIDEO)
     WebVideoFullscreenController *fullscreenController;
 #endif
+
+#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
+    RefPtr<WebCore::WebPlaybackSessionModelMediaElement> playbackSessionModel;
+    RefPtr<WebCore::WebPlaybackSessionInterfaceMac> playbackSessionInterface;
+#endif
     
 #if ENABLE(FULLSCREEN_API)
     WebFullScreenController *newFullscreenController;

Modified: trunk/Source/WebKit/mac/WebView/WebViewData.mm (199845 => 199846)


--- trunk/Source/WebKit/mac/WebView/WebViewData.mm	2016-04-21 23:30:36 UTC (rev 199845)
+++ trunk/Source/WebKit/mac/WebView/WebViewData.mm	2016-04-21 23:56:03 UTC (rev 199846)
@@ -49,6 +49,11 @@
 #import "WebMediaPlaybackTargetPicker.h"
 #endif
 
+#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
+#import <WebCore/WebPlaybackSessionInterfaceMac.h>
+#import <WebCore/WebPlaybackSessionModelMediaElement.h>
+#endif
+
 BOOL applicationIsTerminating = NO;
 int pluginDatabaseClientCount = 0;
 

Modified: trunk/Source/WebKit/mac/WebView/WebViewInternal.h (199845 => 199846)


--- trunk/Source/WebKit/mac/WebView/WebViewInternal.h	2016-04-21 23:30:36 UTC (rev 199845)
+++ trunk/Source/WebKit/mac/WebView/WebViewInternal.h	2016-04-21 23:56:03 UTC (rev 199846)
@@ -50,6 +50,7 @@
 class Element;
 class Event;
 class Frame;
+class HTMLMediaElement;
 class HTMLVideoElement;
 class HistoryItem;
 class KeyboardEvent;
@@ -251,7 +252,12 @@
 #if ENABLE(VIDEO) && defined(__cplusplus)
 - (void)_enterVideoFullscreenForVideoElement:(WebCore::HTMLVideoElement*)videoElement mode:(WebCore::HTMLMediaElementEnums::VideoFullscreenMode)mode;
 - (void)_exitVideoFullscreen;
+#if PLATFORM(MAC) && ENABLE(VIDEO_PRESENTATION_MODE)
+- (BOOL)_hasActiveVideoForControlsInterface;
+- (void)_setUpPlaybackControlsManagerForMediaElement:(WebCore::HTMLMediaElement&)mediaElement;
+- (void)_clearPlaybackControlsManagerForMediaElement:(WebCore::HTMLMediaElement&)mediaElement;
 #endif
+#endif
 
 #if ENABLE(FULLSCREEN_API) && !PLATFORM(IOS) && defined(__cplusplus)
 - (BOOL)_supportsFullScreenForElement:(WebCore::Element*)element withKeyboard:(BOOL)withKeyboard;
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to