Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(36)

Unified Diff: content/renderer/media/user_media_client_impl.h

Issue 2623443002: Fix getUserMedia so that failure is reported for invalid audio sources. (Closed)
Patch Set: Address comments Created 3 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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
« no previous file with comments | « content/renderer/media/rtc_peer_connection_handler_unittest.cc ('k') | content/renderer/media/user_media_client_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698