| 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/blink/cdm_session_adapter.h" | 5 #include "media/blink/cdm_session_adapter.h" |
| 6 | 6 |
| 7 #include <utility> | 7 #include <utility> |
| 8 | 8 |
| 9 #include "base/bind.h" | 9 #include "base/bind.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 45 base::ThreadTaskRunnerHandle::Get()->PostTask( | 45 base::ThreadTaskRunnerHandle::Get()->PostTask( |
| 46 FROM_HERE, base::Bind(&ReleaseCdm, cdm_)); | 46 FROM_HERE, base::Bind(&ReleaseCdm, cdm_)); |
| 47 } | 47 } |
| 48 } | 48 } |
| 49 | 49 |
| 50 void CdmSessionAdapter::CreateCdm( | 50 void CdmSessionAdapter::CreateCdm( |
| 51 CdmFactory* cdm_factory, | 51 CdmFactory* cdm_factory, |
| 52 const std::string& key_system, | 52 const std::string& key_system, |
| 53 const GURL& security_origin, | 53 const GURL& security_origin, |
| 54 const CdmConfig& cdm_config, | 54 const CdmConfig& cdm_config, |
| 55 scoped_ptr<blink::WebContentDecryptionModuleResult> result) { | 55 std::unique_ptr<blink::WebContentDecryptionModuleResult> result) { |
| 56 TRACE_EVENT_ASYNC_BEGIN0("media", "CdmSessionAdapter::CreateCdm", | 56 TRACE_EVENT_ASYNC_BEGIN0("media", "CdmSessionAdapter::CreateCdm", |
| 57 ++trace_id_); | 57 ++trace_id_); |
| 58 | 58 |
| 59 base::TimeTicks start_time = base::TimeTicks::Now(); | 59 base::TimeTicks start_time = base::TimeTicks::Now(); |
| 60 | 60 |
| 61 // Note: WebContentDecryptionModuleImpl::Create() calls this method without | 61 // Note: WebContentDecryptionModuleImpl::Create() calls this method without |
| 62 // holding a reference to the CdmSessionAdapter. Bind OnCdmCreated() with | 62 // holding a reference to the CdmSessionAdapter. Bind OnCdmCreated() with |
| 63 // |this| instead of |weak_this| to prevent |this| from being destructed. | 63 // |this| instead of |weak_this| to prevent |this| from being destructed. |
| 64 base::WeakPtr<CdmSessionAdapter> weak_this = weak_ptr_factory_.GetWeakPtr(); | 64 base::WeakPtr<CdmSessionAdapter> weak_this = weak_ptr_factory_.GetWeakPtr(); |
| 65 | 65 |
| 66 DCHECK(!cdm_created_result_); | 66 DCHECK(!cdm_created_result_); |
| 67 cdm_created_result_ = std::move(result); | 67 cdm_created_result_ = std::move(result); |
| 68 | 68 |
| 69 cdm_factory->Create( | 69 cdm_factory->Create( |
| 70 key_system, security_origin, cdm_config, | 70 key_system, security_origin, cdm_config, |
| 71 base::Bind(&CdmSessionAdapter::OnSessionMessage, weak_this), | 71 base::Bind(&CdmSessionAdapter::OnSessionMessage, weak_this), |
| 72 base::Bind(&CdmSessionAdapter::OnSessionClosed, weak_this), | 72 base::Bind(&CdmSessionAdapter::OnSessionClosed, weak_this), |
| 73 base::Bind(&CdmSessionAdapter::OnLegacySessionError, weak_this), | 73 base::Bind(&CdmSessionAdapter::OnLegacySessionError, weak_this), |
| 74 base::Bind(&CdmSessionAdapter::OnSessionKeysChange, weak_this), | 74 base::Bind(&CdmSessionAdapter::OnSessionKeysChange, weak_this), |
| 75 base::Bind(&CdmSessionAdapter::OnSessionExpirationUpdate, weak_this), | 75 base::Bind(&CdmSessionAdapter::OnSessionExpirationUpdate, weak_this), |
| 76 base::Bind(&CdmSessionAdapter::OnCdmCreated, this, key_system, | 76 base::Bind(&CdmSessionAdapter::OnCdmCreated, this, key_system, |
| 77 start_time)); | 77 start_time)); |
| 78 } | 78 } |
| 79 | 79 |
| 80 void CdmSessionAdapter::SetServerCertificate( | 80 void CdmSessionAdapter::SetServerCertificate( |
| 81 const std::vector<uint8_t>& certificate, | 81 const std::vector<uint8_t>& certificate, |
| 82 scoped_ptr<SimpleCdmPromise> promise) { | 82 std::unique_ptr<SimpleCdmPromise> promise) { |
| 83 cdm_->SetServerCertificate(certificate, std::move(promise)); | 83 cdm_->SetServerCertificate(certificate, std::move(promise)); |
| 84 } | 84 } |
| 85 | 85 |
| 86 WebContentDecryptionModuleSessionImpl* CdmSessionAdapter::CreateSession() { | 86 WebContentDecryptionModuleSessionImpl* CdmSessionAdapter::CreateSession() { |
| 87 return new WebContentDecryptionModuleSessionImpl(this); | 87 return new WebContentDecryptionModuleSessionImpl(this); |
| 88 } | 88 } |
| 89 | 89 |
| 90 bool CdmSessionAdapter::RegisterSession( | 90 bool CdmSessionAdapter::RegisterSession( |
| 91 const std::string& session_id, | 91 const std::string& session_id, |
| 92 base::WeakPtr<WebContentDecryptionModuleSessionImpl> session) { | 92 base::WeakPtr<WebContentDecryptionModuleSessionImpl> session) { |
| 93 // If this session ID is already registered, don't register it again. | 93 // If this session ID is already registered, don't register it again. |
| 94 if (ContainsKey(sessions_, session_id)) | 94 if (ContainsKey(sessions_, session_id)) |
| 95 return false; | 95 return false; |
| 96 | 96 |
| 97 sessions_[session_id] = session; | 97 sessions_[session_id] = session; |
| 98 return true; | 98 return true; |
| 99 } | 99 } |
| 100 | 100 |
| 101 void CdmSessionAdapter::UnregisterSession(const std::string& session_id) { | 101 void CdmSessionAdapter::UnregisterSession(const std::string& session_id) { |
| 102 DCHECK(ContainsKey(sessions_, session_id)); | 102 DCHECK(ContainsKey(sessions_, session_id)); |
| 103 sessions_.erase(session_id); | 103 sessions_.erase(session_id); |
| 104 } | 104 } |
| 105 | 105 |
| 106 void CdmSessionAdapter::InitializeNewSession( | 106 void CdmSessionAdapter::InitializeNewSession( |
| 107 EmeInitDataType init_data_type, | 107 EmeInitDataType init_data_type, |
| 108 const std::vector<uint8_t>& init_data, | 108 const std::vector<uint8_t>& init_data, |
| 109 MediaKeys::SessionType session_type, | 109 MediaKeys::SessionType session_type, |
| 110 scoped_ptr<NewSessionCdmPromise> promise) { | 110 std::unique_ptr<NewSessionCdmPromise> promise) { |
| 111 cdm_->CreateSessionAndGenerateRequest(session_type, init_data_type, init_data, | 111 cdm_->CreateSessionAndGenerateRequest(session_type, init_data_type, init_data, |
| 112 std::move(promise)); | 112 std::move(promise)); |
| 113 } | 113 } |
| 114 | 114 |
| 115 void CdmSessionAdapter::LoadSession(MediaKeys::SessionType session_type, | 115 void CdmSessionAdapter::LoadSession( |
| 116 const std::string& session_id, | 116 MediaKeys::SessionType session_type, |
| 117 scoped_ptr<NewSessionCdmPromise> promise) { | 117 const std::string& session_id, |
| 118 std::unique_ptr<NewSessionCdmPromise> promise) { |
| 118 cdm_->LoadSession(session_type, session_id, std::move(promise)); | 119 cdm_->LoadSession(session_type, session_id, std::move(promise)); |
| 119 } | 120 } |
| 120 | 121 |
| 121 void CdmSessionAdapter::UpdateSession(const std::string& session_id, | 122 void CdmSessionAdapter::UpdateSession( |
| 122 const std::vector<uint8_t>& response, | 123 const std::string& session_id, |
| 123 scoped_ptr<SimpleCdmPromise> promise) { | 124 const std::vector<uint8_t>& response, |
| 125 std::unique_ptr<SimpleCdmPromise> promise) { |
| 124 cdm_->UpdateSession(session_id, response, std::move(promise)); | 126 cdm_->UpdateSession(session_id, response, std::move(promise)); |
| 125 } | 127 } |
| 126 | 128 |
| 127 void CdmSessionAdapter::CloseSession(const std::string& session_id, | 129 void CdmSessionAdapter::CloseSession( |
| 128 scoped_ptr<SimpleCdmPromise> promise) { | 130 const std::string& session_id, |
| 131 std::unique_ptr<SimpleCdmPromise> promise) { |
| 129 cdm_->CloseSession(session_id, std::move(promise)); | 132 cdm_->CloseSession(session_id, std::move(promise)); |
| 130 } | 133 } |
| 131 | 134 |
| 132 void CdmSessionAdapter::RemoveSession(const std::string& session_id, | 135 void CdmSessionAdapter::RemoveSession( |
| 133 scoped_ptr<SimpleCdmPromise> promise) { | 136 const std::string& session_id, |
| 137 std::unique_ptr<SimpleCdmPromise> promise) { |
| 134 cdm_->RemoveSession(session_id, std::move(promise)); | 138 cdm_->RemoveSession(session_id, std::move(promise)); |
| 135 } | 139 } |
| 136 | 140 |
| 137 CdmContext* CdmSessionAdapter::GetCdmContext() { | 141 CdmContext* CdmSessionAdapter::GetCdmContext() { |
| 138 return cdm_->GetCdmContext(); | 142 return cdm_->GetCdmContext(); |
| 139 } | 143 } |
| 140 | 144 |
| 141 const std::string& CdmSessionAdapter::GetKeySystem() const { | 145 const std::string& CdmSessionAdapter::GetKeySystem() const { |
| 142 return key_system_; | 146 return key_system_; |
| 143 } | 147 } |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 244 // Note: This leaks memory, which is expected behavior. | 248 // Note: This leaks memory, which is expected behavior. |
| 245 base::HistogramBase* histogram = base::Histogram::FactoryTimeGet( | 249 base::HistogramBase* histogram = base::Histogram::FactoryTimeGet( |
| 246 GetKeySystemUMAPrefix() + kTimeToCreateCdmUMAName, | 250 GetKeySystemUMAPrefix() + kTimeToCreateCdmUMAName, |
| 247 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(10), | 251 base::TimeDelta::FromMilliseconds(1), base::TimeDelta::FromSeconds(10), |
| 248 50, base::HistogramBase::kUmaTargetedHistogramFlag); | 252 50, base::HistogramBase::kUmaTargetedHistogramFlag); |
| 249 | 253 |
| 250 histogram->AddTime(time); | 254 histogram->AddTime(time); |
| 251 } | 255 } |
| 252 | 256 |
| 253 } // namespace media | 257 } // namespace media |
| OLD | NEW |