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

Unified Diff: content/browser/renderer_host/media/video_capture_manager.cc

Issue 2729783003: [Mojo Video Capture] Add content_browsertest for exercising video capture (Closed)
Patch Set: Created 3 years, 10 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/renderer_host/media/video_capture_manager.cc
diff --git a/content/browser/renderer_host/media/video_capture_manager.cc b/content/browser/renderer_host/media/video_capture_manager.cc
index bd9a15c0db7e07c0585a0243a11e0664450b3ace..f15869aa2d41ad80802cc7504f3f65fd3423dc32 100644
--- a/content/browser/renderer_host/media/video_capture_manager.cc
+++ b/content/browser/renderer_host/media/video_capture_manager.cc
@@ -301,7 +301,6 @@ VideoCaptureManager::VideoCaptureManager(
std::unique_ptr<media::VideoCaptureDeviceFactory> factory,
scoped_refptr<base::SingleThreadTaskRunner> device_task_runner)
: device_task_runner_(std::move(device_task_runner)),
- listener_(nullptr),
new_capture_session_id_(1),
video_capture_device_factory_(std::move(factory)) {}
@@ -325,9 +324,9 @@ void VideoCaptureManager::RemoveAllVideoCaptureObservers() {
void VideoCaptureManager::RegisterListener(
MediaStreamProviderListener* listener) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(!listener_);
+ DCHECK(listener);
DCHECK(device_task_runner_);
- listener_ = listener;
+ listeners_.AddObserver(listener);
#if defined(OS_ANDROID)
application_state_has_running_activities_ = true;
app_status_listener_.reset(new base::android::ApplicationStatusListener(
@@ -336,10 +335,10 @@ void VideoCaptureManager::RegisterListener(
#endif
}
-void VideoCaptureManager::UnregisterListener() {
+void VideoCaptureManager::UnregisterListener(
+ MediaStreamProviderListener* listener) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(listener_);
- listener_ = nullptr;
+ listeners_.RemoveObserver(listener);
}
void VideoCaptureManager::EnumerateDevices(
@@ -366,9 +365,9 @@ void VideoCaptureManager::EnumerateDevices(
devices_enumerated_callback));
}
-int VideoCaptureManager::Open(const StreamDeviceInfo& device_info) {
+int VideoCaptureManager::Open(const MediaStreamDevice& device) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(listener_);
+ DCHECK(listeners_.might_have_observers());
// Generate a new id for the session being opened.
const media::VideoCaptureSessionId capture_session_id =
@@ -378,20 +377,20 @@ int VideoCaptureManager::Open(const StreamDeviceInfo& device_info) {
DVLOG(1) << "VideoCaptureManager::Open, id " << capture_session_id;
// We just save the stream info for processing later.
- sessions_[capture_session_id] = device_info.device;
+ sessions_[capture_session_id] = device;
// Notify our listener asynchronously; this ensures that we return
// |capture_session_id| to the caller of this function before using that same
// id in a listener event.
base::ThreadTaskRunnerHandle::Get()->PostTask(
- FROM_HERE, base::Bind(&VideoCaptureManager::OnOpened, this,
- device_info.device.type, capture_session_id));
+ FROM_HERE, base::Bind(&VideoCaptureManager::OnOpened, this, device.type,
+ capture_session_id));
return capture_session_id;
}
void VideoCaptureManager::Close(int capture_session_id) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- DCHECK(listener_);
+ DCHECK(listeners_.might_have_observers());
mcasas 2017/03/03 00:21:13 Not your fault, but this function name is inaccura
chfremer 2017/03/03 18:21:13 An issue related to this already exists, see https
DVLOG(1) << "VideoCaptureManager::Close, id " << capture_session_id;
SessionMap::iterator session_it = sessions_.find(capture_session_id);
@@ -767,7 +766,8 @@ void VideoCaptureManager::StopCaptureForClient(
LogVideoCaptureEvent(VIDEO_CAPTURE_STOP_CAPTURE_DUE_TO_ERROR);
for (auto it : sessions_) {
if (it.second.type == entry->stream_type && it.second.id == entry->id) {
- listener_->Aborted(it.second.type, it.first);
+ for (auto& listener : listeners_)
+ listener.Aborted(it.second.type, it.first);
// Aborted() call might synchronously destroy |entry|, recheck.
entry = GetDeviceEntryByController(controller);
if (!entry)
@@ -1041,22 +1041,16 @@ void VideoCaptureManager::OnOpened(
MediaStreamType stream_type,
media::VideoCaptureSessionId capture_session_id) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- if (!listener_) {
- // Listener has been removed.
- return;
- }
- listener_->Opened(stream_type, capture_session_id);
+ for (auto& listener : listeners_)
+ listener.Opened(stream_type, capture_session_id);
}
void VideoCaptureManager::OnClosed(
MediaStreamType stream_type,
media::VideoCaptureSessionId capture_session_id) {
DCHECK_CURRENTLY_ON(BrowserThread::IO);
- if (!listener_) {
- // Listener has been removed.
- return;
- }
- listener_->Closed(stream_type, capture_session_id);
+ for (auto& listener : listeners_)
+ listener.Closed(stream_type, capture_session_id);
}
void VideoCaptureManager::OnDevicesInfoEnumerated(

Powered by Google App Engine
This is Rietveld 408576698