Chromium Code Reviews| Index: media/cdm/ppapi/external_clear_key/clear_key_cdm.cc |
| diff --git a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc |
| index 63d1066e7922151d6df9594a8ca829a3097326c1..d6da86dd60eaf3efcde86453ee7561a820e66853 100644 |
| --- a/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc |
| +++ b/media/cdm/ppapi/external_clear_key/clear_key_cdm.cc |
| @@ -5,6 +5,7 @@ |
| #include "media/cdm/ppapi/external_clear_key/clear_key_cdm.h" |
| #include <algorithm> |
| +#include <cstring> |
| #include <sstream> |
| #include <string> |
| #include <vector> |
| @@ -196,7 +197,7 @@ ClearKeyCdm::ClearKeyCdm(ClearKeyCdmHost* host, const std::string& key_system) |
| last_session_id_(MediaKeys::kInvalidSessionId), |
| session_id_for_emulated_loadsession_(MediaKeys::kInvalidSessionId), |
| timer_delay_ms_(kInitialTimerDelayMs), |
| - timer_set_(false) { |
| + heartbeat_timer_set_(false) { |
| #if defined(CLEAR_KEY_CDM_USE_FAKE_AUDIO_DECODER) |
| channel_count_ = 0; |
| bits_per_channel_ = 0; |
| @@ -250,9 +251,9 @@ void ClearKeyCdm::UpdateSession(uint32 session_id, |
| DVLOG(1) << __FUNCTION__; |
| decryptor_.UpdateSession(session_id, response, response_size); |
| - if (!timer_set_) { |
| + if (!heartbeat_timer_set_) { |
| ScheduleNextHeartBeat(); |
| - timer_set_ = true; |
| + heartbeat_timer_set_ = true; |
| } |
| } |
| @@ -262,6 +263,11 @@ void ClearKeyCdm::ReleaseSession(uint32 session_id) { |
| } |
| void ClearKeyCdm::TimerExpired(void* context) { |
| + if (context == &session_id_for_emulated_loadsession_) { |
| + UpdateLoadableSession(); |
| + return; |
| + } |
| + |
| std::string heartbeat_message; |
|
ddorwin
2014/02/19 00:04:09
Should we add this before this line?
DCHECK(heartb
xhwang
2014/02/19 00:24:23
Done.
|
| if (!next_heartbeat_message_.empty() && |
| context == &next_heartbeat_message_[0]) { |
| @@ -538,18 +544,29 @@ void ClearKeyCdm::OnSessionCreated(uint32 session_id, |
| std::string new_web_session_id = web_session_id; |
| if (session_id == session_id_for_emulated_loadsession_) { |
| - new_web_session_id = kLoadableWebSessionId; |
| - UpdateLoadableSession(); |
| - session_id_for_emulated_loadsession_ = MediaKeys::kInvalidSessionId; |
| + // Delay UpdateLoadableSession() to test the case where Decrypt*() calls are |
| + // made before the session is fully loaded. |
| + const int64 kDelayToLoadSessionMs = 500; |
|
xhwang
2014/02/18 23:19:16
Ideally we should keep the old test (where the del
|
| + host_->SetTimer(kDelayToLoadSessionMs, |
| + &session_id_for_emulated_loadsession_); |
|
ddorwin
2014/02/19 00:04:09
It might be nice to clarify somewhere that we're u
xhwang
2014/02/19 00:24:23
Done.
|
| + // Defer OnSessionCreated until the session is updated with |
|
ddorwin
2014/02/19 00:04:09
... until the loadable session is initialized?
xhwang
2014/02/19 00:24:23
Done.
|
| + // kLoadableSessionKey. |
| + return; |
| } |
| host_->OnSessionCreated( |
| - session_id, new_web_session_id.data(), new_web_session_id.size()); |
| + session_id, web_session_id.data(), web_session_id.size()); |
| } |
| void ClearKeyCdm::OnSessionMessage(uint32 session_id, |
| const std::vector<uint8>& message, |
| const std::string& destination_url) { |
| + DVLOG(1) << "OnSessionMessage: " << message.size(); |
| + |
| + // Ignore the Message when we are waiting to update the loadable session. |
|
ddorwin
2014/02/19 00:04:09
nit: Is upper case 'M' intentional?
xhwang
2014/02/19 00:24:23
Done.
|
| + if (session_id == session_id_for_emulated_loadsession_) |
| + return; |
| + |
| host_->OnSessionMessage(session_id, |
| reinterpret_cast<const char*>(message.data()), |
| message.size(), |
| @@ -558,6 +575,12 @@ void ClearKeyCdm::OnSessionMessage(uint32 session_id, |
| } |
| void ClearKeyCdm::OnSessionReady(uint32 session_id) { |
| + if (session_id == session_id_for_emulated_loadsession_) { |
| + session_id_for_emulated_loadsession_ = MediaKeys::kInvalidSessionId; |
| + host_->OnSessionCreated( |
| + session_id, kLoadableWebSessionId, strlen(kLoadableWebSessionId)); |
| + } |
| + |
| host_->OnSessionReady(session_id); |
| } |