Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2763)

Unified Diff: media/cdm/ppapi/external_clear_key/clear_key_cdm.cc

Issue 166273009: PpapiDecryptor: Call NewKeyCB on OnSessionReady(). (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: comments addressed Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/cdm/ppapi/external_clear_key/clear_key_cdm.h ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..64e0158379ba3b4843f92673bfba81af7971fc2d 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,12 @@ void ClearKeyCdm::ReleaseSession(uint32 session_id) {
}
void ClearKeyCdm::TimerExpired(void* context) {
+ if (context == &session_id_for_emulated_loadsession_) {
+ LoadLoadableSession();
+ return;
+ }
+
+ DCHECK(heartbeat_timer_set_);
std::string heartbeat_message;
if (!next_heartbeat_message_.empty() &&
context == &next_heartbeat_message_[0]) {
@@ -521,7 +528,7 @@ void ClearKeyCdm::OnQueryOutputProtectionStatus(
NOTIMPLEMENTED();
};
-void ClearKeyCdm::UpdateLoadableSession() {
+void ClearKeyCdm::LoadLoadableSession() {
std::string jwk_set = GenerateJWKSet(kLoadableSessionKey,
sizeof(kLoadableSessionKey),
kLoadableSessionKeyId,
@@ -538,18 +545,30 @@ 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 LoadLoadableSession() to test the case where Decrypt*() calls are
+ // made before the session is fully loaded.
+ const int64 kDelayToLoadSessionMs = 500;
+ // Use the address of |session_id_for_emulated_loadsession_| as the timer
+ // context so that we can call LoadLoadableSession() when the timer expires.
+ host_->SetTimer(kDelayToLoadSessionMs,
+ &session_id_for_emulated_loadsession_);
+ // Defer OnSessionCreated() until the session is loaded.
+ 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.
+ if (session_id == session_id_for_emulated_loadsession_)
+ return;
+
host_->OnSessionMessage(session_id,
reinterpret_cast<const char*>(message.data()),
message.size(),
@@ -558,6 +577,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);
}
« no previous file with comments | « media/cdm/ppapi/external_clear_key/clear_key_cdm.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698