Changeset 168075 in webkit
- Timestamp:
- Apr 30, 2014 6:47:20 PM (10 years ago)
- Location:
- trunk/Source
- Files:
-
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r168067 r168075 1 2014-04-30 Eric Carlson <eric.carlson@apple.com> 2 3 [iOS] do not pause video when entering background while playing to external device 4 https://bugs.webkit.org/show_bug.cgi?id=132374 5 6 Reviewed by Jer Noble. 7 8 * WebCore.exp.in: Update beginInterruption signature. 9 10 * html/HTMLMediaElement.cpp: 11 (WebCore::HTMLMediaElement::canOverrideBackgroundPlaybackRestriction): New, return true when 12 playing to external device. 13 * html/HTMLMediaElement.h: 14 15 * platform/audio/MediaSession.cpp: 16 (WebCore::MediaSession::beginInterruption): Add interruption type to beginInterruption. 17 * platform/audio/MediaSession.h: 18 19 * platform/audio/MediaSessionManager.cpp: 20 (WebCore::MediaSessionManager::beginInterruption): Ditto. 21 (WebCore::MediaSessionManager::applicationWillEnterBackground): Ditto. 22 (WebCore::MediaSessionManager::systemWillSleep): Ditto. 23 * platform/audio/MediaSessionManager.h: 24 25 * platform/audio/ios/AudioDestinationIOS.h: 26 * platform/audio/ios/MediaSessionManagerIOS.mm: 27 (-[WebMediaSessionHelper interruption:]): Ditto. 28 29 * platform/audio/mac/AudioDestinationMac.h: Make most methods private. Add 30 canOverrideBackgroundPlaybackRestriction. Add missing overrides. 31 * testing/Internals.cpp: 32 (WebCore::Internals::beginMediaSessionInterruption): Pass interruption type. 33 1 34 2014-04-30 Manuel Rego Casasnovas <rego@igalia.com> 2 35 -
trunk/Source/WebCore/WebCore.exp.in
r168052 r168075 802 802 __ZN7WebCore19MediaSessionManager14addRestrictionENS_12MediaSession9MediaTypeEj 803 803 __ZN7WebCore19MediaSessionManager15endInterruptionENS_12MediaSession20EndInterruptionFlagsE 804 __ZN7WebCore19MediaSessionManager17beginInterruptionE v804 __ZN7WebCore19MediaSessionManager17beginInterruptionENS_12MediaSession16InterruptionTypeE 805 805 __ZN7WebCore19MediaSessionManager17removeRestrictionENS_12MediaSession9MediaTypeEj 806 806 __ZN7WebCore19MediaSessionManager30didReceiveRemoteControlCommandENS_12MediaSession24RemoteControlCommandTypeE -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r168036 r168075 6182 6182 } 6183 6183 6184 bool HTMLMediaElement::overrideBackgroundPlaybackRestriction() const 6185 { 6186 #if ENABLE(IOS_AIRPLAY) 6187 if (m_player && m_player->isCurrentPlaybackTargetWireless()) 6188 return true; 6189 #endif 6190 return false; 6191 } 6192 6184 6193 bool HTMLMediaElement::doesHaveAttribute(const AtomicString& attribute, AtomicString* value) const 6185 6194 { -
trunk/Source/WebCore/html/HTMLMediaElement.h
r168036 r168075 718 718 virtual bool canReceiveRemoteControlCommands() const override { return true; } 719 719 virtual void didReceiveRemoteControlCommand(MediaSession::RemoteControlCommandType) override; 720 virtual bool overrideBackgroundPlaybackRestriction() const override; 720 721 721 722 void registerWithDocument(Document&); -
trunk/Source/WebCore/platform/audio/MediaSession.cpp
r167734 r168075 77 77 } 78 78 79 void MediaSession::beginInterruption( )79 void MediaSession::beginInterruption(InterruptionType type) 80 80 { 81 81 LOG(Media, "MediaSession::beginInterruption(%p), state = %s", this, stateName(m_state)); 82 83 if (type == EnteringBackground && client().overrideBackgroundPlaybackRestriction()) 84 return; 82 85 83 86 m_stateToRestore = state(); -
trunk/Source/WebCore/platform/audio/MediaSession.h
r167734 r168075 58 58 void setState(State); 59 59 60 enum InterruptionType { 61 SystemSleep, 62 EnteringBackground, 63 SystemInterruption, 64 }; 60 65 enum EndInterruptionFlags { 61 66 NoFlags = 0, 62 67 MayResumePlaying = 1 << 0, 63 68 }; 64 void beginInterruption( );69 void beginInterruption(InterruptionType); 65 70 void endInterruption(EndInterruptionFlags); 66 71 … … 128 133 virtual bool elementIsHidden() const { return false; } 129 134 135 virtual bool overrideBackgroundPlaybackRestriction() const = 0; 136 130 137 protected: 131 138 virtual ~MediaSessionClient() { } -
trunk/Source/WebCore/platform/audio/MediaSessionManager.cpp
r166384 r168075 82 82 } 83 83 84 void MediaSessionManager::beginInterruption( )84 void MediaSessionManager::beginInterruption(MediaSession::InterruptionType type) 85 85 { 86 86 LOG(Media, "MediaSessionManager::beginInterruption"); … … 89 89 Vector<MediaSession*> sessions = m_sessions; 90 90 for (auto* session : sessions) 91 session->beginInterruption( );91 session->beginInterruption(type); 92 92 } 93 93 … … 264 264 for (auto* session : sessions) { 265 265 if (m_restrictions[session->mediaType()] & BackgroundPlaybackNotPermitted) 266 session->beginInterruption( );266 session->beginInterruption(MediaSession::EnteringBackground); 267 267 } 268 268 } … … 315 315 316 316 for (auto session : m_sessions) 317 session->beginInterruption( );317 session->beginInterruption(MediaSession::SystemSleep); 318 318 } 319 319 -
trunk/Source/WebCore/platform/audio/MediaSessionManager.h
r166384 r168075 61 61 int count(MediaSession::MediaType) const; 62 62 63 void beginInterruption( );63 void beginInterruption(MediaSession::InterruptionType); 64 64 void endInterruption(MediaSession::EndInterruptionFlags); 65 65 -
trunk/Source/WebCore/platform/audio/ios/AudioDestinationIOS.h
r167767 r168075 60 60 virtual bool canReceiveRemoteControlCommands() const { return false; } 61 61 virtual void didReceiveRemoteControlCommand(MediaSession::RemoteControlCommandType) { } 62 virtual bool overrideBackgroundPlaybackRestriction() const { return false; } 62 63 virtual void pausePlayback() override { stop(); } 63 64 virtual void resumePlayback() override { start(); } -
trunk/Source/WebCore/platform/audio/ios/MediaSessionManagerIOS.mm
r167767 r168075 283 283 284 284 if (type == AVAudioSessionInterruptionTypeBegan) 285 _callback->beginInterruption( );285 _callback->beginInterruption(MediaSession::SystemInterruption); 286 286 else 287 287 _callback->endInterruption(flags); -
trunk/Source/WebCore/platform/audio/mac/AudioDestinationMac.h
r165676 r168075 45 45 virtual ~AudioDestinationMac(); 46 46 47 private: 48 void configure(); 49 50 // DefaultOutputUnit callback 51 static OSStatus inputProc(void* userData, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32 busNumber, UInt32 numberOfFrames, AudioBufferList* ioData); 52 53 OSStatus render(UInt32 numberOfFrames, AudioBufferList* ioData); 54 55 virtual MediaSession::MediaType mediaType() const override { return MediaSession::WebAudio; } 56 virtual bool canReceiveRemoteControlCommands() const override { return false; } 57 virtual void didReceiveRemoteControlCommand(MediaSession::RemoteControlCommandType) override { } 58 virtual bool overrideBackgroundPlaybackRestriction() const override { return false; } 59 47 60 virtual void start() override; 48 61 virtual void stop() override; … … 53 66 54 67 virtual float sampleRate() const override { return m_sampleRate; } 55 56 private:57 void configure();58 59 // DefaultOutputUnit callback60 static OSStatus inputProc(void* userData, AudioUnitRenderActionFlags*, const AudioTimeStamp*, UInt32 busNumber, UInt32 numberOfFrames, AudioBufferList* ioData);61 62 OSStatus render(UInt32 numberOfFrames, AudioBufferList* ioData);63 64 virtual MediaSession::MediaType mediaType() const { return MediaSession::WebAudio; }65 virtual bool canReceiveRemoteControlCommands() const { return false; }66 virtual void didReceiveRemoteControlCommand(MediaSession::RemoteControlCommandType) { }67 68 68 69 AudioUnit m_outputUnit; -
trunk/Source/WebCore/testing/Internals.cpp
r167530 r168075 2217 2217 void Internals::beginMediaSessionInterruption() 2218 2218 { 2219 MediaSessionManager::sharedManager().beginInterruption( );2219 MediaSessionManager::sharedManager().beginInterruption(MediaSession::SystemInterruption); 2220 2220 } 2221 2221 -
trunk/Source/WebKit/ChangeLog
r168073 r168075 1 2014-04-30 Eric Carlson <eric.carlson@apple.com> 2 3 [iOS] do not pause video when entering background while playing to external device 4 https://bugs.webkit.org/show_bug.cgi?id=132374 5 6 Reviewed by Jer Noble. 7 8 * WebKit.vcxproj/WebKitExportGenerator/WebKitExports.def.in: 9 1 10 2014-04-30 Anders Carlsson <andersca@apple.com> 2 11 -
trunk/Source/WebKit/WebKit.vcxproj/WebKitExportGenerator/WebKitExports.def.in
r167587 r168075 243 243 #if ENABLE(VIDEO) 244 244 symbolWithPointer(?sharedManager@MediaSessionManager@WebCore@@SAAAV12@XZ, ?sharedManager@MediaSessionManager@WebCore@@SAAEAV12@XZ) 245 symbolWithPointer(?beginInterruption@MediaSessionManager@WebCore@@QAEX XZ, ?beginInterruption@MediaSessionManager@WebCore@@QEAAXXZ)245 symbolWithPointer(?beginInterruption@MediaSessionManager@WebCore@@QAEXW4InterruptionType@MediaSession@2@@Z, ?beginInterruption@MediaSessionManager@WebCore@@QAEXW4InterruptionType@MediaSession@2@@Z) 246 246 symbolWithPointer(?endInterruption@MediaSessionManager@WebCore@@QAEXW4EndInterruptionFlags@MediaSession@2@@Z, ?endInterruption@MediaSessionManager@WebCore@@QEAAXW4EndInterruptionFlags@MediaSession@2@@Z) 247 247 symbolWithPointer(?addRestriction@MediaSessionManager@WebCore@@QAEXW4MediaType@MediaSession@2@I@Z, ?addRestriction@MediaSessionManager@WebCore@@QEAAXW4MediaType@MediaSession@2@I@Z)
Note: See TracChangeset
for help on using the changeset viewer.