Title: [185270] trunk/Source/WebCore
- Revision
- 185270
- Author
- [email protected]
- Date
- 2015-06-05 15:33:23 -0700 (Fri, 05 Jun 2015)
Log Message
MediaSessions should keep track of their participating media elements.
https://bugs.webkit.org/show_bug.cgi?id=145703
Patch by Matt Rajca <[email protected]> on 2015-06-05
Reviewed by Eric Carlson.
* Modules/mediasession/MediaSession.cpp:
(WebCore::MediaSession::addMediaElement): Add the given media element to the media session.
(WebCore::MediaSession::removeMediaElement): Remove the given media element from the media session.
(WebCore::MediaSession::activeParticipatingElements): Dynamically build a vector of actively-playing media
elements.
* Modules/mediasession/MediaSession.h:
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::~HTMLMediaElement): Ensure the element is removed from its media session.
(WebCore::HTMLMediaElement::setSession): Update sessions' references to their media elements.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (185269 => 185270)
--- trunk/Source/WebCore/ChangeLog 2015-06-05 22:10:19 UTC (rev 185269)
+++ trunk/Source/WebCore/ChangeLog 2015-06-05 22:33:23 UTC (rev 185270)
@@ -1,3 +1,20 @@
+2015-06-05 Matt Rajca <[email protected]>
+
+ MediaSessions should keep track of their participating media elements.
+ https://bugs.webkit.org/show_bug.cgi?id=145703
+
+ Reviewed by Eric Carlson.
+
+ * Modules/mediasession/MediaSession.cpp:
+ (WebCore::MediaSession::addMediaElement): Add the given media element to the media session.
+ (WebCore::MediaSession::removeMediaElement): Remove the given media element from the media session.
+ (WebCore::MediaSession::activeParticipatingElements): Dynamically build a vector of actively-playing media
+ elements.
+ * Modules/mediasession/MediaSession.h:
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::~HTMLMediaElement): Ensure the element is removed from its media session.
+ (WebCore::HTMLMediaElement::setSession): Update sessions' references to their media elements.
+
2015-06-05 Chris Dumez <[email protected]>
Regression(r176212): Broke app switching on iCloud.com
Modified: trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp (185269 => 185270)
--- trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp 2015-06-05 22:10:19 UTC (rev 185269)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp 2015-06-05 22:33:23 UTC (rev 185270)
@@ -28,6 +28,8 @@
#if ENABLE(MEDIA_SESSION)
+#include "HTMLMediaElement.h"
+
namespace WebCore {
MediaSession::MediaSession(ScriptExecutionContext& context, const String& kind)
@@ -48,6 +50,30 @@
return controls;
}
+void MediaSession::addMediaElement(HTMLMediaElement& element)
+{
+ ASSERT(!m_participatingElements.contains(&element));
+ m_participatingElements.append(&element);
+}
+
+void MediaSession::removeMediaElement(HTMLMediaElement& element)
+{
+ ASSERT(m_participatingElements.contains(&element));
+ m_participatingElements.remove(m_participatingElements.find(&element));
+}
+
+Vector<HTMLMediaElement*> MediaSession::activeParticipatingElements() const
+{
+ Vector<HTMLMediaElement*> elements;
+
+ for (auto* element : m_participatingElements) {
+ if (element->isPlaying())
+ elements.append(element);
+ }
+
+ return elements;
+}
+
void MediaSession::releaseSession()
{
}
Modified: trunk/Source/WebCore/Modules/mediasession/MediaSession.h (185269 => 185270)
--- trunk/Source/WebCore/Modules/mediasession/MediaSession.h 2015-06-05 22:10:19 UTC (rev 185269)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSession.h 2015-06-05 22:33:23 UTC (rev 185270)
@@ -32,6 +32,8 @@
namespace WebCore {
+class HTMLMediaElement;
+
class MediaSession final : public RefCounted<MediaSession> {
public:
static Ref<MediaSession> create(ScriptExecutionContext& context, const String& kind)
@@ -54,7 +56,15 @@
Interrupted
};
+ friend class HTMLMediaElement;
+
+ void addMediaElement(HTMLMediaElement&);
+ void removeMediaElement(HTMLMediaElement&);
+
+ Vector<HTMLMediaElement*> activeParticipatingElements() const;
+
State m_currentState { State::Idle };
+ Vector<HTMLMediaElement*> m_participatingElements;
const String m_kind;
RefPtr<MediaRemoteControls> m_controls;
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (185269 => 185270)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-06-05 22:10:19 UTC (rev 185269)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-06-05 22:33:23 UTC (rev 185270)
@@ -457,6 +457,13 @@
m_isolatedWorld->clearWrappers();
#endif
+#if ENABLE(MEDIA_SESSION)
+ if (m_session) {
+ m_session->removeMediaElement(*this);
+ m_session = nullptr;
+ }
+#endif
+
m_seekTaskQueue.close();
m_completelyLoaded = true;
@@ -6367,7 +6374,13 @@
void HTMLMediaElement::setSession(MediaSession* session)
{
+ if (m_session)
+ m_session->removeMediaElement(*this);
+
m_session = session;
+
+ if (session)
+ session->addMediaElement(*this);
}
#endif
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes