Chromium Code Reviews| 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..f9e48f9919dde39321d3c94375dd8d531abafafd 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, |
|
ncarter (slow)
2014/07/10 01:17:51
Interesting, this points to a possible hurdle (whi
miu
2014/07/10 22:16:12
Yes. I've prototyped a solution that seems to wor
ncarter (slow)
2014/07/11 22:32:24
Pretty cool. Glad to hear you're on top of it.
|
| 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 |
| @@ -105,14 +107,23 @@ 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), |
| + // TODO(miu): This hack for initializing target_render_XXX_id_ is needed |
| + // so IsTargetLost() won't prematurely return false when called in Start() |
| + // below. This will be removed in a soon-upcoming change when all this |
| + // code is migrated away from using RenderViewHosts (for cross-site |
| + // isolation). |
|
ncarter (slow)
2014/07/10 01:17:51
So -- it seems like this workaround is needed beca
miu
2014/07/10 22:16:12
Done.
|
| + target_render_process_id_(kint32max), |
| + target_render_view_id_(kint32max), |
| callback_(NULL) { |
| DCHECK(mirroring_manager_); |
| DCHECK(tracker_.get()); |
| @@ -138,7 +149,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; |
| @@ -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() {} |