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

Side by Side Diff: chrome/browser/media/media_stream_capture_indicator.cc

Issue 11236052: Indicate tab recording state in tab strip (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ref count -> singleton Created 8 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/media/media_stream_capture_indicator.h" 5 #include "chrome/browser/media/media_stream_capture_indicator.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/i18n/rtl.h" 8 #include "base/i18n/rtl.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
117 const MediaStreamCaptureIndicator::CaptureDeviceTab& tab) { 117 const MediaStreamCaptureIndicator::CaptureDeviceTab& tab) {
118 return (render_process_id_ == tab.render_process_id && 118 return (render_process_id_ == tab.render_process_id &&
119 render_view_id_ == tab.render_view_id); 119 render_view_id_ == tab.render_view_id);
120 } 120 }
121 121
122 MediaStreamCaptureIndicator::MediaStreamCaptureIndicator() 122 MediaStreamCaptureIndicator::MediaStreamCaptureIndicator()
123 : status_icon_(NULL), 123 : status_icon_(NULL),
124 mic_image_(NULL), 124 mic_image_(NULL),
125 camera_image_(NULL), 125 camera_image_(NULL),
126 balloon_image_(NULL), 126 balloon_image_(NULL),
127 request_index_(0) { 127 request_index_(0),
128 weak_ptr_factory_(ALLOW_THIS_IN_INITIALIZER_LIST(this)) {
128 } 129 }
129 130
130 MediaStreamCaptureIndicator::~MediaStreamCaptureIndicator() { 131 MediaStreamCaptureIndicator::~MediaStreamCaptureIndicator() {
131 // The user is responsible for cleaning up by closing all the opened devices. 132 // The user is responsible for cleaning up by closing all the opened devices.
132 DCHECK(tabs_.empty()); 133 DCHECK(tabs_.empty());
133 } 134 }
134 135
135 bool MediaStreamCaptureIndicator::IsCommandIdChecked( 136 bool MediaStreamCaptureIndicator::IsCommandIdChecked(
136 int command_id) const { 137 int command_id) const {
137 NOTIMPLEMENTED() << "There are no checked items in the MediaStream menu."; 138 NOTIMPLEMENTED() << "There are no checked items in the MediaStream menu.";
(...skipping 30 matching lines...) Expand all
168 void MediaStreamCaptureIndicator::CaptureDevicesOpened( 169 void MediaStreamCaptureIndicator::CaptureDevicesOpened(
169 int render_process_id, 170 int render_process_id,
170 int render_view_id, 171 int render_view_id,
171 const content::MediaStreamDevices& devices) { 172 const content::MediaStreamDevices& devices) {
172 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 173 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
173 DCHECK(!devices.empty()); 174 DCHECK(!devices.empty());
174 175
175 BrowserThread::PostTask( 176 BrowserThread::PostTask(
176 BrowserThread::UI, FROM_HERE, 177 BrowserThread::UI, FROM_HERE,
177 base::Bind(&MediaStreamCaptureIndicator::DoDevicesOpenedOnUIThread, 178 base::Bind(&MediaStreamCaptureIndicator::DoDevicesOpenedOnUIThread,
178 this, render_process_id, render_view_id, devices)); 179 weak_ptr_factory_.GetWeakPtr(),
180 render_process_id, render_view_id, devices));
179 } 181 }
180 182
181 void MediaStreamCaptureIndicator::CaptureDevicesClosed( 183 void MediaStreamCaptureIndicator::CaptureDevicesClosed(
182 int render_process_id, 184 int render_process_id,
183 int render_view_id, 185 int render_view_id,
184 const content::MediaStreamDevices& devices) { 186 const content::MediaStreamDevices& devices) {
185 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); 187 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO));
186 DCHECK(!devices.empty()); 188 DCHECK(!devices.empty());
187 189
188 BrowserThread::PostTask( 190 BrowserThread::PostTask(
189 BrowserThread::UI, FROM_HERE, 191 BrowserThread::UI, FROM_HERE,
190 base::Bind(&MediaStreamCaptureIndicator::DoDevicesClosedOnUIThread, 192 base::Bind(&MediaStreamCaptureIndicator::DoDevicesClosedOnUIThread,
191 this, render_process_id, render_view_id, devices)); 193 weak_ptr_factory_.GetWeakPtr(),
no longer working on chromium 2012/10/23 08:56:53 Do we know that if MediaInternals will always outl
stevenjb 2012/10/23 18:11:31 As a Singleton, yes, it will outlive the UI messag
194 render_process_id, render_view_id, devices));
192 } 195 }
193 196
194 void MediaStreamCaptureIndicator::DoDevicesOpenedOnUIThread( 197 void MediaStreamCaptureIndicator::DoDevicesOpenedOnUIThread(
195 int render_process_id, 198 int render_process_id,
196 int render_view_id, 199 int render_view_id,
197 const content::MediaStreamDevices& devices) { 200 const content::MediaStreamDevices& devices) {
198 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 201 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
199 202
200 CreateStatusTray(); 203 CreateStatusTray();
201 204
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
444 } 447 }
445 448
446 // Remove the tab if all the devices have been closed. 449 // Remove the tab if all the devices have been closed.
447 if (iter->audio_ref_count == 0 && iter->video_ref_count == 0) 450 if (iter->audio_ref_count == 0 && iter->video_ref_count == 0)
448 tabs_.erase(iter); 451 tabs_.erase(iter);
449 } 452 }
450 453
451 UpdateStatusTrayIconContextMenu(); 454 UpdateStatusTrayIconContextMenu();
452 } 455 }
453 456
457 bool MediaStreamCaptureIndicator::IsProcessCapturing(int render_process_id,
458 int render_view_id) const {
459 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
460 CaptureDeviceTabs::const_iterator iter = std::find_if(
461 tabs_.begin(), tabs_.end(), TabEquals(render_process_id, render_view_id));
462 if (iter == tabs_.end())
463 return false;
464 return (iter->audio_ref_count > 0 || iter->video_ref_count > 0);
465 }
466
454 void MediaStreamCaptureIndicator::EnsureImageLoadingTracker() { 467 void MediaStreamCaptureIndicator::EnsureImageLoadingTracker() {
455 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 468 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
456 if (tracker_.get()) 469 if (tracker_.get())
457 return; 470 return;
458 471
459 tracker_.reset(new ImageLoadingTracker(this)); 472 tracker_.reset(new ImageLoadingTracker(this));
460 pending_messages_.clear(); 473 pending_messages_.clear();
461 request_index_ = 0; 474 request_index_ = 0;
462 } 475 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698