Title: [186593] trunk/Source/WebCore
Revision
186593
Author
mra...@apple.com
Date
2015-07-09 09:26:33 -0700 (Thu, 09 Jul 2015)

Log Message

Media Session: report to chrome client 'hasActiveMediaElements' changes
https://bugs.webkit.org/show_bug.cgi?id=146745

Reviewed by Eric Carlson.

* Modules/mediasession/MediaSession.cpp: All updates to active media elements are now funneled through a helper
  method that will invoke the 'hasMediaSessionWithActiveMediaElementsDidChange' callback when necessary.
(WebCore::MediaSession::removeMediaElement):
(WebCore::MediaSession::changeActiveMediaElements):
(WebCore::MediaSession::addActiveMediaElement):
(WebCore::MediaSession::releaseSession):
* Modules/mediasession/MediaSession.h:
* Modules/mediasession/MediaSessionManager.cpp:
(WebCore::MediaSessionManager::hasActiveMediaElements):
* Modules/mediasession/MediaSessionManager.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (186592 => 186593)


--- trunk/Source/WebCore/ChangeLog	2015-07-09 15:27:43 UTC (rev 186592)
+++ trunk/Source/WebCore/ChangeLog	2015-07-09 16:26:33 UTC (rev 186593)
@@ -1,3 +1,21 @@
+2015-07-08  Matt Rajca  <mra...@apple.com>
+
+        Media Session: report to chrome client 'hasActiveMediaElements' changes
+        https://bugs.webkit.org/show_bug.cgi?id=146745
+
+        Reviewed by Eric Carlson.
+
+        * Modules/mediasession/MediaSession.cpp: All updates to active media elements are now funneled through a helper
+          method that will invoke the 'hasMediaSessionWithActiveMediaElementsDidChange' callback when necessary.
+        (WebCore::MediaSession::removeMediaElement):
+        (WebCore::MediaSession::changeActiveMediaElements):
+        (WebCore::MediaSession::addActiveMediaElement):
+        (WebCore::MediaSession::releaseSession):
+        * Modules/mediasession/MediaSession.h:
+        * Modules/mediasession/MediaSessionManager.cpp:
+        (WebCore::MediaSessionManager::hasActiveMediaElements):
+        * Modules/mediasession/MediaSessionManager.h:
+
 2015-07-09  Darin Adler  <da...@apple.com>
 
         REGRESSION (r182866): repeated prompts for password on internal Apple website using workers

Modified: trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp (186592 => 186593)


--- trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp	2015-07-09 15:27:43 UTC (rev 186592)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp	2015-07-09 16:26:33 UTC (rev 186593)
@@ -115,14 +115,33 @@
     ASSERT(m_participatingElements.contains(&element));
     m_participatingElements.remove(&element);
 
-    m_activeParticipatingElements.remove(&element);
+    changeActiveMediaElements([&]() {
+        m_activeParticipatingElements.remove(&element);
+    });
+
     if (m_iteratedActiveParticipatingElements)
         m_iteratedActiveParticipatingElements->remove(&element);
 }
 
+void MediaSession::changeActiveMediaElements(std::function<void(void)> worker)
+{
+    if (Page *page = m_document.page()) {
+        bool hadActiveMediaElements = MediaSessionManager::singleton().hasActiveMediaElements();
+
+        worker();
+
+        bool hasActiveMediaElements = MediaSessionManager::singleton().hasActiveMediaElements();
+        if (hadActiveMediaElements != hasActiveMediaElements)
+            page->chrome().client().hasMediaSessionWithActiveMediaElementsDidChange(hasActiveMediaElements);
+    } else
+        worker();
+}
+
 void MediaSession::addActiveMediaElement(HTMLMediaElement& element)
 {
-    m_activeParticipatingElements.add(&element);
+    changeActiveMediaElements([&]() {
+        m_activeParticipatingElements.add(&element);
+    });
 }
 
 bool MediaSession::isMediaElementActive(HTMLMediaElement& element)
@@ -130,7 +149,7 @@
     return m_activeParticipatingElements.contains(&element);
 }
 
-bool MediaSession::hasActiveMediaElements()
+bool MediaSession::hasActiveMediaElements() const
 {
     return !m_activeParticipatingElements.isEmpty();
 }
@@ -171,8 +190,10 @@
     // 1. Let media session be the current media session.
     // 2. Indefinitely pause all of media session's active participating media elements.
     // 3. Reset media session's active participating media elements to an empty list.
-    while (!m_activeParticipatingElements.isEmpty())
-        m_activeParticipatingElements.takeAny()->pause();
+    changeActiveMediaElements([&]() {
+        while (!m_activeParticipatingElements.isEmpty())
+            m_activeParticipatingElements.takeAny()->pause();
+    });
 
     // 4. Run the media session release algorithm for media session.
     releaseInternal();

Modified: trunk/Source/WebCore/Modules/mediasession/MediaSession.h (186592 => 186593)


--- trunk/Source/WebCore/Modules/mediasession/MediaSession.h	2015-07-09 15:27:43 UTC (rev 186592)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSession.h	2015-07-09 16:26:33 UTC (rev 186593)
@@ -58,6 +58,7 @@
     MediaRemoteControls* controls(bool& isNull);
 
     State currentState() const { return m_currentState; }
+    bool hasActiveMediaElements() const;
 
     void setMetadata(const Dictionary&);
 
@@ -87,9 +88,9 @@
     void addMediaElement(HTMLMediaElement&);
     void removeMediaElement(HTMLMediaElement&);
 
+    void changeActiveMediaElements(std::function<void(void)>);
     void addActiveMediaElement(HTMLMediaElement&);
     bool isMediaElementActive(HTMLMediaElement&);
-    bool hasActiveMediaElements();
 
     void releaseInternal();
 

Modified: trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.cpp (186592 => 186593)


--- trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.cpp	2015-07-09 15:27:43 UTC (rev 186592)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.cpp	2015-07-09 16:26:33 UTC (rev 186593)
@@ -41,6 +41,16 @@
     return manager;
 }
 
+bool MediaSessionManager::hasActiveMediaElements() const
+{
+    for (auto* session : m_sessions) {
+        if (session->hasActiveMediaElements())
+            return true;
+    }
+
+    return false;
+}
+
 void MediaSessionManager::addMediaSession(MediaSession& session)
 {
     m_sessions.add(&session);

Modified: trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.h (186592 => 186593)


--- trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.h	2015-07-09 15:27:43 UTC (rev 186592)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSessionManager.h	2015-07-09 16:26:33 UTC (rev 186593)
@@ -45,6 +45,8 @@
 private:
     friend class MediaSession;
 
+    bool hasActiveMediaElements() const;
+
     void addMediaSession(MediaSession&);
     void removeMediaSession(MediaSession&);
 
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to