OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <vector> | 5 #include <vector> |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/message_loop/message_loop.h" | 8 #include "base/message_loop/message_loop.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "base/test/simple_test_tick_clock.h" | 10 #include "base/test/simple_test_tick_clock.h" |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
305 // We expect the time to be updated only after the seek has completed. | 305 // We expect the time to be updated only after the seek has completed. |
306 EXPECT_NE(seek_time, pipeline_->GetMediaTime()); | 306 EXPECT_NE(seek_time, pipeline_->GetMediaTime()); |
307 message_loop_.RunUntilIdle(); | 307 message_loop_.RunUntilIdle(); |
308 EXPECT_EQ(seek_time, pipeline_->GetMediaTime()); | 308 EXPECT_EQ(seek_time, pipeline_->GetMediaTime()); |
309 } | 309 } |
310 | 310 |
311 void ExpectStop() { | 311 void ExpectStop() { |
312 if (demuxer_) | 312 if (demuxer_) |
313 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 313 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
314 | 314 |
315 if (audio_stream_) | |
316 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
317 | |
318 if (video_stream_) | 315 if (video_stream_) |
319 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | 316 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
320 } | 317 } |
321 | 318 |
322 MOCK_METHOD2(OnAddTextTrack, void(const TextTrackConfig&, | 319 MOCK_METHOD2(OnAddTextTrack, void(const TextTrackConfig&, |
323 const AddTextTrackDoneCB&)); | 320 const AddTextTrackDoneCB&)); |
324 | 321 |
325 void DoOnAddTextTrack(const TextTrackConfig& config, | 322 void DoOnAddTextTrack(const TextTrackConfig& config, |
326 const AddTextTrackDoneCB& done_cb) { | 323 const AddTextTrackDoneCB& done_cb) { |
327 scoped_ptr<TextTrack> text_track(new MockTextTrack); | 324 scoped_ptr<TextTrack> text_track(new MockTextTrack); |
(...skipping 352 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
680 message_loop_.RunUntilIdle(); | 677 message_loop_.RunUntilIdle(); |
681 | 678 |
682 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); | 679 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); |
683 | 680 |
684 // Preroll() isn't called as the demuxer errors out first. | 681 // Preroll() isn't called as the demuxer errors out first. |
685 EXPECT_CALL(time_source_, StopTicking()); | 682 EXPECT_CALL(time_source_, StopTicking()); |
686 EXPECT_CALL(*audio_renderer_, Flush(_)) | 683 EXPECT_CALL(*audio_renderer_, Flush(_)) |
687 .WillOnce(DoAll(SetBufferingState(&audio_buffering_state_cb_, | 684 .WillOnce(DoAll(SetBufferingState(&audio_buffering_state_cb_, |
688 BUFFERING_HAVE_NOTHING), | 685 BUFFERING_HAVE_NOTHING), |
689 RunClosure<0>())); | 686 RunClosure<0>())); |
690 EXPECT_CALL(*audio_renderer_, Stop(_)) | |
691 .WillOnce(RunClosure<0>()); | |
692 | 687 |
693 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 688 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
694 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); | 689 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); |
695 EXPECT_CALL(*demuxer_, Stop(_)) | 690 EXPECT_CALL(*demuxer_, Stop(_)) |
696 .WillOnce(RunClosure<0>()); | 691 .WillOnce(RunClosure<0>()); |
697 | 692 |
698 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, | 693 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, |
699 base::Unretained(&callbacks_))); | 694 base::Unretained(&callbacks_))); |
700 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); | 695 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); |
701 message_loop_.RunUntilIdle(); | 696 message_loop_.RunUntilIdle(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
736 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run)); | 731 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run)); |
737 | 732 |
738 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); | 733 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); |
739 | 734 |
740 // Seek() isn't called as the demuxer errors out first. | 735 // Seek() isn't called as the demuxer errors out first. |
741 EXPECT_CALL(time_source_, StopTicking()); | 736 EXPECT_CALL(time_source_, StopTicking()); |
742 EXPECT_CALL(*audio_renderer_, Flush(_)) | 737 EXPECT_CALL(*audio_renderer_, Flush(_)) |
743 .WillOnce(DoAll(SetBufferingState(&audio_buffering_state_cb_, | 738 .WillOnce(DoAll(SetBufferingState(&audio_buffering_state_cb_, |
744 BUFFERING_HAVE_NOTHING), | 739 BUFFERING_HAVE_NOTHING), |
745 RunClosure<0>())); | 740 RunClosure<0>())); |
746 EXPECT_CALL(*audio_renderer_, Stop(_)) | |
747 .WillOnce(RunClosure<0>()); | |
748 | 741 |
749 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 742 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
750 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); | 743 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); |
751 EXPECT_CALL(*demuxer_, Stop(_)) | 744 EXPECT_CALL(*demuxer_, Stop(_)) |
752 .WillOnce(RunClosure<0>()); | 745 .WillOnce(RunClosure<0>()); |
753 | 746 |
754 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, | 747 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, |
755 base::Unretained(&callbacks_))); | 748 base::Unretained(&callbacks_))); |
756 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); | 749 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); |
757 message_loop_.RunUntilIdle(); | 750 message_loop_.RunUntilIdle(); |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
959 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), | 952 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), |
960 RunCallback<1>(PIPELINE_OK))); | 953 RunCallback<1>(PIPELINE_OK))); |
961 EXPECT_CALL(callbacks_, OnStop()); | 954 EXPECT_CALL(callbacks_, OnStop()); |
962 } else { | 955 } else { |
963 status = PIPELINE_ERROR_INITIALIZATION_FAILED; | 956 status = PIPELINE_ERROR_INITIALIZATION_FAILED; |
964 EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _)) | 957 EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _)) |
965 .WillOnce(RunCallback<1>(status)); | 958 .WillOnce(RunCallback<1>(status)); |
966 } | 959 } |
967 | 960 |
968 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 961 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
969 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
970 return status; | 962 return status; |
971 } | 963 } |
972 | 964 |
973 EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _)) | 965 EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _)) |
974 .WillOnce(DoAll(SaveArg<4>(&audio_buffering_state_cb_), | 966 .WillOnce(DoAll(SaveArg<4>(&audio_buffering_state_cb_), |
975 RunCallback<1>(PIPELINE_OK))); | 967 RunCallback<1>(PIPELINE_OK))); |
976 | 968 |
977 if (state == kInitVideoRenderer) { | 969 if (state == kInitVideoRenderer) { |
978 if (stop_or_error == kStop) { | 970 if (stop_or_error == kStop) { |
979 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) | 971 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) |
980 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), | 972 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), |
981 RunCallback<2>(PIPELINE_OK))); | 973 RunCallback<2>(PIPELINE_OK))); |
982 EXPECT_CALL(callbacks_, OnStop()); | 974 EXPECT_CALL(callbacks_, OnStop()); |
983 } else { | 975 } else { |
984 status = PIPELINE_ERROR_INITIALIZATION_FAILED; | 976 status = PIPELINE_ERROR_INITIALIZATION_FAILED; |
985 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) | 977 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) |
986 .WillOnce(RunCallback<2>(status)); | 978 .WillOnce(RunCallback<2>(status)); |
987 } | 979 } |
988 | 980 |
989 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 981 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
990 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
991 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | 982 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
992 return status; | 983 return status; |
993 } | 984 } |
994 | 985 |
995 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) | 986 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) |
996 .WillOnce(DoAll(SaveArg<5>(&video_buffering_state_cb_), | 987 .WillOnce(DoAll(SaveArg<5>(&video_buffering_state_cb_), |
997 RunCallback<2>(PIPELINE_OK))); | 988 RunCallback<2>(PIPELINE_OK))); |
998 | 989 |
999 EXPECT_CALL(callbacks_, OnMetadata(_)); | 990 EXPECT_CALL(callbacks_, OnMetadata(_)); |
1000 | 991 |
(...skipping 15 matching lines...) Expand all Loading... |
1016 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); | 1007 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); |
1017 | 1008 |
1018 return status; | 1009 return status; |
1019 } | 1010 } |
1020 | 1011 |
1021 void DoSeek(TeardownState state, StopOrError stop_or_error) { | 1012 void DoSeek(TeardownState state, StopOrError stop_or_error) { |
1022 InSequence s; | 1013 InSequence s; |
1023 PipelineStatus status = SetSeekExpectations(state, stop_or_error); | 1014 PipelineStatus status = SetSeekExpectations(state, stop_or_error); |
1024 | 1015 |
1025 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 1016 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
1026 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
1027 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | 1017 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
1028 EXPECT_CALL(callbacks_, OnSeek(status)); | 1018 EXPECT_CALL(callbacks_, OnSeek(status)); |
1029 | 1019 |
1030 if (status == PIPELINE_OK) { | 1020 if (status == PIPELINE_OK) { |
1031 EXPECT_CALL(callbacks_, OnStop()); | 1021 EXPECT_CALL(callbacks_, OnStop()); |
1032 } | 1022 } |
1033 | 1023 |
1034 pipeline_->Seek(base::TimeDelta::FromSeconds(10), base::Bind( | 1024 pipeline_->Seek(base::TimeDelta::FromSeconds(10), base::Bind( |
1035 &CallbackHelper::OnSeek, base::Unretained(&callbacks_))); | 1025 &CallbackHelper::OnSeek, base::Unretained(&callbacks_))); |
1036 message_loop_.RunUntilIdle(); | 1026 message_loop_.RunUntilIdle(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1087 } | 1077 } |
1088 | 1078 |
1089 NOTREACHED() << "State not supported: " << state; | 1079 NOTREACHED() << "State not supported: " << state; |
1090 return status; | 1080 return status; |
1091 } | 1081 } |
1092 | 1082 |
1093 void DoStopOrError(StopOrError stop_or_error) { | 1083 void DoStopOrError(StopOrError stop_or_error) { |
1094 InSequence s; | 1084 InSequence s; |
1095 | 1085 |
1096 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 1086 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
1097 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
1098 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | 1087 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
1099 | 1088 |
1100 switch (stop_or_error) { | 1089 switch (stop_or_error) { |
1101 case kStop: | 1090 case kStop: |
1102 EXPECT_CALL(callbacks_, OnStop()); | 1091 EXPECT_CALL(callbacks_, OnStop()); |
1103 pipeline_->Stop(base::Bind( | 1092 pipeline_->Stop(base::Bind( |
1104 &CallbackHelper::OnStop, base::Unretained(&callbacks_))); | 1093 &CallbackHelper::OnStop, base::Unretained(&callbacks_))); |
1105 break; | 1094 break; |
1106 | 1095 |
1107 case kError: | 1096 case kError: |
(...skipping 30 matching lines...) Expand all Loading... |
1138 INSTANTIATE_TEARDOWN_TEST(Error, InitDemuxer); | 1127 INSTANTIATE_TEARDOWN_TEST(Error, InitDemuxer); |
1139 INSTANTIATE_TEARDOWN_TEST(Error, InitAudioRenderer); | 1128 INSTANTIATE_TEARDOWN_TEST(Error, InitAudioRenderer); |
1140 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer); | 1129 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer); |
1141 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); | 1130 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); |
1142 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); | 1131 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); |
1143 INSTANTIATE_TEARDOWN_TEST(Error, Playing); | 1132 INSTANTIATE_TEARDOWN_TEST(Error, Playing); |
1144 | 1133 |
1145 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); | 1134 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); |
1146 | 1135 |
1147 } // namespace media | 1136 } // namespace media |
OLD | NEW |