| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/mojo/services/mojo_cdm_service.h" | 5 #include "media/mojo/services/mojo_cdm_service.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| (...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 94 g_cdm_manager.Get().UnregisterCdm(cdm_id_); | 94 g_cdm_manager.Get().UnregisterCdm(cdm_id_); |
| 95 | 95 |
| 96 if (context_) | 96 if (context_) |
| 97 context_->UnregisterCdm(cdm_id_); | 97 context_->UnregisterCdm(cdm_id_); |
| 98 } | 98 } |
| 99 | 99 |
| 100 void MojoCdmService::SetClient(mojom::ContentDecryptionModuleClientPtr client) { | 100 void MojoCdmService::SetClient(mojom::ContentDecryptionModuleClientPtr client) { |
| 101 client_ = std::move(client); | 101 client_ = std::move(client); |
| 102 } | 102 } |
| 103 | 103 |
| 104 void MojoCdmService::Initialize(const mojo::String& key_system, | 104 void MojoCdmService::Initialize(const std::string& key_system, |
| 105 const mojo::String& security_origin, | 105 const std::string& security_origin, |
| 106 mojom::CdmConfigPtr cdm_config, | 106 mojom::CdmConfigPtr cdm_config, |
| 107 const InitializeCallback& callback) { | 107 const InitializeCallback& callback) { |
| 108 DVLOG(1) << __FUNCTION__ << ": " << key_system; | 108 DVLOG(1) << __FUNCTION__ << ": " << key_system; |
| 109 DCHECK(!cdm_); | 109 DCHECK(!cdm_); |
| 110 | 110 |
| 111 auto weak_this = weak_factory_.GetWeakPtr(); | 111 auto weak_this = weak_factory_.GetWeakPtr(); |
| 112 cdm_factory_->Create( | 112 cdm_factory_->Create( |
| 113 key_system, GURL(security_origin.get()), cdm_config.To<CdmConfig>(), | 113 key_system, GURL(security_origin), cdm_config.To<CdmConfig>(), |
| 114 base::Bind(&MojoCdmService::OnSessionMessage, weak_this), | 114 base::Bind(&MojoCdmService::OnSessionMessage, weak_this), |
| 115 base::Bind(&MojoCdmService::OnSessionClosed, weak_this), | 115 base::Bind(&MojoCdmService::OnSessionClosed, weak_this), |
| 116 base::Bind(&MojoCdmService::OnSessionKeysChange, weak_this), | 116 base::Bind(&MojoCdmService::OnSessionKeysChange, weak_this), |
| 117 base::Bind(&MojoCdmService::OnSessionExpirationUpdate, weak_this), | 117 base::Bind(&MojoCdmService::OnSessionExpirationUpdate, weak_this), |
| 118 base::Bind(&MojoCdmService::OnCdmCreated, weak_this, callback)); | 118 base::Bind(&MojoCdmService::OnCdmCreated, weak_this, callback)); |
| 119 } | 119 } |
| 120 | 120 |
| 121 void MojoCdmService::SetServerCertificate( | 121 void MojoCdmService::SetServerCertificate( |
| 122 mojo::Array<uint8_t> certificate_data, | 122 const std::vector<uint8_t>& certificate_data, |
| 123 const SetServerCertificateCallback& callback) { | 123 const SetServerCertificateCallback& callback) { |
| 124 DVLOG(2) << __FUNCTION__; | 124 DVLOG(2) << __FUNCTION__; |
| 125 cdm_->SetServerCertificate(certificate_data.storage(), | 125 cdm_->SetServerCertificate(certificate_data, |
| 126 base::MakeUnique<SimpleMojoCdmPromise>(callback)); | 126 base::MakeUnique<SimpleMojoCdmPromise>(callback)); |
| 127 } | 127 } |
| 128 | 128 |
| 129 void MojoCdmService::CreateSessionAndGenerateRequest( | 129 void MojoCdmService::CreateSessionAndGenerateRequest( |
| 130 mojom::ContentDecryptionModule::SessionType session_type, | 130 mojom::ContentDecryptionModule::SessionType session_type, |
| 131 mojom::ContentDecryptionModule::InitDataType init_data_type, | 131 mojom::ContentDecryptionModule::InitDataType init_data_type, |
| 132 mojo::Array<uint8_t> init_data, | 132 const std::vector<uint8_t>& init_data, |
| 133 const CreateSessionAndGenerateRequestCallback& callback) { | 133 const CreateSessionAndGenerateRequestCallback& callback) { |
| 134 DVLOG(2) << __FUNCTION__; | 134 DVLOG(2) << __FUNCTION__; |
| 135 cdm_->CreateSessionAndGenerateRequest( | 135 cdm_->CreateSessionAndGenerateRequest( |
| 136 static_cast<MediaKeys::SessionType>(session_type), | 136 static_cast<MediaKeys::SessionType>(session_type), |
| 137 static_cast<EmeInitDataType>(init_data_type), init_data.storage(), | 137 static_cast<EmeInitDataType>(init_data_type), init_data, |
| 138 base::MakeUnique<NewSessionMojoCdmPromise>(callback)); | 138 base::MakeUnique<NewSessionMojoCdmPromise>(callback)); |
| 139 } | 139 } |
| 140 | 140 |
| 141 void MojoCdmService::LoadSession( | 141 void MojoCdmService::LoadSession( |
| 142 mojom::ContentDecryptionModule::SessionType session_type, | 142 mojom::ContentDecryptionModule::SessionType session_type, |
| 143 const mojo::String& session_id, | 143 const std::string& session_id, |
| 144 const LoadSessionCallback& callback) { | 144 const LoadSessionCallback& callback) { |
| 145 DVLOG(2) << __FUNCTION__; | 145 DVLOG(2) << __FUNCTION__; |
| 146 cdm_->LoadSession(static_cast<MediaKeys::SessionType>(session_type), | 146 cdm_->LoadSession(static_cast<MediaKeys::SessionType>(session_type), |
| 147 session_id.To<std::string>(), | 147 session_id, |
| 148 base::MakeUnique<NewSessionMojoCdmPromise>(callback)); | 148 base::MakeUnique<NewSessionMojoCdmPromise>(callback)); |
| 149 } | 149 } |
| 150 | 150 |
| 151 void MojoCdmService::UpdateSession(const mojo::String& session_id, | 151 void MojoCdmService::UpdateSession(const std::string& session_id, |
| 152 mojo::Array<uint8_t> response, | 152 const std::vector<uint8_t>& response, |
| 153 const UpdateSessionCallback& callback) { | 153 const UpdateSessionCallback& callback) { |
| 154 DVLOG(2) << __FUNCTION__; | 154 DVLOG(2) << __FUNCTION__; |
| 155 cdm_->UpdateSession( | 155 cdm_->UpdateSession( |
| 156 session_id.To<std::string>(), response.storage(), | 156 session_id, response, |
| 157 std::unique_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback))); | 157 std::unique_ptr<SimpleCdmPromise>(new SimpleMojoCdmPromise(callback))); |
| 158 } | 158 } |
| 159 | 159 |
| 160 void MojoCdmService::CloseSession(const mojo::String& session_id, | 160 void MojoCdmService::CloseSession(const std::string& session_id, |
| 161 const CloseSessionCallback& callback) { | 161 const CloseSessionCallback& callback) { |
| 162 DVLOG(2) << __FUNCTION__; | 162 DVLOG(2) << __FUNCTION__; |
| 163 cdm_->CloseSession(session_id.To<std::string>(), | 163 cdm_->CloseSession(session_id, |
| 164 base::MakeUnique<SimpleMojoCdmPromise>(callback)); | 164 base::MakeUnique<SimpleMojoCdmPromise>(callback)); |
| 165 } | 165 } |
| 166 | 166 |
| 167 void MojoCdmService::RemoveSession(const mojo::String& session_id, | 167 void MojoCdmService::RemoveSession(const std::string& session_id, |
| 168 const RemoveSessionCallback& callback) { | 168 const RemoveSessionCallback& callback) { |
| 169 DVLOG(2) << __FUNCTION__; | 169 DVLOG(2) << __FUNCTION__; |
| 170 cdm_->RemoveSession(session_id.To<std::string>(), | 170 cdm_->RemoveSession(session_id, |
| 171 base::MakeUnique<SimpleMojoCdmPromise>(callback)); | 171 base::MakeUnique<SimpleMojoCdmPromise>(callback)); |
| 172 } | 172 } |
| 173 | 173 |
| 174 scoped_refptr<MediaKeys> MojoCdmService::GetCdm() { | 174 scoped_refptr<MediaKeys> MojoCdmService::GetCdm() { |
| 175 return cdm_; | 175 return cdm_; |
| 176 } | 176 } |
| 177 | 177 |
| 178 void MojoCdmService::OnCdmCreated(const InitializeCallback& callback, | 178 void MojoCdmService::OnCdmCreated(const InitializeCallback& callback, |
| 179 const scoped_refptr<MediaKeys>& cdm, | 179 const scoped_refptr<MediaKeys>& cdm, |
| 180 const std::string& error_message) { | 180 const std::string& error_message) { |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 DVLOG(1) << __FUNCTION__ << ": CDM successfully created with ID " << cdm_id_; | 212 DVLOG(1) << __FUNCTION__ << ": CDM successfully created with ID " << cdm_id_; |
| 213 cdm_promise_result->success = true; | 213 cdm_promise_result->success = true; |
| 214 callback.Run(std::move(cdm_promise_result), cdm_id_, | 214 callback.Run(std::move(cdm_promise_result), cdm_id_, |
| 215 std::move(decryptor_service)); | 215 std::move(decryptor_service)); |
| 216 } | 216 } |
| 217 | 217 |
| 218 void MojoCdmService::OnSessionMessage(const std::string& session_id, | 218 void MojoCdmService::OnSessionMessage(const std::string& session_id, |
| 219 MediaKeys::MessageType message_type, | 219 MediaKeys::MessageType message_type, |
| 220 const std::vector<uint8_t>& message) { | 220 const std::vector<uint8_t>& message) { |
| 221 DVLOG(2) << __FUNCTION__ << "(" << message_type << ")"; | 221 DVLOG(2) << __FUNCTION__ << "(" << message_type << ")"; |
| 222 client_->OnSessionMessage(session_id, | 222 client_->OnSessionMessage( |
| 223 static_cast<mojom::CdmMessageType>(message_type), | 223 session_id, static_cast<mojom::CdmMessageType>(message_type), message); |
| 224 mojo::Array<uint8_t>::From(message)); | |
| 225 } | 224 } |
| 226 | 225 |
| 227 void MojoCdmService::OnSessionKeysChange(const std::string& session_id, | 226 void MojoCdmService::OnSessionKeysChange(const std::string& session_id, |
| 228 bool has_additional_usable_key, | 227 bool has_additional_usable_key, |
| 229 CdmKeysInfo keys_info) { | 228 CdmKeysInfo keys_info) { |
| 230 DVLOG(2) << __FUNCTION__ | 229 DVLOG(2) << __FUNCTION__ |
| 231 << " has_additional_usable_key=" << has_additional_usable_key; | 230 << " has_additional_usable_key=" << has_additional_usable_key; |
| 232 | 231 |
| 233 mojo::Array<mojom::CdmKeyInformationPtr> keys_data; | 232 std::vector<mojom::CdmKeyInformationPtr> keys_data; |
| 234 for (auto* key : keys_info) | 233 for (auto* key : keys_info) |
| 235 keys_data.push_back(mojom::CdmKeyInformation::From(*key)); | 234 keys_data.push_back(mojom::CdmKeyInformation::From(*key)); |
| 236 client_->OnSessionKeysChange(session_id, has_additional_usable_key, | 235 client_->OnSessionKeysChange(session_id, has_additional_usable_key, |
| 237 std::move(keys_data)); | 236 std::move(keys_data)); |
| 238 } | 237 } |
| 239 | 238 |
| 240 void MojoCdmService::OnSessionExpirationUpdate( | 239 void MojoCdmService::OnSessionExpirationUpdate( |
| 241 const std::string& session_id, | 240 const std::string& session_id, |
| 242 const base::Time& new_expiry_time_sec) { | 241 const base::Time& new_expiry_time_sec) { |
| 243 DVLOG(2) << __FUNCTION__ << " expiry=" << new_expiry_time_sec; | 242 DVLOG(2) << __FUNCTION__ << " expiry=" << new_expiry_time_sec; |
| 244 client_->OnSessionExpirationUpdate(session_id, | 243 client_->OnSessionExpirationUpdate(session_id, |
| 245 new_expiry_time_sec.ToDoubleT()); | 244 new_expiry_time_sec.ToDoubleT()); |
| 246 } | 245 } |
| 247 | 246 |
| 248 void MojoCdmService::OnSessionClosed(const std::string& session_id) { | 247 void MojoCdmService::OnSessionClosed(const std::string& session_id) { |
| 249 DVLOG(2) << __FUNCTION__; | 248 DVLOG(2) << __FUNCTION__; |
| 250 client_->OnSessionClosed(session_id); | 249 client_->OnSessionClosed(session_id); |
| 251 } | 250 } |
| 252 | 251 |
| 253 void MojoCdmService::OnDecryptorConnectionError() { | 252 void MojoCdmService::OnDecryptorConnectionError() { |
| 254 DVLOG(2) << __FUNCTION__; | 253 DVLOG(2) << __FUNCTION__; |
| 255 | 254 |
| 256 // MojoDecryptorService has lost connectivity to it's client, so it can be | 255 // MojoDecryptorService has lost connectivity to it's client, so it can be |
| 257 // freed. | 256 // freed. |
| 258 decryptor_.reset(); | 257 decryptor_.reset(); |
| 259 } | 258 } |
| 260 | 259 |
| 261 } // namespace media | 260 } // namespace media |
| OLD | NEW |