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

Unified Diff: media/cdm/proxy_decryptor.cc

Issue 1224053003: Clear Key CDM should resolve the promise if session not found (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 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
Index: media/cdm/proxy_decryptor.cc
diff --git a/media/cdm/proxy_decryptor.cc b/media/cdm/proxy_decryptor.cc
index 28143f9fba16e26f7b58ff0792d254f1b3525bb6..bbae6af934ea5b74f28f71b0e2cbc689ee1805dd 100644
--- a/media/cdm/proxy_decryptor.cc
+++ b/media/cdm/proxy_decryptor.cc
@@ -133,13 +133,14 @@ void ProxyDecryptor::GenerateKeyRequest(EmeInitDataType init_data_type,
// Returns true if |data| is prefixed with |header| and has data after the
// |header|.
-bool HasHeader(const std::vector<uint8>& data, const std::string& header) {
+static bool HasHeader(const std::vector<uint8>& data,
+ const std::string& header) {
return data.size() > header.size() &&
std::equal(header.begin(), header.end(), data.begin());
}
// Removes the first |length| items from |data|.
-void StripHeader(std::vector<uint8>& data, size_t length) {
+static void StripHeader(std::vector<uint8>& data, size_t length) {
data.erase(data.begin(), data.begin() + length);
}
@@ -160,9 +161,12 @@ void ProxyDecryptor::GenerateKeyRequestInternal(
SessionCreationType session_creation_type = TemporarySession;
std::vector<uint8> stripped_init_data = init_data;
+ std::string possible_session_id;
if (HasHeader(init_data, kPrefixedApiLoadSessionHeader)) {
session_creation_type = LoadSession;
StripHeader(stripped_init_data, strlen(kPrefixedApiLoadSessionHeader));
+ possible_session_id.assign(stripped_init_data.begin(),
+ stripped_init_data.end());
} else if (HasHeader(init_data, kPrefixedApiPersistentSessionHeader)) {
session_creation_type = PersistentSession;
StripHeader(stripped_init_data,
@@ -171,18 +175,13 @@ void ProxyDecryptor::GenerateKeyRequestInternal(
scoped_ptr<NewSessionCdmPromise> promise(new CdmCallbackPromise<std::string>(
base::Bind(&ProxyDecryptor::SetSessionId, weak_ptr_factory_.GetWeakPtr(),
- session_creation_type),
+ session_creation_type, possible_session_id),
base::Bind(&ProxyDecryptor::OnLegacySessionError,
- weak_ptr_factory_.GetWeakPtr(),
- std::string()))); // No session id until created.
+ weak_ptr_factory_.GetWeakPtr(), possible_session_id)));
ddorwin 2015/07/08 21:50:13 Correction: _This_ appears to be a change in behav
jrummell 2015/07/08 23:15:08 Correct. Reverted.
if (session_creation_type == LoadSession) {
- media_keys_->LoadSession(
- MediaKeys::PERSISTENT_LICENSE_SESSION,
- std::string(
- reinterpret_cast<const char*>(vector_as_array(&stripped_init_data)),
- stripped_init_data.size()),
- promise.Pass());
+ media_keys_->LoadSession(MediaKeys::PERSISTENT_LICENSE_SESSION,
+ possible_session_id, promise.Pass());
ddorwin 2015/07/08 20:32:13 This appears to be a change in behavior.
jrummell 2015/07/08 20:58:17 It shouldn't be. 2nd parameter was a std::string o
ddorwin 2015/07/08 21:50:13 Oops, I commented on the wrong line. See my commen
jrummell 2015/07/08 23:15:07 Acknowledged.
return;
}
@@ -390,7 +389,16 @@ void ProxyDecryptor::OnLegacySessionError(const std::string& session_id,
}
void ProxyDecryptor::SetSessionId(SessionCreationType session_type,
+ const std::string& possible_session_id,
ddorwin 2015/07/08 20:32:13 If keeping this, we should rename to requested_ or
const std::string& session_id) {
+ // Load() returns empty |session_id| if the session is not found, so
+ // convert this into an error. |possible_session_id| is the session ID
+ // passed to load().
+ if (session_type == LoadSession && session_id.empty()) {
+ key_error_cb_.Run(possible_session_id, MediaKeys::kUnknownError, 0);
ddorwin 2015/07/08 20:32:13 If the above is a change in behavior, perhaps we c
jrummell 2015/07/08 20:58:17 Looking at this part again this is a change in beh
ddorwin 2015/07/08 21:50:13 Since we're going to disable this very soon, I don
jrummell 2015/07/08 23:15:08 Done.
+ return;
+ }
+
// Loaded sessions are considered persistent.
bool is_persistent =
session_type == PersistentSession || session_type == LoadSession;

Powered by Google App Engine
This is Rietveld 408576698