| Index: content/browser/renderer_host/media/web_contents_video_capture_device.cc
|
| diff --git a/content/browser/renderer_host/media/web_contents_video_capture_device.cc b/content/browser/renderer_host/media/web_contents_video_capture_device.cc
|
| index 8b30cb18d8b4aa4995101dadc658e0537be84d18..e478c93165a80da5ca312ef0cb9c7e13e319c5be 100644
|
| --- a/content/browser/renderer_host/media/web_contents_video_capture_device.cc
|
| +++ b/content/browser/renderer_host/media/web_contents_video_capture_device.cc
|
| @@ -73,7 +73,7 @@
|
| #include "ui/gfx/rect.h"
|
| #include "ui/gfx/skia_util.h"
|
|
|
| -// Used to self-trampoline invocation of methods to the approprate thread. This
|
| +// Used to self-trampoline invocation of methods to the appropriate thread. This
|
| // should be used sparingly, only when it's not clear which thread is invoking a
|
| // method.
|
| #define ENSURE_INVOKED_ON_THREAD(thread, ...) { \
|
| @@ -146,10 +146,6 @@ class BackingStoreCopier : public WebContentsObserver {
|
|
|
| virtual ~BackingStoreCopier();
|
|
|
| - // If non-NULL, use the given |override| to access the backing store.
|
| - // This is used for unit testing.
|
| - void SetRenderWidgetHostForTesting(RenderWidgetHost* override);
|
| -
|
| // Starts the copy from the backing store. Must be run on the UI
|
| // BrowserThread. Resulting frame is conveyed back to |consumer|.
|
| void StartCopy(const scoped_refptr<CaptureMachine>& consumer,
|
| @@ -205,10 +201,6 @@ class BackingStoreCopier : public WebContentsObserver {
|
| // Last known RenderView size.
|
| gfx::Size last_view_size_;
|
|
|
| - // If the following is NULL (normal behavior), the implementation should
|
| - // access RenderWidgetHost via web_contents().
|
| - RenderWidgetHost* rwh_for_testing_;
|
| -
|
| DISALLOW_COPY_AND_ASSIGN(BackingStoreCopier);
|
| };
|
|
|
| @@ -319,8 +311,9 @@ class VideoFrameDeliverer {
|
|
|
| BackingStoreCopier::BackingStoreCopier(int render_process_id,
|
| int render_view_id)
|
| - : render_process_id_(render_process_id), render_view_id_(render_view_id),
|
| - fullscreen_widget_id_(MSG_ROUTING_NONE), rwh_for_testing_(NULL) {}
|
| + : render_process_id_(render_process_id),
|
| + render_view_id_(render_view_id),
|
| + fullscreen_widget_id_(MSG_ROUTING_NONE) {}
|
|
|
| BackingStoreCopier::~BackingStoreCopier() {
|
| DCHECK(!web_contents());
|
| @@ -369,11 +362,6 @@ void BackingStoreCopier::LookUpAndObserveWebContents() {
|
| }
|
| }
|
|
|
| -void BackingStoreCopier::SetRenderWidgetHostForTesting(
|
| - RenderWidgetHost* override) {
|
| - rwh_for_testing_ = override;
|
| -}
|
| -
|
| VideoFrameRenderer::VideoFrameRenderer()
|
| : render_thread_("WebContentsVideo_RenderThread") {
|
| output_[0].in_use = false;
|
| @@ -671,13 +659,11 @@ class CaptureMachine
|
| TRANSIENT_ERROR
|
| };
|
|
|
| - CaptureMachine(int render_process_id, int render_view_id);
|
| -
|
| - // Sets the capture source to the given |override| for unit testing.
|
| - // Also, |destroy_cb| will be invoked after CaptureMachine is fully destroyed
|
| - // (to synchronize tear-down).
|
| - void InitializeForTesting(RenderWidgetHost* override,
|
| - const base::Closure& destroy_cb);
|
| + // |destroy_cb| will be invoked after CaptureMachine is fully destroyed,
|
| + // to synchronize tear-down.
|
| + CaptureMachine(int render_process_id,
|
| + int render_view_id,
|
| + const base::Closure& destroy_cb);
|
|
|
| // Synchronously sets/unsets the consumer. Pass |consumer| as NULL to remove
|
| // the reference to the consumer; then, once this method returns,
|
| @@ -778,22 +764,19 @@ class CaptureMachine
|
| DISALLOW_COPY_AND_ASSIGN(CaptureMachine);
|
| };
|
|
|
| -CaptureMachine::CaptureMachine(int render_process_id, int render_view_id)
|
| +CaptureMachine::CaptureMachine(int render_process_id,
|
| + int render_view_id,
|
| + const base::Closure& destroy_cb)
|
| : manager_thread_("WebContentsVideo_ManagerThread"),
|
| state_(kIdle),
|
| is_snapshotting_(false),
|
| num_renders_pending_(0),
|
| copier_(render_process_id, render_view_id),
|
| - deliverer_(&consumer_) {
|
| + deliverer_(&consumer_),
|
| + destroy_cb_(destroy_cb) {
|
| manager_thread_.Start();
|
| }
|
|
|
| -void CaptureMachine::InitializeForTesting(RenderWidgetHost* override,
|
| - const base::Closure& destroy_cb) {
|
| - copier_.SetRenderWidgetHostForTesting(override);
|
| - destroy_cb_ = destroy_cb;
|
| -}
|
| -
|
| void CaptureMachine::SetConsumer(
|
| media::VideoCaptureDevice::EventHandler* consumer) {
|
| consumer_.SetConsumer(consumer);
|
| @@ -908,9 +891,8 @@ void CaptureMachine::DeleteFromOutsideThread(const CaptureMachine* x) {
|
| const base::Closure run_after_delete = x->destroy_cb_;
|
| // Note: Thread joins are about to happen here (in ~CaptureThread()).
|
| delete x;
|
| - if (!run_after_delete.is_null()) {
|
| + if (!run_after_delete.is_null())
|
| run_after_delete.Run();
|
| - }
|
| }
|
|
|
| void CaptureMachine::TransitionStateTo(State next_state) {
|
| @@ -1101,31 +1083,27 @@ void BackingStoreCopier::StartCopy(
|
| int desired_height) {
|
| DCHECK(BrowserThread::CurrentlyOn(BrowserThread::UI));
|
|
|
| - RenderWidgetHost* rwh;
|
| - if (rwh_for_testing_) {
|
| - rwh = rwh_for_testing_;
|
| - } else {
|
| - if (!web_contents()) { // No source yet.
|
| - LookUpAndObserveWebContents();
|
| - if (!web_contents()) { // No source ever.
|
| - consumer->OnSnapshotFailed(CaptureMachine::NO_SOURCE, frame_number);
|
| - return;
|
| - }
|
| + if (!web_contents()) { // No source yet.
|
| + LookUpAndObserveWebContents();
|
| + if (!web_contents()) { // No source ever.
|
| + consumer->OnSnapshotFailed(CaptureMachine::NO_SOURCE, frame_number);
|
| + return;
|
| }
|
| + }
|
|
|
| - if (fullscreen_widget_id_ != MSG_ROUTING_NONE) {
|
| - RenderProcessHost* process = web_contents()->GetRenderProcessHost();
|
| - rwh = process ? process->GetRenderWidgetHostByID(fullscreen_widget_id_)
|
| - : NULL;
|
| - } else {
|
| - rwh = web_contents()->GetRenderViewHost();
|
| - }
|
| + RenderWidgetHost* rwh;
|
| + if (fullscreen_widget_id_ != MSG_ROUTING_NONE) {
|
| + RenderProcessHost* process = web_contents()->GetRenderProcessHost();
|
| + rwh = process ? process->GetRenderWidgetHostByID(fullscreen_widget_id_)
|
| + : NULL;
|
| + } else {
|
| + rwh = web_contents()->GetRenderViewHost();
|
| + }
|
|
|
| - if (!rwh) {
|
| - // Transient failure state (e.g., a RenderView is being replaced).
|
| - consumer->OnSnapshotFailed(CaptureMachine::TRANSIENT_ERROR, frame_number);
|
| - return;
|
| - }
|
| + if (!rwh) {
|
| + // Transient failure state (e.g., a RenderView is being replaced).
|
| + consumer->OnSnapshotFailed(CaptureMachine::TRANSIENT_ERROR, frame_number);
|
| + return;
|
| }
|
|
|
| RenderWidgetHostViewPort* view =
|
| @@ -1228,17 +1206,12 @@ void BackingStoreCopier::DidCopyFromBackingStoreToVideoFrame(
|
|
|
| WebContentsVideoCaptureDevice::WebContentsVideoCaptureDevice(
|
| const media::VideoCaptureDevice::Name& name,
|
| - int render_process_id, int render_view_id)
|
| + int render_process_id,
|
| + int render_view_id,
|
| + const base::Closure& destroy_cb)
|
| : device_name_(name),
|
| - capturer_(new CaptureMachine(render_process_id, render_view_id)) {}
|
| -
|
| -WebContentsVideoCaptureDevice::WebContentsVideoCaptureDevice(
|
| - RenderWidgetHost* test_source, const base::Closure& destroy_cb)
|
| - : capturer_(new CaptureMachine(-1, -1)) {
|
| - device_name_.device_name = "WebContentsForTesting";
|
| - device_name_.unique_id = "-1:-1";
|
| - capturer_->InitializeForTesting(test_source, destroy_cb);
|
| -}
|
| + capturer_(new CaptureMachine(render_process_id, render_view_id,
|
| + destroy_cb)) {}
|
|
|
| WebContentsVideoCaptureDevice::~WebContentsVideoCaptureDevice() {
|
| DVLOG(2) << "WebContentsVideoCaptureDevice@" << this << " destroying.";
|
| @@ -1246,7 +1219,8 @@ WebContentsVideoCaptureDevice::~WebContentsVideoCaptureDevice() {
|
|
|
| // static
|
| media::VideoCaptureDevice* WebContentsVideoCaptureDevice::Create(
|
| - const std::string& device_id) {
|
| + const std::string& device_id,
|
| + const base::Closure& destroy_cb) {
|
| // Parse device_id into render_process_id and render_view_id.
|
| int render_process_id = -1;
|
| int render_view_id = -1;
|
| @@ -1262,13 +1236,7 @@ media::VideoCaptureDevice* WebContentsVideoCaptureDevice::Create(
|
| name.unique_id = device_id;
|
|
|
| return new WebContentsVideoCaptureDevice(
|
| - name, render_process_id, render_view_id);
|
| -}
|
| -
|
| -// static
|
| -media::VideoCaptureDevice* WebContentsVideoCaptureDevice::CreateForTesting(
|
| - RenderWidgetHost* test_source, const base::Closure& destroy_cb) {
|
| - return new WebContentsVideoCaptureDevice(test_source, destroy_cb);
|
| + name, render_process_id, render_view_id, destroy_cb);
|
| }
|
|
|
| void WebContentsVideoCaptureDevice::Allocate(
|
|
|