[iOS] Some videos play as inline audio-only content
authorbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Jul 2014 21:22:10 +0000 (21:22 +0000)
committerbfulgham@apple.com <bfulgham@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 14 Jul 2014 21:22:10 +0000 (21:22 +0000)
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.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@171081 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/html/HTMLMediaElement.cpp
Source/WebCore/html/HTMLMediaElement.h
Source/WebCore/platform/audio/MediaSession.cpp
Source/WebCore/platform/audio/MediaSession.h
Source/WebCore/platform/audio/MediaSessionManager.cpp
Source/WebCore/platform/audio/ios/AudioDestinationIOS.h
Source/WebCore/platform/audio/mac/AudioDestinationMac.h

index 14d6836..cee8ac6 100644 (file)
@@ -1,3 +1,30 @@
+2014-07-14  Brent Fulgham  <bfulgham@apple.com>
+
+        [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  <betravis@adobe.com>
 
         [Feature Queries] Enable Feature Queries on Mac
index 77bebc0..5c0edea 100644 (file)
@@ -5939,6 +5939,14 @@ MediaSession::MediaType HTMLMediaElement::mediaType() const
     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()));
index 81832b2..e84bb9f 100644 (file)
@@ -685,6 +685,7 @@ private:
 
     // 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;
index 0d2339d..0ef6923 100644 (file)
@@ -140,6 +140,11 @@ MediaSession::MediaType MediaSession::mediaType() const
     return m_client.mediaType();
 }
 
+MediaSession::MediaType MediaSession::presentationType() const
+{
+    return m_client.presentationType();
+}
+
 String MediaSession::title() const
 {
     return m_client.mediaSessionTitle();
index 4b168e8..8a8ce8b 100644 (file)
@@ -47,6 +47,7 @@ public:
         WebAudio,
     };
     MediaType mediaType() const;
+    MediaType presentationType() const;
 
     enum State {
         Idle,
@@ -115,6 +116,8 @@ public:
     MediaSessionClient() { }
     
     virtual MediaSession::MediaType mediaType() const = 0;
+    virtual MediaSession::MediaType presentationType() const = 0;
+
     virtual void resumePlayback() = 0;
     virtual void pausePlayback() = 0;
 
index 679757a..d224511 100644 (file)
@@ -270,7 +270,7 @@ MediaSession* MediaSessionManager::currentSession()
     
 bool MediaSessionManager::sessionRestrictsInlineVideoPlayback(const MediaSession& session) const
 {
-    MediaSession::MediaType sessionType = session.mediaType();
+    MediaSession::MediaType sessionType = session.presentationType();
     if (sessionType != MediaSession::Video)
         return false;
 
index 9b7646d..747e80e 100644 (file)
@@ -56,6 +56,7 @@ private:
 
     // 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; }
index 408fbc0..1fcf973 100644 (file)
@@ -53,6 +53,7 @@ private:
     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; }