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

Unified Diff: media/cdm/json_web_key_unittest.cc

Issue 975983002: Update Clear Key to support keyids formatted init_data (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 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
« media/cdm/json_web_key.cc ('K') | « media/cdm/json_web_key.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/cdm/json_web_key_unittest.cc
diff --git a/media/cdm/json_web_key_unittest.cc b/media/cdm/json_web_key_unittest.cc
index 07d28c02eefb02ea488ef528478edfb3f046a260..9c4bb70f30534b4889fe92b3ed11219caa7b0c0c 100644
--- a/media/cdm/json_web_key_unittest.cc
+++ b/media/cdm/json_web_key_unittest.cc
@@ -60,11 +60,16 @@ class JSONWebKeyTest : public testing::Test {
std::vector<uint8> key;
EXPECT_EQ(expected_result,
ExtractFirstKeyIdFromLicenseRequest(license_vector, &key));
- if (expected_result) {
- std::vector<uint8> key_result(expected_key,
- expected_key + expected_key_length);
- EXPECT_EQ(key_result, key);
- }
+ if (expected_result)
+ VerifyKeyId(key, expected_key, expected_key_length);
+ }
+
+ void VerifyKeyId(std::vector<uint8> key,
+ const uint8* expected_key,
+ int expected_key_length) {
+ std::vector<uint8> key_result(expected_key,
+ expected_key + expected_key_length);
+ EXPECT_EQ(key_result, key);
}
};
@@ -519,5 +524,75 @@ TEST_F(JSONWebKeyTest, MultipleKeys) {
s);
}
+TEST_F(JSONWebKeyTest, ExtractKeyIds) {
+ const uint8 data1[] = { 0x01, 0x02 };
+ const uint8 data2[] = { 0x01, 0x02, 0x03, 0x04 };
+ const uint8 data3[] = { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08,
+ 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f, 0x10 };
+
+ KeyIdList key_ids;
+ std::string error_message;
+
+ EXPECT_TRUE(ExtractKeyIdsFromKeyIdsInitData("{\"kids\":[\"AQI\"]}", &key_ids,
+ &error_message));
+ EXPECT_EQ(1u, key_ids.size());
+ EXPECT_EQ(0u, error_message.length());
+ VerifyKeyId(key_ids[0], data1, arraysize(data1));
+
+ EXPECT_TRUE(ExtractKeyIdsFromKeyIdsInitData(
+ "{\"kids\":[\"AQI\",\"AQIDBA\",\"AQIDBAUGBwgJCgsMDQ4PEA\"]}", &key_ids,
+ &error_message));
+ EXPECT_EQ(3u, key_ids.size());
+ EXPECT_EQ(0u, error_message.length());
+ VerifyKeyId(key_ids[0], data1, arraysize(data1));
+ VerifyKeyId(key_ids[1], data2, arraysize(data2));
+ VerifyKeyId(key_ids[2], data3, arraysize(data3));
+
+ // Expect failure when non-ascii.
+ EXPECT_FALSE(ExtractKeyIdsFromKeyIdsInitData(
+ "This is not ASCII due to \xff\xfe\xfd in it.", &key_ids,
+ &error_message));
+ EXPECT_EQ(3u, key_ids.size()); // |key_ids| should be unchanged.
+ EXPECT_EQ(error_message,
+ "Non ASCII: This is not ASCII due to \xFF\xFE\xFD in it.");
+
+ // Expect failure when not JSON or not a dictionary.
+ EXPECT_FALSE(ExtractKeyIdsFromKeyIdsInitData("This is invalid.", &key_ids,
+ &error_message));
+ EXPECT_EQ(3u, key_ids.size()); // |key_ids| should be unchanged.
+ EXPECT_EQ(error_message, "Not valid JSON: This is invalid.");
+ EXPECT_FALSE(ExtractKeyIdsFromKeyIdsInitData("6", &key_ids, &error_message));
+ EXPECT_EQ(3u, key_ids.size()); // |key_ids| should be unchanged.
+ EXPECT_EQ(error_message, "Not valid JSON: 6");
+
+ // Expect failure when "kids" not specified.
+ EXPECT_FALSE(ExtractKeyIdsFromKeyIdsInitData("{\"keys\":[\"AQI\"]}", &key_ids,
+ &error_message));
+ EXPECT_EQ(3u, key_ids.size()); // |key_ids| should be unchanged.
+ EXPECT_EQ(error_message, "Missing 'kids' parameter or not a list");
+
+ // Expect failure when invalid key_ids specified.
+ EXPECT_FALSE(ExtractKeyIdsFromKeyIdsInitData("{\"kids\":[1]}", &key_ids,
+ &error_message));
+ EXPECT_EQ(3u, key_ids.size()); // |key_ids| should be unchanged.
+ EXPECT_EQ(error_message, "Unable to access 'kids'[0]");
+ EXPECT_FALSE(ExtractKeyIdsFromKeyIdsInitData("{\"kids\": {\"id\":\"AQI\" }}",
+ &key_ids, &error_message));
+ EXPECT_EQ(3u, key_ids.size()); // |key_ids| should be unchanged.
+ EXPECT_EQ(error_message, "Missing 'kids' parameter or not a list");
+
+ // Expect failure when non-base64 key_ids specified.
+ EXPECT_FALSE(ExtractKeyIdsFromKeyIdsInitData("{\"kids\":[\"AQI+\"]}",
+ &key_ids, &error_message));
+ EXPECT_EQ(3u, key_ids.size()); // |key_ids| should be unchanged.
+ EXPECT_EQ(error_message,
+ "'kids'[0] is not valid base64url encoded. Value: AQI+");
+ EXPECT_FALSE(ExtractKeyIdsFromKeyIdsInitData("{\"kids\":[\"AQI\",\"AQI/\"]}",
+ &key_ids, &error_message));
+ EXPECT_EQ(3u, key_ids.size()); // |key_ids| should be unchanged.
+ EXPECT_EQ(error_message,
+ "'kids'[1] is not valid base64url encoded. Value: AQI/");
+}
+
} // namespace media
« media/cdm/json_web_key.cc ('K') | « media/cdm/json_web_key.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698