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 <stddef.h> | 5 #include <stddef.h> |
6 #include <stdint.h> | 6 #include <stdint.h> |
| 7 #include <utility> |
7 | 8 |
8 #include "base/bind.h" | 9 #include "base/bind.h" |
9 #include "base/command_line.h" | 10 #include "base/command_line.h" |
10 #include "base/macros.h" | 11 #include "base/macros.h" |
11 #include "base/memory/ref_counted.h" | 12 #include "base/memory/ref_counted.h" |
12 #include "base/memory/scoped_ptr.h" | 13 #include "base/memory/scoped_ptr.h" |
13 #include "base/strings/string_split.h" | 14 #include "base/strings/string_split.h" |
14 #include "base/strings/string_util.h" | 15 #include "base/strings/string_util.h" |
15 #include "build/build_config.h" | 16 #include "build/build_config.h" |
16 #include "media/base/cdm_callback_promise.h" | 17 #include "media/base/cdm_callback_promise.h" |
(...skipping 212 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
229 } | 230 } |
230 | 231 |
231 void OnSessionClosed(const std::string& session_id) { | 232 void OnSessionClosed(const std::string& session_id) { |
232 app_->OnSessionClosed(session_id); | 233 app_->OnSessionClosed(session_id); |
233 } | 234 } |
234 | 235 |
235 void OnSessionKeysChange(const std::string& session_id, | 236 void OnSessionKeysChange(const std::string& session_id, |
236 bool has_additional_usable_key, | 237 bool has_additional_usable_key, |
237 CdmKeysInfo keys_info) { | 238 CdmKeysInfo keys_info) { |
238 app_->OnSessionKeysChange(session_id, has_additional_usable_key, | 239 app_->OnSessionKeysChange(session_id, has_additional_usable_key, |
239 keys_info.Pass()); | 240 std::move(keys_info)); |
240 } | 241 } |
241 | 242 |
242 void OnLegacySessionError(const std::string& session_id, | 243 void OnLegacySessionError(const std::string& session_id, |
243 const std::string& error_name, | 244 const std::string& error_name, |
244 uint32_t system_code, | 245 uint32_t system_code, |
245 const std::string& error_message) { | 246 const std::string& error_message) { |
246 app_->OnLegacySessionError(session_id, error_name, system_code, | 247 app_->OnLegacySessionError(session_id, error_name, system_code, |
247 error_message); | 248 error_message); |
248 } | 249 } |
249 | 250 |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
293 const std::string& error_message) { | 294 const std::string& error_message) { |
294 EXPECT_EQ(expected, REJECTED) << error_message; | 295 EXPECT_EQ(expected, REJECTED) << error_message; |
295 } | 296 } |
296 | 297 |
297 scoped_ptr<SimpleCdmPromise> CreatePromise(PromiseResult expected) { | 298 scoped_ptr<SimpleCdmPromise> CreatePromise(PromiseResult expected) { |
298 scoped_ptr<media::SimpleCdmPromise> promise(new media::CdmCallbackPromise<>( | 299 scoped_ptr<media::SimpleCdmPromise> promise(new media::CdmCallbackPromise<>( |
299 base::Bind( | 300 base::Bind( |
300 &KeyProvidingApp::OnResolve, base::Unretained(this), expected), | 301 &KeyProvidingApp::OnResolve, base::Unretained(this), expected), |
301 base::Bind( | 302 base::Bind( |
302 &KeyProvidingApp::OnReject, base::Unretained(this), expected))); | 303 &KeyProvidingApp::OnReject, base::Unretained(this), expected))); |
303 return promise.Pass(); | 304 return promise; |
304 } | 305 } |
305 | 306 |
306 scoped_ptr<NewSessionCdmPromise> CreateSessionPromise( | 307 scoped_ptr<NewSessionCdmPromise> CreateSessionPromise( |
307 PromiseResult expected) { | 308 PromiseResult expected) { |
308 scoped_ptr<media::NewSessionCdmPromise> promise( | 309 scoped_ptr<media::NewSessionCdmPromise> promise( |
309 new media::CdmCallbackPromise<std::string>( | 310 new media::CdmCallbackPromise<std::string>( |
310 base::Bind(&KeyProvidingApp::OnResolveWithSession, | 311 base::Bind(&KeyProvidingApp::OnResolveWithSession, |
311 base::Unretained(this), | 312 base::Unretained(this), |
312 expected), | 313 expected), |
313 base::Bind( | 314 base::Bind( |
314 &KeyProvidingApp::OnReject, base::Unretained(this), expected))); | 315 &KeyProvidingApp::OnReject, base::Unretained(this), expected))); |
315 return promise.Pass(); | 316 return promise; |
316 } | 317 } |
317 | 318 |
318 void OnSessionMessage(const std::string& session_id, | 319 void OnSessionMessage(const std::string& session_id, |
319 MediaKeys::MessageType message_type, | 320 MediaKeys::MessageType message_type, |
320 const std::vector<uint8_t>& message, | 321 const std::vector<uint8_t>& message, |
321 const GURL& legacy_destination_url, | 322 const GURL& legacy_destination_url, |
322 AesDecryptor* decryptor) override { | 323 AesDecryptor* decryptor) override { |
323 EXPECT_FALSE(session_id.empty()); | 324 EXPECT_FALSE(session_id.empty()); |
324 EXPECT_FALSE(message.empty()); | 325 EXPECT_FALSE(message.empty()); |
325 EXPECT_EQ(current_session_id_, session_id); | 326 EXPECT_EQ(current_session_id_, session_id); |
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
485 | 486 |
486 if (initial_append_size_ == kAppendWholeFile) | 487 if (initial_append_size_ == kAppendWholeFile) |
487 initial_append_size_ = file_data_->data_size(); | 488 initial_append_size_ = file_data_->data_size(); |
488 | 489 |
489 DCHECK_GT(initial_append_size_, 0); | 490 DCHECK_GT(initial_append_size_, 0); |
490 DCHECK_LE(initial_append_size_, file_data_->data_size()); | 491 DCHECK_LE(initial_append_size_, file_data_->data_size()); |
491 } | 492 } |
492 | 493 |
493 virtual ~MockMediaSource() {} | 494 virtual ~MockMediaSource() {} |
494 | 495 |
495 scoped_ptr<Demuxer> GetDemuxer() { return owned_chunk_demuxer_.Pass(); } | 496 scoped_ptr<Demuxer> GetDemuxer() { return std::move(owned_chunk_demuxer_); } |
496 | 497 |
497 void set_encrypted_media_init_data_cb( | 498 void set_encrypted_media_init_data_cb( |
498 const Demuxer::EncryptedMediaInitDataCB& encrypted_media_init_data_cb) { | 499 const Demuxer::EncryptedMediaInitDataCB& encrypted_media_init_data_cb) { |
499 encrypted_media_init_data_cb_ = encrypted_media_init_data_cb; | 500 encrypted_media_init_data_cb_ = encrypted_media_init_data_cb; |
500 } | 501 } |
501 | 502 |
502 void Seek(base::TimeDelta seek_time, int new_position, int seek_append_size) { | 503 void Seek(base::TimeDelta seek_time, int new_position, int seek_append_size) { |
503 chunk_demuxer_->StartWaitingForSeek(seek_time); | 504 chunk_demuxer_->StartWaitingForSeek(seek_time); |
504 | 505 |
505 chunk_demuxer_->ResetParserState( | 506 chunk_demuxer_->ResetParserState( |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 } | 647 } |
647 | 648 |
648 protected: | 649 protected: |
649 scoped_ptr<Renderer> CreateRenderer() override { | 650 scoped_ptr<Renderer> CreateRenderer() override { |
650 application_impl()->ConnectToService("mojo:media", &media_service_factory_); | 651 application_impl()->ConnectToService("mojo:media", &media_service_factory_); |
651 | 652 |
652 interfaces::RendererPtr mojo_renderer; | 653 interfaces::RendererPtr mojo_renderer; |
653 media_service_factory_->CreateRenderer(mojo::GetProxy(&mojo_renderer)); | 654 media_service_factory_->CreateRenderer(mojo::GetProxy(&mojo_renderer)); |
654 | 655 |
655 return make_scoped_ptr(new MojoRendererImpl(message_loop_.task_runner(), | 656 return make_scoped_ptr(new MojoRendererImpl(message_loop_.task_runner(), |
656 mojo_renderer.Pass())); | 657 std::move(mojo_renderer))); |
657 } | 658 } |
658 | 659 |
659 private: | 660 private: |
660 interfaces::ServiceFactoryPtr media_service_factory_; | 661 interfaces::ServiceFactoryPtr media_service_factory_; |
661 }; | 662 }; |
662 #else | 663 #else |
663 class PipelineIntegrationTestHost : public testing::Test, | 664 class PipelineIntegrationTestHost : public testing::Test, |
664 public PipelineIntegrationTestBase {}; | 665 public PipelineIntegrationTestBase {}; |
665 #endif | 666 #endif |
666 | 667 |
667 class PipelineIntegrationTest : public PipelineIntegrationTestHost { | 668 class PipelineIntegrationTest : public PipelineIntegrationTestHost { |
668 public: | 669 public: |
669 void StartPipelineWithMediaSource(MockMediaSource* source) { | 670 void StartPipelineWithMediaSource(MockMediaSource* source) { |
670 EXPECT_CALL(*source, InitSegmentReceived()).Times(AtLeast(1)); | 671 EXPECT_CALL(*source, InitSegmentReceived()).Times(AtLeast(1)); |
671 EXPECT_CALL(*this, OnMetadata(_)) | 672 EXPECT_CALL(*this, OnMetadata(_)) |
672 .Times(AtMost(1)) | 673 .Times(AtMost(1)) |
673 .WillRepeatedly(SaveArg<0>(&metadata_)); | 674 .WillRepeatedly(SaveArg<0>(&metadata_)); |
674 EXPECT_CALL(*this, OnBufferingStateChanged(BUFFERING_HAVE_ENOUGH)) | 675 EXPECT_CALL(*this, OnBufferingStateChanged(BUFFERING_HAVE_ENOUGH)) |
675 .Times(AnyNumber()); | 676 .Times(AnyNumber()); |
676 EXPECT_CALL(*this, OnBufferingStateChanged(BUFFERING_HAVE_NOTHING)) | 677 EXPECT_CALL(*this, OnBufferingStateChanged(BUFFERING_HAVE_NOTHING)) |
677 .Times(AnyNumber()); | 678 .Times(AnyNumber()); |
678 | 679 |
679 // Encrypted content not used, so this is never called. | 680 // Encrypted content not used, so this is never called. |
680 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); | 681 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); |
681 | 682 |
682 demuxer_ = source->GetDemuxer().Pass(); | 683 demuxer_ = source->GetDemuxer(); |
683 pipeline_->Start( | 684 pipeline_->Start( |
684 demuxer_.get(), CreateRenderer(), | 685 demuxer_.get(), CreateRenderer(), |
685 base::Bind(&PipelineIntegrationTest::OnEnded, base::Unretained(this)), | 686 base::Bind(&PipelineIntegrationTest::OnEnded, base::Unretained(this)), |
686 base::Bind(&PipelineIntegrationTest::OnError, base::Unretained(this)), | 687 base::Bind(&PipelineIntegrationTest::OnError, base::Unretained(this)), |
687 base::Bind(&PipelineIntegrationTest::OnStatusCallback, | 688 base::Bind(&PipelineIntegrationTest::OnStatusCallback, |
688 base::Unretained(this)), | 689 base::Unretained(this)), |
689 base::Bind(&PipelineIntegrationTest::OnMetadata, | 690 base::Bind(&PipelineIntegrationTest::OnMetadata, |
690 base::Unretained(this)), | 691 base::Unretained(this)), |
691 base::Bind(&PipelineIntegrationTest::OnBufferingStateChanged, | 692 base::Bind(&PipelineIntegrationTest::OnBufferingStateChanged, |
692 base::Unretained(this)), | 693 base::Unretained(this)), |
(...skipping 26 matching lines...) Expand all Loading... |
719 EXPECT_CALL(*this, OnBufferingStateChanged(BUFFERING_HAVE_ENOUGH)) | 720 EXPECT_CALL(*this, OnBufferingStateChanged(BUFFERING_HAVE_ENOUGH)) |
720 .Times(AnyNumber()); | 721 .Times(AnyNumber()); |
721 EXPECT_CALL(*this, OnBufferingStateChanged(BUFFERING_HAVE_NOTHING)) | 722 EXPECT_CALL(*this, OnBufferingStateChanged(BUFFERING_HAVE_NOTHING)) |
722 .Times(AnyNumber()); | 723 .Times(AnyNumber()); |
723 EXPECT_CALL(*this, DecryptorAttached(true)); | 724 EXPECT_CALL(*this, DecryptorAttached(true)); |
724 | 725 |
725 // Encrypted content used but keys provided in advance, so this is | 726 // Encrypted content used but keys provided in advance, so this is |
726 // never called. | 727 // never called. |
727 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); | 728 EXPECT_CALL(*this, OnWaitingForDecryptionKey()).Times(0); |
728 | 729 |
729 demuxer_ = source->GetDemuxer().Pass(); | 730 demuxer_ = source->GetDemuxer(); |
730 | 731 |
731 pipeline_->SetCdm(encrypted_media->GetCdmContext(), | 732 pipeline_->SetCdm(encrypted_media->GetCdmContext(), |
732 base::Bind(&PipelineIntegrationTest::DecryptorAttached, | 733 base::Bind(&PipelineIntegrationTest::DecryptorAttached, |
733 base::Unretained(this))); | 734 base::Unretained(this))); |
734 | 735 |
735 pipeline_->Start( | 736 pipeline_->Start( |
736 demuxer_.get(), CreateRenderer(), | 737 demuxer_.get(), CreateRenderer(), |
737 base::Bind(&PipelineIntegrationTest::OnEnded, base::Unretained(this)), | 738 base::Bind(&PipelineIntegrationTest::OnEnded, base::Unretained(this)), |
738 base::Bind(&PipelineIntegrationTest::OnError, base::Unretained(this)), | 739 base::Bind(&PipelineIntegrationTest::OnError, base::Unretained(this)), |
739 base::Bind(&PipelineIntegrationTest::OnStatusCallback, | 740 base::Bind(&PipelineIntegrationTest::OnStatusCallback, |
(...skipping 1195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1935 | 1936 |
1936 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { | 1937 TEST_F(PipelineIntegrationTest, BasicPlaybackPositiveStartTime) { |
1937 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); | 1938 ASSERT_EQ(PIPELINE_OK, Start("nonzero-start-time.webm")); |
1938 Play(); | 1939 Play(); |
1939 ASSERT_TRUE(WaitUntilOnEnded()); | 1940 ASSERT_TRUE(WaitUntilOnEnded()); |
1940 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), | 1941 ASSERT_EQ(base::TimeDelta::FromMicroseconds(396000), |
1941 demuxer_->GetStartTime()); | 1942 demuxer_->GetStartTime()); |
1942 } | 1943 } |
1943 | 1944 |
1944 } // namespace media | 1945 } // namespace media |
OLD | NEW |