Changeset 188345 in webkit
- Timestamp:
- Aug 12, 2015 12:22:49 PM (9 years ago)
- Location:
- trunk/Source
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r188342 r188345 1 2015-08-07 Matt Rajca <mrajca@apple.com> 2 3 Media Session: notify the UI process when media controls are enabled/disabled 4 https://bugs.webkit.org/show_bug.cgi?id=147802 5 6 Reviewed by Eric Carlson. 7 8 * Modules/mediasession/MediaRemoteControls.cpp: 9 (WebCore::MediaRemoteControls::MediaRemoteControls): Keep track of the parent session. 10 (WebCore::MediaRemoteControls::~MediaRemoteControls): Removed unnecessary line. 11 (WebCore::MediaRemoteControls::setPreviousTrackEnabled): Tell the session a control was enabled/disabled. 12 (WebCore::MediaRemoteControls::setNextTrackEnabled): Tell the session a control was enabled/disabled. 13 * Modules/mediasession/MediaRemoteControls.h: 14 (WebCore::MediaRemoteControls::create): 15 (WebCore::MediaRemoteControls::setPreviousTrackEnabled): Moved to implementation file. 16 (WebCore::MediaRemoteControls::setNextTrackEnabled): Moved to implementation file. 17 * Modules/mediasession/MediaSession.cpp: 18 (WebCore::MediaSession::MediaSession): Keep track of the remote controls' parent session. 19 (WebCore::MediaSession::controlIsEnabledDidChange): Propagate the new media state to the UI process. 20 * Modules/mediasession/MediaSession.h: 21 * dom/Document.cpp: 22 (WebCore::Document::updateIsPlayingMedia): Include whether we can skip to the previous/next track. 23 * page/MediaProducer.h: 24 1 25 2015-08-12 Alex Christensen <achristensen@webkit.org> 2 26 -
trunk/Source/WebCore/Modules/mediasession/MediaRemoteControls.cpp
r185077 r188345 29 29 #if ENABLE(MEDIA_SESSION) 30 30 31 #include "MediaSession.h" 32 31 33 namespace WebCore { 32 34 33 MediaRemoteControls::MediaRemoteControls(ScriptExecutionContext& context )35 MediaRemoteControls::MediaRemoteControls(ScriptExecutionContext& context, MediaSession* session) 34 36 : m_scriptExecutionContext(context) 37 , m_session(session) 35 38 { 39 } 40 41 void MediaRemoteControls::clearSession() 42 { 43 m_session = nullptr; 36 44 } 37 45 38 46 MediaRemoteControls::~MediaRemoteControls() 39 47 { 40 48 } 49 50 void MediaRemoteControls::setPreviousTrackEnabled(bool isEnabled) 51 { 52 if (m_previousTrackEnabled == isEnabled) 53 return; 54 55 m_previousTrackEnabled = isEnabled; 56 57 if (m_session) 58 m_session->controlIsEnabledDidChange(); 59 } 60 61 void MediaRemoteControls::setNextTrackEnabled(bool isEnabled) 62 { 63 if (m_nextTrackEnabled == isEnabled) 64 return; 65 66 m_nextTrackEnabled = isEnabled; 67 68 if (m_session) 69 m_session->controlIsEnabledDidChange(); 41 70 } 42 71 -
trunk/Source/WebCore/Modules/mediasession/MediaRemoteControls.h
r186482 r188345 34 34 namespace WebCore { 35 35 36 class MediaSession; 37 36 38 class MediaRemoteControls : public RefCounted<MediaRemoteControls>, public EventTargetWithInlineData { 37 39 public: 38 static Ref<MediaRemoteControls> create(ScriptExecutionContext& context )40 static Ref<MediaRemoteControls> create(ScriptExecutionContext& context, MediaSession* session = nullptr) 39 41 { 40 return adoptRef(*new MediaRemoteControls(context ));42 return adoptRef(*new MediaRemoteControls(context, session)); 41 43 } 42 44 43 45 bool previousTrackEnabled() const { return m_previousTrackEnabled; } 44 void setPreviousTrackEnabled(bool enabled) { m_previousTrackEnabled = enabled; }46 void setPreviousTrackEnabled(bool); 45 47 46 48 bool nextTrackEnabled() const { return m_nextTrackEnabled; } 47 void setNextTrackEnabled(bool enabled) { m_nextTrackEnabled = enabled; }49 void setNextTrackEnabled(bool); 48 50 49 51 using RefCounted<MediaRemoteControls>::ref; 50 52 using RefCounted<MediaRemoteControls>::deref; 51 53 54 void clearSession(); 55 52 56 virtual ~MediaRemoteControls(); 53 54 MediaRemoteControls(ScriptExecutionContext&);55 57 56 58 virtual EventTargetInterface eventTargetInterface() const override { return MediaRemoteControlsEventTargetInterfaceType; } … … 58 60 59 61 private: 62 MediaRemoteControls(ScriptExecutionContext&, MediaSession*); 63 60 64 ScriptExecutionContext& m_scriptExecutionContext; 61 65 62 66 bool m_previousTrackEnabled { false }; 63 67 bool m_nextTrackEnabled { false }; 68 69 MediaSession* m_session { nullptr }; 64 70 65 71 virtual void refEventTarget() override final { ref(); } -
trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp
r187257 r188345 72 72 // session. (Otherwise media session has no media remote controller.) 73 73 if (m_kind == Kind::Content) 74 m_controls = adoptRef(*new MediaRemoteControls(context));74 m_controls = MediaRemoteControls::create(context, this); 75 75 76 76 MediaSessionManager::singleton().addMediaSession(*this); … … 80 80 { 81 81 MediaSessionManager::singleton().removeMediaSession(*this); 82 83 if (m_controls) 84 m_controls->clearSession(); 82 85 } 83 86 … … 318 321 } 319 322 323 void MediaSession::controlIsEnabledDidChange() 324 { 325 // Media remote controls are only allowed on Content media sessions. 326 ASSERT(m_kind == Kind::Content); 327 328 // Media elements belonging to Content media sessions have mutually-exclusive playback. 329 ASSERT(m_activeParticipatingElements.size() <= 1); 330 331 if (m_activeParticipatingElements.isEmpty()) 332 return; 333 334 HTMLMediaElement* element = *m_activeParticipatingElements.begin(); 335 m_document.updateIsPlayingMedia(element->elementID()); 336 } 337 320 338 } 321 339 -
trunk/Source/WebCore/Modules/mediasession/MediaSession.h
r187006 r188345 87 87 void skipToPreviousTrack(); 88 88 89 void controlIsEnabledDidChange(); 90 89 91 private: 90 92 friend class HTMLMediaElement; -
trunk/Source/WebCore/dom/Document.cpp
r188062 r188345 3517 3517 if (sourceElement->isPlaying()) 3518 3518 state |= MediaProducer::IsSourceElementPlaying; 3519 3520 if (MediaSession* session = sourceElement->session()) { 3521 bool isNull; 3522 if (MediaRemoteControls* controls = session->controls(isNull)) { 3523 if (controls->previousTrackEnabled()) 3524 state |= MediaProducer::IsPreviousTrackControlEnabled; 3525 if (controls->nextTrackEnabled()) 3526 state |= MediaProducer::IsNextTrackControlEnabled; 3527 } 3528 } 3519 3529 } 3520 3530 #endif -
trunk/Source/WebCore/page/MediaProducer.h
r188030 r188345 40 40 DidPlayToEnd = 1 << 5, 41 41 IsSourceElementPlaying = 1 << 6, 42 IsNextTrackControlEnabled = 1 << 7, 43 IsPreviousTrackControlEnabled = 1 << 8, 42 44 }; 43 45 typedef unsigned MediaStateFlags; -
trunk/Source/WebKit2/ChangeLog
r188337 r188345 1 2015-08-07 Matt Rajca <mrajca@apple.com> 2 3 Media Session: notify the UI process when media controls are enabled/disabled 4 https://bugs.webkit.org/show_bug.cgi?id=147802 5 6 Reviewed by Eric Carlson. 7 8 * UIProcess/WebMediaSessionFocusManager.cpp: 9 (WebKit::WebMediaSessionFocusManager::playbackAttributeDidChange): Generalized to take different attributes. 10 (WebKit::WebMediaSessionFocusManager::mediaElementIsPlayingDidChange): Deleted. 11 * UIProcess/WebMediaSessionFocusManager.h: 12 * UIProcess/WebPageProxy.cpp: 13 (WebKit::WebPageProxy::isPlayingMediaDidChange): Process new attributes for enabling/disabling media controls. 14 1 15 2015-08-12 Devin Rousso <drousso@apple.com> 2 16 -
trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.cpp
r188218 r188345 71 71 } 72 72 73 void WebMediaSessionFocusManager::mediaElementIsPlayingDidChange(WebPageProxy* proxy, uint64_t elementID, bool isPlaying) 73 void WebMediaSessionFocusManager::updatePlaybackAttribute(WKMediaSessionFocusManagerPlaybackAttribute attribute, bool value) 74 { 75 if (value) 76 m_playbackAttributes |= attribute; 77 else 78 m_playbackAttributes &= ~attribute; 79 80 m_client.didChangePlaybackAttribute(this, attribute, value); 81 } 82 83 void WebMediaSessionFocusManager::updatePlaybackAttributesFromMediaState(WebPageProxy* proxy, uint64_t elementID, WebCore::MediaProducer::MediaStateFlags flags) 74 84 { 75 85 if (m_focusedMediaElement) { 76 86 if (proxy == m_focusedMediaElement->first && elementID == m_focusedMediaElement->second) { 77 if (isPlaying) 78 m_playbackAttributes |= IsPlaying; 79 else 80 m_playbackAttributes &= ~IsPlaying; 81 82 m_client.didChangePlaybackAttribute(this, IsPlaying, isPlaying); 87 updatePlaybackAttribute(IsPlaying, flags & WebCore::MediaProducer::IsSourceElementPlaying); 88 updatePlaybackAttribute(IsNextTrackControlEnabled, flags & WebCore::MediaProducer::IsNextTrackControlEnabled); 89 updatePlaybackAttribute(IsPreviousTrackControlEnabled, flags & WebCore::MediaProducer::IsPreviousTrackControlEnabled); 83 90 } 84 91 } -
trunk/Source/WebKit2/UIProcess/WebMediaSessionFocusManager.h
r188218 r188345 47 47 48 48 bool valueForPlaybackAttribute(WKMediaSessionFocusManagerPlaybackAttribute) const; 49 void mediaElementIsPlayingDidChange(WebPageProxy*, uint64_t, bool);49 void updatePlaybackAttributesFromMediaState(WebPageProxy*, uint64_t, WebCore::MediaProducer::MediaStateFlags); 50 50 51 51 void setFocusedMediaElement(WebPageProxy&, uint64_t); … … 62 62 virtual void derefWebContextSupplement() override; 63 63 64 void updatePlaybackAttribute(WKMediaSessionFocusManagerPlaybackAttribute, bool); 65 64 66 std::unique_ptr<FocusedMediaElement> m_focusedMediaElement; 65 67 WKMediaSessionFocusManagerPlaybackAttributes m_playbackAttributes { 0 }; -
trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp
r188257 r188345 5950 5950 WebMediaSessionFocusManager* focusManager = process().processPool().supplement<WebMediaSessionFocusManager>(); 5951 5951 ASSERT(focusManager); 5952 focusManager-> mediaElementIsPlayingDidChange(this, sourceElementID, state & MediaProducer::IsSourceElementPlaying);5952 focusManager->updatePlaybackAttributesFromMediaState(this, sourceElementID, state); 5953 5953 #endif 5954 5954
Note: See TracChangeset
for help on using the changeset viewer.