Changeset 185678 in webkit


Ignore:
Timestamp:
Jun 17, 2015 5:01:10 PM (9 years ago)
Author:
mrajca@apple.com
Message:

MediaSession: handle MediaEventTrackNext and MediaEventTrackPrevious events
https://bugs.webkit.org/show_bug.cgi?id=146028

Reviewed by Darin Adler.

  • Modules/mediasession/MediaRemoteControls.idl: Added nexttrack/previoustrack event handlers.
  • Modules/mediasession/MediaSession.cpp: Dispatch the nexttrack/previoustrack events.

(WebCore::MediaSession::skipToNextTrack):
(WebCore::MediaSession::skipToPreviousTrack):

  • Modules/mediasession/MediaSession.h:
  • Modules/mediasession/MediaSessionManager.cpp: Skip to the next/previous track as described in the media session spec.

(WebCore::MediaSessionManager::skipToNextTrack):
(WebCore::MediaSessionManager::skipToPreviousTrack):

  • Modules/mediasession/MediaSessionManager.h:
  • dom/EventNames.h: Added the nexttrack/previoustrack event names.
  • page/Page.cpp: Tell MediaSessionManager to handle the new track-skipping events.

(WebCore::Page::handleMediaEvent):

Location:
trunk/Source/WebCore
Files:
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r185675 r185678  
     12015-06-16  Matt Rajca  <mrajca@apple.com>
     2
     3        MediaSession: handle MediaEventTrackNext and MediaEventTrackPrevious events
     4        https://bugs.webkit.org/show_bug.cgi?id=146028
     5
     6        Reviewed by Darin Adler.
     7
     8        * Modules/mediasession/MediaRemoteControls.idl: Added nexttrack/previoustrack event handlers.
     9        * Modules/mediasession/MediaSession.cpp: Dispatch the nexttrack/previoustrack events.
     10        (WebCore::MediaSession::skipToNextTrack):
     11        (WebCore::MediaSession::skipToPreviousTrack):
     12        * Modules/mediasession/MediaSession.h:
     13        * Modules/mediasession/MediaSessionManager.cpp: Skip to the next/previous track as described in the media session spec.
     14        (WebCore::MediaSessionManager::skipToNextTrack):
     15        (WebCore::MediaSessionManager::skipToPreviousTrack):
     16        * Modules/mediasession/MediaSessionManager.h:
     17        * dom/EventNames.h: Added the nexttrack/previoustrack event names.
     18        * page/Page.cpp: Tell MediaSessionManager to handle the new track-skipping events.
     19        (WebCore::Page::handleMediaEvent):
     20
    1212015-06-17  Chris Fleizach  <cfleizach@apple.com>
    222
  • trunk/Source/WebCore/Modules/mediasession/MediaRemoteControls.idl

    r185429 r185678  
    3535    attribute boolean seekForwardEnabled;
    3636    attribute boolean seekBackwardEnabled;
     37
     38    attribute EventHandler onprevioustrack;
     39    attribute EventHandler onnexttrack;
    3740};
  • trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp

    r185570 r185678  
    2929#if ENABLE(MEDIA_SESSION)
    3030
     31#include "Event.h"
    3132#include "HTMLMediaElement.h"
    3233#include "MediaSessionManager.h"
     
    112113}
    113114
     115void MediaSession::skipToNextTrack()
     116{
     117    if (m_controls && m_controls->nextTrackEnabled())
     118        m_controls->dispatchEvent(Event::create(eventNames().nexttrackEvent, false, false));
     119}
     120
     121void MediaSession::skipToPreviousTrack()
     122{
     123    if (m_controls && m_controls->previousTrackEnabled())
     124        m_controls->dispatchEvent(Event::create(eventNames().previoustrackEvent, false, false));
     125}
     126
    114127}
    115128
  • trunk/Source/WebCore/Modules/mediasession/MediaSession.h

    r185570 r185678  
    6262
    6363    void togglePlayback();
     64    void skipToNextTrack();
     65    void skipToPreviousTrack();
    6466
    6567private:
  • trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.cpp

    r185394 r185678  
    3434namespace WebCore {
    3535
     36static const char* contentSessionKind = "content";
     37
    3638MediaSessionManager& MediaSessionManager::singleton()
    3739{
     
    5456    for (auto* session : m_sessions) {
    5557        String sessionKind = session->kind();
    56         if (session->currentState() == MediaSession::State::Active && (sessionKind == "content" || sessionKind == ""))
     58        if (session->currentState() == MediaSession::State::Active && (sessionKind == contentSessionKind || sessionKind == ""))
    5759            session->togglePlayback();
     60    }
     61}
     62
     63void MediaSessionManager::skipToNextTrack()
     64{
     65    // 5.2.2 When the user presses the MediaTrackNext media key, then for each Content-based media session that is
     66    // currently ACTIVE and has a media remote controller with its nextTrackEnabled attribute set to true, queue a task
     67    // to fire a simple event named nexttrack at its media remote controller.
     68    for (auto* session : m_sessions) {
     69        if (session->currentState() == MediaSession::State::Active && session->kind() == contentSessionKind)
     70            session->skipToNextTrack();
     71    }
     72}
     73
     74void MediaSessionManager::skipToPreviousTrack()
     75{
     76    // 5.2.2 When the user presses the MediaTrackPrevious media key, then for each Content-based media session that is
     77    // currently ACTIVE and has a media remote controller with its previousTrackEnabled attribute set to true, queue a task
     78    // to fire a simple event named previoustrack at its media remote controller.
     79    for (auto* session : m_sessions) {
     80        if (session->currentState() == MediaSession::State::Active && session->kind() == contentSessionKind)
     81            session->skipToPreviousTrack();
    5882    }
    5983}
  • trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.h

    r185394 r185678  
    4040
    4141    void togglePlayback();
    42    
     42    void skipToNextTrack();
     43    void skipToPreviousTrack();
     44
    4345private:
    4446    friend class MediaSession;
  • trunk/Source/WebCore/dom/EventNames.h

    r183186 r185678  
    143143    macro(mute) \
    144144    macro(negotiationneeded) \
     145    macro(nexttrack) \
    145146    macro(nomatch) \
    146147    macro(noupdate) \
     
    161162    macro(pointerlockerror) \
    162163    macro(popstate) \
     164    macro(previoustrack) \
    163165    macro(progress) \
    164166    macro(ratechange) \
  • trunk/Source/WebCore/page/Page.cpp

    r185477 r185678  
    12391239        MediaSessionManager::singleton().togglePlayback();
    12401240        break;
    1241     default:
     1241    case MediaEventType::TrackNext:
     1242        MediaSessionManager::singleton().skipToNextTrack();
     1243        break;
     1244    case MediaEventType::TrackPrevious:
     1245        MediaSessionManager::singleton().skipToPreviousTrack();
    12421246        break;
    12431247    }
Note: See TracChangeset for help on using the changeset viewer.