Changeset 188097 in webkit


Ignore:
Timestamp:
Aug 6, 2015 5:00:58 PM (9 years ago)
Author:
mrajca@apple.com
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:
Location:
trunk/Source/WebKit2
Files:
6 edited
2 copied

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit2/ChangeLog

    r188096 r188097  
     12015-08-06  Matt Rajca  <mrajca@apple.com>
     2
     3        Media Session: notify focus manager clients when the playing state of the focused media element changes
     4        https://bugs.webkit.org/show_bug.cgi?id=147745
     5
     6        Reviewed by Tim Horton.
     7
     8        Added plumbing to allow focus manager's clients to be notified when the focused Content media element begins
     9        playing or is paused.
     10
     11        * UIProcess/API/C/WKMediaSessionFocusManager.cpp:
     12        (WKMediaSessionFocusManagerSetClient):
     13        * UIProcess/API/C/WKMediaSessionFocusManager.h:
     14        * UIProcess/WebMediaSessionFocusManager.cpp:
     15        (WebKit::WebMediaSessionFocusManager::initializeClient):
     16        (WebKit::WebMediaSessionFocusManager::mediaElementIsPlayingDidChange):
     17        * UIProcess/WebMediaSessionFocusManager.h:
     18        * UIProcess/WebMediaSessionFocusManagerClient.cpp:
     19        (WebKit::WebMediaSessionFocusManagerClient::didChangePlaybackAttribute):
     20        * UIProcess/WebMediaSessionFocusManagerClient.h:
     21        * WebKit2.xcodeproj/project.pbxproj:
     22
    1232015-08-06  Alex Christensen  <achristensen@webkit.org>
    224
  • trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.cpp

    r188048 r188097  
    4141}
    4242
     43void WKMediaSessionFocusManagerSetClient(WKMediaSessionFocusManagerRef manager, const WKMediaSessionFocusManagerClientBase* client)
     44{
     45#if ENABLE(MEDIA_SESSION)
     46    toImpl(manager)->initializeClient(client);
     47#else
     48    UNUSED_PARAM(manager);
     49    UNUSED_PARAM(client);
     50#endif
     51}
     52
    4353bool WKMediaSessionFocusManagerIsFocusedContentMediaElementPlaying(WKMediaSessionFocusManagerRef manager)
    4454{
  • trunk/Source/WebKit2/UIProcess/API/C/WKMediaSessionFocusManager.h

    r188048 r188097  
    3737#endif
    3838
     39enum {
     40    IsPlaying = 1 << 0
     41};
     42typedef uint32_t WKMediaSessionFocusManagerPlaybackAttribute;
     43
     44// Media Session Focus Manager Client
     45typedef void (*WKMediaSessionFocusManagerDidChangePlaybackAttribute)(WKMediaSessionFocusManagerRef manager, WKMediaSessionFocusManagerPlaybackAttribute playbackAttribute, bool value, const void *clientInfo);
     46
     47typedef struct WKMediaSessionFocusManagerClientBase {
     48    int                                                  version;
     49    const void *                                         clientInfo;
     50} WKMediaSessionFocusManagerClientBase;
     51
     52typedef struct WKMediaSessionFocusManagerClientV0 {
     53    WKMediaSessionFocusManagerClientBase                 base;
     54
     55    // Version 0.
     56    WKMediaSessionFocusManagerDidChangePlaybackAttribute didChangePlaybackAttribute;
     57} WKMediaSessionFocusManagerClientV0;
     58
    3959WK_EXPORT WKTypeID WKMediaSessionFocusManagerGetTypeID();
     60
     61WK_EXPORT void WKMediaSessionFocusManagerSetClient(WKMediaSessionFocusManagerRef manager, const WKMediaSessionFocusManagerClientBase* client);
    4062
    4163WK_EXPORT bool WKMediaSessionFocusManagerIsFocusedContentMediaElementPlaying(WKMediaSessionFocusManagerRef manager);
  • trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.cpp

    r188048 r188097  
    5858}
    5959
     60void WebMediaSessionFocusManager::initializeClient(const WKMediaSessionFocusManagerClientBase* client)
     61{
     62    m_client.initialize(client);
     63}
     64
    6065bool WebMediaSessionFocusManager::isFocusedContentMediaElementPlaying() const
    6166{
     
    6974{
    7075    if (m_focusedMediaElement) {
    71         if (proxy == m_focusedMediaElement->first && elementID == m_focusedMediaElement->second)
     76        if (proxy == m_focusedMediaElement->first && elementID == m_focusedMediaElement->second) {
    7277            m_focusedMediaElementIsPlaying = isPlaying;
     78            m_client.didChangePlaybackAttribute(this, IsPlaying, isPlaying);
     79        }
    7380    }
    7481}
  • trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.h

    r188048 r188097  
    3131#include "APIObject.h"
    3232#include "WebContextSupplement.h"
     33#include "WebMediaSessionFocusManagerClient.h"
    3334#include "WebPageProxy.h"
    3435
     
    4243
    4344    static PassRefPtr<WebMediaSessionFocusManager> create(WebProcessPool*);
     45
     46    void initializeClient(const WKMediaSessionFocusManagerClientBase*);
    4447
    4548    bool isFocusedContentMediaElementPlaying() const;
     
    6164    std::unique_ptr<FocusedMediaElement> m_focusedMediaElement;
    6265    bool m_focusedMediaElementIsPlaying { false };
     66    WebMediaSessionFocusManagerClient m_client;
    6367};
    6468
  • trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManagerClient.cpp

    r188096 r188097  
    2525
    2626#include "config.h"
    27 #include "WKMediaSessionFocusManager.h"
     27#include "WebMediaSessionFocusManagerClient.h"
     28
     29#if ENABLE(MEDIA_SESSION)
    2830
    2931#include "WKAPICast.h"
    3032#include "WebMediaSessionFocusManager.h"
    3133
    32 using namespace WebKit;
     34namespace WebKit {
    3335
    34 WKTypeID WKMediaSessionFocusManagerGetTypeID()
     36void WebMediaSessionFocusManagerClient::didChangePlaybackAttribute(WebMediaSessionFocusManager* manager, WKMediaSessionFocusManagerPlaybackAttribute playbackAttribute, bool value)
    3537{
    36 #if ENABLE(MEDIA_SESSION)
    37     return toAPI(WebMediaSessionFocusManager::APIType);
    38 #else
    39     return toAPI(API::Object::Type::Null);
    40 #endif
     38    if (!m_client.didChangePlaybackAttribute)
     39        return;
     40
     41    m_client.didChangePlaybackAttribute(toAPI(manager), playbackAttribute, value, m_client.base.clientInfo);
    4142}
    4243
    43 bool WKMediaSessionFocusManagerIsFocusedContentMediaElementPlaying(WKMediaSessionFocusManagerRef manager)
    44 {
    45 #if ENABLE(MEDIA_SESSION)
    46     return toImpl(manager)->isFocusedContentMediaElementPlaying();
    47 #else
    48     UNUSED_PARAM(manager);
    49     return false;
    50 #endif
    51 }
     44} // namespace WebKit
     45
     46#endif // ENABLE(MEDIA_SESSION)
  • trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManagerClient.h

    r188096 r188097  
    2424 */
    2525
    26 #include "config.h"
     26#ifndef WebMediaSessionFocusManagerClient_h
     27#define WebMediaSessionFocusManagerClient_h
     28
     29#if ENABLE(MEDIA_SESSION)
     30
     31#include "APIClient.h"
    2732#include "WKMediaSessionFocusManager.h"
     33#include <wtf/Forward.h>
    2834
    29 #include "WKAPICast.h"
    30 #include "WebMediaSessionFocusManager.h"
    31 
    32 using namespace WebKit;
    33 
    34 WKTypeID WKMediaSessionFocusManagerGetTypeID()
    35 {
    36 #if ENABLE(MEDIA_SESSION)
    37     return toAPI(WebMediaSessionFocusManager::APIType);
    38 #else
    39     return toAPI(API::Object::Type::Null);
    40 #endif
     35namespace API {
     36template<> struct ClientTraits<WKMediaSessionFocusManagerClientBase> {
     37    typedef std::tuple<WKMediaSessionFocusManagerClientV0> Versions;
     38};
    4139}
    4240
    43 bool WKMediaSessionFocusManagerIsFocusedContentMediaElementPlaying(WKMediaSessionFocusManagerRef manager)
    44 {
    45 #if ENABLE(MEDIA_SESSION)
    46     return toImpl(manager)->isFocusedContentMediaElementPlaying();
    47 #else
    48     UNUSED_PARAM(manager);
    49     return false;
    50 #endif
    51 }
     41namespace WebKit {
     42
     43class WebMediaSessionFocusManager;
     44
     45class WebMediaSessionFocusManagerClient : public API::Client<WKMediaSessionFocusManagerClientBase> {
     46public:
     47    void didChangePlaybackAttribute(WebMediaSessionFocusManager*, WKMediaSessionFocusManagerPlaybackAttribute, bool);
     48};
     49
     50} // namespace WebKit
     51
     52#endif // ENABLE(MEDIA_SESSION)
     53
     54#endif // WebMediaSessionFocusManagerClient_h
  • trunk/Source/WebKit2/WebKit2.xcodeproj/project.pbxproj

    r187917 r188097  
    16641664                C98C48A91B6FD5B500145103 /* WKMediaSessionFocusManager.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C98C48A71B6FD5B500145103 /* WKMediaSessionFocusManager.cpp */; };
    16651665                C98C48AA1B6FD5B500145103 /* WKMediaSessionFocusManager.h in Headers */ = {isa = PBXBuildFile; fileRef = C98C48A81B6FD5B500145103 /* WKMediaSessionFocusManager.h */; settings = {ATTRIBUTES = (Private, ); }; };
     1666                C9C1833B1B74026A007036A7 /* WebMediaSessionFocusManagerClient.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9C183371B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.cpp */; };
     1667                C9C1833C1B74026D007036A7 /* WebMediaSessionFocusManagerClient.h in Headers */ = {isa = PBXBuildFile; fileRef = C9C183381B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.h */; };
    16661668                C9CD43971B4B001900239E33 /* WebMediaSessionMetadata.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C9CD43931B4B000E00239E33 /* WebMediaSessionMetadata.cpp */; };
    16671669                C9CD43981B4B001D00239E33 /* WebMediaSessionMetadata.h in Headers */ = {isa = PBXBuildFile; fileRef = C9CD43941B4B000E00239E33 /* WebMediaSessionMetadata.h */; };
     
    38923894                C98C48A71B6FD5B500145103 /* WKMediaSessionFocusManager.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WKMediaSessionFocusManager.cpp; sourceTree = "<group>"; };
    38933895                C98C48A81B6FD5B500145103 /* WKMediaSessionFocusManager.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WKMediaSessionFocusManager.h; sourceTree = "<group>"; };
     3896                C9C183371B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebMediaSessionFocusManagerClient.cpp; sourceTree = "<group>"; };
     3897                C9C183381B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebMediaSessionFocusManagerClient.h; sourceTree = "<group>"; };
    38943898                C9CD43931B4B000E00239E33 /* WebMediaSessionMetadata.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WebMediaSessionMetadata.cpp; sourceTree = "<group>"; };
    38953899                C9CD43941B4B000E00239E33 /* WebMediaSessionMetadata.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = WebMediaSessionMetadata.h; sourceTree = "<group>"; };
     
    61796183                                C98C48A31B6FD4C300145103 /* WebMediaSessionFocusManager.cpp */,
    61806184                                C98C48A41B6FD4C300145103 /* WebMediaSessionFocusManager.h */,
     6185                                C9C183371B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.cpp */,
     6186                                C9C183381B73FD6A007036A7 /* WebMediaSessionFocusManagerClient.h */,
    61816187                                7CCCC8F81A5F50FD008FB0DA /* WebNavigationState.cpp */,
    61826188                                7CCCC8F91A5F50FD008FB0DA /* WebNavigationState.h */,
     
    79897995                                CD003A5319D49B5D005ABCE0 /* WebMediaKeyStorageManager.h in Headers */,
    79907996                                C98C48A61B6FD4C300145103 /* WebMediaSessionFocusManager.h in Headers */,
     7997                                C9C1833C1B74026D007036A7 /* WebMediaSessionFocusManagerClient.h in Headers */,
    79917998                                C9CD43981B4B001D00239E33 /* WebMediaSessionMetadata.h in Headers */,
    79927999                                2D3EF4431917646300034184 /* WebMemoryPressureHandlerIOS.h in Headers */,
     
    98259832                                CD003A5219D49B5D005ABCE0 /* WebMediaKeyStorageManager.cpp in Sources */,
    98269833                                C98C48A51B6FD4C300145103 /* WebMediaSessionFocusManager.cpp in Sources */,
     9834                                C9C1833B1B74026A007036A7 /* WebMediaSessionFocusManagerClient.cpp in Sources */,
    98279835                                C9CD43971B4B001900239E33 /* WebMediaSessionMetadata.cpp in Sources */,
    98289836                                2D3EF4421917646300034184 /* WebMemoryPressureHandlerIOS.mm in Sources */,
Note: See TracChangeset for help on using the changeset viewer.