| 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 258 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 269 | 269 |
| 270 void DestroyPipeline() { | 270 void DestroyPipeline() { |
| 271 // In real code Pipeline could be destroyed on a different thread. All weak | 271 // In real code Pipeline could be destroyed on a different thread. All weak |
| 272 // pointers must have been invalidated before the stop callback returns. | 272 // pointers must have been invalidated before the stop callback returns. |
| 273 DCHECK(!pipeline_->HasWeakPtrsForTesting()); | 273 DCHECK(!pipeline_->HasWeakPtrsForTesting()); |
| 274 pipeline_.reset(); | 274 pipeline_.reset(); |
| 275 } | 275 } |
| 276 | 276 |
| 277 void ExpectDemuxerStop() { | 277 void ExpectDemuxerStop() { |
| 278 if (demuxer_) | 278 if (demuxer_) |
| 279 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 279 EXPECT_CALL(*demuxer_, Stop()); |
| 280 } | 280 } |
| 281 | 281 |
| 282 void ExpectPipelineStopAndDestroyPipeline() { | 282 void ExpectPipelineStopAndDestroyPipeline() { |
| 283 // After the Pipeline is stopped, it could be destroyed any time. Always | 283 // After the Pipeline is stopped, it could be destroyed any time. Always |
| 284 // destroy the pipeline immediately after OnStop() to test this. | 284 // destroy the pipeline immediately after OnStop() to test this. |
| 285 EXPECT_CALL(callbacks_, OnStop()) | 285 EXPECT_CALL(callbacks_, OnStop()) |
| 286 .WillOnce(Invoke(this, &PipelineTest::DestroyPipeline)); | 286 .WillOnce(Invoke(this, &PipelineTest::DestroyPipeline)); |
| 287 } | 287 } |
| 288 | 288 |
| 289 MOCK_METHOD2(OnAddTextTrack, void(const TextTrackConfig&, | 289 MOCK_METHOD2(OnAddTextTrack, void(const TextTrackConfig&, |
| (...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 364 TEST_F(PipelineTest, StopWithoutStart) { | 364 TEST_F(PipelineTest, StopWithoutStart) { |
| 365 ExpectPipelineStopAndDestroyPipeline(); | 365 ExpectPipelineStopAndDestroyPipeline(); |
| 366 pipeline_->Stop( | 366 pipeline_->Stop( |
| 367 base::Bind(&CallbackHelper::OnStop, base::Unretained(&callbacks_))); | 367 base::Bind(&CallbackHelper::OnStop, base::Unretained(&callbacks_))); |
| 368 message_loop_.RunUntilIdle(); | 368 message_loop_.RunUntilIdle(); |
| 369 } | 369 } |
| 370 | 370 |
| 371 TEST_F(PipelineTest, StartThenStopImmediately) { | 371 TEST_F(PipelineTest, StartThenStopImmediately) { |
| 372 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) | 372 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) |
| 373 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 373 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
| 374 EXPECT_CALL(*demuxer_, Stop(_)) | 374 EXPECT_CALL(*demuxer_, Stop()); |
| 375 .WillOnce(RunClosure<0>()); | |
| 376 | 375 |
| 377 EXPECT_CALL(callbacks_, OnStart(_)); | 376 EXPECT_CALL(callbacks_, OnStart(_)); |
| 378 StartPipeline(); | 377 StartPipeline(); |
| 379 | 378 |
| 380 // Expect a stop callback if we were started. | 379 // Expect a stop callback if we were started. |
| 381 ExpectPipelineStopAndDestroyPipeline(); | 380 ExpectPipelineStopAndDestroyPipeline(); |
| 382 pipeline_->Stop( | 381 pipeline_->Stop( |
| 383 base::Bind(&CallbackHelper::OnStop, base::Unretained(&callbacks_))); | 382 base::Bind(&CallbackHelper::OnStop, base::Unretained(&callbacks_))); |
| 384 message_loop_.RunUntilIdle(); | 383 message_loop_.RunUntilIdle(); |
| 385 } | 384 } |
| 386 | 385 |
| 387 TEST_F(PipelineTest, DemuxerErrorDuringStop) { | 386 TEST_F(PipelineTest, DemuxerErrorDuringStop) { |
| 388 CreateAudioStream(); | 387 CreateAudioStream(); |
| 389 MockDemuxerStreamVector streams; | 388 MockDemuxerStreamVector streams; |
| 390 streams.push_back(audio_stream()); | 389 streams.push_back(audio_stream()); |
| 391 | 390 |
| 392 SetDemuxerExpectations(&streams); | 391 SetDemuxerExpectations(&streams); |
| 393 SetRendererExpectations(); | 392 SetRendererExpectations(); |
| 394 | 393 |
| 395 StartPipelineAndExpect(PIPELINE_OK); | 394 StartPipelineAndExpect(PIPELINE_OK); |
| 396 | 395 |
| 397 EXPECT_CALL(*demuxer_, Stop(_)) | 396 EXPECT_CALL(*demuxer_, Stop()) |
| 398 .WillOnce(DoAll(InvokeWithoutArgs(this, &PipelineTest::OnDemuxerError), | 397 .WillOnce(InvokeWithoutArgs(this, &PipelineTest::OnDemuxerError)); |
| 399 RunClosure<0>())); | |
| 400 ExpectPipelineStopAndDestroyPipeline(); | 398 ExpectPipelineStopAndDestroyPipeline(); |
| 401 | 399 |
| 402 pipeline_->Stop( | 400 pipeline_->Stop( |
| 403 base::Bind(&CallbackHelper::OnStop, base::Unretained(&callbacks_))); | 401 base::Bind(&CallbackHelper::OnStop, base::Unretained(&callbacks_))); |
| 404 message_loop_.RunUntilIdle(); | 402 message_loop_.RunUntilIdle(); |
| 405 } | 403 } |
| 406 | 404 |
| 407 TEST_F(PipelineTest, URLNotFound) { | 405 TEST_F(PipelineTest, URLNotFound) { |
| 408 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) | 406 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) |
| 409 .WillOnce(RunCallback<1>(PIPELINE_ERROR_URL_NOT_FOUND)); | 407 .WillOnce(RunCallback<1>(PIPELINE_ERROR_URL_NOT_FOUND)); |
| 410 EXPECT_CALL(*demuxer_, Stop(_)) | 408 EXPECT_CALL(*demuxer_, Stop()); |
| 411 .WillOnce(RunClosure<0>()); | |
| 412 | 409 |
| 413 StartPipelineAndExpect(PIPELINE_ERROR_URL_NOT_FOUND); | 410 StartPipelineAndExpect(PIPELINE_ERROR_URL_NOT_FOUND); |
| 414 } | 411 } |
| 415 | 412 |
| 416 TEST_F(PipelineTest, NoStreams) { | 413 TEST_F(PipelineTest, NoStreams) { |
| 417 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) | 414 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) |
| 418 .WillOnce(RunCallback<1>(PIPELINE_OK)); | 415 .WillOnce(RunCallback<1>(PIPELINE_OK)); |
| 419 EXPECT_CALL(*demuxer_, Stop(_)) | 416 EXPECT_CALL(*demuxer_, Stop()); |
| 420 .WillOnce(RunClosure<0>()); | |
| 421 | 417 |
| 422 StartPipelineAndExpect(PIPELINE_ERROR_COULD_NOT_RENDER); | 418 StartPipelineAndExpect(PIPELINE_ERROR_COULD_NOT_RENDER); |
| 423 } | 419 } |
| 424 | 420 |
| 425 TEST_F(PipelineTest, AudioStream) { | 421 TEST_F(PipelineTest, AudioStream) { |
| 426 CreateAudioStream(); | 422 CreateAudioStream(); |
| 427 MockDemuxerStreamVector streams; | 423 MockDemuxerStreamVector streams; |
| 428 streams.push_back(audio_stream()); | 424 streams.push_back(audio_stream()); |
| 429 | 425 |
| 430 SetDemuxerExpectations(&streams); | 426 SetDemuxerExpectations(&streams); |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 521 CreateAudioStream(); | 517 CreateAudioStream(); |
| 522 MockDemuxerStreamVector streams; | 518 MockDemuxerStreamVector streams; |
| 523 streams.push_back(audio_stream()); | 519 streams.push_back(audio_stream()); |
| 524 | 520 |
| 525 SetDemuxerExpectations(&streams, base::TimeDelta::FromSeconds(3000)); | 521 SetDemuxerExpectations(&streams, base::TimeDelta::FromSeconds(3000)); |
| 526 SetRendererExpectations(); | 522 SetRendererExpectations(); |
| 527 | 523 |
| 528 // Initialize then seek! | 524 // Initialize then seek! |
| 529 StartPipelineAndExpect(PIPELINE_OK); | 525 StartPipelineAndExpect(PIPELINE_OK); |
| 530 | 526 |
| 531 EXPECT_CALL(*demuxer_, Stop(_)) | 527 EXPECT_CALL(*demuxer_, Stop()); |
| 532 .WillOnce(RunClosure<0>()); | |
| 533 EXPECT_CALL(callbacks_, OnError(_)); | 528 EXPECT_CALL(callbacks_, OnError(_)); |
| 534 | 529 |
| 535 static_cast<DemuxerHost*>(pipeline_.get()) | 530 static_cast<DemuxerHost*>(pipeline_.get()) |
| 536 ->OnDemuxerError(PIPELINE_ERROR_ABORT); | 531 ->OnDemuxerError(PIPELINE_ERROR_ABORT); |
| 537 message_loop_.RunUntilIdle(); | 532 message_loop_.RunUntilIdle(); |
| 538 | 533 |
| 539 pipeline_->Seek( | 534 pipeline_->Seek( |
| 540 base::TimeDelta::FromMilliseconds(100), | 535 base::TimeDelta::FromMilliseconds(100), |
| 541 base::Bind(&CallbackHelper::OnSeek, base::Unretained(&callbacks_))); | 536 base::Bind(&CallbackHelper::OnSeek, base::Unretained(&callbacks_))); |
| 542 message_loop_.RunUntilIdle(); | 537 message_loop_.RunUntilIdle(); |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 642 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); | 637 base::TimeDelta seek_time = base::TimeDelta::FromSeconds(5); |
| 643 | 638 |
| 644 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)); | 639 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)); |
| 645 EXPECT_CALL(*renderer_, Flush(_)) | 640 EXPECT_CALL(*renderer_, Flush(_)) |
| 646 .WillOnce(DoAll(SetBufferingState(&buffering_state_cb_, | 641 .WillOnce(DoAll(SetBufferingState(&buffering_state_cb_, |
| 647 BUFFERING_HAVE_NOTHING), | 642 BUFFERING_HAVE_NOTHING), |
| 648 RunClosure<0>())); | 643 RunClosure<0>())); |
| 649 | 644 |
| 650 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 645 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
| 651 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); | 646 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); |
| 652 EXPECT_CALL(*demuxer_, Stop(_)) | 647 EXPECT_CALL(*demuxer_, Stop()); |
| 653 .WillOnce(RunClosure<0>()); | |
| 654 | 648 |
| 655 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, | 649 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, |
| 656 base::Unretained(&callbacks_))); | 650 base::Unretained(&callbacks_))); |
| 657 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); | 651 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); |
| 658 message_loop_.RunUntilIdle(); | 652 message_loop_.RunUntilIdle(); |
| 659 } | 653 } |
| 660 | 654 |
| 661 // Invoked function OnError. This asserts that the pipeline does not enqueue | 655 // Invoked function OnError. This asserts that the pipeline does not enqueue |
| 662 // non-teardown related tasks while tearing down. | 656 // non-teardown related tasks while tearing down. |
| 663 static void TestNoCallsAfterError( | 657 static void TestNoCallsAfterError( |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 696 | 690 |
| 697 // Seek() isn't called as the demuxer errors out first. | 691 // Seek() isn't called as the demuxer errors out first. |
| 698 EXPECT_CALL(*renderer_, Flush(_)) | 692 EXPECT_CALL(*renderer_, Flush(_)) |
| 699 .WillOnce(DoAll(SetBufferingState(&buffering_state_cb_, | 693 .WillOnce(DoAll(SetBufferingState(&buffering_state_cb_, |
| 700 BUFFERING_HAVE_NOTHING), | 694 BUFFERING_HAVE_NOTHING), |
| 701 RunClosure<0>())); | 695 RunClosure<0>())); |
| 702 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)); | 696 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_NOTHING)); |
| 703 | 697 |
| 704 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) | 698 EXPECT_CALL(*demuxer_, Seek(seek_time, _)) |
| 705 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); | 699 .WillOnce(RunCallback<1>(PIPELINE_ERROR_READ)); |
| 706 EXPECT_CALL(*demuxer_, Stop(_)) | 700 EXPECT_CALL(*demuxer_, Stop()); |
| 707 .WillOnce(RunClosure<0>()); | |
| 708 | 701 |
| 709 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, | 702 pipeline_->Seek(seek_time, base::Bind(&CallbackHelper::OnSeek, |
| 710 base::Unretained(&callbacks_))); | 703 base::Unretained(&callbacks_))); |
| 711 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); | 704 EXPECT_CALL(callbacks_, OnSeek(PIPELINE_ERROR_READ)); |
| 712 message_loop_.RunUntilIdle(); | 705 message_loop_.RunUntilIdle(); |
| 713 } | 706 } |
| 714 | 707 |
| 715 TEST_F(PipelineTest, DestroyAfterStop) { | 708 TEST_F(PipelineTest, DestroyAfterStop) { |
| 716 CreateAudioStream(); | 709 CreateAudioStream(); |
| 717 MockDemuxerStreamVector streams; | 710 MockDemuxerStreamVector streams; |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 812 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) | 805 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) |
| 813 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), | 806 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), |
| 814 RunCallback<1>(PIPELINE_OK))); | 807 RunCallback<1>(PIPELINE_OK))); |
| 815 ExpectPipelineStopAndDestroyPipeline(); | 808 ExpectPipelineStopAndDestroyPipeline(); |
| 816 } else { | 809 } else { |
| 817 status = DEMUXER_ERROR_COULD_NOT_OPEN; | 810 status = DEMUXER_ERROR_COULD_NOT_OPEN; |
| 818 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) | 811 EXPECT_CALL(*demuxer_, Initialize(_, _, _)) |
| 819 .WillOnce(RunCallback<1>(status)); | 812 .WillOnce(RunCallback<1>(status)); |
| 820 } | 813 } |
| 821 | 814 |
| 822 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 815 EXPECT_CALL(*demuxer_, Stop()); |
| 823 return status; | 816 return status; |
| 824 } | 817 } |
| 825 | 818 |
| 826 CreateAudioStream(); | 819 CreateAudioStream(); |
| 827 CreateVideoStream(); | 820 CreateVideoStream(); |
| 828 MockDemuxerStreamVector streams; | 821 MockDemuxerStreamVector streams; |
| 829 streams.push_back(audio_stream()); | 822 streams.push_back(audio_stream()); |
| 830 streams.push_back(video_stream()); | 823 streams.push_back(video_stream()); |
| 831 SetDemuxerExpectations(&streams, base::TimeDelta::FromSeconds(3000)); | 824 SetDemuxerExpectations(&streams, base::TimeDelta::FromSeconds(3000)); |
| 832 | 825 |
| 833 EXPECT_CALL(*renderer_, HasAudio()).WillRepeatedly(Return(true)); | 826 EXPECT_CALL(*renderer_, HasAudio()).WillRepeatedly(Return(true)); |
| 834 EXPECT_CALL(*renderer_, HasVideo()).WillRepeatedly(Return(true)); | 827 EXPECT_CALL(*renderer_, HasVideo()).WillRepeatedly(Return(true)); |
| 835 | 828 |
| 836 if (state == kInitRenderer) { | 829 if (state == kInitRenderer) { |
| 837 if (stop_or_error == kStop) { | 830 if (stop_or_error == kStop) { |
| 838 EXPECT_CALL(*renderer_, Initialize(_, _, _, _, _, _)) | 831 EXPECT_CALL(*renderer_, Initialize(_, _, _, _, _, _)) |
| 839 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), | 832 .WillOnce(DoAll(Stop(pipeline_.get(), stop_cb), |
| 840 RunCallback<0>(PIPELINE_OK))); | 833 RunCallback<0>(PIPELINE_OK))); |
| 841 ExpectPipelineStopAndDestroyPipeline(); | 834 ExpectPipelineStopAndDestroyPipeline(); |
| 842 } else { | 835 } else { |
| 843 status = PIPELINE_ERROR_INITIALIZATION_FAILED; | 836 status = PIPELINE_ERROR_INITIALIZATION_FAILED; |
| 844 EXPECT_CALL(*renderer_, Initialize(_, _, _, _, _, _)) | 837 EXPECT_CALL(*renderer_, Initialize(_, _, _, _, _, _)) |
| 845 .WillOnce(RunCallback<0>(status)); | 838 .WillOnce(RunCallback<0>(status)); |
| 846 } | 839 } |
| 847 | 840 |
| 848 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 841 EXPECT_CALL(*demuxer_, Stop()); |
| 849 return status; | 842 return status; |
| 850 } | 843 } |
| 851 | 844 |
| 852 EXPECT_CALL(*renderer_, Initialize(_, _, _, _, _, _)) | 845 EXPECT_CALL(*renderer_, Initialize(_, _, _, _, _, _)) |
| 853 .WillOnce(DoAll(SaveArg<4>(&buffering_state_cb_), | 846 .WillOnce(DoAll(SaveArg<4>(&buffering_state_cb_), |
| 854 RunCallback<0>(PIPELINE_OK))); | 847 RunCallback<0>(PIPELINE_OK))); |
| 855 | 848 |
| 856 EXPECT_CALL(callbacks_, OnMetadata(_)); | 849 EXPECT_CALL(callbacks_, OnMetadata(_)); |
| 857 | 850 |
| 858 // If we get here it's a successful initialization. | 851 // If we get here it's a successful initialization. |
| 859 EXPECT_CALL(*renderer_, SetPlaybackRate(0.0f)); | 852 EXPECT_CALL(*renderer_, SetPlaybackRate(0.0f)); |
| 860 EXPECT_CALL(*renderer_, SetVolume(1.0f)); | 853 EXPECT_CALL(*renderer_, SetVolume(1.0f)); |
| 861 EXPECT_CALL(*renderer_, StartPlayingFrom(base::TimeDelta())) | 854 EXPECT_CALL(*renderer_, StartPlayingFrom(base::TimeDelta())) |
| 862 .WillOnce(SetBufferingState(&buffering_state_cb_, | 855 .WillOnce(SetBufferingState(&buffering_state_cb_, |
| 863 BUFFERING_HAVE_ENOUGH)); | 856 BUFFERING_HAVE_ENOUGH)); |
| 864 | 857 |
| 865 if (status == PIPELINE_OK) | 858 if (status == PIPELINE_OK) |
| 866 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); | 859 EXPECT_CALL(callbacks_, OnBufferingStateChange(BUFFERING_HAVE_ENOUGH)); |
| 867 | 860 |
| 868 return status; | 861 return status; |
| 869 } | 862 } |
| 870 | 863 |
| 871 void DoSeek(TeardownState state, StopOrError stop_or_error) { | 864 void DoSeek(TeardownState state, StopOrError stop_or_error) { |
| 872 InSequence s; | 865 InSequence s; |
| 873 PipelineStatus status = SetSeekExpectations(state, stop_or_error); | 866 PipelineStatus status = SetSeekExpectations(state, stop_or_error); |
| 874 | 867 |
| 875 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 868 EXPECT_CALL(*demuxer_, Stop()); |
| 876 EXPECT_CALL(callbacks_, OnSeek(status)); | 869 EXPECT_CALL(callbacks_, OnSeek(status)); |
| 877 | 870 |
| 878 if (status == PIPELINE_OK) { | 871 if (status == PIPELINE_OK) { |
| 879 ExpectPipelineStopAndDestroyPipeline(); | 872 ExpectPipelineStopAndDestroyPipeline(); |
| 880 } | 873 } |
| 881 | 874 |
| 882 pipeline_->Seek(base::TimeDelta::FromSeconds(10), base::Bind( | 875 pipeline_->Seek(base::TimeDelta::FromSeconds(10), base::Bind( |
| 883 &CallbackHelper::OnSeek, base::Unretained(&callbacks_))); | 876 &CallbackHelper::OnSeek, base::Unretained(&callbacks_))); |
| 884 message_loop_.RunUntilIdle(); | 877 message_loop_.RunUntilIdle(); |
| 885 } | 878 } |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 931 return status; | 924 return status; |
| 932 } | 925 } |
| 933 | 926 |
| 934 NOTREACHED() << "State not supported: " << state; | 927 NOTREACHED() << "State not supported: " << state; |
| 935 return status; | 928 return status; |
| 936 } | 929 } |
| 937 | 930 |
| 938 void DoStopOrError(StopOrError stop_or_error) { | 931 void DoStopOrError(StopOrError stop_or_error) { |
| 939 InSequence s; | 932 InSequence s; |
| 940 | 933 |
| 941 EXPECT_CALL(*demuxer_, Stop(_)).WillOnce(RunClosure<0>()); | 934 EXPECT_CALL(*demuxer_, Stop()); |
| 942 | 935 |
| 943 switch (stop_or_error) { | 936 switch (stop_or_error) { |
| 944 case kStop: | 937 case kStop: |
| 945 ExpectPipelineStopAndDestroyPipeline(); | 938 ExpectPipelineStopAndDestroyPipeline(); |
| 946 pipeline_->Stop(base::Bind( | 939 pipeline_->Stop(base::Bind( |
| 947 &CallbackHelper::OnStop, base::Unretained(&callbacks_))); | 940 &CallbackHelper::OnStop, base::Unretained(&callbacks_))); |
| 948 break; | 941 break; |
| 949 | 942 |
| 950 case kError: | 943 case kError: |
| 951 EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_READ)); | 944 EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_READ)); |
| 952 pipeline_->SetErrorForTesting(PIPELINE_ERROR_READ); | 945 pipeline_->SetErrorForTesting(PIPELINE_ERROR_READ); |
| 953 break; | 946 break; |
| 954 | 947 |
| 955 case kErrorAndStop: | 948 case kErrorAndStop: |
| 956 EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_READ)); | 949 EXPECT_CALL(callbacks_, OnError(PIPELINE_ERROR_READ)); |
| 957 ExpectPipelineStopAndDestroyPipeline(); | 950 ExpectPipelineStopAndDestroyPipeline(); |
| 958 pipeline_->SetErrorForTesting(PIPELINE_ERROR_READ); | 951 pipeline_->SetErrorForTesting(PIPELINE_ERROR_READ); |
| 952 message_loop_.RunUntilIdle(); |
| 959 pipeline_->Stop(base::Bind( | 953 pipeline_->Stop(base::Bind( |
| 960 &CallbackHelper::OnStop, base::Unretained(&callbacks_))); | 954 &CallbackHelper::OnStop, base::Unretained(&callbacks_))); |
| 961 break; | 955 break; |
| 962 } | 956 } |
| 963 | 957 |
| 964 message_loop_.RunUntilIdle(); | 958 message_loop_.RunUntilIdle(); |
| 965 } | 959 } |
| 966 | 960 |
| 967 DISALLOW_COPY_AND_ASSIGN(PipelineTeardownTest); | 961 DISALLOW_COPY_AND_ASSIGN(PipelineTeardownTest); |
| 968 }; | 962 }; |
| (...skipping 11 matching lines...) Expand all Loading... |
| 980 | 974 |
| 981 INSTANTIATE_TEARDOWN_TEST(Error, InitDemuxer); | 975 INSTANTIATE_TEARDOWN_TEST(Error, InitDemuxer); |
| 982 INSTANTIATE_TEARDOWN_TEST(Error, InitRenderer); | 976 INSTANTIATE_TEARDOWN_TEST(Error, InitRenderer); |
| 983 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); | 977 INSTANTIATE_TEARDOWN_TEST(Error, Flushing); |
| 984 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); | 978 INSTANTIATE_TEARDOWN_TEST(Error, Seeking); |
| 985 INSTANTIATE_TEARDOWN_TEST(Error, Playing); | 979 INSTANTIATE_TEARDOWN_TEST(Error, Playing); |
| 986 | 980 |
| 987 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); | 981 INSTANTIATE_TEARDOWN_TEST(ErrorAndStop, Playing); |
| 988 | 982 |
| 989 } // namespace media | 983 } // namespace media |
| OLD | NEW |