Chromium Code Reviews| Index: content/renderer/media/media_stream_impl.h |
| diff --git a/content/renderer/media/media_stream_impl.h b/content/renderer/media/media_stream_impl.h |
| index 8f72d2ba287f4b910a0a894091232bb29ebcbf63..5b0f5dee4497a2c601ca8a7c5b8b209080fcd09e 100644 |
| --- a/content/renderer/media/media_stream_impl.h |
| +++ b/content/renderer/media/media_stream_impl.h |
| @@ -30,7 +30,7 @@ namespace content { |
| class MediaStreamAudioRenderer; |
| class MediaStreamDependencyFactory; |
| class MediaStreamDispatcher; |
| -class MediaStreamSourceExtraData; |
| +class MediaStreamSource; |
| class WebRtcAudioRenderer; |
| class WebRtcLocalAudioRenderer; |
| @@ -92,19 +92,11 @@ class CONTENT_EXPORT MediaStreamImpl |
| virtual void FrameWillClose(blink::WebFrame* frame) OVERRIDE; |
| protected: |
| - void OnLocalSourceStop(const blink::WebMediaStreamSource& source); |
| + // Called when |source| has been stopped from JavaScript. |
| + void OnLocalSourceStopped(const blink::WebMediaStreamSource& source); |
| void OnLocalMediaStreamStop(const std::string& label); |
| - // Callback function triggered when all native (libjingle) versions of the |
| - // underlying media sources have been created and started. |
| - // |web_stream| is a raw pointer to the web_stream in |
| - // UserMediaRequests::web_stream for which the underlying sources have been |
| - // created. |
| - void OnCreateNativeSourcesComplete( |
| - blink::WebMediaStream* web_stream, |
| - bool request_succeeded); |
| - |
| // This function is virtual for test purposes. A test can override this to |
| // test requesting local media streams. The function notifies WebKit that the |
| // |request| have completed and generated the MediaStream |stream|. |
| @@ -118,9 +110,14 @@ class CONTENT_EXPORT MediaStreamImpl |
| virtual blink::WebMediaStream GetMediaStream(const GURL& url); |
| private: |
| - // Structure for storing information about a WebKit request to create a |
| + // Class for storing information about a WebKit request to create a |
| // MediaStream. |
| - struct UserMediaRequestInfo { |
| + class UserMediaRequestInfo |
| + : public base::SupportsWeakPtr<UserMediaRequestInfo> { |
| + public: |
| + typedef base::Callback<void(UserMediaRequestInfo* request_info, |
| + bool request_succeeded)> ResourcesReady; |
| + |
| UserMediaRequestInfo(int request_id, |
| blink::WebFrame* frame, |
| const blink::WebUserMediaRequest& request, |
| @@ -134,7 +131,28 @@ class CONTENT_EXPORT MediaStreamImpl |
| blink::WebFrame* frame; // WebFrame that requested the MediaStream. |
| blink::WebMediaStream web_stream; |
| blink::WebUserMediaRequest request; |
| - std::vector<blink::WebMediaStreamSource> sources; |
| + |
| + void StartTrack(const blink::WebMediaStreamTrack& track, |
| + const blink::WebMediaConstraints& constraints); |
| + |
| + // Triggers |callback| when all sources used in this request has either |
| + // 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 IsAllSourcesRemoved() { return sources_.empty(); } |
|
no longer working on chromium
2014/01/17 14:51:51
nit bool IsAllSourcesRemoved() { return sources_.e
perkj_chrome
2014/01/19 15:52:39
Done.
|
| + |
| + private: |
| + void OnTrackStarted(MediaStreamSource* source, bool success); |
| + void CheckAllTracksStarted(); |
| + |
| + ResourcesReady ready_callback_; |
| + bool request_failed_; |
| + // Sources used in this request. |
| + std::vector<blink::WebMediaStreamSource> sources_; |
| + std::vector<MediaStreamSource*> sources_waiting_for_callback_; |
| }; |
| typedef ScopedVector<UserMediaRequestInfo> UserMediaRequests; |
| @@ -152,17 +170,33 @@ class CONTENT_EXPORT MediaStreamImpl |
| // Creates a WebKit representation of stream sources based on |
| // |devices| from the MediaStreamDispatcher. |
| - void CreateWebKitSourceVector( |
| - const std::string& label, |
| - const StreamDeviceInfoArray& devices, |
| + void InitializeSourceObject( |
| + const StreamDeviceInfo& device, |
| blink::WebMediaStreamSource::Type type, |
| + const blink::WebMediaConstraints& constraints, |
| blink::WebFrame* frame, |
| - blink::WebVector<blink::WebMediaStreamSource>& webkit_sources); |
| + blink::WebMediaStreamSource* webkit_source); |
| + |
| + void CreateVideoTracks( |
| + const StreamDeviceInfoArray& devices, |
| + const blink::WebMediaConstraints& constraints, |
| + blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks, |
| + UserMediaRequestInfo* request); |
| + |
| + void CreateAudioTracks( |
| + const StreamDeviceInfoArray& devices, |
| + const blink::WebMediaConstraints& constraints, |
| + blink::WebVector<blink::WebMediaStreamTrack>* webkit_tracks, |
| + UserMediaRequestInfo* request); |
| + |
| + // Callback function triggered when all native versions of the |
| + // underlying media sources and tracks have been created and started. |
| + void OnCreateNativeTracksComplete( |
| + UserMediaRequestInfo* request, |
| + bool request_succeeded); |
| UserMediaRequestInfo* FindUserMediaRequestInfo(int request_id); |
| UserMediaRequestInfo* FindUserMediaRequestInfo( |
| - blink::WebMediaStream* web_stream); |
| - UserMediaRequestInfo* FindUserMediaRequestInfo( |
| const blink::WebUserMediaRequest& request); |
| UserMediaRequestInfo* FindUserMediaRequestInfo(const std::string& label); |
| void DeleteUserMediaRequestInfo(UserMediaRequestInfo* request); |