| Index: content/browser/media/capture/web_contents_audio_input_stream.cc
|
| diff --git a/content/browser/media/capture/web_contents_audio_input_stream.cc b/content/browser/media/capture/web_contents_audio_input_stream.cc
|
| index ad5a33f6923541f7465da500a21f1c752f40b803..9d42c2d61999d6b4a0215f124d7fab90d56a5197 100644
|
| --- a/content/browser/media/capture/web_contents_audio_input_stream.cc
|
| +++ b/content/browser/media/capture/web_contents_audio_input_stream.cc
|
| @@ -25,7 +25,7 @@ class WebContentsAudioInputStream::Impl
|
| public AudioMirroringManager::MirroringDestination {
|
| public:
|
| // Takes ownership of |mixer_stream|. The rest outlive this instance.
|
| - Impl(int render_process_id, int render_view_id,
|
| + Impl(int render_process_id, int main_render_frame_id,
|
| AudioMirroringManager* mirroring_manager,
|
| const scoped_refptr<WebContentsTracker>& tracker,
|
| media::VirtualAudioInputStream* mixer_stream);
|
| @@ -84,6 +84,8 @@ class WebContentsAudioInputStream::Impl
|
| void OnTargetChanged(int render_process_id, int render_view_id);
|
|
|
| // Injected dependencies.
|
| + const int initial_render_process_id_;
|
| + const int initial_main_render_frame_id_;
|
| AudioMirroringManager* const mirroring_manager_;
|
| const scoped_refptr<WebContentsTracker> tracker_;
|
| // The AudioInputStream implementation that handles the audio conversion and
|
| @@ -93,6 +95,7 @@ class WebContentsAudioInputStream::Impl
|
| State state_;
|
|
|
| // Current audio mirroring target.
|
| + bool target_identified_;
|
| int target_render_process_id_;
|
| int target_render_view_id_;
|
|
|
| @@ -105,14 +108,19 @@ class WebContentsAudioInputStream::Impl
|
| };
|
|
|
| WebContentsAudioInputStream::Impl::Impl(
|
| - int render_process_id, int render_view_id,
|
| + int render_process_id, int main_render_frame_id,
|
| AudioMirroringManager* mirroring_manager,
|
| const scoped_refptr<WebContentsTracker>& tracker,
|
| media::VirtualAudioInputStream* mixer_stream)
|
| - : mirroring_manager_(mirroring_manager),
|
| - tracker_(tracker), mixer_stream_(mixer_stream), state_(CONSTRUCTED),
|
| - target_render_process_id_(render_process_id),
|
| - target_render_view_id_(render_view_id),
|
| + : initial_render_process_id_(render_process_id),
|
| + initial_main_render_frame_id_(main_render_frame_id),
|
| + mirroring_manager_(mirroring_manager),
|
| + tracker_(tracker),
|
| + mixer_stream_(mixer_stream),
|
| + state_(CONSTRUCTED),
|
| + target_identified_(false),
|
| + target_render_process_id_(-1),
|
| + target_render_view_id_(-1),
|
| callback_(NULL) {
|
| DCHECK(mirroring_manager_);
|
| DCHECK(tracker_.get());
|
| @@ -138,7 +146,7 @@ bool WebContentsAudioInputStream::Impl::Open() {
|
| state_ = OPENED;
|
|
|
| tracker_->Start(
|
| - target_render_process_id_, target_render_view_id_,
|
| + initial_render_process_id_, initial_main_render_frame_id_,
|
| base::Bind(&Impl::OnTargetChanged, this));
|
|
|
| return true;
|
| @@ -196,7 +204,8 @@ void WebContentsAudioInputStream::Impl::Close() {
|
|
|
| bool WebContentsAudioInputStream::Impl::IsTargetLost() const {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
| -
|
| + if (!target_identified_)
|
| + return false;
|
| return target_render_process_id_ <= 0 || target_render_view_id_ <= 0;
|
| }
|
|
|
| @@ -252,7 +261,8 @@ void WebContentsAudioInputStream::Impl::OnTargetChanged(int render_process_id,
|
| int render_view_id) {
|
| DCHECK(thread_checker_.CalledOnValidThread());
|
|
|
| - if (target_render_process_id_ == render_process_id &&
|
| + if (target_identified_ &&
|
| + target_render_process_id_ == render_process_id &&
|
| target_render_view_id_ == render_view_id) {
|
| return;
|
| }
|
| @@ -264,6 +274,7 @@ void WebContentsAudioInputStream::Impl::OnTargetChanged(int render_process_id,
|
| if (state_ == MIRRORING)
|
| StopMirroring();
|
|
|
| + target_identified_ = true;
|
| target_render_process_id_ = render_process_id;
|
| target_render_view_id_ = render_view_id;
|
|
|
| @@ -284,14 +295,14 @@ WebContentsAudioInputStream* WebContentsAudioInputStream::Create(
|
| const scoped_refptr<base::SingleThreadTaskRunner>& worker_task_runner,
|
| AudioMirroringManager* audio_mirroring_manager) {
|
| int render_process_id;
|
| - int render_view_id;
|
| + int main_render_frame_id;
|
| if (!WebContentsCaptureUtil::ExtractTabCaptureTarget(
|
| - device_id, &render_process_id, &render_view_id)) {
|
| + device_id, &render_process_id, &main_render_frame_id)) {
|
| return NULL;
|
| }
|
|
|
| return new WebContentsAudioInputStream(
|
| - render_process_id, render_view_id,
|
| + render_process_id, main_render_frame_id,
|
| audio_mirroring_manager,
|
| new WebContentsTracker(),
|
| new media::VirtualAudioInputStream(
|
| @@ -300,11 +311,11 @@ WebContentsAudioInputStream* WebContentsAudioInputStream::Create(
|
| }
|
|
|
| WebContentsAudioInputStream::WebContentsAudioInputStream(
|
| - int render_process_id, int render_view_id,
|
| + int render_process_id, int main_render_frame_id,
|
| AudioMirroringManager* mirroring_manager,
|
| const scoped_refptr<WebContentsTracker>& tracker,
|
| media::VirtualAudioInputStream* mixer_stream)
|
| - : impl_(new Impl(render_process_id, render_view_id,
|
| + : impl_(new Impl(render_process_id, main_render_frame_id,
|
| mirroring_manager, tracker, mixer_stream)) {}
|
|
|
| WebContentsAudioInputStream::~WebContentsAudioInputStream() {}
|
|
|