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 |