| 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 88a1b1a8551b3dcc0d50504fc51337a5b551e07f..7d4161db3a2d8509bcfd8d5f913f15595cab23b1 100644
|
| --- a/media/filters/video_renderer_base_unittest.cc
|
| +++ b/media/filters/video_renderer_base_unittest.cc
|
| @@ -178,6 +178,18 @@ class VideoRendererBaseTest : public ::testing::Test {
|
| }
|
| }
|
|
|
| + void AbortRead() {
|
| + // Lock+swap to avoid re-entrancy issues.
|
| + VideoDecoder::ReadCB read_cb;
|
| + {
|
| + base::AutoLock l(lock_);
|
| + CHECK(!read_cb_.is_null()) << "Can't deliver a frame without a callback";
|
| + std::swap(read_cb, read_cb_);
|
| + }
|
| +
|
| + read_cb.Run(NULL);
|
| + }
|
| +
|
| void ExpectCurrentFrame(bool present) {
|
| scoped_refptr<VideoFrame> frame;
|
| renderer_->GetCurrentFrame(&frame);
|
| @@ -241,6 +253,11 @@ class VideoRendererBaseTest : public ::testing::Test {
|
| base::WaitableEvent* event() { return &event_; }
|
| const base::TimeDelta& timeout() { return timeout_; }
|
|
|
| + void VerifyNotSeeking() {
|
| + base::AutoLock l(lock_);
|
| + ASSERT_FALSE(seeking_);
|
| + }
|
| +
|
| protected:
|
| StatisticsCallback NewStatisticsCallback() {
|
| return base::Bind(&MockStatisticsCallback::OnStatistics,
|
| @@ -475,4 +492,46 @@ TEST_F(VideoRendererBaseTest, Shutdown_DuringPaint) {
|
| Stop();
|
| }
|
|
|
| +TEST_F(VideoRendererBaseTest, AbortPendingRead_Playing) {
|
| + Initialize();
|
| + Play();
|
| +
|
| + // Render a frame to trigger a Read().
|
| + EXPECT_CALL(*this, PaintCBWasCalled());
|
| + RenderFrame(kFrameDuration);
|
| +
|
| + AbortRead();
|
| +
|
| + Pause();
|
| + Flush();
|
| + Seek(kFrameDuration * 6);
|
| + ExpectCurrentTimestamp(kFrameDuration * 6);
|
| + Shutdown();
|
| +}
|
| +
|
| +TEST_F(VideoRendererBaseTest, AbortPendingRead_Flush) {
|
| + Initialize();
|
| + Play();
|
| +
|
| + // Render a frame to trigger a Read().
|
| + EXPECT_CALL(*this, PaintCBWasCalled());
|
| + RenderFrame(kFrameDuration);
|
| +
|
| + Pause();
|
| + renderer_->Flush(NewWaitableClosure());
|
| + AbortRead();
|
| + WaitForClosure();
|
| + Shutdown();
|
| +}
|
| +
|
| +TEST_F(VideoRendererBaseTest, AbortPendingRead_Seek) {
|
| + Initialize();
|
| + Pause();
|
| + Flush();
|
| + StartSeeking(kFrameDuration * 6);
|
| + AbortRead();
|
| + VerifyNotSeeking();
|
| + Shutdown();
|
| +}
|
| +
|
| } // namespace media
|
|
|