[MediaStream] Move capture device monitoring to WebKit
https://bugs.webkit.org/show_bug.cgi?id=188521
<rdar://problem/
43251787>
Reviewed by Youenn Fablet.
Source/WebCore:
No new tests, updated fast/mediastream/device-change-event-2.html for the changes.
* Modules/mediastream/MediaDevices.cpp:
(WebCore::MediaDevices::MediaDevices): Device change listener is added in addEventListener.
(WebCore::MediaDevices::stop): Device change listener is on the user media controller.
(WebCore::MediaDevices::addEventListener): Add the device change listener only once the first
event handler is added.
* Modules/mediastream/MediaDevices.h:
* Modules/mediastream/UserMediaClient.h:
* Modules/mediastream/UserMediaController.h:
(WebCore::UserMediaController::addDeviceChangeObserver): Pass through to the client.
(WebCore::UserMediaController::removeDeviceChangeObserver): Ditto.
* platform/mediastream/CaptureDeviceManager.cpp:
(CaptureDeviceManager::deviceChanged): Notify RealtimeMediaSourceCenter.
(nextObserverToken): Deleted.
(CaptureDeviceManager::addCaptureDeviceChangedObserver): Deleted.
(CaptureDeviceManager::removeCaptureDeviceChangedObserver): Deleted.
* platform/mediastream/CaptureDeviceManager.h:
* platform/mediastream/RealtimeMediaSourceCenter.cpp:
(WebCore::RealtimeMediaSourceCenter::setDevicesChangedObserver):
(WebCore::RealtimeMediaSourceCenter::captureDevicesChanged):
(WebCore::observerMap): Deleted.
(WebCore::RealtimeMediaSourceCenter::addDevicesChangedObserver): Deleted.
(WebCore::RealtimeMediaSourceCenter::removeDevicesChangedObserver): Deleted.
* platform/mediastream/RealtimeMediaSourceCenter.h:
* platform/mediastream/ios/AVAudioSessionCaptureDeviceManager.mm:
(WebCore::AVAudioSessionCaptureDeviceManager::refreshAudioCaptureDevices): Call base class.
* platform/mediastream/mac/AVCaptureDeviceManager.mm:
(WebCore::AVCaptureDeviceManager::deviceConnected): Ditto.
(WebCore::AVCaptureDeviceManager::deviceDisconnected): Ditto.
* platform/mediastream/mac/CoreAudioCaptureDeviceManager.cpp:
(WebCore::deviceHasInputStreams): Drive-by fix, check the number of buffers to see if the
device has input streams.
(WebCore::CoreAudioCaptureDeviceManager::coreAudioCaptureDevices): Use new bool parameter
added to refreshAudioCaptureDevices so we won't trigger a device change event on the first scan.
(WebCore::CoreAudioCaptureDeviceManager::refreshAudioCaptureDevices): Add param.
(WebCore::CoreAudioCaptureDeviceManager::devicesChanged): Use new param.
* platform/mediastream/mac/CoreAudioCaptureDeviceManager.h:
* platform/mock/MockRealtimeMediaSourceCenter.cpp:
(WebCore::MockRealtimeMediaSourceCenter::setDevices): Don't need to call captureDevicesChanged,
it is done in the UI process.
(WebCore::MockRealtimeMediaSourceCenter::addDevice): Ditto.
(WebCore::MockRealtimeMediaSourceCenter::removeDevice): Ditto.
* testing/InternalSettings.cpp:
(WebCore::InternalSettings::setPageIsFocusedAndActive): New, used by updated test.
* testing/Internals.h:
* testing/Internals.idl:
Source/WebKit:
* UIProcess/UserMediaPermissionRequestManagerProxy.cpp:
(WebKit::UserMediaPermissionRequestManagerProxy::captureDevicesChanged): Notify as appropriate.
(WebKit::UserMediaPermissionRequestManagerProxy::viewIsBecomingVisible): Change name from
viewIsBecomingVisible. Call captureDevicesChanged if a change happened when not visible.
(WebKit::UserMediaPermissionRequestManagerProxy::watchdogTimerFired): Clear m_pendingDeviceChangeEvent.
(WebKit::UserMediaPermissionRequestManagerProxy::processPregrantedRequests): Deleted.
* UIProcess/UserMediaPermissionRequestManagerProxy.h:
* UIProcess/UserMediaProcessManager.cpp:
(WebKit::UserMediaProcessManager::UserMediaProcessManager): Initialize timer.
(WebKit::UserMediaProcessManager::captureDevicesChanged): New, notify each manager.
(WebKit::UserMediaProcessManager::beginMonitoringCaptureDevices): Cache the device list and
register device change listener the first time it is called.
* UIProcess/UserMediaProcessManager.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::viewIsBecomingVisible):
(WebKit::WebPageProxy::beginMonitoringCaptureDevices):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/MediaStream/UserMediaPermissionRequestManager.cpp:
(WebKit::UserMediaPermissionRequestManager::addDeviceChangeObserver): Add listener, tell page
to start monitoring device changes.
(WebKit::UserMediaPermissionRequestManager::removeDeviceChangeObserver): Remove listener.
(WebKit::UserMediaPermissionRequestManager::captureDevicesChanged): Call listeners.
* WebProcess/MediaStream/UserMediaPermissionRequestManager.h:
* WebProcess/WebCoreSupport/WebUserMediaClient.cpp:
(WebKit::WebUserMediaClient::addDeviceChangeObserver):
(WebKit::WebUserMediaClient::removeDeviceChangeObserver):
* WebProcess/WebCoreSupport/WebUserMediaClient.h:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::captureDevicesChanged):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:
* WebProcess/WebProcess.cpp:
(WebKit::WebProcess::addMockMediaDevice):
(WebKit::WebProcess::clearMockMediaDevices):
(WebKit::WebProcess::removeMockMediaDevice):
(WebKit::WebProcess::resetMockMediaDevices):
(WebKit::WebProcess::captureDevicesChanged):
* WebProcess/WebProcess.h:
LayoutTests:
* fast/mediastream/device-change-event-2-expected.txt: Updated.
* fast/mediastream/device-change-event-2.html: Updated.
git-svn-id: https://svn.webkit.org/repository/webkit/trunk@235086
268f45cc-cd09-0410-ab3c-
d52691b4dbfc