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

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

Issue 10912004: Begin adding support for tab mirroring via the MediaStream audio/video capturing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: REBASE Created 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/media/media_stream_devices_controller.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
10 #include "chrome/app/chrome_command_ids.h" 11 #include "chrome/app/chrome_command_ids.h"
11 #include "chrome/browser/browser_process.h" 12 #include "chrome/browser/browser_process.h"
12 #include "chrome/browser/extensions/extension_service.h" 13 #include "chrome/browser/extensions/extension_service.h"
13 #include "chrome/browser/profiles/profile.h" 14 #include "chrome/browser/profiles/profile.h"
14 #include "chrome/browser/status_icons/status_icon.h" 15 #include "chrome/browser/status_icons/status_icon.h"
15 #include "chrome/browser/status_icons/status_tray.h" 16 #include "chrome/browser/status_icons/status_tray.h"
16 #include "chrome/browser/tab_contents/tab_util.h" 17 #include "chrome/browser/tab_contents/tab_util.h"
17 #include "content/public/browser/browser_thread.h" 18 #include "content/public/browser/browser_thread.h"
18 #include "content/public/browser/content_browser_client.h" 19 #include "content/public/browser/content_browser_client.h"
19 #include "content/public/browser/render_view_host.h" 20 #include "content/public/browser/render_view_host.h"
20 #include "content/public/browser/web_contents.h" 21 #include "content/public/browser/web_contents.h"
21 #include "content/public/browser/web_contents_delegate.h" 22 #include "content/public/browser/web_contents_delegate.h"
23 #include "content/public/common/media_stream_request.h"
22 #include "grit/chromium_strings.h" 24 #include "grit/chromium_strings.h"
23 #include "grit/generated_resources.h" 25 #include "grit/generated_resources.h"
24 #include "grit/theme_resources.h" 26 #include "grit/theme_resources.h"
25 #include "net/base/net_util.h" 27 #include "net/base/net_util.h"
26 #include "ui/base/l10n/l10n_util.h" 28 #include "ui/base/l10n/l10n_util.h"
27 #include "ui/base/resource/resource_bundle.h" 29 #include "ui/base/resource/resource_bundle.h"
28 30
29 using content::BrowserThread; 31 using content::BrowserThread;
30 using content::WebContents; 32 using content::WebContents;
31 33
(...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after
395 tabs_.begin(), tabs_.end(), TabEquals(render_process_id, render_view_id)); 397 tabs_.begin(), tabs_.end(), TabEquals(render_process_id, render_view_id));
396 if (iter == tabs_.end()) { 398 if (iter == tabs_.end()) {
397 tabs_.push_back(CaptureDeviceTab(render_process_id, render_view_id)); 399 tabs_.push_back(CaptureDeviceTab(render_process_id, render_view_id));
398 iter = tabs_.end() - 1; 400 iter = tabs_.end() - 1;
399 } 401 }
400 402
401 bool audio = false; 403 bool audio = false;
402 bool video = false; 404 bool video = false;
403 content::MediaStreamDevices::const_iterator dev = devices.begin(); 405 content::MediaStreamDevices::const_iterator dev = devices.begin();
404 for (; dev != devices.end(); ++dev) { 406 for (; dev != devices.end(); ++dev) {
405 DCHECK(dev->type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE || 407 if (content::IsAudioMediaType(dev->type)) {
406 dev->type == content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE);
407 if (dev->type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE) {
408 ++iter->audio_ref_count; 408 ++iter->audio_ref_count;
409 audio = true; 409 audio = true;
410 } else { 410 } else if (content::IsVideoMediaType(dev->type)) {
411 ++iter->video_ref_count; 411 ++iter->video_ref_count;
412 video = true; 412 video = true;
413 } else {
414 NOTIMPLEMENTED();
413 } 415 }
414 } 416 }
415 417
416 UpdateStatusTrayIconContextMenu(); 418 UpdateStatusTrayIconContextMenu();
417 419
418 ShowBalloon(render_process_id, render_view_id, audio, video); 420 ShowBalloon(render_process_id, render_view_id, audio, video);
419 } 421 }
420 422
421 void MediaStreamCaptureIndicator::RemoveCaptureDeviceTab( 423 void MediaStreamCaptureIndicator::RemoveCaptureDeviceTab(
422 int render_process_id, 424 int render_process_id,
423 int render_view_id, 425 int render_view_id,
424 const content::MediaStreamDevices& devices) { 426 const content::MediaStreamDevices& devices) {
425 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 427 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
426 CaptureDeviceTabs::iterator iter = std::find_if( 428 CaptureDeviceTabs::iterator iter = std::find_if(
427 tabs_.begin(), tabs_.end(), TabEquals(render_process_id, render_view_id)); 429 tabs_.begin(), tabs_.end(), TabEquals(render_process_id, render_view_id));
428 430
429 if (iter != tabs_.end()) { 431 if (iter != tabs_.end()) {
430 content::MediaStreamDevices::const_iterator dev = devices.begin(); 432 content::MediaStreamDevices::const_iterator dev = devices.begin();
431 for (; dev != devices.end(); ++dev) { 433 for (; dev != devices.end(); ++dev) {
432 DCHECK(dev->type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE || 434 if (content::IsAudioMediaType(dev->type)) {
433 dev->type == content::MEDIA_STREAM_DEVICE_TYPE_VIDEO_CAPTURE);
434 if (dev->type == content::MEDIA_STREAM_DEVICE_TYPE_AUDIO_CAPTURE)
435 --iter->audio_ref_count; 435 --iter->audio_ref_count;
436 else 436 } else if (content::IsVideoMediaType(dev->type)) {
437 --iter->video_ref_count; 437 --iter->video_ref_count;
438 } else {
439 NOTIMPLEMENTED();
440 }
438 441
439 DCHECK_GE(iter->audio_ref_count, 0); 442 DCHECK_GE(iter->audio_ref_count, 0);
440 DCHECK_GE(iter->video_ref_count, 0); 443 DCHECK_GE(iter->video_ref_count, 0);
441 } 444 }
442 445
443 // Remove the tab if all the devices have been closed. 446 // Remove the tab if all the devices have been closed.
444 if (iter->audio_ref_count == 0 && iter->video_ref_count == 0) 447 if (iter->audio_ref_count == 0 && iter->video_ref_count == 0)
445 tabs_.erase(iter); 448 tabs_.erase(iter);
446 } 449 }
447 450
448 UpdateStatusTrayIconContextMenu(); 451 UpdateStatusTrayIconContextMenu();
449 } 452 }
450 453
451 void MediaStreamCaptureIndicator::EnsureImageLoadingTracker() { 454 void MediaStreamCaptureIndicator::EnsureImageLoadingTracker() {
452 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI)); 455 DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
453 if (tracker_.get()) 456 if (tracker_.get())
454 return; 457 return;
455 458
456 tracker_.reset(new ImageLoadingTracker(this)); 459 tracker_.reset(new ImageLoadingTracker(this));
457 pending_messages_.clear(); 460 pending_messages_.clear();
458 request_index_ = 0; 461 request_index_ = 0;
459 } 462 }
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/media/media_stream_devices_controller.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698