Index: content/browser/renderer_host/media/video_capture_host.cc |
diff --git a/content/browser/renderer_host/media/video_capture_host.cc b/content/browser/renderer_host/media/video_capture_host.cc |
index 9d3c6344746433dce87b0abcb4e5da022cd4fd0f..7ed77ae53d358508e785f2ae1ccfd06fd53052f4 100644 |
--- a/content/browser/renderer_host/media/video_capture_host.cc |
+++ b/content/browser/renderer_host/media/video_capture_host.cc |
@@ -6,7 +6,6 @@ |
#include "base/bind.h" |
#include "base/memory/scoped_ptr.h" |
-#include "base/stl_util.h" |
#include "content/browser/browser_main_loop.h" |
#include "content/browser/renderer_host/media/media_stream_manager.h" |
#include "content/browser/renderer_host/media/video_capture_manager.h" |
@@ -14,15 +13,6 @@ |
namespace content { |
-struct VideoCaptureHost::Entry { |
- Entry(VideoCaptureController* controller) |
- : controller(controller) {} |
- |
- ~Entry() {} |
- |
- scoped_refptr<VideoCaptureController> controller; |
-}; |
- |
VideoCaptureHost::VideoCaptureHost(MediaStreamManager* media_stream_manager) |
: media_stream_manager_(media_stream_manager) { |
} |
@@ -34,14 +24,13 @@ void VideoCaptureHost::OnChannelClosing() { |
// Since the IPC channel is gone, close all requested VideoCaptureDevices. |
for (EntryMap::iterator it = entries_.begin(); it != entries_.end(); it++) { |
- VideoCaptureController* controller = it->second->controller.get(); |
+ const base::WeakPtr<VideoCaptureController>& controller = it->second; |
if (controller) { |
VideoCaptureControllerID controller_id(it->first); |
media_stream_manager_->video_capture_manager()->StopCaptureForClient( |
- controller, controller_id, this); |
+ controller.get(), controller_id, this); |
} |
} |
- STLDeleteValues(&entries_); |
} |
void VideoCaptureHost::OnDestruct() const { |
@@ -222,7 +211,7 @@ void VideoCaptureHost::OnStartCapture(int device_id, |
VideoCaptureControllerID controller_id(device_id); |
DCHECK(entries_.find(controller_id) == entries_.end()); |
- entries_[controller_id] = new Entry(NULL); |
+ entries_[controller_id] = base::WeakPtr<VideoCaptureController>(); |
media_stream_manager_->video_capture_manager()->StartCaptureForClient( |
params, PeerHandle(), controller_id, this, base::Bind( |
&VideoCaptureHost::OnControllerAdded, this, device_id, params)); |
@@ -230,36 +219,36 @@ void VideoCaptureHost::OnStartCapture(int device_id, |
void VideoCaptureHost::OnControllerAdded( |
int device_id, const media::VideoCaptureParams& params, |
- VideoCaptureController* controller) { |
+ const base::WeakPtr<VideoCaptureController>& controller) { |
BrowserThread::PostTask( |
BrowserThread::IO, FROM_HERE, |
base::Bind(&VideoCaptureHost::DoControllerAddedOnIOThread, |
- this, device_id, params, make_scoped_refptr(controller))); |
+ this, device_id, params, controller)); |
} |
void VideoCaptureHost::DoControllerAddedOnIOThread( |
int device_id, const media::VideoCaptureParams params, |
- VideoCaptureController* controller) { |
+ const base::WeakPtr<VideoCaptureController>& controller) { |
DCHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)); |
VideoCaptureControllerID controller_id(device_id); |
EntryMap::iterator it = entries_.find(controller_id); |
if (it == entries_.end()) { |
if (controller) { |
media_stream_manager_->video_capture_manager()->StopCaptureForClient( |
- controller, controller_id, this); |
+ controller.get(), controller_id, this); |
} |
return; |
} |
- if (controller == NULL) { |
+ if (!controller) { |
Send(new VideoCaptureMsg_StateChanged(device_id, |
VIDEO_CAPTURE_STATE_ERROR)); |
- delete it->second; |
entries_.erase(controller_id); |
return; |
} |
- it->second->controller = controller; |
+ DCHECK(!it->second); |
+ it->second = controller; |
} |
void VideoCaptureHost::OnStopCapture(int device_id) { |
@@ -286,8 +275,8 @@ void VideoCaptureHost::OnReceiveEmptyBuffer(int device_id, int buffer_id) { |
VideoCaptureControllerID controller_id(device_id); |
EntryMap::iterator it = entries_.find(controller_id); |
if (it != entries_.end()) { |
- scoped_refptr<VideoCaptureController> controller = it->second->controller; |
- if (controller.get()) |
+ const base::WeakPtr<VideoCaptureController>& controller = it->second; |
+ if (controller) |
controller->ReturnBuffer(controller_id, this, buffer_id); |
} |
} |
@@ -300,13 +289,11 @@ void VideoCaptureHost::DeleteVideoCaptureControllerOnIOThread( |
if (it == entries_.end()) |
return; |
- VideoCaptureController* controller = it->second->controller.get(); |
- if (controller) { |
+ if (it->second) { |
media_stream_manager_->video_capture_manager()->StopCaptureForClient( |
- controller, controller_id, this); |
+ it->second.get(), controller_id, this); |
} |
- delete it->second; |
- entries_.erase(controller_id); |
+ entries_.erase(it); |
} |
} // namespace content |