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

Unified Diff: media/filters/video_renderer_base_unittest.cc

Issue 12324005: Fix crash in VideoRendererBase::ThreadMain(). (Closed) Base URL: http://git.chromium.org/chromium/src.git@git-svn
Patch Set: Created 7 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: media/filters/video_renderer_base_unittest.cc
diff --git a/media/filters/video_renderer_base_unittest.cc b/media/filters/video_renderer_base_unittest.cc
index 79b3bf94d3992cdaf0bc6d6ba2ae0c99baaa53be..fdb2202d2d141118d6c54b54d2f3e3cb96d79df0 100644
--- a/media/filters/video_renderer_base_unittest.cc
+++ b/media/filters/video_renderer_base_unittest.cc
@@ -5,6 +5,7 @@
#include "base/bind.h"
#include "base/callback.h"
#include "base/callback_helpers.h"
+#include "base/debug/stack_trace.h"
#include "base/message_loop.h"
#include "base/stl_util.h"
#include "base/stringprintf.h"
@@ -111,14 +112,18 @@ class VideoRendererBaseTest : public ::testing::Test {
void InitializeRenderer(PipelineStatus expected) {
SCOPED_TRACE(base::StringPrintf("InitializeRenderer(%d)", expected));
+ WaitableMessageLoopEvent event;
+ CallInitialize(event.GetPipelineStatusCB());
+ event.RunAndWaitForStatus(expected);
+ }
+
+ void CallInitialize(const PipelineStatusCB& status_cb) {
VideoRendererBase::VideoDecoderList decoders;
decoders.push_back(decoder_);
-
- WaitableMessageLoopEvent event;
renderer_->Initialize(
demuxer_stream_,
decoders,
- event.GetPipelineStatusCB(),
+ status_cb,
base::Bind(&MockStatisticsCB::OnStatistics,
base::Unretained(&statistics_cb_object_)),
base::Bind(&VideoRendererBaseTest::OnTimeUpdate,
@@ -130,7 +135,6 @@ class VideoRendererBaseTest : public ::testing::Test {
base::Bind(&VideoRendererBaseTest::GetTime, base::Unretained(this)),
base::Bind(&VideoRendererBaseTest::GetDuration,
base::Unretained(this)));
- event.RunAndWaitForStatus(expected);
}
void Play() {
@@ -368,6 +372,29 @@ TEST_F(VideoRendererBaseTest, Initialize) {
Shutdown();
}
+static void ExpectNotCalled(PipelineStatus) {
+ base::debug::StackTrace stack;
+ ADD_FAILURE() << "Expected callback not to be called\n" << stack.ToString();
scherkus (not reviewing) 2013/02/20 08:26:11 I did this to get the stack trace of the callback
+}
+
acolwell GONE FROM CHROMIUM 2013/02/20 17:01:14 You should add a test that allows the renderer to
scherkus (not reviewing) 2013/02/21 20:43:54 Done.
+TEST_F(VideoRendererBaseTest, InitializeAndStop) {
+ EXPECT_CALL(*decoder_, Initialize(_, _, _))
+ .WillOnce(RunCallback<1>(PIPELINE_OK));
+ CallInitialize(base::Bind(&ExpectNotCalled));
+ Stop();
+
+ // ~VideoRendererBase() will CHECK() if we left anything initialized.
+}
+
+TEST_F(VideoRendererBaseTest, FlushAndStop) {
+ Initialize();
+ Pause();
+ renderer_->Flush(base::Bind(&ExpectNotCalled, PIPELINE_OK));
+ Stop();
+
+ // ~VideoRendererBase() will CHECK() if we left anything initialized.
+}
+
TEST_F(VideoRendererBaseTest, Play) {
Initialize();
Play();
« media/filters/video_renderer_base.cc ('K') | « media/filters/video_renderer_base.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698