Title: [171081] trunk/Source/WebCore
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; }
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to