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

Unified Diff: chrome/browser/media/webrtc/media_stream_capture_indicator.cc

Issue 2123863004: ScreenCapture for Android phase1, part II (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments Created 4 years, 3 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: chrome/browser/media/webrtc/media_stream_capture_indicator.cc
diff --git a/chrome/browser/media/webrtc/media_stream_capture_indicator.cc b/chrome/browser/media/webrtc/media_stream_capture_indicator.cc
index 105b62124296c2cc5388129d62e62749688bc835..9e809839325b0fcb0e652f6b27f5d86bd981edcf 100644
--- a/chrome/browser/media/webrtc/media_stream_capture_indicator.cc
+++ b/chrome/browser/media/webrtc/media_stream_capture_indicator.cc
@@ -114,11 +114,15 @@ class MediaStreamCaptureIndicator::WebContentsDeviceUsage
const content::MediaStreamDevices& devices);
// Increment ref-counts up based on the type of each device provided.
- void AddDevices(const content::MediaStreamDevices& devices);
+ void AddDevices(const content::MediaStreamDevices& devices,
+ const base::Closure& close_callback);
// Decrement ref-counts up based on the type of each device provided.
void RemoveDevices(const content::MediaStreamDevices& devices);
+ // Helper to call |stop_callback_|.
+ void NotifyStopped();
+
private:
// content::WebContentsObserver overrides.
void WebContentsDestroyed() override {
@@ -130,6 +134,7 @@ class MediaStreamCaptureIndicator::WebContentsDeviceUsage
int video_ref_count_;
int mirroring_ref_count_;
+ base::Closure stop_callback_;
base::WeakPtrFactory<WebContentsDeviceUsage> weak_factory_;
DISALLOW_COPY_AND_ASSIGN(WebContentsDeviceUsage);
@@ -161,7 +166,7 @@ class MediaStreamCaptureIndicator::UIDelegate : public content::MediaStreamUI {
DCHECK(!started_);
started_ = true;
if (device_usage_.get())
- device_usage_->AddDevices(devices_);
+ device_usage_->AddDevices(devices_, close_callback);
return 0;
}
@@ -179,11 +184,11 @@ MediaStreamCaptureIndicator::WebContentsDeviceUsage::RegisterMediaStream(
}
void MediaStreamCaptureIndicator::WebContentsDeviceUsage::AddDevices(
- const content::MediaStreamDevices& devices) {
+ const content::MediaStreamDevices& devices,
+ const base::Closure& close_callback) {
for (content::MediaStreamDevices::const_iterator it = devices.begin();
it != devices.end(); ++it) {
- if (it->type == content::MEDIA_TAB_AUDIO_CAPTURE ||
- it->type == content::MEDIA_TAB_VIDEO_CAPTURE) {
+ if (content::IsScreenCaptureMediaType(it->type)) {
++mirroring_ref_count_;
} else if (content::IsAudioInputMediaType(it->type)) {
++audio_ref_count_;
@@ -194,8 +199,10 @@ void MediaStreamCaptureIndicator::WebContentsDeviceUsage::AddDevices(
}
}
- if (web_contents())
+ if (web_contents()) {
+ stop_callback_ = close_callback;
web_contents()->NotifyNavigationStateChanged(content::INVALIDATE_TYPE_TAB);
+ }
indicator_->UpdateNotificationUserInterface();
}
@@ -204,8 +211,7 @@ void MediaStreamCaptureIndicator::WebContentsDeviceUsage::RemoveDevices(
const content::MediaStreamDevices& devices) {
for (content::MediaStreamDevices::const_iterator it = devices.begin();
it != devices.end(); ++it) {
- if (it->type == content::MEDIA_TAB_AUDIO_CAPTURE ||
- it->type == content::MEDIA_TAB_VIDEO_CAPTURE) {
+ if (IsScreenCaptureMediaType(it->type)) {
--mirroring_ref_count_;
} else if (content::IsAudioInputMediaType(it->type)) {
--audio_ref_count_;
@@ -224,6 +230,14 @@ void MediaStreamCaptureIndicator::WebContentsDeviceUsage::RemoveDevices(
indicator_->UpdateNotificationUserInterface();
}
+void MediaStreamCaptureIndicator::WebContentsDeviceUsage::NotifyStopped() {
+ if (!stop_callback_.is_null()) {
+ base::Closure callback = stop_callback_;
+ stop_callback_.Reset();
+ callback.Run();
+ }
+}
+
MediaStreamCaptureIndicator::MediaStreamCaptureIndicator()
: status_icon_(NULL),
mic_image_(NULL),
@@ -297,6 +311,15 @@ bool MediaStreamCaptureIndicator::IsBeingMirrored(
return usage && usage->IsMirroring();
}
+void MediaStreamCaptureIndicator::NotifyStopped(
+ content::WebContents* web_contents) const {
+ DCHECK_CURRENTLY_ON(BrowserThread::UI);
+
+ WebContentsDeviceUsage* usage = usage_map_.get(web_contents);
+ DCHECK(usage);
+ usage->NotifyStopped();
+}
+
void MediaStreamCaptureIndicator::UnregisterWebContents(
WebContents* web_contents) {
usage_map_.erase(web_contents);

Powered by Google App Engine
This is Rietveld 408576698