OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <string> | 5 #include <string> |
6 #include <vector> | 6 #include <vector> |
7 | 7 |
8 #include "content/public/common/content_client.h" | 8 #include "content/public/common/content_client.h" |
9 #include "content/public/renderer/content_renderer_client.h" | 9 #include "content/public/renderer/content_renderer_client.h" |
10 #include "content/public/renderer/key_system_info.h" | 10 #include "content/public/renderer/key_system_info.h" |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
52 static const char kWebMAudioCodecs[] = "vorbis"; | 52 static const char kWebMAudioCodecs[] = "vorbis"; |
53 static const char kWebMVideoCodecs[] = "vorbis,vp8,vp8.0"; | 53 static const char kWebMVideoCodecs[] = "vorbis,vp8,vp8.0"; |
54 | 54 |
55 static const char kAudioFoo[] = "audio/foo"; | 55 static const char kAudioFoo[] = "audio/foo"; |
56 static const char kVideoFoo[] = "video/foo"; | 56 static const char kVideoFoo[] = "video/foo"; |
57 static const char kFooAudioCodecs[] = "fooaudio"; | 57 static const char kFooAudioCodecs[] = "fooaudio"; |
58 static const char kFooVideoCodecs[] = "fooaudio,foovideo"; | 58 static const char kFooVideoCodecs[] = "fooaudio,foovideo"; |
59 | 59 |
60 namespace content { | 60 namespace content { |
61 | 61 |
62 // Helper functions that handle the WebString conversion to simplify tests. | |
63 static std::string KeySystemNameForUMAUTF8(const std::string& key_system) { | |
64 return KeySystemNameForUMA(WebString::fromUTF8(key_system)); | |
65 } | |
66 | |
67 static bool IsConcreteSupportedKeySystemUTF8(const std::string& key_system) { | |
68 return IsConcreteSupportedKeySystem(WebString::fromUTF8(key_system)); | |
69 } | |
70 | |
71 class TestContentRendererClient : public ContentRendererClient { | 62 class TestContentRendererClient : public ContentRendererClient { |
72 virtual void AddKeySystems( | 63 virtual void AddKeySystems( |
73 std::vector<content::KeySystemInfo>* key_systems) OVERRIDE; | 64 std::vector<content::KeySystemInfo>* key_systems) OVERRIDE; |
74 }; | 65 }; |
75 | 66 |
76 void TestContentRendererClient::AddKeySystems( | 67 void TestContentRendererClient::AddKeySystems( |
77 std::vector<content::KeySystemInfo>* key_systems) { | 68 std::vector<content::KeySystemInfo>* key_systems) { |
78 #if defined(OS_ANDROID) | 69 #if defined(OS_ANDROID) |
79 static const uint8 kExternalUuid[16] = { | 70 static const uint8 kExternalUuid[16] = { |
80 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, | 71 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF, |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
199 | 190 |
200 CodecVector mixed_codecs_; | 191 CodecVector mixed_codecs_; |
201 | 192 |
202 TestContentClient test_content_client_; | 193 TestContentClient test_content_client_; |
203 TestContentRendererClient content_renderer_client_; | 194 TestContentRendererClient content_renderer_client_; |
204 }; | 195 }; |
205 | 196 |
206 // TODO(ddorwin): Consider moving GetUUID() into these tests or moving | 197 // TODO(ddorwin): Consider moving GetUUID() into these tests or moving |
207 // GetPepperType() calls out to their own test. | 198 // GetPepperType() calls out to their own test. |
208 | 199 |
| 200 TEST_F(KeySystemsTest, EmptyKeySystem) { |
| 201 EXPECT_FALSE(IsConcreteSupportedKeySystem(std::string())); |
| 202 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
| 203 kVideoWebM, no_codecs(), std::string())); |
| 204 EXPECT_EQ("Unknown", KeySystemNameForUMA(std::string())); |
| 205 } |
| 206 |
209 // Clear Key is the only key system registered in content. | 207 // Clear Key is the only key system registered in content. |
210 TEST_F(KeySystemsTest, ClearKey) { | 208 TEST_F(KeySystemsTest, ClearKey) { |
211 EXPECT_TRUE(IsConcreteSupportedKeySystemUTF8(kPrefixedClearKey)); | 209 EXPECT_TRUE(IsConcreteSupportedKeySystem(kPrefixedClearKey)); |
212 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( | 210 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( |
213 kVideoWebM, no_codecs(), kPrefixedClearKey)); | 211 kVideoWebM, no_codecs(), kPrefixedClearKey)); |
214 | 212 |
215 EXPECT_EQ("ClearKey", KeySystemNameForUMAUTF8(kPrefixedClearKey)); | 213 EXPECT_EQ("ClearKey", KeySystemNameForUMA(kPrefixedClearKey)); |
216 | 214 |
217 // Not yet out from behind the vendor prefix. | 215 // Not yet out from behind the vendor prefix. |
218 EXPECT_FALSE(IsConcreteSupportedKeySystem(kUnprefixedClearKey)); | 216 EXPECT_FALSE(IsConcreteSupportedKeySystem(kUnprefixedClearKey)); |
219 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( | 217 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
220 kVideoWebM, no_codecs(), kUnprefixedClearKey)); | 218 kVideoWebM, no_codecs(), kUnprefixedClearKey)); |
221 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUnprefixedClearKey)); | 219 EXPECT_EQ("Unknown", KeySystemNameForUMA(kUnprefixedClearKey)); |
222 } | 220 } |
223 | 221 |
224 // The key system is not registered and therefore is unrecognized. | 222 // The key system is not registered and therefore is unrecognized. |
225 TEST_F(KeySystemsTest, Basic_UnrecognizedKeySystem) { | 223 TEST_F(KeySystemsTest, Basic_UnrecognizedKeySystem) { |
226 static const char* const kUnrecognized = "org.example.unrecognized"; | 224 static const char* const kUnrecognized = "org.example.unrecognized"; |
227 | 225 |
228 EXPECT_FALSE(IsConcreteSupportedKeySystemUTF8(kUnrecognized)); | 226 EXPECT_FALSE(IsConcreteSupportedKeySystem(kUnrecognized)); |
229 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( | 227 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
230 kVideoWebM, no_codecs(), kUnrecognized)); | 228 kVideoWebM, no_codecs(), kUnrecognized)); |
231 | 229 |
232 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUnrecognized)); | 230 EXPECT_EQ("Unknown", KeySystemNameForUMA(kUnrecognized)); |
233 | 231 |
234 bool can_use = false; | 232 bool can_use = false; |
235 EXPECT_DEBUG_DEATH_PORTABLE( | 233 EXPECT_DEBUG_DEATH_PORTABLE( |
236 can_use = CanUseAesDecryptor(kUnrecognized), | 234 can_use = CanUseAesDecryptor(kUnrecognized), |
237 "org.example.unrecognized is not a known concrete system"); | 235 "org.example.unrecognized is not a known concrete system"); |
238 EXPECT_FALSE(can_use); | 236 EXPECT_FALSE(can_use); |
239 | 237 |
240 #if defined(ENABLE_PEPPER_CDMS) | 238 #if defined(ENABLE_PEPPER_CDMS) |
241 std::string type; | 239 std::string type; |
242 EXPECT_DEBUG_DEATH(type = GetPepperType(kUnrecognized), | 240 EXPECT_DEBUG_DEATH(type = GetPepperType(kUnrecognized), |
243 "org.example.unrecognized is not a known concrete system"); | 241 "org.example.unrecognized is not a known concrete system"); |
244 EXPECT_TRUE(type.empty()); | 242 EXPECT_TRUE(type.empty()); |
245 #endif | 243 #endif |
246 } | 244 } |
247 | 245 |
248 TEST_F(KeySystemsTest, Basic_UsesAesDecryptor) { | 246 TEST_F(KeySystemsTest, Basic_UsesAesDecryptor) { |
249 EXPECT_TRUE(IsConcreteSupportedKeySystemUTF8(kUsesAes)); | 247 EXPECT_TRUE(IsConcreteSupportedKeySystem(kUsesAes)); |
250 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( | 248 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( |
251 kVideoWebM, no_codecs(), kUsesAes)); | 249 kVideoWebM, no_codecs(), kUsesAes)); |
252 | 250 |
253 // No UMA value for this test key system. | 251 // No UMA value for this test key system. |
254 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUsesAes)); | 252 EXPECT_EQ("Unknown", KeySystemNameForUMA(kUsesAes)); |
255 | 253 |
256 EXPECT_TRUE(CanUseAesDecryptor(kUsesAes)); | 254 EXPECT_TRUE(CanUseAesDecryptor(kUsesAes)); |
257 #if defined(ENABLE_PEPPER_CDMS) | 255 #if defined(ENABLE_PEPPER_CDMS) |
258 std::string type; | 256 std::string type; |
259 EXPECT_DEBUG_DEATH(type = GetPepperType(kUsesAes), | 257 EXPECT_DEBUG_DEATH(type = GetPepperType(kUsesAes), |
260 "org.example.clear is not Pepper-based"); | 258 "org.example.clear is not Pepper-based"); |
261 EXPECT_TRUE(type.empty()); | 259 EXPECT_TRUE(type.empty()); |
262 #endif | 260 #endif |
263 } | 261 } |
264 | 262 |
(...skipping 29 matching lines...) Expand all Loading... |
294 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( | 292 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
295 kAudioWebM, vp8_and_vorbis_codecs(), kUsesAes)); | 293 kAudioWebM, vp8_and_vorbis_codecs(), kUsesAes)); |
296 | 294 |
297 // Non-Webm codec. | 295 // Non-Webm codec. |
298 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( | 296 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
299 kAudioWebM, fooaudio_codec(), kUsesAes)); | 297 kAudioWebM, fooaudio_codec(), kUsesAes)); |
300 } | 298 } |
301 | 299 |
302 // No parent is registered for UsesAes. | 300 // No parent is registered for UsesAes. |
303 TEST_F(KeySystemsTest, Parent_NoParentRegistered) { | 301 TEST_F(KeySystemsTest, Parent_NoParentRegistered) { |
304 EXPECT_FALSE(IsConcreteSupportedKeySystemUTF8(kUsesAesParent)); | 302 EXPECT_FALSE(IsConcreteSupportedKeySystem(kUsesAesParent)); |
305 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( | 303 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
306 kVideoWebM, no_codecs(), kUsesAesParent)); | 304 kVideoWebM, no_codecs(), kUsesAesParent)); |
307 | 305 |
308 // The parent is not supported for most things. | 306 // The parent is not supported for most things. |
309 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUsesAesParent)); | 307 EXPECT_EQ("Unknown", KeySystemNameForUMA(kUsesAesParent)); |
310 bool result = false; | 308 bool result = false; |
311 EXPECT_DEBUG_DEATH_PORTABLE(result = CanUseAesDecryptor(kUsesAesParent), | 309 EXPECT_DEBUG_DEATH_PORTABLE(result = CanUseAesDecryptor(kUsesAesParent), |
312 "org.example is not a known concrete system"); | 310 "org.example is not a known concrete system"); |
313 EXPECT_FALSE(result); | 311 EXPECT_FALSE(result); |
314 #if defined(ENABLE_PEPPER_CDMS) | 312 #if defined(ENABLE_PEPPER_CDMS) |
315 std::string type; | 313 std::string type; |
316 EXPECT_DEBUG_DEATH(type = GetPepperType(kUsesAesParent), | 314 EXPECT_DEBUG_DEATH(type = GetPepperType(kUsesAesParent), |
317 "org.example is not a known concrete system"); | 315 "org.example is not a known concrete system"); |
318 EXPECT_TRUE(type.empty()); | 316 EXPECT_TRUE(type.empty()); |
319 #endif | 317 #endif |
320 } | 318 } |
321 | 319 |
322 TEST_F(KeySystemsTest, IsSupportedKeySystem_InvalidVariants) { | 320 TEST_F(KeySystemsTest, IsSupportedKeySystem_InvalidVariants) { |
323 // Case sensitive. | 321 // Case sensitive. |
324 EXPECT_FALSE(IsConcreteSupportedKeySystemUTF8("org.example.ClEaR")); | 322 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.example.ClEaR")); |
325 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( | 323 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
326 kVideoWebM, no_codecs(), "org.example.ClEaR")); | 324 kVideoWebM, no_codecs(), "org.example.ClEaR")); |
327 | 325 |
328 // TLDs are not allowed. | 326 // TLDs are not allowed. |
329 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.")); | 327 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.")); |
330 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( | 328 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
331 kVideoWebM, no_codecs(), "org.")); | 329 kVideoWebM, no_codecs(), "org.")); |
332 EXPECT_FALSE(IsConcreteSupportedKeySystem("com")); | 330 EXPECT_FALSE(IsConcreteSupportedKeySystem("com")); |
333 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( | 331 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
334 kVideoWebM, no_codecs(), "com")); | 332 kVideoWebM, no_codecs(), "com")); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
415 // Non-container2 codec. | 413 // Non-container2 codec. |
416 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( | 414 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType( |
417 kAudioFoo, vorbis_codec(), kUsesAes)); | 415 kAudioFoo, vorbis_codec(), kUsesAes)); |
418 } | 416 } |
419 | 417 |
420 // | 418 // |
421 // Non-AesDecryptor-based key system. | 419 // Non-AesDecryptor-based key system. |
422 // | 420 // |
423 | 421 |
424 TEST_F(KeySystemsTest, Basic_ExternalDecryptor) { | 422 TEST_F(KeySystemsTest, Basic_ExternalDecryptor) { |
425 EXPECT_TRUE(IsConcreteSupportedKeySystemUTF8(kExternal)); | 423 EXPECT_TRUE(IsConcreteSupportedKeySystem(kExternal)); |
426 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( | 424 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( |
427 kVideoWebM, no_codecs(), kExternal)); | 425 kVideoWebM, no_codecs(), kExternal)); |
428 | 426 |
429 EXPECT_FALSE(CanUseAesDecryptor(kExternal)); | 427 EXPECT_FALSE(CanUseAesDecryptor(kExternal)); |
430 #if defined(ENABLE_PEPPER_CDMS) | 428 #if defined(ENABLE_PEPPER_CDMS) |
431 EXPECT_EQ("application/x-ppapi-external-cdm", GetPepperType(kExternal)); | 429 EXPECT_EQ("application/x-ppapi-external-cdm", GetPepperType(kExternal)); |
432 #endif // defined(ENABLE_PEPPER_CDMS) | 430 #endif // defined(ENABLE_PEPPER_CDMS) |
433 | 431 |
434 } | 432 } |
435 | 433 |
436 TEST_F(KeySystemsTest, Parent_ParentRegistered) { | 434 TEST_F(KeySystemsTest, Parent_ParentRegistered) { |
437 // The parent system is not a concrete system but is supported. | 435 // The parent system is not a concrete system but is supported. |
438 EXPECT_FALSE(IsConcreteSupportedKeySystemUTF8(kExternalParent)); | 436 EXPECT_FALSE(IsConcreteSupportedKeySystem(kExternalParent)); |
439 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( | 437 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType( |
440 kVideoWebM, no_codecs(), kExternalParent)); | 438 kVideoWebM, no_codecs(), kExternalParent)); |
441 | 439 |
442 // The parent is not supported for most things. | 440 // The parent is not supported for most things. |
443 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kExternalParent)); | 441 EXPECT_EQ("Unknown", KeySystemNameForUMA(kExternalParent)); |
444 bool result = false; | 442 bool result = false; |
445 EXPECT_DEBUG_DEATH_PORTABLE(result = CanUseAesDecryptor(kExternalParent), | 443 EXPECT_DEBUG_DEATH_PORTABLE(result = CanUseAesDecryptor(kExternalParent), |
446 "com.example is not a known concrete system"); | 444 "com.example is not a known concrete system"); |
447 EXPECT_FALSE(result); | 445 EXPECT_FALSE(result); |
448 #if defined(ENABLE_PEPPER_CDMS) | 446 #if defined(ENABLE_PEPPER_CDMS) |
449 std::string type; | 447 std::string type; |
450 EXPECT_DEBUG_DEATH(type = GetPepperType(kExternalParent), | 448 EXPECT_DEBUG_DEATH(type = GetPepperType(kExternalParent), |
451 "com.example is not a known concrete system"); | 449 "com.example is not a known concrete system"); |
452 EXPECT_TRUE(type.empty()); | 450 EXPECT_TRUE(type.empty()); |
453 #endif | 451 #endif |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
590 EXPECT_DEBUG_DEATH_PORTABLE(uuid = GetUUID(kExternalParent), | 588 EXPECT_DEBUG_DEATH_PORTABLE(uuid = GetUUID(kExternalParent), |
591 "com.example is not a known concrete system"); | 589 "com.example is not a known concrete system"); |
592 EXPECT_TRUE(uuid.empty()); | 590 EXPECT_TRUE(uuid.empty()); |
593 | 591 |
594 EXPECT_DEBUG_DEATH_PORTABLE(uuid = GetUUID(""), " is not a concrete system"); | 592 EXPECT_DEBUG_DEATH_PORTABLE(uuid = GetUUID(""), " is not a concrete system"); |
595 EXPECT_TRUE(uuid.empty()); | 593 EXPECT_TRUE(uuid.empty()); |
596 } | 594 } |
597 #endif // defined(OS_ANDROID) | 595 #endif // defined(OS_ANDROID) |
598 | 596 |
599 TEST_F(KeySystemsTest, KeySystemNameForUMA) { | 597 TEST_F(KeySystemsTest, KeySystemNameForUMA) { |
600 EXPECT_EQ("ClearKey", KeySystemNameForUMAUTF8(kPrefixedClearKey)); | 598 EXPECT_EQ("ClearKey", KeySystemNameForUMA(kPrefixedClearKey)); |
601 // Unprefixed is not yet supported. | 599 // Unprefixed is not yet supported. |
602 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUnprefixedClearKey)); | 600 EXPECT_EQ("Unknown", KeySystemNameForUMA(kUnprefixedClearKey)); |
603 | 601 |
604 // External Clear Key never has a UMA name. | 602 // External Clear Key never has a UMA name. |
605 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kExternalClearKey)); | 603 EXPECT_EQ("Unknown", KeySystemNameForUMA(kExternalClearKey)); |
606 | 604 |
607 #if defined(WIDEVINE_CDM_AVAILABLE) | 605 #if defined(WIDEVINE_CDM_AVAILABLE) |
608 const char* const kTestWidevineUmaName = "Widevine"; | 606 const char* const kTestWidevineUmaName = "Widevine"; |
609 #else | 607 #else |
610 const char* const kTestWidevineUmaName = "Unknown"; | 608 const char* const kTestWidevineUmaName = "Unknown"; |
611 #endif | 609 #endif |
612 EXPECT_EQ(kTestWidevineUmaName, | 610 EXPECT_EQ(kTestWidevineUmaName, |
613 KeySystemNameForUMAUTF8("com.widevine.alpha")); | 611 KeySystemNameForUMA("com.widevine.alpha")); |
614 } | 612 } |
615 | 613 |
616 } // namespace content | 614 } // namespace content |
OLD | NEW |