Title: [188097] trunk/Source/WebKit2
Revision
188097
Author
mra...@apple.com
Date
2015-08-06 17:00:58 -0700 (Thu, 06 Aug 2015)

Log Message

Media Session: notify focus manager clients when the playing state of the focused media element changes
https://bugs.webkit.org/show_bug.cgi?id=147745

Reviewed by Tim Horton.

Added plumbing to allow focus manager's clients to be notified when the focused Content media element begins
playing or is paused.

* UIProcess/API/C/WKMediaSessionFocusManager.cpp:
(WKMediaSessionFocusManagerSetClient):
* UIProcess/API/C/WKMediaSessionFocusManager.h:
* UIProcess/WebMediaSessionFocusManager.cpp:
(WebKit::WebMediaSessionFocusManager::initializeClient):
(WebKit::WebMediaSessionFocusManager::mediaElementIsPlayingDidChange):
* UIProcess/WebMediaSessionFocusManager.h:
* UIProcess/WebMediaSessionFocusManagerClient.cpp:
(WebKit::WebMediaSessionFocusManagerClient::didChangePlaybackAttribute):
* UIProcess/WebMediaSessionFocusManagerClient.h:
* WebKit2.xcodeproj/project.pbxproj:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebKit2/ChangeLog (188096 => 188097)


--- trunk/Source/WebKit2/ChangeLog	2015-08-06 23:48:24 UTC (rev 188096)
+++ trunk/Source/WebKit2/ChangeLog	2015-08-07 00:00:58 UTC (rev 188097)
@@ -1,3 +1,25 @@
+2015-08-06  Matt Rajca  <mra...@apple.com>
+
+        Media Session: notify focus manager clients when the playing state of the focused media element changes
+        https://bugs.webkit.org/show_bug.cgi?id=147745
+
+        Reviewed by Tim Horton.
+
+        Added plumbing to allow focus manager's clients to be notified when the focused Content media element begins
+        playing or is paused.
+
+        * UIProcess/API/C/WKMediaSessionFocusManager.cpp:
+        (WKMediaSessionFocusManagerSetClient):
+        * UIProcess/API/C/WKMediaSessionFocusManager.h:
+        * UIProcess/WebMediaSessionFocusManager.cpp:
+        (WebKit::WebMediaSessionFocusManager::initializeClient):
+        (WebKit::WebMediaSessionFocusManager::mediaElementIsPlayingDidChange):
+        * UIProcess/WebMediaSessionFocusManager.h:
+        * UIProcess/WebMediaSessionFocusManagerClient.cpp:
+        (WebKit::WebMediaSessionFocusManagerClient::didChangePlaybackAttribute):
+        * UIProcess/WebMediaSessionFocusManagerClient.h:
+        * WebKit2.xcodeproj/project.pbxproj:
+
 2015-08-06  Alex Christensen  <achristen...@webkit.org>
 
         Make CMake usable on Mac.

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.cpp (188096 => 188097)


--- trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.cpp	2015-08-06 23:48:24 UTC (rev 188096)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.cpp	2015-08-07 00:00:58 UTC (rev 188097)
@@ -40,6 +40,16 @@
 #endif
 }
 
+void WKMediaSessionFocusManagerSetClient(WKMediaSessionFocusManagerRef manager, const WKMediaSessionFocusManagerClientBase* client)
+{
+#if ENABLE(MEDIA_SESSION)
+    toImpl(manager)->initializeClient(client);
+#else
+    UNUSED_PARAM(manager);
+    UNUSED_PARAM(client);
+#endif
+}
+
 bool WKMediaSessionFocusManagerIsFocusedContentMediaElementPlaying(WKMediaSessionFocusManagerRef manager)
 {
 #if ENABLE(MEDIA_SESSION)

Modified: trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.h (188096 => 188097)


--- trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.h	2015-08-06 23:48:24 UTC (rev 188096)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.h	2015-08-07 00:00:58 UTC (rev 188097)
@@ -36,8 +36,30 @@
 extern "C" {
 #endif
 
+enum {
+    IsPlaying = 1 << 0
+};
+typedef uint32_t WKMediaSessionFocusManagerPlaybackAttribute;
+
+// Media Session Focus Manager Client
+typedef void (*WKMediaSessionFocusManagerDidChangePlaybackAttribute)(WKMediaSessionFocusManagerRef manager, WKMediaSessionFocusManagerPlaybackAttribute playbackAttribute, bool value, const void *clientInfo);
+
+typedef struct WKMediaSessionFocusManagerClientBase {
+    int                                                  version;
+    const void *                                         clientInfo;
+} WKMediaSessionFocusManagerClientBase;
+
+typedef struct WKMediaSessionFocusManagerClientV0 {
+    WKMediaSessionFocusManagerClientBase                 base;
+
+    // Version 0.
+    WKMediaSessionFocusManagerDidChangePlaybackAttribute didChangePlaybackAttribute;
+} WKMediaSessionFocusManagerClientV0;
+
 WK_EXPORT WKTypeID WKMediaSessionFocusManagerGetTypeID();
 
+WK_EXPORT void WKMediaSessionFocusManagerSetClient(WKMediaSessionFocusManagerRef manager, const WKMediaSessionFocusManagerClientBase* client);
+
 WK_EXPORT bool WKMediaSessionFocusManagerIsFocusedContentMediaElementPlaying(WKMediaSessionFocusManagerRef manager);
 
 #ifdef __cplusplus

Modified: trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.cpp (188096 => 188097)


--- trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.cpp	2015-08-06 23:48:24 UTC (rev 188096)
+++ trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.cpp	2015-08-07 00:00:58 UTC (rev 188097)
@@ -57,6 +57,11 @@
     API::Object::deref();
 }
 
+void WebMediaSessionFocusManager::initializeClient(const WKMediaSessionFocusManagerClientBase* client)
+{
+    m_client.initialize(client);
+}
+
 bool WebMediaSessionFocusManager::isFocusedContentMediaElementPlaying() const
 {
     if (!m_focusedMediaElement)
@@ -68,8 +73,10 @@
 void WebMediaSessionFocusManager::mediaElementIsPlayingDidChange(WebPageProxy* proxy, uint64_t elementID, bool isPlaying)
 {
     if (m_focusedMediaElement) {
-        if (proxy == m_focusedMediaElement->first && elementID == m_focusedMediaElement->second)
+        if (proxy == m_focusedMediaElement->first && elementID == m_focusedMediaElement->second) {
             m_focusedMediaElementIsPlaying = isPlaying;
+            m_client.didChangePlaybackAttribute(this, IsPlaying, isPlaying);
+        }
     }
 }
 

Modified: trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.h (188096 => 188097)


--- trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.h	2015-08-06 23:48:24 UTC (rev 188096)
+++ trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.h	2015-08-07 00:00:58 UTC (rev 188097)
@@ -30,6 +30,7 @@
 
 #include "APIObject.h"
 #include "WebContextSupplement.h"
+#include "WebMediaSessionFocusManagerClient.h"
 #include "WebPageProxy.h"
 
 namespace WebKit {
@@ -42,6 +43,8 @@
 
     static PassRefPtr<WebMediaSessionFocusManager> create(WebProcessPool*);
 
+    void initializeClient(const WKMediaSessionFocusManagerClientBase*);
+
     bool isFocusedContentMediaElementPlaying() const;
     void mediaElementIsPlayingDidChange(WebPageProxy*, uint64_t, bool);
 
@@ -60,6 +63,7 @@
 
     std::unique_ptr<FocusedMediaElement> m_focusedMediaElement;
     bool m_focusedMediaElementIsPlaying { false };
+    WebMediaSessionFocusManagerClient m_client;
 };
 
 } // namespace WebKit

Copied: trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManagerClient.cpp (from rev 188096, trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.cpp) (0 => 188097)


--- trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManagerClient.cpp	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManagerClient.cpp	2015-08-07 00:00:58 UTC (rev 188097)
@@ -0,0 +1,46 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "config.h"
+#include "WebMediaSessionFocusManagerClient.h"
+
+#if ENABLE(MEDIA_SESSION)
+
+#include "WKAPICast.h"
+#include "WebMediaSessionFocusManager.h"
+
+namespace WebKit {
+
+void WebMediaSessionFocusManagerClient::didChangePlaybackAttribute(WebMediaSessionFocusManager* manager, WKMediaSessionFocusManagerPlaybackAttribute playbackAttribute, bool value)
+{
+    if (!m_client.didChangePlaybackAttribute)
+        return;
+
+    m_client.didChangePlaybackAttribute(toAPI(manager), playbackAttribute, value, m_client.base.clientInfo);
+}
+
+} // namespace WebKit
+
+#endif // ENABLE(MEDIA_SESSION)

Copied: trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManagerClient.h (from rev 188096, trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.cpp) (0 => 188097)


--- trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManagerClient.h	                        (rev 0)
+++ trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManagerClient.h	2015-08-07 00:00:58 UTC (rev 188097)
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2015 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef WebMediaSessionFocusManagerClient_h
+#define WebMediaSessionFocusManagerClient_h
+
+#if ENABLE(MEDIA_SESSION)
+
+#include "APIClient.h"
+#include "WKMediaSessionFocusManager.h"
+#include <wtf/Forward.h>
+
+namespace API {
+template<> struct ClientTraits<WKMediaSessionFocusManagerClientBase> {
+    typedef std::tuple<WKMediaSessionFocusManagerClientV0> Versions;
+};
+}
+
+namespace WebKit {
+
+class WebMediaSessionFocusManager;
+
+class WebMediaSessionFocusManagerClient : public API::Client<WKMediaSessionFocusManagerClientBase> {
+public:
+    void didChangePlaybackAttribute(WebMediaSessionFocusManager*, WKMediaSessionFocusManagerPlaybackAttribute, bool);
+};
+
+} // namespace WebKit
+
+#endif // ENABLE(MEDIA_SESSION)
+
+#endif // WebMediaSessionFocusManagerClient_h

Modified: trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj (188096 => 188097)


--- trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2015-08-06 23:48:24 UTC (rev 188096)
+++ trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj	2015-08-07 00:00:58 UTC (rev 188097)
@@ -1663,6 +1663,8 @@
 		C98C48A61B6FD4C300145103 /* WebMediaSessionFocusManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C98C48A41B6FD4C300145103 /* WebMediaSessionFocusManager.h */; };
 		C98C48A91B6FD5B500145103 /* WKMediaSessionFocusManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C98C48A71B6FD5B500145103 /* WKMediaSessionFocusManager.cpp */; };
 		C98C48AA1B6FD5B500145103 /* WKMediaSessionFocusManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C98C48A81B6FD5B500145103 /* WKMediaSessionFocusManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
+		C9C1833B1B74026A007036A7 /* WebMediaSessionFocusManagerClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C183371B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.cpp */; };
+		C9C1833C1B74026D007036A7 /* WebMediaSessionFocusManagerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C183381B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.h */; };
 		C9CD43971B4B001900239E33 /* WebMediaSessionMetadata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9CD43931B4B000E00239E33 /* WebMediaSessionMetadata.cpp */; };
 		C9CD43981B4B001D00239E33 /* WebMediaSessionMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = C9CD43941B4B000E00239E33 /* WebMediaSessionMetadata.h */; };
 		C9CD439D1B4B024F00239E33 /* WKMediaSessionMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = C9CD439A1B4B024200239E33 /* WKMediaSessionMetadata.h */; settings = {ATTRIBUTES = (Private, ); }; };
@@ -3891,6 +3893,8 @@
 		C98C48A41B6FD4C300145103 /* WebMediaSessionFocusManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebMediaSessionFocusManager.h; sourceTree = "<group>"; };
 		C98C48A71B6FD5B500145103 /* WKMediaSessionFocusManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKMediaSessionFocusManager.cpp; sourceTree = "<group>"; };
 		C98C48A81B6FD5B500145103 /* WKMediaSessionFocusManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKMediaSessionFocusManager.h; sourceTree = "<group>"; };
+		C9C183371B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebMediaSessionFocusManagerClient.cpp; sourceTree = "<group>"; };
+		C9C183381B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebMediaSessionFocusManagerClient.h; sourceTree = "<group>"; };
 		C9CD43931B4B000E00239E33 /* WebMediaSessionMetadata.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebMediaSessionMetadata.cpp; sourceTree = "<group>"; };
 		C9CD43941B4B000E00239E33 /* WebMediaSessionMetadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebMediaSessionMetadata.h; sourceTree = "<group>"; };
 		C9CD43991B4B024200239E33 /* WKMediaSessionMetadata.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKMediaSessionMetadata.cpp; sourceTree = "<group>"; };
@@ -6178,6 +6182,8 @@
 				33D3A3B91339606200709BE4 /* WebMediaCacheManagerProxy.messages.in */,
 				C98C48A31B6FD4C300145103 /* WebMediaSessionFocusManager.cpp */,
 				C98C48A41B6FD4C300145103 /* WebMediaSessionFocusManager.h */,
+				C9C183371B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.cpp */,
+				C9C183381B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.h */,
 				7CCCC8F81A5F50FD008FB0DA /* WebNavigationState.cpp */,
 				7CCCC8F91A5F50FD008FB0DA /* WebNavigationState.h */,
 				BC1DFEA312B31F87005DF730 /* WebOpenPanelResultListenerProxy.cpp */,
@@ -7988,6 +7994,7 @@
 				33D3A3CB1339617900709BE4 /* WebMediaCacheManagerProxyMessages.h in Headers */,
 				CD003A5319D49B5D005ABCE0 /* WebMediaKeyStorageManager.h in Headers */,
 				C98C48A61B6FD4C300145103 /* WebMediaSessionFocusManager.h in Headers */,
+				C9C1833C1B74026D007036A7 /* WebMediaSessionFocusManagerClient.h in Headers */,
 				C9CD43981B4B001D00239E33 /* WebMediaSessionMetadata.h in Headers */,
 				2D3EF4431917646300034184 /* WebMemoryPressureHandlerIOS.h in Headers */,
 				909854ED12BC4E18000AD080 /* WebMemorySampler.h in Headers */,
@@ -9824,6 +9831,7 @@
 				33D3A3CA1339617900709BE4 /* WebMediaCacheManagerProxyMessageReceiver.cpp in Sources */,
 				CD003A5219D49B5D005ABCE0 /* WebMediaKeyStorageManager.cpp in Sources */,
 				C98C48A51B6FD4C300145103 /* WebMediaSessionFocusManager.cpp in Sources */,
+				C9C1833B1B74026A007036A7 /* WebMediaSessionFocusManagerClient.cpp in Sources */,
 				C9CD43971B4B001900239E33 /* WebMediaSessionMetadata.cpp in Sources */,
 				2D3EF4421917646300034184 /* WebMemoryPressureHandlerIOS.mm in Sources */,
 				909854EC12BC4E17000AD080 /* WebMemorySampler.cpp in Sources */,
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to