| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 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 "media/remoting/remoting_cdm_factory.h" | 5 #include "media/remoting/remoting_cdm_factory.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/memory/ptr_util.h" | 8 #include "base/memory/ptr_util.h" |
| 9 #include "base/single_thread_task_runner.h" | 9 #include "base/single_thread_task_runner.h" |
| 10 #include "media/base/cdm_config.h" | 10 #include "media/base/cdm_config.h" |
| 11 #include "media/remoting/remoting_cdm.h" | 11 #include "media/remoting/remoting_cdm.h" |
| 12 | 12 |
| 13 namespace media { | 13 namespace media { |
| 14 namespace remoting { |
| 14 | 15 |
| 15 RemotingCdmFactory::RemotingCdmFactory( | 16 RemotingCdmFactory::RemotingCdmFactory( |
| 16 std::unique_ptr<CdmFactory> default_cdm_factory, | 17 std::unique_ptr<CdmFactory> default_cdm_factory, |
| 17 mojom::RemoterFactory* remoter_factory, | 18 mojom::RemoterFactory* remoter_factory, |
| 18 std::unique_ptr<RemotingSinkObserver> sink_observer) | 19 std::unique_ptr<SinkAvailabilityObserver> sink_observer) |
| 19 : default_cdm_factory_(std::move(default_cdm_factory)), | 20 : default_cdm_factory_(std::move(default_cdm_factory)), |
| 20 remoter_factory_(remoter_factory), | 21 remoter_factory_(remoter_factory), |
| 21 sink_observer_(std::move(sink_observer)), | 22 sink_observer_(std::move(sink_observer)), |
| 22 weak_factory_(this) { | 23 weak_factory_(this) { |
| 23 DCHECK(default_cdm_factory_); | 24 DCHECK(default_cdm_factory_); |
| 24 DCHECK(remoter_factory_); | 25 DCHECK(remoter_factory_); |
| 25 DCHECK(sink_observer_); | 26 DCHECK(sink_observer_); |
| 26 } | 27 } |
| 27 | 28 |
| 28 RemotingCdmFactory::~RemotingCdmFactory() {} | 29 RemotingCdmFactory::~RemotingCdmFactory() {} |
| 29 | 30 |
| 30 std::unique_ptr<RemotingCdmController> | 31 std::unique_ptr<RemotingCdmController> |
| 31 RemotingCdmFactory::CreateRemotingCdmController() { | 32 RemotingCdmFactory::CreateRemotingCdmController() { |
| 32 mojom::RemotingSourcePtr remoting_source; | 33 mojom::RemotingSourcePtr remoting_source; |
| 33 mojom::RemotingSourceRequest remoting_source_request(&remoting_source); | 34 mojom::RemotingSourceRequest remoting_source_request(&remoting_source); |
| 34 mojom::RemoterPtr remoter; | 35 mojom::RemoterPtr remoter; |
| 35 remoter_factory_->Create(std::move(remoting_source), | 36 remoter_factory_->Create(std::move(remoting_source), |
| 36 mojo::MakeRequest(&remoter)); | 37 mojo::MakeRequest(&remoter)); |
| 37 scoped_refptr<RemotingSourceImpl> remoting_source_impl = | 38 scoped_refptr<SharedSession> session = |
| 38 new RemotingSourceImpl(std::move(remoting_source_request), | 39 new SharedSession(std::move(remoting_source_request), std::move(remoter)); |
| 39 std::move(remoter)); | |
| 40 // HACK: Copy-over the sink availability status from |sink_observer_| before | 40 // HACK: Copy-over the sink availability status from |sink_observer_| before |
| 41 // the RemotingCdmController would naturally get the notification. This is to | 41 // the RemotingCdmController would naturally get the notification. This is to |
| 42 // avoid the possible delay on OnSinkAvailable() call from browser. | 42 // avoid the possible delay on OnSinkAvailable() call from browser. |
| 43 if (sink_observer_->is_remote_decryption_available()) | 43 if (sink_observer_->is_remote_decryption_available()) |
| 44 remoting_source_impl->OnSinkAvailable(sink_observer_->sink_capabilities()); | 44 session->OnSinkAvailable(sink_observer_->sink_capabilities()); |
| 45 return base::MakeUnique<RemotingCdmController>(remoting_source_impl); | 45 return base::MakeUnique<RemotingCdmController>(std::move(session)); |
| 46 } | 46 } |
| 47 | 47 |
| 48 // TODO(xjz): Replace the callbacks with an interface. http://crbug.com/657940. | 48 // TODO(xjz): Replace the callbacks with an interface. http://crbug.com/657940. |
| 49 void RemotingCdmFactory::Create( | 49 void RemotingCdmFactory::Create( |
| 50 const std::string& key_system, | 50 const std::string& key_system, |
| 51 const GURL& security_origin, | 51 const GURL& security_origin, |
| 52 const CdmConfig& cdm_config, | 52 const CdmConfig& cdm_config, |
| 53 const SessionMessageCB& session_message_cb, | 53 const SessionMessageCB& session_message_cb, |
| 54 const SessionClosedCB& session_closed_cb, | 54 const SessionClosedCB& session_closed_cb, |
| 55 const SessionKeysChangeCB& session_keys_change_cb, | 55 const SessionKeysChangeCB& session_keys_change_cb, |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 NOTIMPLEMENTED(); | 93 NOTIMPLEMENTED(); |
| 94 } else { | 94 } else { |
| 95 VLOG(1) << "Create default CDM."; | 95 VLOG(1) << "Create default CDM."; |
| 96 default_cdm_factory_->Create(key_system, security_origin, cdm_config, | 96 default_cdm_factory_->Create(key_system, security_origin, cdm_config, |
| 97 session_message_cb, session_closed_cb, | 97 session_message_cb, session_closed_cb, |
| 98 session_keys_change_cb, | 98 session_keys_change_cb, |
| 99 session_expiration_update_cb, cdm_created_cb); | 99 session_expiration_update_cb, cdm_created_cb); |
| 100 } | 100 } |
| 101 } | 101 } |
| 102 | 102 |
| 103 } // namespace remoting |
| 103 } // namespace media | 104 } // namespace media |
| OLD | NEW |