| Index: content/renderer/media/user_media_client_impl.h
|
| diff --git a/content/renderer/media/user_media_client_impl.h b/content/renderer/media/user_media_client_impl.h
|
| index 2492ccc00bebd8fc887990a2b46527f765a0e549..9e3fc4773464c459629f6c3e5800f80665d5e69e 100644
|
| --- a/content/renderer/media/user_media_client_impl.h
|
| +++ b/content/renderer/media/user_media_client_impl.h
|
| @@ -119,7 +119,8 @@ class CONTENT_EXPORT UserMediaClientImpl
|
| // These are virtual for test purposes.
|
| virtual MediaStreamAudioSource* CreateAudioSource(
|
| const StreamDeviceInfo& device,
|
| - const blink::WebMediaConstraints& constraints);
|
| + const blink::WebMediaConstraints& constraints,
|
| + const MediaStreamSource::ConstraintsCallback& source_ready);
|
| virtual MediaStreamVideoSource* CreateVideoSource(
|
| const StreamDeviceInfo& device,
|
| const MediaStreamSource::SourceStoppedCallback& stop_callback);
|
| @@ -146,7 +147,8 @@ class CONTENT_EXPORT UserMediaClientImpl
|
| blink::WebMediaStream web_stream;
|
| blink::WebUserMediaRequest request;
|
|
|
| - void StartAudioTrack(const blink::WebMediaStreamTrack& track);
|
| + void StartAudioTrack(const blink::WebMediaStreamTrack& track,
|
| + bool source_initialized);
|
|
|
| blink::WebMediaStreamTrack CreateAndStartVideoTrack(
|
| const blink::WebMediaStreamSource& source,
|
| @@ -156,16 +158,19 @@ class CONTENT_EXPORT UserMediaClientImpl
|
| // successfully started, or a source has failed to start.
|
| void CallbackOnTracksStarted(const ResourcesReady& callback);
|
|
|
| - bool IsSourceUsed(const blink::WebMediaStreamSource& source) const;
|
| - void RemoveSource(const blink::WebMediaStreamSource& source);
|
| -
|
| bool HasPendingSources() const;
|
|
|
| + // Called when a local audio source has finished (or failed) initializing.
|
| + void OnAudioSourceStarted(MediaStreamSource* source,
|
| + MediaStreamRequestResult result,
|
| + const blink::WebString& result_name);
|
| +
|
| private:
|
| void OnTrackStarted(
|
| MediaStreamSource* source,
|
| MediaStreamRequestResult result,
|
| const blink::WebString& result_name);
|
| +
|
| void CheckAllTracksStarted();
|
|
|
| ResourcesReady ready_callback_;
|
| @@ -193,12 +198,17 @@ class CONTENT_EXPORT UserMediaClientImpl
|
|
|
| // Creates a WebKit representation of stream sources based on
|
| // |devices| from the MediaStreamDispatcher.
|
| - void InitializeSourceObject(
|
| + void InitializeVideoSourceObject(
|
| const StreamDeviceInfo& device,
|
| - blink::WebMediaStreamSource::Type type,
|
| const blink::WebMediaConstraints& constraints,
|
| blink::WebMediaStreamSource* webkit_source);
|
|
|
| + void InitializeAudioSourceObject(
|
| + const StreamDeviceInfo& device,
|
| + const blink::WebMediaConstraints& constraints,
|
| + blink::WebMediaStreamSource* webkit_source,
|
| + bool* source_initialized);
|
| +
|
| void CreateVideoTracks(
|
| const StreamDeviceInfoArray& devices,
|
| const blink::WebMediaConstraints& constraints,
|
| @@ -222,6 +232,17 @@ class CONTENT_EXPORT UserMediaClientImpl
|
| const StreamDeviceInfoArray& audio_array,
|
| const StreamDeviceInfoArray& video_array);
|
|
|
| + static void OnAudioSourceStartedOnAudioThread(
|
| + scoped_refptr<base::SingleThreadTaskRunner> task_runner,
|
| + base::WeakPtr<UserMediaClientImpl> weak_ptr,
|
| + MediaStreamSource* source,
|
| + MediaStreamRequestResult result,
|
| + const blink::WebString& result_name);
|
| +
|
| + void OnAudioSourceStarted(MediaStreamSource* source,
|
| + MediaStreamRequestResult result,
|
| + const blink::WebString& result_name);
|
| +
|
| using EnumerationResult = std::vector<MediaDeviceInfoArray>;
|
| void FinalizeEnumerateDevices(blink::WebMediaDevicesRequest request,
|
| const EnumerationResult& result);
|
| @@ -231,8 +252,22 @@ class CONTENT_EXPORT UserMediaClientImpl
|
| // Returns the source that use a device with |device.session_id|
|
| // and |device.device.id|. NULL if such source doesn't exist.
|
| const blink::WebMediaStreamSource* FindLocalSource(
|
| + const StreamDeviceInfo& device) const {
|
| + return FindLocalSource(local_sources_, device);
|
| + }
|
| + const blink::WebMediaStreamSource* FindPendingLocalSource(
|
| + const StreamDeviceInfo& device) const {
|
| + return FindLocalSource(pending_local_sources_, device);
|
| + }
|
| + const blink::WebMediaStreamSource* FindLocalSource(
|
| + const LocalStreamSources& sources,
|
| const StreamDeviceInfo& device) const;
|
|
|
| + // Looks up a local source and returns it if found. If not found, prepares
|
| + // a new WebMediaStreamSource with a NULL extraData pointer.
|
| + blink::WebMediaStreamSource FindOrInitializeSourceObject(
|
| + const StreamDeviceInfo& device);
|
| +
|
| // Returns true if we do find and remove the |source|.
|
| // Otherwise returns false.
|
| bool RemoveLocalSource(const blink::WebMediaStreamSource& source);
|
| @@ -274,6 +309,7 @@ class CONTENT_EXPORT UserMediaClientImpl
|
| ::mojom::MediaDevicesDispatcherHostPtr media_devices_dispatcher_;
|
|
|
| LocalStreamSources local_sources_;
|
| + LocalStreamSources pending_local_sources_;
|
|
|
| UserMediaRequests user_media_requests_;
|
| MediaDevicesEventDispatcher::SubscriptionIdList
|
|
|