Changeset 186016 in webkit
- Timestamp:
- Jun 26, 2015, 4:33:21 PM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r186012 r186016 1 2015-06-26 Eric Carlson <eric.carlson@apple.com> 2 3 [Mac] Muted videos should not automatically play to AppleTV 4 https://bugs.webkit.org/show_bug.cgi?id=146366 5 6 Reviewed by Dean Jackson. 7 8 * html/HTMLMediaElement.cpp: 9 (WebCore::HTMLMediaElement::HTMLMediaElement): Initialize m_initiallyMuted. 10 (WebCore::HTMLMediaElement::scheduleDelayedAction): Support CheckMediaState. 11 (WebCore::HTMLMediaElement::setReadyState): Set m_initiallyMuted to true if the element is 12 muted or the volume is less than 5%. 13 (WebCore::HTMLMediaElement::setMuted): Update media state asynchronously so multiple state 14 changes can be coalesced. 15 (WebCore::HTMLMediaElement::mediaPlayerEngineUpdated): Ditto. 16 (WebCore::HTMLMediaElement::setPlaying): Ditto. 17 (WebCore::HTMLMediaElement::mediaPlayerCurrentPlaybackTargetIsWirelessChanged): Ditto. 18 (WebCore::HTMLMediaElement::removeEventListener): Ditto. 19 (WebCore::HTMLMediaElement::enqueuePlaybackTargetAvailabilityChangedEvent): Ditto. 20 (WebCore::HTMLMediaElement::updateMediaState): Update after a timer when passed UpdateMediaState::Asynchronously. 21 (WebCore::HTMLMediaElement::mediaState): Don't set the ExternalDeviceAutoPlayCandidate flag if 22 m_initiallyMuted is true. 23 * html/HTMLMediaElement.h: 24 * html/HTMLMediaElementEnums.h: 25 1 26 2015-06-26 Daniel Bates <dabates@apple.com> 2 27 -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r186009 r186016 327 327 , m_muted(false) 328 328 , m_explicitlyMuted(false) 329 , m_initiallyMuted(false) 329 330 , m_paused(true) 330 331 , m_seeking(false) … … 759 760 #endif 760 761 762 if (actionType & CheckMediaState) 763 setFlags(m_pendingActionFlags, CheckMediaState); 764 761 765 m_pendingActionTimer.startOneShot(0); 762 766 } … … 808 812 m_player->setShouldPlayToPlaybackTarget(false); 809 813 } 814 815 if (m_pendingActionFlags & CheckMediaState) 816 updateMediaState(); 810 817 #endif 811 818 … … 2069 2076 enqueuePlaybackTargetAvailabilityChangedEvent(); 2070 2077 #endif 2071 2078 m_initiallyMuted = m_volume < 0.05 || muted(); 2079 2072 2080 if (hasMediaControls()) 2073 2081 mediaControls()->loadedMetadata(); … … 3088 3096 3089 3097 #if ENABLE(WIRELESS_PLAYBACK_TARGET) 3090 updateMediaState( );3098 updateMediaState(UpdateMediaState::Asynchronously); 3091 3099 #endif 3092 3100 } … … 4403 4411 #endif 4404 4412 #if ENABLE(WIRELESS_PLAYBACK_TARGET) 4405 updateMediaState( );4413 updateMediaState(UpdateMediaState::Asynchronously); 4406 4414 #endif 4407 4415 } … … 4701 4709 4702 4710 #if ENABLE(WIRELESS_PLAYBACK_TARGET) 4703 updateMediaState( );4711 updateMediaState(UpdateMediaState::Asynchronously); 4704 4712 #endif 4705 4713 } … … 4964 4972 configureMediaControls(); 4965 4973 scheduleEvent(eventNames().webkitcurrentplaybacktargetiswirelesschangedEvent); 4966 updateMediaState( );4974 updateMediaState(UpdateMediaState::Asynchronously); 4967 4975 } 4968 4976 … … 5008 5016 m_hasPlaybackTargetAvailabilityListeners = false; 5009 5017 m_mediaSession->setHasPlaybackTargetAvailabilityListeners(*this, false); 5010 updateMediaState( );5018 updateMediaState(UpdateMediaState::Asynchronously); 5011 5019 } 5012 5020 … … 5021 5029 event->setTarget(this); 5022 5030 m_asyncEventQueue.enqueueEvent(event.release()); 5023 updateMediaState( );5031 updateMediaState(UpdateMediaState::Asynchronously); 5024 5032 } 5025 5033 … … 6296 6304 6297 6305 #if ENABLE(WIRELESS_PLAYBACK_TARGET) 6298 void HTMLMediaElement::updateMediaState() 6299 { 6306 void HTMLMediaElement::updateMediaState(UpdateMediaState updateState) 6307 { 6308 if (updateState == UpdateMediaState::Asynchronously) { 6309 scheduleDelayedAction(CheckMediaState); 6310 return; 6311 } 6312 6300 6313 MediaProducer::MediaStateFlags state = mediaState(); 6301 6314 if (m_mediaState == state) … … 6322 6335 6323 6336 bool requireUserGesture = m_mediaSession->hasBehaviorRestriction(MediaElementSession::RequireUserGestureToAutoplayToExternalDevice); 6324 if (hasActiveVideo && (!requireUserGesture || (hasAudio && ! loop())))6337 if (hasActiveVideo && (!requireUserGesture || (hasAudio && !m_initiallyMuted && !loop()))) 6325 6338 state |= ExternalDeviceAutoPlayCandidate; 6326 6339 #endif -
trunk/Source/WebCore/html/HTMLMediaElement.h
r185472 r186016 726 726 virtual void documentWillSuspendForPageCache() override final; 727 727 virtual void documentDidResumeFromPageCache() override final; 728 void updateMediaState(); 728 729 enum class UpdateMediaState { 730 Asynchronously, 731 Synchronously, 732 }; 733 void updateMediaState(UpdateMediaState updateState = UpdateMediaState::Synchronously); 729 734 #endif 730 735 … … 838 843 bool m_muted : 1; 839 844 bool m_explicitlyMuted : 1; 845 bool m_initiallyMuted : 1; 840 846 bool m_paused : 1; 841 847 bool m_seeking : 1; -
trunk/Source/WebCore/html/HTMLMediaElementEnums.h
r184670 r186016 41 41 ConfigureTextTrackDisplay = 1 << 3, 42 42 CheckPlaybackTargetCompatablity = 1 << 4, 43 CheckMediaState = 1 << 5, 43 44 44 EveryDelayedAction = LoadMediaResource | ConfigureTextTracks | TextTrackChangesNotification | ConfigureTextTrackDisplay | CheckPlaybackTargetCompatablity ,45 EveryDelayedAction = LoadMediaResource | ConfigureTextTracks | TextTrackChangesNotification | ConfigureTextTrackDisplay | CheckPlaybackTargetCompatablity | CheckMediaState, 45 46 }; 46 47
Note:
See TracChangeset
for help on using the changeset viewer.