Chromium Code Reviews| Index: media/cdm/json_web_key.cc |
| diff --git a/media/cdm/json_web_key.cc b/media/cdm/json_web_key.cc |
| index f60c6f5b10267e2d775f8a9c65e1bf3a8b942476..79fe969f721c43b3475673d3efeb7d52a9b86e05 100644 |
| --- a/media/cdm/json_web_key.cc |
| +++ b/media/cdm/json_web_key.cc |
| @@ -102,21 +102,59 @@ static std::string ShortenTo64Characters(const std::string& input) { |
| return escaped_str.substr(0, 61).append("..."); |
| } |
| +static scoped_ptr<base::DictionaryValue> CreateJSONDictionary( |
| + const uint8* key, |
| + int key_length, |
| + const uint8* key_id, |
| + int key_id_length) { |
| + scoped_ptr<base::DictionaryValue> jwk(new base::DictionaryValue()); |
| + jwk->SetString(kKeyTypeTag, kKeyTypeOct); |
| + jwk->SetString(kKeyTag, EncodeBase64Url(key, key_length)); |
| + jwk->SetString(kKeyIdTag, EncodeBase64Url(key_id, key_id_length)); |
| + return jwk.Pass(); |
| +} |
| + |
| std::string GenerateJWKSet(const uint8* key, int key_length, |
| const uint8* key_id, int key_id_length) { |
| - // Both |key| and |key_id| need to be base64 encoded strings in the JWK. |
| - std::string key_base64 = EncodeBase64Url(key, key_length); |
| - std::string key_id_base64 = EncodeBase64Url(key_id, key_id_length); |
| - |
| // Create the JWK, and wrap it into a JWK Set. |
| - scoped_ptr<base::DictionaryValue> jwk(new base::DictionaryValue()); |
| - jwk->SetString(kKeyTypeTag, kKeyTypeOct); |
| - jwk->SetString(kKeyTag, key_base64); |
| - jwk->SetString(kKeyIdTag, key_id_base64); |
| scoped_ptr<base::ListValue> list(new base::ListValue()); |
| - list->Append(jwk.release()); |
| + list->Append( |
| + CreateJSONDictionary(key, key_length, key_id, key_id_length).release()); |
| + base::DictionaryValue jwk_set; |
| + jwk_set.Set(kKeysTag, list.release()); |
| + |
| + // Finally serialize |jwk_set| into a string and return it. |
| + std::string serialized_jwk; |
| + JSONStringValueSerializer serializer(&serialized_jwk); |
| + serializer.Serialize(jwk_set); |
| + return serialized_jwk; |
| +} |
| + |
| +std::string GenerateJWKSet(const KeyIdAndKeyPairs& keys, |
| + MediaKeys::SessionType session_type) { |
| + scoped_ptr<base::ListValue> list(new base::ListValue()); |
| + for (const auto key_pair : keys) { |
|
sandersd (OOO until July 31)
2015/05/09 01:06:57
Should this be key_pair&?
jrummell
2015/05/09 01:11:45
Done.
|
| + list->Append(CreateJSONDictionary( |
| + reinterpret_cast<const uint8*>(key_pair.second.data()), |
| + key_pair.second.length(), |
| + reinterpret_cast<const uint8*>(key_pair.first.data()), |
| + key_pair.first.length()) |
| + .release()); |
| + } |
| + |
| base::DictionaryValue jwk_set; |
| jwk_set.Set(kKeysTag, list.release()); |
| + switch (session_type) { |
| + case MediaKeys::TEMPORARY_SESSION: |
| + jwk_set.SetString(kTypeTag, kTemporarySession); |
| + break; |
| + case MediaKeys::PERSISTENT_LICENSE_SESSION: |
| + jwk_set.SetString(kTypeTag, kPersistentLicenseSession); |
| + break; |
| + case MediaKeys::PERSISTENT_RELEASE_MESSAGE_SESSION: |
| + jwk_set.SetString(kTypeTag, kPersistentReleaseMessageSession); |
| + break; |
| + } |
| // Finally serialize |jwk_set| into a string and return it. |
| std::string serialized_jwk; |