Changeset 184788 in webkit
- Timestamp:
- May 22, 2015, 12:14:48 PM (11 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 5 edited
-
ChangeLog (modified) (1 diff)
-
Modules/mediasession/WebMediaSessionManager.cpp (modified) (8 diffs)
-
html/HTMLMediaElement.cpp (modified) (1 diff)
-
platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm (modified) (10 diffs)
-
platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm (modified) (3 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r184783 r184788 1 2015-05-22 Eric Carlson <eric.carlson@apple.com> 2 3 [Mac] Device picker menu should be persistent 4 https://bugs.webkit.org/show_bug.cgi?id=145311 5 6 Reviewed by Brent Fulgham. 7 8 * Modules/mediasession/WebMediaSessionManager.cpp: 9 (WebCore::WebMediaSessionManager::addPlaybackTargetPickerClient): Add logging. 10 (WebCore::WebMediaSessionManager::removePlaybackTargetPickerClient): Ditto. 11 (WebCore::WebMediaSessionManager::removeAllPlaybackTargetPickerClients): Ditto. 12 (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Ditto. 13 (WebCore::WebMediaSessionManager::clientStateDidChange): Ditto. 14 (WebCore::WebMediaSessionManager::externalOutputDeviceAvailableDidChange): Ditto. 15 (WebCore::WebMediaSessionManager::configurePlaybackTargetMonitoring): Ditto. 16 17 * html/HTMLMediaElement.cpp: 18 (WebCore::HTMLMediaElement::mediaState): Don't set ExternalDeviceAutoPlayCandidate unless 19 there is an event listener. 20 21 * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: 22 (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac): Release the menu 23 controller and remove observers. 24 (WebCore::MediaPlaybackTargetPickerMac::create): Add logging. 25 (WebCore::MediaPlaybackTargetPickerMac::pendingActionTimerFired): Ditto. 26 (WebCore::MediaPlaybackTargetPickerMac::availableDevicesDidChange): Ditto. 27 (WebCore::MediaPlaybackTargetPickerMac::devicePicker): Ditto. 28 (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Ditto. 29 (WebCore::MediaPlaybackTargetPickerMac::addPendingAction): Start the timer after 30 a brief pause to debounce multiple identical notifications. 31 (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange): Add logging. 32 (WebCore::MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets): Add logging. 33 (WebCore::MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets): Don't release 34 the menu controller delegate. 35 (-[WebAVOutputDeviceMenuControllerHelper observeValueForKeyPath:ofObject:change:context:]): Add logging. 36 37 * platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm: 38 (WebCore::MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget): Update logging. 39 (WebCore::MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget): Ditto. 40 1 41 2015-05-22 Alexey Proskuryakov <ap@apple.com> 2 42 -
trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp
r184555 r184788 30 30 31 31 #include "FloatRect.h" 32 #include "Logging.h" 32 33 #include "MediaPlaybackTargetPickerMac.h" 33 34 #include "WebMediaSessionManagerClient.h" … … 77 78 return 0; 78 79 80 LOG(Media, "WebMediaSessionManager::addPlaybackTargetPickerClient(%p + %llu)", &client, contextId); 81 79 82 m_clientState.append(std::make_unique<ClientState>(client, contextId)); 80 83 … … 92 95 return; 93 96 97 LOG(Media, "WebMediaSessionManager::removePlaybackTargetPickerClient(%p + %llu)", &client, contextId); 98 94 99 m_clientState.remove(index); 95 100 scheduleDelayedTask(TargetMonitoringConfigurationTask | TargetClientsConfigurationTask); … … 98 103 void WebMediaSessionManager::removeAllPlaybackTargetPickerClients(WebMediaSessionManagerClient& client) 99 104 { 105 LOG(Media, "WebMediaSessionManager::removeAllPlaybackTargetPickerClients(%p)", &client); 106 100 107 for (size_t i = m_clientState.size(); i > 0; --i) { 101 108 if (&m_clientState[i - 1]->client == &client) … … 117 124 118 125 bool hasActiveRoute = flagsAreSet(m_clientState[index]->flags, MediaProducer::IsPlayingToExternalDevice); 126 LOG(Media, "WebMediaSessionManager::showPlaybackTargetPicker(%p + %llu) - hasActiveRoute = %i", &client, contextId, (int)hasActiveRoute); 119 127 targetPicker().showPlaybackTargetPicker(FloatRect(rect), hasActiveRoute); 120 128 } … … 129 137 auto& changedClientState = m_clientState[index]; 130 138 MediaProducer::MediaStateFlags oldFlags = changedClientState->flags; 139 LOG(Media, "WebMediaSessionManager::clientStateDidChange(%p + %llu) - new flags = 0x%x, old flags = 0x%x", &client, contextId, newFlags, oldFlags); 131 140 if (newFlags == oldFlags) 132 141 return; … … 176 185 void WebMediaSessionManager::externalOutputDeviceAvailableDidChange(bool available) 177 186 { 187 LOG(Media, "WebMediaSessionManager::externalOutputDeviceAvailableDidChange - clients = %zu, available = %i", m_clientState.size(), (int)available); 188 178 189 m_externalOutputDeviceAvailable = available; 179 190 for (auto& state : m_clientState) … … 246 257 } 247 258 } 259 260 LOG(Media, "WebMediaSessionManager::configurePlaybackTargetMonitoring - monitoringRequired = %i", (int)monitoringRequired); 248 261 249 262 if (monitoringRequired) -
trunk/Source/WebCore/html/HTMLMediaElement.cpp
r184670 r184788 6282 6282 state |= IsPlayingToExternalDevice; 6283 6283 6284 if (!m_mediaSession->wirelessVideoPlaybackDisabled(*this)) { 6285 if ((m_hasPlaybackTargetAvailabilityListeners || hasActiveVideo) && m_player->canPlayToWirelessPlaybackTarget()) 6286 state |= RequiresPlaybackTargetMonitoring; 6287 } 6284 if (!m_mediaSession->wirelessVideoPlaybackDisabled(*this) && m_hasPlaybackTargetAvailabilityListeners && m_player->canPlayToWirelessPlaybackTarget()) 6285 state |= RequiresPlaybackTargetMonitoring; 6288 6286 6289 6287 bool requireUserGesture = m_mediaSession->hasBehaviorRestriction(HTMLMediaSession::RequireUserGestureToAutoplayToExternalDevice); -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm
r184204 r184788 29 29 #if ENABLE(WIRELESS_PLAYBACK_TARGET) && !PLATFORM(IOS) 30 30 31 #import "Logging.h" 31 32 #import <WebCore/AVFoundationSPI.h> 32 33 #import <WebCore/AVKitSPI.h> … … 67 68 namespace WebCore { 68 69 70 static const double pendingActionInterval = 1.0 / 10.0; 71 69 72 std::unique_ptr<MediaPlaybackTargetPickerMac> MediaPlaybackTargetPickerMac::create(MediaPlaybackTargetPicker::Client& client) 70 73 { … … 83 86 m_pendingActionTimer.stop(); 84 87 [m_outputDeviceMenuControllerDelegate clearCallback]; 85 stopMonitoringPlaybackTargets(); 88 89 if (m_outputDeviceMenuController) { 90 [m_outputDeviceMenuController removeObserver:m_outputDeviceMenuControllerDelegate.get() forKeyPath:externalOutputDeviceAvailableKeyName]; 91 [m_outputDeviceMenuController removeObserver:m_outputDeviceMenuControllerDelegate.get() forKeyPath:externalOutputDevicePickedKeyName]; 92 m_outputDeviceMenuController = nullptr; 93 } 86 94 } 87 95 88 96 void MediaPlaybackTargetPickerMac::pendingActionTimerFired() 89 97 { 98 LOG(Media, "MediaPlaybackTargetPickerMac::pendingActionTimerFired - flags = 0x%x", m_pendingActionFlags); 99 90 100 if (!m_outputDeviceMenuController || !m_client) 91 101 return; … … 106 116 void MediaPlaybackTargetPickerMac::availableDevicesDidChange() 107 117 { 118 LOG(Media, "MediaPlaybackTargetPickerMac::availableDevicesDidChange - available = %i", (int)devicePicker().externalOutputDeviceAvailable); 119 108 120 if (!m_client) 109 121 return; … … 124 136 [m_outputDeviceMenuController.get() addObserver:m_outputDeviceMenuControllerDelegate.get() forKeyPath:externalOutputDevicePickedKeyName options:NSKeyValueObservingOptionNew context:nullptr]; 125 137 138 LOG(Media, "MediaPlaybackTargetPickerMac::devicePicker - allocated menu controller %p", m_outputDeviceMenuController.get()); 139 126 140 if (m_outputDeviceMenuController.get().externalOutputDeviceAvailable) 127 141 availableDevicesDidChange(); … … 135 149 if (!m_client || m_showingMenu) 136 150 return; 151 152 LOG(Media, "MediaPlaybackTargetPickerMac::showPlaybackTargetPicker - checkActiveRoute = %i", (int)checkActiveRoute); 137 153 138 154 AVOutputDeviceMenuControllerType *picker = devicePicker(); … … 151 167 { 152 168 m_pendingActionFlags |= action; 153 m_pendingActionTimer.startOneShot( 0);169 m_pendingActionTimer.startOneShot(pendingActionInterval); 154 170 } 155 171 156 172 void MediaPlaybackTargetPickerMac::currentDeviceDidChange() 157 173 { 174 LOG(Media, "MediaPlaybackTargetPickerMac::currentDeviceDidChange"); 175 158 176 if (!m_client) 159 177 return; … … 164 182 void MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets() 165 183 { 184 LOG(Media, "MediaPlaybackTargetPickerMac::startingMonitoringPlaybackTargets"); 185 166 186 devicePicker(); 167 187 } … … 169 189 void MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets() 170 190 { 171 if (m_outputDeviceMenuController) { 172 [m_outputDeviceMenuController removeObserver:m_outputDeviceMenuControllerDelegate.get() forKeyPath:externalOutputDeviceAvailableKeyName]; 173 [m_outputDeviceMenuController removeObserver:m_outputDeviceMenuControllerDelegate.get() forKeyPath:externalOutputDevicePickedKeyName]; 174 m_outputDeviceMenuController = nullptr; 175 } 191 LOG(Media, "MediaPlaybackTargetPickerMac::stopMonitoringPlaybackTargets"); 192 193 // FIXME: update once rdar://21062536 has been fixed. 176 194 } 177 195 … … 202 220 if (!m_callback) 203 221 return; 222 223 LOG(Media, "MediaPlaybackTargetPickerMac::observeValueForKeyPath - key = %s", [keyPath UTF8String]); 204 224 205 225 if (![keyPath isEqualToString:externalOutputDeviceAvailableKeyName] && ![keyPath isEqualToString:externalOutputDevicePickedKeyName]) -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlayerPrivateAVFoundationObjC.mm
r184760 r184788 2798 2798 2799 2799 m_outputContext = macTarget->outputContext(); 2800 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget(%p) - target = %p ", this, m_outputContext.get());2800 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::setWirelessPlaybackTarget(%p) - target = %p, device name = %s", this, m_outputContext.get(), [m_outputContext.get().deviceName UTF8String]); 2801 2801 2802 2802 if (!m_outputContext || !m_outputContext.get().deviceName) … … 2813 2813 AVOutputContext *newContext = shouldPlay ? m_outputContext.get() : nil; 2814 2814 RetainPtr<AVOutputContext> currentContext = m_avPlayer.get().outputContext; 2815 2816 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget(%p) - target = %p, shouldPlay = %s", this, newContext, boolString(shouldPlay)); 2817 2815 2818 if ((!newContext && !currentContext.get()) || [currentContext.get() isEqual:newContext]) 2816 2819 return; … … 2819 2822 m_avPlayer.get().outputContext = newContext; 2820 2823 setDelayCallbacks(false); 2821 2822 LOG(Media, "MediaPlayerPrivateAVFoundationObjC::setShouldPlayToPlaybackTarget(%p) - target = %p, playing to target = %s", this, m_avPlayer.get().outputContext, boolString(shouldPlay));2823 2824 } 2824 2825
Note:
See TracChangeset
for help on using the changeset viewer.