Chromium Code Reviews| Index: content/renderer/media/webmediaplayer_ms_unittest.cc |
| diff --git a/content/renderer/media/webmediaplayer_ms_unittest.cc b/content/renderer/media/webmediaplayer_ms_unittest.cc |
| index 3920fb0b1b719797f04d15a750aab862549342f9..4551e8d8fa795045e4603d4fcde9831c66b05ffb 100644 |
| --- a/content/renderer/media/webmediaplayer_ms_unittest.cc |
| +++ b/content/renderer/media/webmediaplayer_ms_unittest.cc |
| @@ -12,6 +12,7 @@ |
| #include "content/renderer/render_frame_impl.h" |
| #include "media/base/test_helpers.h" |
| #include "media/base/video_frame.h" |
| +#include "third_party/WebKit/public/platform/WebLayer.h" |
| #include "third_party/WebKit/public/platform/WebMediaPlayer.h" |
| #include "third_party/WebKit/public/platform/WebMediaPlayerClient.h" |
| #include "third_party/WebKit/public/platform/WebMediaPlayerSource.h" |
| @@ -454,6 +455,7 @@ class WebMediaPlayerMSTest |
| std::unique_ptr<WebMediaPlayerMS> player_; |
| WebMediaPlayerMSCompositor* compositor_; |
| ReusableMessageLoopEvent message_loop_controller_; |
| + blink::WebLayer* web_layer_; |
| private: |
| // Main function trying to ask WebMediaPlayerMS to submit a frame for |
| @@ -507,6 +509,7 @@ void WebMediaPlayerMSTest::readyStateChanged() { |
| } |
| void WebMediaPlayerMSTest::setWebLayer(blink::WebLayer* layer) { |
| + web_layer_ = layer; |
| if (layer) |
| compositor_->SetVideoFrameProviderClient(this); |
| DoSetWebLayer(!!layer); |
| @@ -749,6 +752,51 @@ TEST_F(WebMediaPlayerMSTest, RotatedVideoFrame) { |
| EXPECT_CALL(*this, DoStopRendering()); |
| } |
| +// During this test, we check that web layer changes opacity according to the |
| +// given frames. |
| +TEST_F(WebMediaPlayerMSTest, OpacityChange) { |
| + MockMediaStreamVideoRenderer* provider = LoadAndGetFrameProvider(true); |
| + |
| + // Push one opaque frame. |
| + const int kTestBrake = static_cast<int>(FrameType::TEST_BRAKE); |
| + static int opaque_tokens[] = {0, kTestBrake}; |
| + std::vector<int> opaque_timestamps( |
| + opaque_tokens, opaque_tokens + sizeof(opaque_tokens) / sizeof(int)); |
| + provider->QueueFrames(opaque_timestamps, true); |
| + EXPECT_CALL(*this, DoSetWebLayer(true)); |
| + EXPECT_CALL(*this, DoStartRendering()); |
| + EXPECT_CALL(*this, DoReadyStateChanged( |
| + blink::WebMediaPlayer::ReadyStateHaveMetadata)); |
| + EXPECT_CALL(*this, DoReadyStateChanged( |
| + blink::WebMediaPlayer::ReadyStateHaveEnoughData)); |
| + EXPECT_CALL(*this, |
| + CheckSizeChanged(gfx::Size(kStandardWidth, kStandardHeight))); |
| + message_loop_controller_.RunAndWaitForStatus( |
| + media::PipelineStatus::PIPELINE_OK); |
| + CHECK(web_layer_); |
|
mcasas
2016/09/20 00:35:14
Don't use CHECK()s in unittests, since they
crash
emircan
2016/09/20 03:00:06
Done.
|
| + EXPECT_TRUE(web_layer_->opaque()); |
| + |
| + // Push one transparent frame. |
| + static int transparent_tokens[] = {33, kTestBrake}; |
| + std::vector<int> transparent_timestamps( |
| + transparent_tokens, |
| + transparent_tokens + sizeof(transparent_tokens) / sizeof(int)); |
|
mcasas
2016/09/20 00:35:14
|transparent_tokens| is static, so we can use here
emircan
2016/09/20 03:00:06
Done.
|
| + provider->QueueFrames(transparent_timestamps, false); |
| + message_loop_controller_.RunAndWaitForStatus( |
| + media::PipelineStatus::PIPELINE_OK); |
| + EXPECT_FALSE(web_layer_->opaque()); |
| + |
| + // Push another opaque frame. |
| + provider->QueueFrames(opaque_timestamps, true); |
|
mcasas
2016/09/20 00:35:14
|opaque_timestamps| has a single frame with a
tim
emircan
2016/09/20 03:00:06
We don't care about timestamps, except the TestBra
|
| + message_loop_controller_.RunAndWaitForStatus( |
| + media::PipelineStatus::PIPELINE_OK); |
| + EXPECT_TRUE(web_layer_->opaque()); |
| + |
| + testing::Mock::VerifyAndClearExpectations(this); |
| + EXPECT_CALL(*this, DoSetWebLayer(false)); |
| + EXPECT_CALL(*this, DoStopRendering()); |
| +} |
| + |
| TEST_F(WebMediaPlayerMSTest, BackgroundRendering) { |
| // During this test, we will switch to background rendering mode, in which |
| // WebMediaPlayerMS::pause does not get called, but |