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

Unified Diff: content/browser/media/capture/web_contents_audio_input_stream.cc

Issue 364123002: [Cross-Site Isolation] Migrate entire MediaStream verticals to be per-RenderFrame. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: It's random enough. + REBASE Created 6 years, 5 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/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() {}

Powered by Google App Engine
This is Rietveld 408576698