Diff
Modified: trunk/Source/WebCore/ChangeLog (186063 => 186064)
--- trunk/Source/WebCore/ChangeLog 2015-06-29 05:05:37 UTC (rev 186063)
+++ trunk/Source/WebCore/ChangeLog 2015-06-29 05:29:04 UTC (rev 186064)
@@ -1,3 +1,20 @@
+2015-06-26 Matt Rajca <[email protected]>
+
+ Add support for 'Default' media session types
+ https://bugs.webkit.org/show_bug.cgi?id=146355
+
+ Reviewed by Darin Adler.
+
+ * Modules/mediasession/MediaSession.cpp:
+ (WebCore::MediaSession::MediaSession): Added a new constructor for creating 'Default' media sessions.
+ (WebCore::MediaSession::kind): 'Default' media sessions are represented by an empty string.
+ * Modules/mediasession/MediaSession.h:
+ * dom/Document.cpp:
+ (WebCore::Document::defaultMediaSession): Lazily construct the default media session.
+ * dom/Document.h:
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::HTMLMediaElement): New media elements are assigned to the 'Default' media session.
+
2015-06-28 Andreas Kling <[email protected]>
[iOS] Drop buffered data in paused media elements on memory pressure.
Modified: trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp (186063 => 186064)
--- trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp 2015-06-29 05:05:37 UTC (rev 186063)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSession.cpp 2015-06-29 05:29:04 UTC (rev 186064)
@@ -37,6 +37,7 @@
namespace WebCore {
+static const char* defaultKind = "";
static const char* ambientKind = "ambient";
static const char* transientKind = "transient";
static const char* transientSoloKind = "transient-solo";
@@ -56,6 +57,12 @@
return MediaSession::Kind::Content;
}
+MediaSession::MediaSession(Document& document)
+ : m_document(document)
+{
+ MediaSessionManager::singleton().addMediaSession(*this);
+}
+
MediaSession::MediaSession(ScriptExecutionContext& context, const String& kind)
: m_document(downcast<Document>(context))
, m_kind(parseKind(kind))
@@ -77,6 +84,8 @@
String MediaSession::kind() const
{
switch (m_kind) {
+ case MediaSession::Kind::Default:
+ return defaultKind;
case MediaSession::Kind::Ambient:
return ambientKind;
case MediaSession::Kind::Transient:
Modified: trunk/Source/WebCore/Modules/mediasession/MediaSession.h (186063 => 186064)
--- trunk/Source/WebCore/Modules/mediasession/MediaSession.h 2015-06-29 05:05:37 UTC (rev 186063)
+++ trunk/Source/WebCore/Modules/mediasession/MediaSession.h 2015-06-29 05:29:04 UTC (rev 186064)
@@ -50,6 +50,7 @@
return adoptRef(*new MediaSession(context, kind));
}
+ explicit MediaSession(Document&);
MediaSession(ScriptExecutionContext&, const String&);
~MediaSession();
@@ -73,6 +74,7 @@
friend class HTMLMediaElement;
enum class Kind {
+ Default,
Content,
Transient,
TransientSolo,
@@ -94,7 +96,7 @@
HashSet<HTMLMediaElement*>* m_iteratedActiveParticipatingElements { nullptr };
Document& m_document;
- const Kind m_kind;
+ const Kind m_kind { Kind::Default };
RefPtr<MediaRemoteControls> m_controls;
MediaSessionMetadata m_metadata;
};
Modified: trunk/Source/WebCore/dom/Document.cpp (186063 => 186064)
--- trunk/Source/WebCore/dom/Document.cpp 2015-06-29 05:05:37 UTC (rev 186063)
+++ trunk/Source/WebCore/dom/Document.cpp 2015-06-29 05:29:04 UTC (rev 186064)
@@ -233,6 +233,10 @@
#include "MediaPlaybackTargetClient.h"
#endif
+#if ENABLE(MEDIA_SESSION)
+#include "MediaSession.h"
+#endif
+
using namespace WTF;
using namespace Unicode;
@@ -6650,6 +6654,16 @@
}
#endif // ENABLE(WIRELESS_PLAYBACK_TARGET)
+#if ENABLE(MEDIA_SESSION)
+MediaSession& Document::defaultMediaSession()
+{
+ if (!m_defaultMediaSession)
+ m_defaultMediaSession = adoptRef(*new MediaSession(*this));
+
+ return *m_defaultMediaSession;
+}
+#endif
+
ShouldOpenExternalURLsPolicy Document::shouldOpenExternalURLsPolicyToPropagate() const
{
if (DocumentLoader* documentLoader = loader())
Modified: trunk/Source/WebCore/dom/Document.h (186063 => 186064)
--- trunk/Source/WebCore/dom/Document.h 2015-06-29 05:05:37 UTC (rev 186063)
+++ trunk/Source/WebCore/dom/Document.h 2015-06-29 05:29:04 UTC (rev 186064)
@@ -222,6 +222,10 @@
};
#endif
+#if ENABLE(MEDIA_SESSION)
+class MediaSession;
+#endif
+
enum PageshowEventPersistence {
PageshowEventNotPersisted = 0,
PageshowEventPersisted = 1
@@ -980,6 +984,10 @@
void unregisterForMediaVolumeCallbacks(Element*);
void mediaVolumeDidChange();
+#if ENABLE(MEDIA_SESSION)
+ MediaSession& defaultMediaSession();
+#endif
+
void registerForPrivateBrowsingStateChangedCallbacks(Element*);
void unregisterForPrivateBrowsingStateChangedCallbacks(Element*);
void storageBlockingStateDidChange();
@@ -1706,6 +1714,10 @@
typedef HashMap<WebCore::MediaPlaybackTargetClient*, uint64_t> TargetClientToIdMap;
TargetClientToIdMap m_clientToIDMap;
#endif
+
+#if ENABLE(MEDIA_SESSION)
+ RefPtr<MediaSession> m_defaultMediaSession;
+#endif
};
inline void Document::notifyRemovePendingSheetIfNeeded()
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (186063 => 186064)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-06-29 05:05:37 UTC (rev 186063)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2015-06-29 05:29:04 UTC (rev 186064)
@@ -409,6 +409,10 @@
m_captionDisplayMode = document.page()->group().captionPreferences()->captionDisplayMode();
#endif
+#if ENABLE(MEDIA_SESSION)
+ m_session = &document.defaultMediaSession();
+#endif
+
registerWithDocument(document);
}