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 2dcabe56aa3823fad18e43e90de6b55d67b77225..1d8c79a77370b9e0fc325f819de30a75680107d1 100644 |
--- a/content/browser/renderer_host/media/video_capture_host_unittest.cc |
+++ b/content/browser/renderer_host/media/video_capture_host_unittest.cc |
@@ -10,6 +10,7 @@ |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop.h" |
#include "base/process_util.h" |
+#include "base/run_loop.h" |
#include "base/stl_util.h" |
#include "base/strings/stringprintf.h" |
#include "content/browser/browser_thread_impl.h" |
@@ -18,6 +19,7 @@ |
#include "content/browser/renderer_host/media/video_capture_manager.h" |
#include "content/common/media/video_capture_messages.h" |
#include "content/public/test/mock_resource_context.h" |
+#include "content/public/test/test_browser_thread_bundle.h" |
#include "media/audio/audio_manager.h" |
#include "media/video/capture/video_capture_types.h" |
#include "net/url_request/url_request_context.h" |
@@ -184,23 +186,15 @@ class MockVideoCaptureHost : public VideoCaptureHost { |
DumpVideo dumper_; |
}; |
-ACTION_P(ExitMessageLoop, message_loop) { |
- message_loop->PostTask(FROM_HERE, base::MessageLoop::QuitClosure()); |
+ACTION_P2(ExitMessageLoop, message_loop, quit_closure) { |
+ message_loop->PostTask(FROM_HERE, quit_closure); |
} |
class VideoCaptureHostTest : public testing::Test { |
public: |
- VideoCaptureHostTest() {} |
- |
- protected: |
- virtual void SetUp() OVERRIDE { |
- // Create a message loop so VideoCaptureHostTest can use it. |
- message_loop_.reset(new base::MessageLoop(base::MessageLoop::TYPE_IO)); |
- |
- // MediaStreamManager must be created on the IO thread. |
- io_thread_.reset(new BrowserThreadImpl(BrowserThread::IO, |
- message_loop_.get())); |
- |
+ VideoCaptureHostTest() |
+ : thread_bundle_(content::TestBrowserThreadBundle::IO_MAINLOOP), |
+ message_loop_(base::MessageLoopProxy::current()) { |
// Create our own MediaStreamManager. |
audio_manager_.reset(media::AudioManager::Create()); |
media_stream_manager_.reset(new MediaStreamManager(audio_manager_.get())); |
@@ -214,7 +208,7 @@ class VideoCaptureHostTest : public testing::Test { |
host_->OnChannelConnected(base::GetCurrentProcId()); |
} |
- virtual void TearDown() OVERRIDE { |
+ virtual ~VideoCaptureHostTest() { |
// Verifies and removes the expectations on host_ and |
// returns true iff successful. |
Mock::VerifyAndClearExpectations(host_.get()); |
@@ -227,17 +221,11 @@ class VideoCaptureHostTest : public testing::Test { |
host_->OnChannelClosing(); |
// Release the reference to the mock object. The object will be destructed |
- // on message_loop_. |
+ // on the current message loop. |
host_ = NULL; |
- |
- // We need to continue running message_loop_ to complete all destructions. |
- message_loop_->RunUntilIdle(); |
- |
- // Delete the IO message loop. This will cause the MediaStreamManager to be |
- // notified so it will stop its device thread and device managers. |
- message_loop_.reset(); |
} |
+ protected: |
void StartCapture() { |
InSequence s; |
// 1. First - get info about the new resolution |
@@ -252,8 +240,10 @@ class VideoCaptureHostTest : public testing::Test { |
.Times(AnyNumber()).WillRepeatedly(Return()); |
// 4. First filled buffer will arrive. |
+ base::RunLoop run_loop; |
EXPECT_CALL(*host_.get(), OnBufferFilled(kDeviceId, _, _)) |
- .Times(AnyNumber()).WillOnce(ExitMessageLoop(message_loop_.get())); |
+ .Times(AnyNumber()).WillOnce(ExitMessageLoop( |
+ message_loop_, run_loop.QuitClosure())); |
media::VideoCaptureParams params; |
params.width = 352; |
@@ -261,7 +251,7 @@ class VideoCaptureHostTest : public testing::Test { |
params.frame_per_second = 30; |
params.session_id = kTestFakeDeviceId; |
host_->OnStartCapture(kDeviceId, params); |
- message_loop_->Run(); |
+ run_loop.Run(); |
} |
#ifdef DUMP_VIDEO |
@@ -274,9 +264,10 @@ class VideoCaptureHostTest : public testing::Test { |
EXPECT_CALL(*host_, OnStateChanged(kDeviceId, VIDEO_CAPTURE_STATE_STARTED)); |
// 3. First filled buffer will arrive. |
+ base::RunLoop run_loop; |
EXPECT_CALL(*host_, OnBufferFilled(kDeviceId, _, _)) |
.Times(AnyNumber()) |
- .WillOnce(ExitMessageLoop(message_loop_.get())); |
+ .WillOnce(ExitMessageLoop(message_loop_, run_loop.QuitClosure())); |
media::VideoCaptureParams params; |
params.width = width; |
@@ -285,20 +276,21 @@ class VideoCaptureHostTest : public testing::Test { |
params.session_id = kTestFakeDeviceId; |
host_->SetDumpVideo(true); |
host_->OnStartCapture(kDeviceId, params); |
- message_loop_->Run(); |
+ run_loop.Run(); |
} |
#endif |
void StopCapture() { |
+ base::RunLoop run_loop; |
EXPECT_CALL(*host_.get(), |
OnStateChanged(kDeviceId, VIDEO_CAPTURE_STATE_STOPPED)) |
- .WillOnce(ExitMessageLoop(message_loop_.get())); |
+ .WillOnce(ExitMessageLoop(message_loop_, run_loop.QuitClosure())); |
host_->OnStopCapture(kDeviceId); |
host_->SetReturnReceviedDibs(true); |
host_->ReturnReceivedDibs(kDeviceId); |
- message_loop_->Run(); |
+ run_loop.Run(); |
host_->SetReturnReceviedDibs(false); |
// Expect the VideoCaptureDevice has been stopped |
@@ -306,10 +298,12 @@ class VideoCaptureHostTest : public testing::Test { |
} |
void NotifyPacketReady() { |
+ base::RunLoop run_loop; |
EXPECT_CALL(*host_.get(), OnBufferFilled(kDeviceId, _, _)) |
- .Times(AnyNumber()).WillOnce(ExitMessageLoop(message_loop_.get())) |
+ .Times(AnyNumber()).WillOnce(ExitMessageLoop( |
+ message_loop_, run_loop.QuitClosure())) |
.RetiresOnSaturation(); |
- message_loop_->Run(); |
+ run_loop.Run(); |
} |
void ReturnReceivedPackets() { |
@@ -323,16 +317,16 @@ class VideoCaptureHostTest : public testing::Test { |
VideoCaptureControllerID id(kDeviceId); |
host_->OnError(id); |
// Wait for the error callback. |
- message_loop_->RunUntilIdle(); |
+ base::RunLoop().RunUntilIdle(); |
} |
scoped_refptr<MockVideoCaptureHost> host_; |
private: |
- scoped_ptr<base::MessageLoop> message_loop_; |
- scoped_ptr<BrowserThreadImpl> io_thread_; |
scoped_ptr<media::AudioManager> audio_manager_; |
scoped_ptr<MediaStreamManager> media_stream_manager_; |
+ content::TestBrowserThreadBundle thread_bundle_; |
+ scoped_refptr<base::MessageLoopProxy> message_loop_; |
DISALLOW_COPY_AND_ASSIGN(VideoCaptureHostTest); |
}; |