- Revision
- 171081
- Author
- [email protected]
- Date
- 2014-07-14 14:22:10 -0700 (Mon, 14 Jul 2014)
Log Message
[iOS] Some videos play as inline audio-only content
https://bugs.webkit.org/show_bug.cgi?id=134898.
<rdar://problem/17629379>
Reviewed by Eric Carlson.
Add a new 'presentationType' accessor that indicates if the media
element is playing in 'audio' mode. This can happen if a video
element plays an HLS stream that starts off in audio-only mode.
* html/HTMLMediaElement.cpp:
(WebCore::HTMLMediaElement::presentationType): Added.
* html/HTMLMediaElement.h:
* platform/audio/MediaSession.cpp:
(WebCore::MediaSession::presentationType): Added.
* platform/audio/MediaSession.h:
* platform/audio/MediaSessionManager.cpp:
(WebCore::MediaSessionManager::sessionRestrictsInlineVideoPlayback):
Use the presentationType, rather than the mediaType to control
inline playback behavior.
* platform/audio/ios/AudioDestinationIOS.h:
(WebCore::AudioDestinationMac::presentationType): Add presentationType.
* platform/audio/mac/AudioDestinationMac.h:
(WebCore::AudioDestinationMac::presentationType): Ditto.
Modified Paths
Diff
Modified: trunk/Source/WebCore/ChangeLog (171080 => 171081)
--- trunk/Source/WebCore/ChangeLog 2014-07-14 21:07:43 UTC (rev 171080)
+++ trunk/Source/WebCore/ChangeLog 2014-07-14 21:22:10 UTC (rev 171081)
@@ -1,3 +1,30 @@
+2014-07-14 Brent Fulgham <[email protected]>
+
+ [iOS] Some videos play as inline audio-only content
+ https://bugs.webkit.org/show_bug.cgi?id=134898.
+ <rdar://problem/17629379>
+
+ Reviewed by Eric Carlson.
+
+ Add a new 'presentationType' accessor that indicates if the media
+ element is playing in 'audio' mode. This can happen if a video
+ element plays an HLS stream that starts off in audio-only mode.
+
+ * html/HTMLMediaElement.cpp:
+ (WebCore::HTMLMediaElement::presentationType): Added.
+ * html/HTMLMediaElement.h:
+ * platform/audio/MediaSession.cpp:
+ (WebCore::MediaSession::presentationType): Added.
+ * platform/audio/MediaSession.h:
+ * platform/audio/MediaSessionManager.cpp:
+ (WebCore::MediaSessionManager::sessionRestrictsInlineVideoPlayback):
+ Use the presentationType, rather than the mediaType to control
+ inline playback behavior.
+ * platform/audio/ios/AudioDestinationIOS.h:
+ (WebCore::AudioDestinationMac::presentationType): Add presentationType.
+ * platform/audio/mac/AudioDestinationMac.h:
+ (WebCore::AudioDestinationMac::presentationType): Ditto.
+
2014-07-14 Bear Travis <[email protected]>
[Feature Queries] Enable Feature Queries on Mac
Modified: trunk/Source/WebCore/html/HTMLMediaElement.cpp (171080 => 171081)
--- trunk/Source/WebCore/html/HTMLMediaElement.cpp 2014-07-14 21:07:43 UTC (rev 171080)
+++ trunk/Source/WebCore/html/HTMLMediaElement.cpp 2014-07-14 21:22:10 UTC (rev 171081)
@@ -5939,6 +5939,14 @@
return MediaSession::Audio;
}
+MediaSession::MediaType HTMLMediaElement::presentationType() const
+{
+ if (hasTagName(HTMLNames::videoTag))
+ return MediaSession::Video;
+
+ return MediaSession::Audio;
+}
+
void HTMLMediaElement::pausePlayback()
{
LOG(Media, "HTMLMediaElement::pausePlayback - paused = %s", boolString(paused()));
Modified: trunk/Source/WebCore/html/HTMLMediaElement.h (171080 => 171081)
--- trunk/Source/WebCore/html/HTMLMediaElement.h 2014-07-14 21:07:43 UTC (rev 171080)
+++ trunk/Source/WebCore/html/HTMLMediaElement.h 2014-07-14 21:22:10 UTC (rev 171081)
@@ -685,6 +685,7 @@
// MediaSessionClient Overrides
virtual MediaSession::MediaType mediaType() const override;
+ virtual MediaSession::MediaType presentationType() const override;
virtual void pausePlayback() override;
virtual void resumePlayback() override;
virtual String mediaSessionTitle() const override;
Modified: trunk/Source/WebCore/platform/audio/MediaSession.cpp (171080 => 171081)
--- trunk/Source/WebCore/platform/audio/MediaSession.cpp 2014-07-14 21:07:43 UTC (rev 171080)
+++ trunk/Source/WebCore/platform/audio/MediaSession.cpp 2014-07-14 21:22:10 UTC (rev 171081)
@@ -140,6 +140,11 @@
return m_client.mediaType();
}
+MediaSession::MediaType MediaSession::presentationType() const
+{
+ return m_client.presentationType();
+}
+
String MediaSession::title() const
{
return m_client.mediaSessionTitle();
Modified: trunk/Source/WebCore/platform/audio/MediaSession.h (171080 => 171081)
--- trunk/Source/WebCore/platform/audio/MediaSession.h 2014-07-14 21:07:43 UTC (rev 171080)
+++ trunk/Source/WebCore/platform/audio/MediaSession.h 2014-07-14 21:22:10 UTC (rev 171081)
@@ -47,6 +47,7 @@
WebAudio,
};
MediaType mediaType() const;
+ MediaType presentationType() const;
enum State {
Idle,
@@ -115,6 +116,8 @@
MediaSessionClient() { }
virtual MediaSession::MediaType mediaType() const = 0;
+ virtual MediaSession::MediaType presentationType() const = 0;
+
virtual void resumePlayback() = 0;
virtual void pausePlayback() = 0;
Modified: trunk/Source/WebCore/platform/audio/MediaSessionManager.cpp (171080 => 171081)
--- trunk/Source/WebCore/platform/audio/MediaSessionManager.cpp 2014-07-14 21:07:43 UTC (rev 171080)
+++ trunk/Source/WebCore/platform/audio/MediaSessionManager.cpp 2014-07-14 21:22:10 UTC (rev 171081)
@@ -270,7 +270,7 @@
bool MediaSessionManager::sessionRestrictsInlineVideoPlayback(const MediaSession& session) const
{
- MediaSession::MediaType sessionType = session.mediaType();
+ MediaSession::MediaType sessionType = session.presentationType();
if (sessionType != MediaSession::Video)
return false;
Modified: trunk/Source/WebCore/platform/audio/ios/AudioDestinationIOS.h (171080 => 171081)
--- trunk/Source/WebCore/platform/audio/ios/AudioDestinationIOS.h 2014-07-14 21:07:43 UTC (rev 171080)
+++ trunk/Source/WebCore/platform/audio/ios/AudioDestinationIOS.h 2014-07-14 21:22:10 UTC (rev 171081)
@@ -56,6 +56,7 @@
// MediaSessionClient
virtual MediaSession::MediaType mediaType() const { return MediaSession::WebAudio; }
+ virtual MediaSession::MediaType presentationType() const { return MediaSession::WebAudio; }
virtual bool canReceiveRemoteControlCommands() const { return false; }
virtual void didReceiveRemoteControlCommand(MediaSession::RemoteControlCommandType) { }
virtual bool overrideBackgroundPlaybackRestriction() const { return false; }
Modified: trunk/Source/WebCore/platform/audio/mac/AudioDestinationMac.h (171080 => 171081)
--- trunk/Source/WebCore/platform/audio/mac/AudioDestinationMac.h 2014-07-14 21:07:43 UTC (rev 171080)
+++ trunk/Source/WebCore/platform/audio/mac/AudioDestinationMac.h 2014-07-14 21:22:10 UTC (rev 171081)
@@ -53,6 +53,7 @@
OSStatus render(UInt32 numberOfFrames, AudioBufferList* ioData);
virtual MediaSession::MediaType mediaType() const override { return MediaSession::WebAudio; }
+ virtual MediaSession::MediaType presentationType() const { return MediaSession::WebAudio; }
virtual bool canReceiveRemoteControlCommands() const override { return false; }
virtual void didReceiveRemoteControlCommand(MediaSession::RemoteControlCommandType) override { }
virtual bool overrideBackgroundPlaybackRestriction() const override { return false; }