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 292 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 // We expect the time to be updated only after the seek has completed. | 303 // We expect the time to be updated only after the seek has completed. |
304 EXPECT_NE(seek_time, pipeline_->GetMediaTime()); | 304 EXPECT_NE(seek_time, pipeline_->GetMediaTime()); |
305 message_loop_.RunUntilIdle(); | 305 message_loop_.RunUntilIdle(); |
306 EXPECT_EQ(seek_time, pipeline_->GetMediaTime()); | 306 EXPECT_EQ(seek_time, pipeline_->GetMediaTime()); |
307 } | 307 } |
308 | 308 |
309 void ExpectStop() { | 309 void ExpectStop() { |
310 if (demuxer_) | 310 if (demuxer_) |
311 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 311 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
312 | 312 |
313 if (audio_stream_) | |
314 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
315 | |
316 if (video_stream_) | 313 if (video_stream_) |
317 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | 314 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
318 } | 315 } |
319 | 316 |
320 MOCK_METHOD2(OnAddTextTrack, void(const TextTrackConfig&, | 317 MOCK_METHOD2(OnAddTextTrack, void(const TextTrackConfig&, |
321 const AddTextTrackDoneCB&)); | 318 const AddTextTrackDoneCB&)); |
322 | 319 |
323 void DoOnAddTextTrack(const TextTrackConfig& config, | 320 void DoOnAddTextTrack(const TextTrackConfig& config, |
324 const AddTextTrackDoneCB& done_cb) { | 321 const AddTextTrackDoneCB& done_cb) { |
325 scoped_ptr<TextTrack> text_track(new MockTextTrack); | 322 scoped_ptr<TextTrack> text_track(new MockTextTrack); |
(...skipping 351 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
677 message_loop_.RunUntilIdle(); | 674 message_loop_.RunUntilIdle(); |
678 | 675 |
679 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); | 676 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); |
680 | 677 |
681 // Preroll() isn't called as the demuxer errors out first. | 678 // Preroll() isn't called as the demuxer errors out first. |
682 EXPECT_CALL(*audio_renderer_, StopRendering()); | 679 EXPECT_CALL(*audio_renderer_, StopRendering()); |
683 EXPECT_CALL(*audio_renderer_, Flush(_)) | 680 EXPECT_CALL(*audio_renderer_, Flush(_)) |
684 .WillOnce(DoAll(SetBufferingState(&audio_buffering_state_cb_, | 681 .WillOnce(DoAll(SetBufferingState(&audio_buffering_state_cb_, |
685 BUFFERING_HAVE_NOTHING), | 682 BUFFERING_HAVE_NOTHING), |
686 RunClosure<0>())); | 683 RunClosure<0>())); |
687 EXPECT_CALL(*audio_renderer_, Stop(_)) | |
688 .WillOnce(RunClosure<0>()); | |
689 | 684 |
690 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 685 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
691 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); | 686 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); |
692 EXPECT_CALL(*demuxer_, Stop(_)) | 687 EXPECT_CALL(*demuxer_, Stop(_)) |
693 .WillOnce(RunClosure<0>()); | 688 .WillOnce(RunClosure<0>()); |
694 | 689 |
695 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, | 690 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, |
696 base::Unretained(&callbacks_))); | 691 base::Unretained(&callbacks_))); |
697 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); | 692 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); |
698 message_loop_.RunUntilIdle(); | 693 message_loop_.RunUntilIdle(); |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
733 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run)); | 728 .WillByDefault(Invoke(&cb, &base::Callback<void(PipelineStatus)>::Run)); |
734 | 729 |
735 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); | 730 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); |
736 | 731 |
737 // Seek() isn't called as the demuxer errors out first. | 732 // Seek() isn't called as the demuxer errors out first. |
738 EXPECT_CALL(*audio_renderer_, StopRendering()); | 733 EXPECT_CALL(*audio_renderer_, StopRendering()); |
739 EXPECT_CALL(*audio_renderer_, Flush(_)) | 734 EXPECT_CALL(*audio_renderer_, Flush(_)) |
740 .WillOnce(DoAll(SetBufferingState(&audio_buffering_state_cb_, | 735 .WillOnce(DoAll(SetBufferingState(&audio_buffering_state_cb_, |
741 BUFFERING_HAVE_NOTHING), | 736 BUFFERING_HAVE_NOTHING), |
742 RunClosure<0>())); | 737 RunClosure<0>())); |
743 EXPECT_CALL(*audio_renderer_, Stop(_)) | |
744 .WillOnce(RunClosure<0>()); | |
745 | 738 |
746 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 739 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
747 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); | 740 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); |
748 EXPECT_CALL(*demuxer_, Stop(_)) | 741 EXPECT_CALL(*demuxer_, Stop(_)) |
749 .WillOnce(RunClosure<0>()); | 742 .WillOnce(RunClosure<0>()); |
750 | 743 |
751 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, | 744 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, |
752 base::Unretained(&callbacks_))); | 745 base::Unretained(&callbacks_))); |
753 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); | 746 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); |
754 message_loop_.RunUntilIdle(); | 747 message_loop_.RunUntilIdle(); |
(...skipping 201 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
956 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), | 949 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), |
957 RunCallback<1>(PIPELINE_OK))); | 950 RunCallback<1>(PIPELINE_OK))); |
958 EXPECT_CALL(callbacks_, OnStop()); | 951 EXPECT_CALL(callbacks_, OnStop()); |
959 } else { | 952 } else { |
960 status = PIPELINE_ERROR_INITIALIZATION_FAILED; | 953 status = PIPELINE_ERROR_INITIALIZATION_FAILED; |
961 EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _)) | 954 EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _)) |
962 .WillOnce(RunCallback<1>(status)); | 955 .WillOnce(RunCallback<1>(status)); |
963 } | 956 } |
964 | 957 |
965 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 958 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
966 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
967 return status; | 959 return status; |
968 } | 960 } |
969 | 961 |
970 EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _)) | 962 EXPECT_CALL(*audio_renderer_, Initialize(_, _, _, _, _, _, _)) |
971 .WillOnce(DoAll(SaveArg<4>(&audio_buffering_state_cb_), | 963 .WillOnce(DoAll(SaveArg<4>(&audio_buffering_state_cb_), |
972 RunCallback<1>(PIPELINE_OK))); | 964 RunCallback<1>(PIPELINE_OK))); |
973 | 965 |
974 if (state == kInitVideoRenderer) { | 966 if (state == kInitVideoRenderer) { |
975 if (stop_or_error == kStop) { | 967 if (stop_or_error == kStop) { |
976 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) | 968 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) |
977 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), | 969 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), |
978 RunCallback<2>(PIPELINE_OK))); | 970 RunCallback<2>(PIPELINE_OK))); |
979 EXPECT_CALL(callbacks_, OnStop()); | 971 EXPECT_CALL(callbacks_, OnStop()); |
980 } else { | 972 } else { |
981 status = PIPELINE_ERROR_INITIALIZATION_FAILED; | 973 status = PIPELINE_ERROR_INITIALIZATION_FAILED; |
982 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) | 974 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) |
983 .WillOnce(RunCallback<2>(status)); | 975 .WillOnce(RunCallback<2>(status)); |
984 } | 976 } |
985 | 977 |
986 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 978 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
987 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
988 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | 979 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
989 return status; | 980 return status; |
990 } | 981 } |
991 | 982 |
992 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) | 983 EXPECT_CALL(*video_renderer_, Initialize(_, _, _, _, _, _, _, _, _, _)) |
993 .WillOnce(DoAll(SaveArg<5>(&video_buffering_state_cb_), | 984 .WillOnce(DoAll(SaveArg<5>(&video_buffering_state_cb_), |
994 RunCallback<2>(PIPELINE_OK))); | 985 RunCallback<2>(PIPELINE_OK))); |
995 | 986 |
996 EXPECT_CALL(callbacks_, OnMetadata(_)); | 987 EXPECT_CALL(callbacks_, OnMetadata(_)); |
997 | 988 |
(...skipping 14 matching lines...) Expand all Loading... |
1012 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); | 1003 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); |
1013 | 1004 |
1014 return status; | 1005 return status; |
1015 } | 1006 } |
1016 | 1007 |
1017 void DoSeek(TeardownState state, StopOrError stop_or_error) { | 1008 void DoSeek(TeardownState state, StopOrError stop_or_error) { |
1018 InSequence s; | 1009 InSequence s; |
1019 PipelineStatus status = SetSeekExpectations(state, stop_or_error); | 1010 PipelineStatus status = SetSeekExpectations(state, stop_or_error); |
1020 | 1011 |
1021 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 1012 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
1022 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
1023 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | 1013 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
1024 EXPECT_CALL(callbacks_, OnSeek(status)); | 1014 EXPECT_CALL(callbacks_, OnSeek(status)); |
1025 | 1015 |
1026 if (status == PIPELINE_OK) { | 1016 if (status == PIPELINE_OK) { |
1027 EXPECT_CALL(callbacks_, OnStop()); | 1017 EXPECT_CALL(callbacks_, OnStop()); |
1028 } | 1018 } |
1029 | 1019 |
1030 pipeline_->Seek(base::TimeDelta::FromSeconds(10), base::Bind( | 1020 pipeline_->Seek(base::TimeDelta::FromSeconds(10), base::Bind( |
1031 &CallbackHelper::OnSeek, base::Unretained(&callbacks_))); | 1021 &CallbackHelper::OnSeek, base::Unretained(&callbacks_))); |
1032 message_loop_.RunUntilIdle(); | 1022 message_loop_.RunUntilIdle(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1083 } | 1073 } |
1084 | 1074 |
1085 NOTREACHED() << "State not supported: " << state; | 1075 NOTREACHED() << "State not supported: " << state; |
1086 return status; | 1076 return status; |
1087 } | 1077 } |
1088 | 1078 |
1089 void DoStopOrError(StopOrError stop_or_error) { | 1079 void DoStopOrError(StopOrError stop_or_error) { |
1090 InSequence s; | 1080 InSequence s; |
1091 | 1081 |
1092 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 1082 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); |
1093 EXPECT_CALL(*audio_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | |
1094 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); | 1083 EXPECT_CALL(*video_renderer_, Stop(_)).WillOnce(RunClosure<0>()); |
1095 | 1084 |
1096 switch (stop_or_error) { | 1085 switch (stop_or_error) { |
1097 case kStop: | 1086 case kStop: |
1098 EXPECT_CALL(callbacks_, OnStop()); | 1087 EXPECT_CALL(callbacks_, OnStop()); |
1099 pipeline_->Stop(base::Bind( | 1088 pipeline_->Stop(base::Bind( |
1100 &CallbackHelper::OnStop, base::Unretained(&callbacks_))); | 1089 &CallbackHelper::OnStop, base::Unretained(&callbacks_))); |
1101 break; | 1090 break; |
1102 | 1091 |
1103 case kError: | 1092 case kError: |
(...skipping 30 matching lines...) Expand all Loading... |
1134 INSTANTIATE_TEARDOWN_TEST(Error, InitDemuxer); | 1123 INSTANTIATE_TEARDOWN_TEST(Error, InitDemuxer); |
1135 INSTANTIATE_TEARDOWN_TEST(Error, InitAudioRenderer); | 1124 INSTANTIATE_TEARDOWN_TEST(Error, InitAudioRenderer); |
1136 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer); | 1125 INSTANTIATE_TEARDOWN_TEST(Error, InitVideoRenderer); |
1137 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); | 1126 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); |
1138 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); | 1127 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); |
1139 INSTANTIATE_TEARDOWN_TEST(Error, Playing); | 1128 INSTANTIATE_TEARDOWN_TEST(Error, Playing); |
1140 | 1129 |
1141 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); | 1130 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); |
1142 | 1131 |
1143 } // namespace media | 1132 } // namespace media |
OLD | NEW |