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