Changeset 186593 in webkit
- Timestamp:
- Jul 9, 2015 9:26:33 AM (9 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r186592 r186593 1 2015-07-08 Matt Rajca <mrajca@apple.com> 2 3 Media Session: report to chrome client 'hasActiveMediaElements' changes 4 https://bugs.webkit.org/show_bug.cgi?id=146745 5 6 Reviewed by Eric Carlson. 7 8 * Modules/mediasession/MediaSession.cpp: All updates to active media elements are now funneled through a helper 9 method that will invoke the 'hasMediaSessionWithActiveMediaElementsDidChange' callback when necessary. 10 (WebCore::MediaSession::removeMediaElement): 11 (WebCore::MediaSession::changeActiveMediaElements): 12 (WebCore::MediaSession::addActiveMediaElement): 13 (WebCore::MediaSession::releaseSession): 14 * Modules/mediasession/MediaSession.h: 15 * Modules/mediasession/MediaSessionManager.cpp: 16 (WebCore::MediaSessionManager::hasActiveMediaElements): 17 * Modules/mediasession/MediaSessionManager.h: 18 1 19 2015-07-09 Darin Adler <darin@apple.com> 2 20 -
trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp
r186123 r186593 116 116 m_participatingElements.remove(&element); 117 117 118 m_activeParticipatingElements.remove(&element); 118 changeActiveMediaElements([&]() { 119 m_activeParticipatingElements.remove(&element); 120 }); 121 119 122 if (m_iteratedActiveParticipatingElements) 120 123 m_iteratedActiveParticipatingElements->remove(&element); 121 124 } 122 125 126 void MediaSession::changeActiveMediaElements(std::function<void(void)> worker) 127 { 128 if (Page *page = m_document.page()) { 129 bool hadActiveMediaElements = MediaSessionManager::singleton().hasActiveMediaElements(); 130 131 worker(); 132 133 bool hasActiveMediaElements = MediaSessionManager::singleton().hasActiveMediaElements(); 134 if (hadActiveMediaElements != hasActiveMediaElements) 135 page->chrome().client().hasMediaSessionWithActiveMediaElementsDidChange(hasActiveMediaElements); 136 } else 137 worker(); 138 } 139 123 140 void MediaSession::addActiveMediaElement(HTMLMediaElement& element) 124 141 { 125 m_activeParticipatingElements.add(&element); 142 changeActiveMediaElements([&]() { 143 m_activeParticipatingElements.add(&element); 144 }); 126 145 } 127 146 … … 131 150 } 132 151 133 bool MediaSession::hasActiveMediaElements() 152 bool MediaSession::hasActiveMediaElements() const 134 153 { 135 154 return !m_activeParticipatingElements.isEmpty(); … … 172 191 // 2. Indefinitely pause all of media session's active participating media elements. 173 192 // 3. Reset media session's active participating media elements to an empty list. 174 while (!m_activeParticipatingElements.isEmpty()) 175 m_activeParticipatingElements.takeAny()->pause(); 193 changeActiveMediaElements([&]() { 194 while (!m_activeParticipatingElements.isEmpty()) 195 m_activeParticipatingElements.takeAny()->pause(); 196 }); 176 197 177 198 // 4. Run the media session release algorithm for media session. -
trunk/Source/WebCore/Modules/mediasession/MediaSession.h
r186123 r186593 59 59 60 60 State currentState() const { return m_currentState; } 61 bool hasActiveMediaElements() const; 61 62 62 63 void setMetadata(const Dictionary&); … … 88 89 void removeMediaElement(HTMLMediaElement&); 89 90 91 void changeActiveMediaElements(std::function<void(void)>); 90 92 void addActiveMediaElement(HTMLMediaElement&); 91 93 bool isMediaElementActive(HTMLMediaElement&); 92 bool hasActiveMediaElements();93 94 94 95 void releaseInternal(); -
trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.cpp
r185678 r186593 40 40 static NeverDestroyed<MediaSessionManager> manager; 41 41 return manager; 42 } 43 44 bool MediaSessionManager::hasActiveMediaElements() const 45 { 46 for (auto* session : m_sessions) { 47 if (session->hasActiveMediaElements()) 48 return true; 49 } 50 51 return false; 42 52 } 43 53 -
trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.h
r185678 r186593 46 46 friend class MediaSession; 47 47 48 bool hasActiveMediaElements() const; 49 48 50 void addMediaSession(MediaSession&); 49 51 void removeMediaSession(MediaSession&);
Note: See TracChangeset
for help on using the changeset viewer.