Changeset 162145 in webkit
- Timestamp:
- Jan 16, 2014, 1:26:53 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 2 added
- 10 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r162135 r162145 1 2014-01-16 Eric Carlson <eric.carlson@apple.com> 2 3 Allow MediaSessionManager to restrict inline <video> playback 4 https://bugs.webkit.org/show_bug.cgi?id=127113 5 6 Reviewed by Jer Noble. 7 8 * media/video-fullscreeen-only-playback-expected.txt: Added. 9 * media/video-fullscreeen-only-playback.html: Added. 10 1 11 2014-01-07 Myles C. Maxfield <mmaxfield@apple.com> 2 12 -
trunk/Source/WebCore/ChangeLog
r162141 r162145 1 2014-01-16 Eric Carlson <eric.carlson@apple.com> 2 3 Allow MediaSessionManager to restrict inline <video> playback 4 https://bugs.webkit.org/show_bug.cgi?id=127113 5 6 Reviewed by Jer Noble. 7 8 Test: media/video-fullscreeen-only-playback.html 9 10 * html/HTMLMediaElement.cpp: 11 (WebCore::HTMLMediaElement::updatePlayState): Drive-by change to not tell the media session that 12 playback is starting if the media player is already playing. Enter fullscreen if the media 13 session says it is required. 14 15 * html/HTMLMediaSession.cpp: 16 (WebCore::HTMLMediaSession::clientWillBeginPlayback): Make it const. 17 (WebCore::HTMLMediaSession::requiresFullscreenForVideoPlayback): New, see if the specified 18 media element must be played in fullscreen based on the media session settings, document 19 settings, and attributes. 20 * html/HTMLMediaSession.h: 21 22 * platform/audio/MediaSession.h: pauseSession shouldn't be virtual. 23 24 * platform/audio/MediaSessionManager.cpp: 25 (WebCore::MediaSessionManager::sessionWillBeginPlayback): Return immediately if ConcurrentPlaybackNotPermitted 26 is not set. 27 (WebCore::MediaSessionManager::sessionRestrictsInlineVideoPlayback): New. 28 * platform/audio/MediaSessionManager.h: 29 30 * platform/audio/ios/MediaSessionManagerIOS.mm: 31 (WebCore::MediaSessionManageriOS::MediaSessionManageriOS): Set InlineVideoPlaybackRestricted if 32 running on an iPhone or iPod class device. 33 34 * testing/Internals.cpp: 35 (WebCore::Internals::setMediaSessionRestrictions): Support InlineVideoPlaybackRestricted. 36 1 37 2014-01-16 Roger Fong <roger_fong@apple.com> 2 38 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r161973 r162145 4256 4256 invalidateCachedTime(); 4257 4257 4258 m_mediaSession->clientWillBeginPlayback();4259 4260 4258 if (playerPaused) { 4261 if (!m_isFullscreen && isVideo() && document().page() && document().page()->chrome().requiresFullscreenForVideoPlayback()) 4259 m_mediaSession->clientWillBeginPlayback(); 4260 4261 if (m_mediaSession->requiresFullscreenForVideoPlayback(*this)) 4262 4262 enterFullscreen(); 4263 4263 -
trunk/Source/WebCore/html/HTMLMediaSession.cpp
r162140 r162145 35 35 #include "Page.h" 36 36 #include "ScriptController.h" 37 38 #if PLATFORM(IOS) 39 #include "RuntimeApplicationChecksIOS.h" 40 #endif 37 41 38 42 namespace WebCore { … … 123 127 #endif 124 128 125 void HTMLMediaSession::clientWillBeginPlayback() 129 void HTMLMediaSession::clientWillBeginPlayback() const 126 130 { 127 131 MediaSessionManager::sharedManager().sessionWillBeginPlayback(*this); 128 132 } 129 133 130 void HTMLMediaSession::pauseSession() 134 bool HTMLMediaSession::requiresFullscreenForVideoPlayback(const HTMLMediaElement& element) const 131 135 { 132 client().pausePlayback(); 136 if (!MediaSessionManager::sharedManager().sessionRestrictsInlineVideoPlayback(*this)) 137 return false; 138 139 Settings* settings = element.document().settings(); 140 if (!settings || !settings->mediaPlaybackAllowsInline()) 141 return true; 142 143 if (element.fastHasAttribute(HTMLNames::webkit_playsinlineAttr)) 144 return false; 145 146 #if PLATFORM(IOS) 147 if (applicationIsDumpRenderTree()) 148 return false; 149 #endif 150 151 return true; 133 152 } 134 153 135 154 } 136 155 -
trunk/Source/WebCore/html/HTMLMediaSession.h
r162140 r162145 42 42 virtual ~HTMLMediaSession() { } 43 43 44 void clientWillBeginPlayback(); 45 46 virtual void pauseSession() override; 44 void clientWillBeginPlayback() const; 47 45 48 46 bool playbackPermitted(const HTMLMediaElement&) const; … … 54 52 bool showingPlaybackTargetPickerPermitted(const HTMLMediaElement&) const; 55 53 #endif 54 bool requiresFullscreenForVideoPlayback(const HTMLMediaElement&) const; 56 55 57 56 // Restrictions to modify default behaviors. -
trunk/Source/WebCore/platform/audio/MediaSession.h
r162108 r162145 63 63 void endInterruption(EndInterruptionFlags); 64 64 65 v irtual void pauseSession();65 void pauseSession(); 66 66 67 67 protected: -
trunk/Source/WebCore/platform/audio/MediaSessionManager.cpp
r162108 r162145 127 127 } 128 128 129 void MediaSessionManager::sessionWillBeginPlayback( MediaSession& session)129 void MediaSessionManager::sessionWillBeginPlayback(const MediaSession& session) const 130 130 { 131 131 MediaSession::MediaType sessionType = session.mediaType(); 132 132 SessionRestrictions restrictions = m_restrictions[sessionType]; 133 if ( restrictions == NoRestrictions)133 if (!restrictions & ConcurrentPlaybackNotPermitted) 134 134 return; 135 135 … … 144 144 } 145 145 146 bool MediaSessionManager::sessionRestrictsInlineVideoPlayback(const MediaSession& session) const 147 { 148 MediaSession::MediaType sessionType = session.mediaType(); 149 if (sessionType != MediaSession::Video) 150 return false; 151 152 return m_restrictions[sessionType] & InlineVideoPlaybackRestricted; 153 } 154 146 155 #if !PLATFORM(MAC) 147 156 void MediaSessionManager::updateSessionState() -
trunk/Source/WebCore/platform/audio/MediaSessionManager.h
r162108 r162145 50 50 NoRestrictions = 0, 51 51 ConcurrentPlaybackNotPermitted = 1 << 0, 52 InlineVideoPlaybackRestricted = 1 << 0, 52 53 }; 53 54 typedef unsigned SessionRestrictions; … … 57 58 SessionRestrictions restrictions(MediaSession::MediaType); 58 59 59 void sessionWillBeginPlayback(MediaSession&); 60 void sessionWillBeginPlayback(const MediaSession&) const; 61 bool sessionRestrictsInlineVideoPlayback(const MediaSession&) const; 60 62 61 63 protected: -
trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm
r161899 r162145 33 33 #import "SoftLinking.h" 34 34 #import "WebCoreThreadRun.h" 35 #import "WebCoreSystemInterface.h" 35 36 #import <AVFoundation/AVAudioSession.h> 36 37 #import <objc/runtime.h> … … 73 74 , m_objcObserver(adoptNS([[WebMediaSessionHelper alloc] initWithCallback:this])) 74 75 { 76 DEFINE_STATIC_LOCAL(wkDeviceClass, deviceClass, iosDeviceClass()); 77 78 if (deviceClass == wkDeviceClassiPhone || deviceClass == wkDeviceClassiPod) 79 addRestriction(MediaSession::Video, InlineVideoPlaybackRestricted); 80 75 81 addRestriction(MediaSession::Video, ConcurrentPlaybackNotPermitted); 76 82 } -
trunk/Source/WebCore/testing/Internals.cpp
r162139 r162145 2313 2313 if (equalIgnoringCase(restrictionsString, "ConcurrentPlaybackNotPermitted")) 2314 2314 restrictions = MediaSessionManager::ConcurrentPlaybackNotPermitted; 2315 if (equalIgnoringCase(restrictionsString, "InlineVideoPlaybackRestricted")) 2316 restrictions += MediaSessionManager::InlineVideoPlaybackRestricted; 2315 2317 2316 2318 MediaSessionManager::sharedManager().addRestriction(mediaType, restrictions);
Note:
See TracChangeset
for help on using the changeset viewer.