Changeset 183560 in webkit
- Timestamp:
- Apr 29, 2015, 11:05:25 AM (10 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r183555 r183560 1 2015-04-29 Eric Carlson <eric.carlson@apple.com> 2 3 [Mac] Use new device picker menu API 4 https://bugs.webkit.org/show_bug.cgi?id=144392 5 6 Reviewed by Jer Noble. 7 8 * Modules/mediasession/WebMediaSessionManager.cpp: 9 (WebCore::WebMediaSessionManager::showPlaybackTargetPicker): Pass the route state to the picker. 10 * platform/graphics/MediaPlaybackTargetPicker.h: 11 12 * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h: 13 * platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm: 14 (WebCore::MediaPlaybackTargetPickerMac::MediaPlaybackTargetPickerMac): m_deviceChangeTimer -> m_pendingActionTimer. 15 (WebCore::MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac): Ditto. 16 (WebCore::MediaPlaybackTargetPickerMac::pendingActionTimerFired): Renamed from 17 outputeDeviceAvailabilityChangedTimerFired. 18 (WebCore::MediaPlaybackTargetPickerMac::availableDevicesDidChange): Use addPendingAction. 19 (WebCore::MediaPlaybackTargetPickerMac::showPlaybackTargetPicker): Call new picker API if it is 20 available. New API returns true if a target is chosen, so call currentDeviceDidChange in that case. 21 (WebCore::MediaPlaybackTargetPickerMac::addPendingAction): New. 22 (WebCore::MediaPlaybackTargetPickerMac::currentDeviceDidChange): Make asynchronous because it 23 can now be called from showPlaybackTargetPicker. 24 (WebCore::MediaPlaybackTargetPickerMac::outputeDeviceAvailabilityChangedTimerFired): Renamed 25 pendingActionTimerFired. 26 27 * platform/spi/cocoa/AVKitSPI.h: Add new SPI. 28 1 29 2015-04-29 Antti Koivisto <antti@apple.com> 2 30 -
trunk/Source/WebCore/Modules/mediasession/WebMediaSessionManager.cpp
r183509 r183560 115 115 } 116 116 117 void WebMediaSessionManager::showPlaybackTargetPicker(WebMediaSessionManagerClient& client, uint64_t contextId, const IntRect& rect, bool isVideo)117 void WebMediaSessionManager::showPlaybackTargetPicker(WebMediaSessionManagerClient& client, uint64_t contextId, const IntRect& rect, bool) 118 118 { 119 119 size_t index = find(&client, contextId); … … 125 125 state->requestedPicker = (state->contextId == contextId && state->client == &client); 126 126 127 targetPicker().showPlaybackTargetPicker(FloatRect(rect), isVideo); 127 bool hasActiveRoute = flagsAreSet(m_clientState[index]->flags, MediaProducer::IsPlayingToExternalDevice); 128 targetPicker().showPlaybackTargetPicker(FloatRect(rect), hasActiveRoute); 128 129 } 129 130 -
trunk/Source/WebCore/platform/graphics/MediaPlaybackTargetPicker.h
r183096 r183560 51 51 virtual ~MediaPlaybackTargetPicker(); 52 52 53 virtual void showPlaybackTargetPicker(const FloatRect&, bool );53 virtual void showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute); 54 54 virtual void startingMonitoringPlaybackTargets(); 55 55 virtual void stopMonitoringPlaybackTargets(); -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.h
r183114 r183560 45 45 WEBCORE_EXPORT static std::unique_ptr<MediaPlaybackTargetPickerMac> create(MediaPlaybackTargetPicker::Client&); 46 46 47 virtual void showPlaybackTargetPicker(const FloatRect&, bool ) override;47 virtual void showPlaybackTargetPicker(const FloatRect&, bool checkActiveRoute) override; 48 48 virtual void startingMonitoringPlaybackTargets() override; 49 49 virtual void stopMonitoringPlaybackTargets() override; … … 56 56 57 57 AVOutputDeviceMenuController *devicePicker(); 58 void outputeDeviceAvailabilityChangedTimerFired();59 58 59 enum ActionType { 60 OutputDeviceAvailabilityChanged = 1 << 0, 61 CurrentDeviceDidChange = 1 << 1, 62 }; 63 typedef unsigned PendingActionFlags; 64 65 void addPendingAction(PendingActionFlags); 66 void pendingActionTimerFired(); 67 68 PendingActionFlags m_pendingActionFlags { 0 }; 60 69 RetainPtr<AVOutputDeviceMenuController> m_outputDeviceMenuController; 61 70 RetainPtr<WebAVOutputDeviceMenuControllerHelper> m_outputDeviceMenuControllerDelegate; 62 RunLoop::Timer<MediaPlaybackTargetPickerMac> m_ deviceChangeTimer;71 RunLoop::Timer<MediaPlaybackTargetPickerMac> m_pendingActionTimer; 63 72 }; 64 73 -
trunk/Source/WebCore/platform/graphics/avfoundation/objc/MediaPlaybackTargetPickerMac.mm
r183096 r183560 51 51 static NSString *externalOutputDevicePickedKeyName = @"externalOutputDevicePicked"; 52 52 53 // FIXME: remove this once the headers are available. 54 @interface AVOutputDeviceMenuController (ForwardDeclaration) 55 - (BOOL)showMenuForRect:(NSRect)screenRect appearanceName:(NSString *)appearanceName allowReselectionOfSelectedOutputDevice:(BOOL)allowReselectionOfSelectedOutputDevice; 56 @end 57 53 58 @interface WebAVOutputDeviceMenuControllerHelper : NSObject { 54 59 MediaPlaybackTargetPickerMac* m_callback; … … 70 75 : MediaPlaybackTargetPicker(client) 71 76 , m_outputDeviceMenuControllerDelegate(adoptNS([[WebAVOutputDeviceMenuControllerHelper alloc] initWithCallback:this])) 72 , m_ deviceChangeTimer(RunLoop::main(), this, &MediaPlaybackTargetPickerMac::outputeDeviceAvailabilityChangedTimerFired)77 , m_pendingActionTimer(RunLoop::main(), this, &MediaPlaybackTargetPickerMac::pendingActionTimerFired) 73 78 { 74 79 } … … 76 81 MediaPlaybackTargetPickerMac::~MediaPlaybackTargetPickerMac() 77 82 { 78 m_ deviceChangeTimer.stop();83 m_pendingActionTimer.stop(); 79 84 [m_outputDeviceMenuControllerDelegate clearCallback]; 80 85 stopMonitoringPlaybackTargets(); 81 86 } 82 87 83 void MediaPlaybackTargetPickerMac:: outputeDeviceAvailabilityChangedTimerFired()88 void MediaPlaybackTargetPickerMac::pendingActionTimerFired() 84 89 { 85 90 if (!m_outputDeviceMenuController || !m_client) 86 91 return; 87 92 88 m_client->externalOutputDeviceAvailableDidChange(devicePicker().externalOutputDeviceAvailable); 93 PendingActionFlags pendingActions = m_pendingActionFlags; 94 m_pendingActionFlags = 0; 95 96 if (pendingActions & OutputDeviceAvailabilityChanged) 97 m_client->externalOutputDeviceAvailableDidChange(devicePicker().externalOutputDeviceAvailable); 98 99 if (pendingActions & CurrentDeviceDidChange) { 100 AVOutputDeviceMenuControllerType* devicePicker = this->devicePicker(); 101 if (devicePicker) 102 m_client->setPlaybackTarget(WebCore::MediaPlaybackTargetMac::create([devicePicker outputContext])); 103 } 89 104 } 90 105 … … 94 109 return; 95 110 96 m_deviceChangeTimer.stop(); 97 m_deviceChangeTimer.startOneShot(0); 111 addPendingAction(OutputDeviceAvailabilityChanged); 98 112 } 99 113 … … 117 131 } 118 132 119 void MediaPlaybackTargetPickerMac::showPlaybackTargetPicker(const FloatRect& location, bool )133 void MediaPlaybackTargetPickerMac::showPlaybackTargetPicker(const FloatRect& location, bool checkActiveRoute) 120 134 { 121 135 if (!m_client) 122 136 return; 123 137 124 [devicePicker() showMenuForRect:location appearanceName:NSAppearanceNameVibrantLight]; 138 AVOutputDeviceMenuControllerType *picker = devicePicker(); 139 if ([picker respondsToSelector:@selector(showMenuForRect:appearanceName:allowReselectionOfSelectedOutputDevice:)]) { 140 if ([picker showMenuForRect:location appearanceName:NSAppearanceNameVibrantLight allowReselectionOfSelectedOutputDevice:!checkActiveRoute]) 141 currentDeviceDidChange(); 142 } else 143 [picker showMenuForRect:location appearanceName:NSAppearanceNameVibrantLight]; 144 } 145 146 void MediaPlaybackTargetPickerMac::addPendingAction(PendingActionFlags action) 147 { 148 m_pendingActionFlags |= action; 149 m_pendingActionTimer.startOneShot(0); 125 150 } 126 151 … … 130 155 return; 131 156 132 AVOutputDeviceMenuControllerType* devicePicker = this->devicePicker(); 133 if (!devicePicker) 134 return; 135 136 m_client->setPlaybackTarget(WebCore::MediaPlaybackTargetMac::create([devicePicker outputContext])); 157 addPendingAction(CurrentDeviceDidChange); 137 158 } 138 159 -
trunk/Source/WebCore/platform/spi/cocoa/AVKitSPI.h
r183289 r183560 140 140 141 141 - (void)showMenuForRect:(NSRect)screenRect appearanceName:(NSString *)appearanceName; 142 - (BOOL)showMenuForRect:(NSRect)screenRect appearanceName:(NSString *)appearanceName allowReselectionOfSelectedOutputDevice:(BOOL)allowReselectionOfSelectedOutputDevice; 142 143 143 144 @end
Note:
See TracChangeset
for help on using the changeset viewer.