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

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

Issue 2409893003: VideoCapture: more migration IPC-->mojo, part 5 (Closed)
Patch Set: rebase content/common/BUILD.gn Created 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « content/browser/renderer_host/media/video_capture_host.cc ('k') | content/common/BUILD.gn » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: content/browser/renderer_host/media/video_capture_host_unittest.cc
diff --git a/content/browser/renderer_host/media/video_capture_host_unittest.cc b/content/browser/renderer_host/media/video_capture_host_unittest.cc
index cfde366b469223c19e6bf1b63664ff716a643f4f..873135540f01c5bfd0fd9506f21e569399bf2ca6 100644
--- a/content/browser/renderer_host/media/video_capture_host_unittest.cc
+++ b/content/browser/renderer_host/media/video_capture_host_unittest.cc
@@ -29,17 +29,13 @@
#include "content/public/test/test_browser_context.h"
#include "content/public/test/test_browser_thread_bundle.h"
#include "content/test/test_content_browser_client.h"
-#include "media/audio/audio_manager.h"
+#include "media/audio/mock_audio_manager.h"
#include "media/base/media_switches.h"
#include "media/base/video_capture_types.h"
#include "net/url_request/url_request_context.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
-#if defined(OS_CHROMEOS)
-#include "chromeos/audio/cras_audio_handler.h"
-#endif
-
using ::testing::_;
using ::testing::AnyNumber;
using ::testing::DoAll;
@@ -91,43 +87,21 @@ class MockMediaStreamRequester : public MediaStreamRequester {
class MockVideoCaptureHost : public VideoCaptureHost {
public:
MockVideoCaptureHost(MediaStreamManager* manager)
- : VideoCaptureHost(manager), return_buffers_immediately_(false) {}
+ : VideoCaptureHost(manager) {}
MOCK_METHOD4(OnNewBufferCreated,
void(int device_id,
base::SharedMemoryHandle handle,
int length,
int buffer_id));
- MOCK_METHOD2(OnBufferFreed, void(int device_id, int buffer_id));
- MOCK_METHOD1(OnBufferFilled, void(int device_id));
-
- void SetReturnReceivedBuffersImmediately(bool enable) {
- return_buffers_immediately_ = enable;
- }
-
- void ReturnReceivedBuffers(int device_id) {
- while (!buffer_ids_.empty()) {
- this->ReleaseBuffer(device_id, *buffer_ids_.begin(), gpu::SyncToken(),
- -1.0);
- buffer_ids_.pop_front();
- }
- }
private:
~MockVideoCaptureHost() override {}
- // This method is used to dispatch IPC messages to the renderer. We intercept
- // some of these messages here to MOCK them and to map/unmap buffers.
bool Send(IPC::Message* message) override {
- CHECK(message);
-
- // In this method we dispatch the messages to the according handlers as if
- // we are the renderer.
bool handled = true;
IPC_BEGIN_MESSAGE_MAP(MockVideoCaptureHost, *message)
- IPC_MESSAGE_HANDLER(VideoCaptureMsg_NewBuffer, OnNewBufferCreatedDispatch)
- IPC_MESSAGE_HANDLER(VideoCaptureMsg_FreeBuffer, OnBufferFreedDispatch)
- IPC_MESSAGE_HANDLER(VideoCaptureMsg_BufferReady, OnBufferFilledDispatch)
+ IPC_MESSAGE_HANDLER(VideoCaptureMsg_NewBuffer, OnNewBufferCreated)
IPC_MESSAGE_UNHANDLED(handled = false)
IPC_END_MESSAGE_MAP()
EXPECT_TRUE(handled);
@@ -135,36 +109,6 @@ class MockVideoCaptureHost : public VideoCaptureHost {
delete message;
return true;
}
-
- // These handler methods do minimal things and delegate to the mock methods.
- void OnNewBufferCreatedDispatch(int device_id,
- base::SharedMemoryHandle handle,
- uint32_t length,
- int buffer_id) {
- OnNewBufferCreated(device_id, handle, length, buffer_id);
- buffer_ids_.push_back(buffer_id);
- }
-
- void OnBufferFreedDispatch(int device_id, int buffer_id) {
- OnBufferFreed(device_id, buffer_id);
-
- auto buffer = std::find(buffer_ids_.begin(), buffer_ids_.end(), buffer_id);
- ASSERT_TRUE(buffer != buffer_ids_.end());
- buffer_ids_.erase(buffer);
- }
-
- void OnBufferFilledDispatch(
- const VideoCaptureMsg_BufferReady_Params& params) {
- OnBufferFilled(params.device_id);
- if (!return_buffers_immediately_)
- return;
-
- VideoCaptureHost::ReleaseBuffer(params.device_id, params.buffer_id,
- gpu::SyncToken(), -1.0);
- }
-
- std::list<int> buffer_ids_;
- bool return_buffers_immediately_;
};
ACTION_P2(ExitMessageLoop, task_runner, quit_closure) {
@@ -179,6 +123,8 @@ class VideoCaptureHostTest : public testing::Test,
public:
VideoCaptureHostTest()
: thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP),
+ audio_manager_(
+ new media::MockAudioManager(base::ThreadTaskRunnerHandle::Get())),
task_runner_(base::ThreadTaskRunnerHandle::Get()),
opened_session_id_(kInvalidMediaCaptureSessionId),
observer_binding_(this) {}
@@ -186,11 +132,6 @@ class VideoCaptureHostTest : public testing::Test,
void SetUp() override {
SetBrowserClientForTesting(&browser_client_);
-#if defined(OS_CHROMEOS)
- chromeos::CrasAudioHandler::InitializeForTesting();
-#endif
-
- audio_manager_ = media::AudioManager::CreateForTesting(task_runner_);
base::CommandLine::ForCurrentProcess()->AppendSwitch(
switches::kUseFakeDeviceForMediaStream);
base::CommandLine::ForCurrentProcess()->AppendSwitch(
@@ -216,10 +157,6 @@ class VideoCaptureHostTest : public testing::Test,
// Release the reference to the mock object. The object will be destructed
// on the current message loop.
host_ = nullptr;
-
-#if defined(OS_CHROMEOS)
- chromeos::CrasAudioHandler::Shutdown();
-#endif
}
void OpenSession() {
@@ -289,23 +226,29 @@ class VideoCaptureHostTest : public testing::Test,
}
protected:
+ // mojom::VideoCaptureObserver implementation.
MOCK_METHOD1(OnStateChanged, void(mojom::VideoCaptureState));
+ void OnBufferReady(int32_t buffer_id,
+ mojom::VideoFrameInfoPtr info) override {
+ DoOnBufferReady(buffer_id);
+ }
+ MOCK_METHOD1(DoOnBufferReady, void(int32_t));
+ MOCK_METHOD1(OnBufferDestroyed, void(int32_t));
void StartCapture() {
- EXPECT_CALL(*host_.get(), OnNewBufferCreated(kDeviceId, _, _, _))
- .Times(AnyNumber())
- .WillRepeatedly(Return());
-
base::RunLoop run_loop;
- EXPECT_CALL(*host_.get(), OnBufferFilled(kDeviceId))
- .Times(AnyNumber())
- .WillOnce(ExitMessageLoop(task_runner_, run_loop.QuitClosure()));
-
media::VideoCaptureParams params;
params.requested_format = media::VideoCaptureFormat(
gfx::Size(352, 288), 30, media::PIXEL_FORMAT_I420);
EXPECT_CALL(*this, OnStateChanged(mojom::VideoCaptureState::STARTED));
+ EXPECT_CALL(*host_.get(), OnNewBufferCreated(kDeviceId, _, _, _))
+ .Times(AnyNumber())
+ .WillRepeatedly(Return());
+ EXPECT_CALL(*this, DoOnBufferReady(_))
+ .Times(AnyNumber())
+ .WillOnce(ExitMessageLoop(task_runner_, run_loop.QuitClosure()));
+
host_->Start(kDeviceId, opened_session_id_, params,
observer_binding_.CreateInterfacePtrAndBind());
@@ -314,7 +257,7 @@ class VideoCaptureHostTest : public testing::Test,
void StartStopCapture() {
// Quickly start and then stop capture, without giving much chance for
- // asynchronous start operations to complete.
+ // asynchronous capture operations to produce frames.
InSequence s;
base::RunLoop run_loop;
@@ -355,34 +298,26 @@ class VideoCaptureHostTest : public testing::Test,
EXPECT_CALL(*this, OnStateChanged(mojom::VideoCaptureState::STOPPED))
.WillOnce(ExitMessageLoop(task_runner_, run_loop.QuitClosure()));
host_->Stop(kDeviceId);
- host_->SetReturnReceivedBuffersImmediately(true);
- host_->ReturnReceivedBuffers(kDeviceId);
run_loop.Run();
- // Expect the VideoCaptureDevice has been stopped
EXPECT_TRUE(host_->controllers_.empty());
}
- void NotifyPacketReady() {
+ void WaitForOneCapturedBuffer() {
base::RunLoop run_loop;
- EXPECT_CALL(*host_.get(), OnBufferFilled(kDeviceId))
+
+ EXPECT_CALL(*this, DoOnBufferReady(_))
.Times(AnyNumber())
.WillOnce(ExitMessageLoop(task_runner_, run_loop.QuitClosure()))
.RetiresOnSaturation();
run_loop.Run();
}
- void ReturnReceivedPackets() {
- host_->ReturnReceivedBuffers(kDeviceId);
- }
-
void SimulateError() {
- // Expect a change state to error state sent through IPC.
EXPECT_CALL(*this, OnStateChanged(mojom::VideoCaptureState::FAILED));
VideoCaptureControllerID id(kDeviceId);
host_->OnError(id);
- // Wait for the error callback.
base::RunLoop().RunUntilIdle();
}
@@ -434,9 +369,8 @@ TEST_F(VideoCaptureHostTest, StopWhileStartPending) {
TEST_F(VideoCaptureHostTest, StartCapturePlayStop) {
StartCapture();
- NotifyPacketReady();
- NotifyPacketReady();
- ReturnReceivedPackets();
+ WaitForOneCapturedBuffer();
+ WaitForOneCapturedBuffer();
StopCapture();
}
@@ -450,7 +384,7 @@ TEST_F(VideoCaptureHostTest, StartCaptureError) {
EXPECT_CALL(*this, OnStateChanged(mojom::VideoCaptureState::STOPPED))
.Times(0);
StartCapture();
- NotifyPacketReady();
+ WaitForOneCapturedBuffer();
SimulateError();
base::PlatformThread::Sleep(base::TimeDelta::FromMilliseconds(200));
}
« no previous file with comments | « content/browser/renderer_host/media/video_capture_host.cc ('k') | content/common/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698