Chromium Code Reviews| Index: content/renderer/media/media_stream_video_track_unittest.cc |
| diff --git a/content/renderer/media/media_stream_video_track_unittest.cc b/content/renderer/media/media_stream_video_track_unittest.cc |
| index 758c568f3075d11c4de7a7b3b8944d0ff3a6be9d..5a55e5a2a4a7e3ff7790933f98103d71599b4f1c 100644 |
| --- a/content/renderer/media/media_stream_video_track_unittest.cc |
| +++ b/content/renderer/media/media_stream_video_track_unittest.cc |
| @@ -2,9 +2,13 @@ |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| +#include "base/bind.h" |
| +#include "base/bind_helpers.h" |
| +#include "base/callback.h" |
| #include "base/message_loop/message_loop.h" |
| #include "base/run_loop.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "base/threading/thread_checker.h" |
| #include "content/child/child_process.h" |
| #include "content/renderer/media/media_stream_video_track.h" |
| #include "content/renderer/media/mock_media_stream_video_sink.h" |
| @@ -73,8 +77,8 @@ class MediaStreamVideoTrackTest : public ::testing::Test { |
| } |
| private: |
| - scoped_ptr<ChildProcess> child_process_; |
| base::MessageLoopForUI message_loop_; |
| + scoped_ptr<ChildProcess> child_process_; |
| blink::WebMediaStreamSource blink_source_; |
| // |mock_source_| is owned by |webkit_source_|. |
| MockMediaStreamVideoSource* mock_source_; |
| @@ -84,7 +88,8 @@ class MediaStreamVideoTrackTest : public ::testing::Test { |
| TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) { |
| MockMediaStreamVideoSink sink; |
| blink::WebMediaStreamTrack track = CreateTrack(); |
| - MediaStreamVideoSink::AddToVideoTrack(&sink, track); |
| + MediaStreamVideoSink::AddToVideoTrack( |
| + &sink, sink.GetDeliverFrameCB(), track); |
| DeliverVideoFrameAndWaitForRenderer(&sink); |
| EXPECT_EQ(1, sink.number_of_frames()); |
| @@ -103,10 +108,54 @@ TEST_F(MediaStreamVideoTrackTest, AddAndRemoveSink) { |
| EXPECT_EQ(2, sink.number_of_frames()); |
| } |
| +class CheckThreadHelper { |
| + public: |
| + CheckThreadHelper(base::Closure callback, bool* correct) |
| + : callback_(callback), |
| + correct_(correct) { |
| + } |
| + |
| + ~CheckThreadHelper() { |
| + *correct_ = thread_checker_.CalledOnValidThread(); |
|
tommi (sloooow) - chröme
2014/05/09 16:20:50
doesn't CalledOnValidThread always return true in
Alpha Left Google
2014/05/09 17:33:23
Sneaky! Changed it to use ThreadCheckerImpl direct
|
| + callback_.Run(); |
| + } |
| + |
| + private: |
| + base::Closure callback_; |
| + bool* correct_; |
| + base::ThreadChecker thread_checker_; |
| +}; |
| + |
| +void CheckThreadVideoFrameReceiver( |
| + CheckThreadHelper* helper, |
| + const scoped_refptr<media::VideoFrame>& frame, |
| + const media::VideoCaptureFormat& format) { |
| + // Do nothing. |
| +} |
| + |
| +// Checks that the callback given to the track is reset on the right thread. |
| +TEST_F(MediaStreamVideoTrackTest, ResetCallbackOnThread) { |
| + MockMediaStreamVideoSink sink; |
| + blink::WebMediaStreamTrack track = CreateTrack(); |
| + |
| + base::RunLoop run_loop; |
| + bool correct = false; |
| + MediaStreamVideoSink::AddToVideoTrack( |
| + &sink, |
| + base::Bind( |
| + &CheckThreadVideoFrameReceiver, |
| + base::Owned(new CheckThreadHelper(run_loop.QuitClosure(), &correct))), |
| + track); |
| + MediaStreamVideoSink::RemoveFromVideoTrack(&sink, track); |
| + run_loop.Run(); |
| + EXPECT_TRUE(correct) << "Not called on correct thread."; |
| +} |
| + |
| TEST_F(MediaStreamVideoTrackTest, SetEnabled) { |
| MockMediaStreamVideoSink sink; |
| blink::WebMediaStreamTrack track = CreateTrack(); |
| - MediaStreamVideoSink::AddToVideoTrack(&sink, track); |
| + MediaStreamVideoSink::AddToVideoTrack( |
| + &sink, sink.GetDeliverFrameCB(), track); |
| MediaStreamVideoTrack* video_track = |
| MediaStreamVideoTrack::GetVideoTrack(track); |
| @@ -137,7 +186,8 @@ TEST_F(MediaStreamVideoTrackTest, SetEnabled) { |
| TEST_F(MediaStreamVideoTrackTest, SourceStopped) { |
| MockMediaStreamVideoSink sink; |
| blink::WebMediaStreamTrack track = CreateTrack(); |
| - MediaStreamVideoSink::AddToVideoTrack(&sink, track); |
| + MediaStreamVideoSink::AddToVideoTrack( |
| + &sink, sink.GetDeliverFrameCB(), track); |
| EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink.state()); |
| mock_source()->StopSource(); |
| @@ -148,7 +198,8 @@ TEST_F(MediaStreamVideoTrackTest, SourceStopped) { |
| TEST_F(MediaStreamVideoTrackTest, StopLastTrack) { |
| MockMediaStreamVideoSink sink1; |
| blink::WebMediaStreamTrack track1 = CreateTrack(); |
| - MediaStreamVideoSink::AddToVideoTrack(&sink1, track1); |
| + MediaStreamVideoSink::AddToVideoTrack( |
| + &sink1, sink1.GetDeliverFrameCB(), track1); |
| EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink1.state()); |
| EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, |
| @@ -156,7 +207,8 @@ TEST_F(MediaStreamVideoTrackTest, StopLastTrack) { |
| MockMediaStreamVideoSink sink2; |
| blink::WebMediaStreamTrack track2 = CreateTrack(); |
| - MediaStreamVideoSink::AddToVideoTrack(&sink2, track2); |
| + MediaStreamVideoSink::AddToVideoTrack( |
| + &sink2, sink2.GetDeliverFrameCB(), track2); |
| EXPECT_EQ(blink::WebMediaStreamSource::ReadyStateLive, sink2.state()); |
| MediaStreamVideoTrack* native_track1 = |