IndexedDBFactory now ForceCloses databases.
[chromium-blink-merge.git] / content / renderer / media / crypto / key_systems_unittest.cc
blob89fa51ab19a976f7806a77e17848812579b9815f
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
3 // found in the LICENSE file.
5 #include <string>
6 #include <vector>
8 #include "content/public/common/content_client.h"
9 #include "content/public/renderer/content_renderer_client.h"
10 #include "content/public/renderer/key_system_info.h"
11 #include "content/renderer/media/crypto/key_systems.h"
12 #include "content/test/test_content_client.h"
13 #include "testing/gtest/include/gtest/gtest.h"
14 #include "third_party/WebKit/public/platform/WebString.h"
16 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
18 // Death tests are not always available, including on Android.
19 // EXPECT_DEBUG_DEATH_PORTABLE executes tests correctly except in the case that
20 // death tests are not available and NDEBUG is not defined.
21 #if defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
22 #define EXPECT_DEBUG_DEATH_PORTABLE(statement, regex) \
23 EXPECT_DEBUG_DEATH(statement, regex)
24 #else
25 #if defined(NDEBUG)
26 #define EXPECT_DEBUG_DEATH_PORTABLE(statement, regex) \
27 do { statement; } while (false)
28 #else
29 #include "base/logging.h"
30 #define EXPECT_DEBUG_DEATH_PORTABLE(statement, regex) \
31 LOG(WARNING) << "Death tests are not supported on this platform.\n" \
32 << "Statement '" #statement "' cannot be verified.";
33 #endif // defined(NDEBUG)
34 #endif // defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
36 using blink::WebString;
38 // These are the (fake) key systems that are registered for these tests.
39 // kUsesAes uses the AesDecryptor like Clear Key.
40 // kExternal uses an external CDM, such as Pepper-based or Android platform CDM.
41 static const char kUsesAes[] = "org.example.clear";
42 static const char kUsesAesParent[] = "org.example"; // Not registered.
43 static const char kExternal[] = "com.example.test";
44 static const char kExternalParent[] = "com.example";
46 static const char kPrefixedClearKey[] = "webkit-org.w3.clearkey";
47 static const char kUnprefixedClearKey[] = "org.w3.clearkey";
48 static const char kExternalClearKey[] = "org.chromium.externalclearkey";
50 static const char kAudioWebM[] = "audio/webm";
51 static const char kVideoWebM[] = "video/webm";
52 static const char kWebMAudioCodecs[] = "vorbis";
53 static const char kWebMVideoCodecs[] = "vorbis,vp8,vp8.0";
55 static const char kAudioFoo[] = "audio/foo";
56 static const char kVideoFoo[] = "video/foo";
57 static const char kFooAudioCodecs[] = "fooaudio";
58 static const char kFooVideoCodecs[] = "fooaudio,foovideo";
60 namespace content {
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));
67 static bool IsConcreteSupportedKeySystemUTF8(const std::string& key_system) {
68 return IsConcreteSupportedKeySystem(WebString::fromUTF8(key_system));
71 class TestContentRendererClient : public ContentRendererClient {
72 virtual void AddKeySystems(
73 std::vector<content::KeySystemInfo>* key_systems) OVERRIDE;
76 void TestContentRendererClient::AddKeySystems(
77 std::vector<content::KeySystemInfo>* key_systems) {
78 #if defined(OS_ANDROID)
79 static const uint8 kExternalUuid[16] = {
80 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF,
81 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF };
82 #endif
84 KeySystemInfo aes(kUsesAes);
86 aes.supported_types.push_back(std::make_pair(kAudioWebM, kWebMAudioCodecs));
87 aes.supported_types.push_back(std::make_pair(kVideoWebM, kWebMVideoCodecs));
89 aes.supported_types.push_back(std::make_pair(kAudioFoo, kFooAudioCodecs));
90 aes.supported_types.push_back(std::make_pair(kVideoFoo, kFooVideoCodecs));
92 aes.use_aes_decryptor = true;
94 key_systems->push_back(aes);
96 KeySystemInfo ext(kExternal);
98 ext.supported_types.push_back(std::make_pair(kAudioWebM, kWebMAudioCodecs));
99 ext.supported_types.push_back(std::make_pair(kVideoWebM, kWebMVideoCodecs));
101 ext.supported_types.push_back(std::make_pair(kAudioFoo, kFooAudioCodecs));
102 ext.supported_types.push_back(std::make_pair(kVideoFoo, kFooVideoCodecs));
104 ext.parent_key_system = kExternalParent;
106 #if defined(ENABLE_PEPPER_CDMS)
107 ext.pepper_type = "application/x-ppapi-external-cdm";
108 #elif defined(OS_ANDROID)
109 ext.uuid.assign(kExternalUuid, kExternalUuid + arraysize(kExternalUuid));
110 #endif // defined(ENABLE_PEPPER_CDMS)
112 key_systems->push_back(ext);
115 class KeySystemsTest : public testing::Test {
116 protected:
117 KeySystemsTest() {
118 vp8_codec_.push_back("vp8");
120 vp80_codec_.push_back("vp8.0");
122 vorbis_codec_.push_back("vorbis");
124 vp8_and_vorbis_codecs_.push_back("vp8");
125 vp8_and_vorbis_codecs_.push_back("vorbis");
127 foovideo_codec_.push_back("foovideo");
129 foovideo_extended_codec_.push_back("foovideo.4D400C");
131 foovideo_dot_codec_.push_back("foovideo.");
133 fooaudio_codec_.push_back("fooaudio");
135 foovideo_and_fooaudio_codecs_.push_back("foovideo");
136 foovideo_and_fooaudio_codecs_.push_back("fooaudio");
138 unknown_codec_.push_back("unknown");
140 mixed_codecs_.push_back("vorbis");
141 mixed_codecs_.push_back("foovideo");
143 // KeySystems requires a valid ContentRendererClient and thus ContentClient.
144 // The TestContentClient is not available inside Death Tests on some
145 // platforms (see below). Therefore, always provide a TestContentClient.
146 // Explanation: When Death Tests fork, there is a valid ContentClient.
147 // However, when they launch a new process instead of forking, the global
148 // variable is not copied and for some reason TestContentClientInitializer
149 // does not get created to set the global variable in the new process.
150 SetContentClient(&test_content_client_);
151 SetRendererClientForTesting(&content_renderer_client_);
154 virtual ~KeySystemsTest() {
155 // Clear the use of content_client_, which was set in SetUp().
156 SetContentClient(NULL);
159 typedef std::vector<std::string> CodecVector;
161 const CodecVector& no_codecs() const { return no_codecs_; }
163 const CodecVector& vp8_codec() const { return vp8_codec_; }
164 const CodecVector& vp80_codec() const { return vp80_codec_; }
165 const CodecVector& vorbis_codec() const { return vorbis_codec_; }
166 const CodecVector& vp8_and_vorbis_codecs() const {
167 return vp8_and_vorbis_codecs_;
170 const CodecVector& foovideo_codec() const { return foovideo_codec_; }
171 const CodecVector& foovideo_extended_codec() const {
172 return foovideo_extended_codec_;
174 const CodecVector& foovideo_dot_codec() const { return foovideo_dot_codec_; }
175 const CodecVector& fooaudio_codec() const { return fooaudio_codec_; }
176 const CodecVector& foovideo_and_fooaudio_codecs() const {
177 return foovideo_and_fooaudio_codecs_;
180 const CodecVector& unknown_codec() const { return unknown_codec_; }
182 const CodecVector& mixed_codecs() const { return mixed_codecs_; }
184 private:
185 const CodecVector no_codecs_;
187 CodecVector vp8_codec_;
188 CodecVector vp80_codec_;
189 CodecVector vorbis_codec_;
190 CodecVector vp8_and_vorbis_codecs_;
192 CodecVector foovideo_codec_;
193 CodecVector foovideo_extended_codec_;
194 CodecVector foovideo_dot_codec_;
195 CodecVector fooaudio_codec_;
196 CodecVector foovideo_and_fooaudio_codecs_;
198 CodecVector unknown_codec_;
200 CodecVector mixed_codecs_;
202 TestContentClient test_content_client_;
203 TestContentRendererClient content_renderer_client_;
206 // TODO(ddorwin): Consider moving GetUUID() into these tests or moving
207 // GetPepperType() calls out to their own test.
209 // Clear Key is the only key system registered in content.
210 TEST_F(KeySystemsTest, ClearKey) {
211 EXPECT_TRUE(IsConcreteSupportedKeySystemUTF8(kPrefixedClearKey));
212 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
213 kVideoWebM, no_codecs(), kPrefixedClearKey));
215 EXPECT_EQ("ClearKey", KeySystemNameForUMAUTF8(kPrefixedClearKey));
217 // Not yet out from behind the vendor prefix.
218 EXPECT_FALSE(IsConcreteSupportedKeySystem(kUnprefixedClearKey));
219 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
220 kVideoWebM, no_codecs(), kUnprefixedClearKey));
221 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUnprefixedClearKey));
224 // The key system is not registered and therefore is unrecognized.
225 TEST_F(KeySystemsTest, Basic_UnrecognizedKeySystem) {
226 static const char* const kUnrecognized = "org.example.unrecognized";
228 EXPECT_FALSE(IsConcreteSupportedKeySystemUTF8(kUnrecognized));
229 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
230 kVideoWebM, no_codecs(), kUnrecognized));
232 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUnrecognized));
234 bool can_use = false;
235 EXPECT_DEBUG_DEATH_PORTABLE(
236 can_use = CanUseAesDecryptor(kUnrecognized),
237 "org.example.unrecognized is not a known concrete system");
238 EXPECT_FALSE(can_use);
240 #if defined(ENABLE_PEPPER_CDMS)
241 std::string type;
242 EXPECT_DEBUG_DEATH(type = GetPepperType(kUnrecognized),
243 "org.example.unrecognized is not a known concrete system");
244 EXPECT_TRUE(type.empty());
245 #endif
248 TEST_F(KeySystemsTest, Basic_UsesAesDecryptor) {
249 EXPECT_TRUE(IsConcreteSupportedKeySystemUTF8(kUsesAes));
250 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
251 kVideoWebM, no_codecs(), kUsesAes));
253 // No UMA value for this test key system.
254 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUsesAes));
256 EXPECT_TRUE(CanUseAesDecryptor(kUsesAes));
257 #if defined(ENABLE_PEPPER_CDMS)
258 std::string type;
259 EXPECT_DEBUG_DEATH(type = GetPepperType(kUsesAes),
260 "org.example.clear is not Pepper-based");
261 EXPECT_TRUE(type.empty());
262 #endif
265 TEST_F(KeySystemsTest,
266 IsSupportedKeySystemWithMediaMimeType_UsesAesDecryptor_TypesContainer1) {
267 // Valid video types.
268 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
269 kVideoWebM, vp8_codec(), kUsesAes));
270 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
271 kVideoWebM, vp80_codec(), kUsesAes));
272 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
273 kVideoWebM, vp8_and_vorbis_codecs(), kUsesAes));
274 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
275 kVideoWebM, vorbis_codec(), kUsesAes));
277 // Non-Webm codecs.
278 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
279 kVideoWebM, foovideo_codec(), kUsesAes));
280 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
281 kVideoWebM, unknown_codec(), kUsesAes));
282 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
283 kVideoWebM, mixed_codecs(), kUsesAes));
285 // Valid audio types.
286 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
287 kAudioWebM, no_codecs(), kUsesAes));
288 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
289 kAudioWebM, vorbis_codec(), kUsesAes));
291 // Non-audio codecs.
292 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
293 kAudioWebM, vp8_codec(), kUsesAes));
294 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
295 kAudioWebM, vp8_and_vorbis_codecs(), kUsesAes));
297 // Non-Webm codec.
298 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
299 kAudioWebM, fooaudio_codec(), kUsesAes));
302 // No parent is registered for UsesAes.
303 TEST_F(KeySystemsTest, Parent_NoParentRegistered) {
304 EXPECT_FALSE(IsConcreteSupportedKeySystemUTF8(kUsesAesParent));
305 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
306 kVideoWebM, no_codecs(), kUsesAesParent));
308 // The parent is not supported for most things.
309 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUsesAesParent));
310 bool result = false;
311 EXPECT_DEBUG_DEATH_PORTABLE(result = CanUseAesDecryptor(kUsesAesParent),
312 "org.example is not a known concrete system");
313 EXPECT_FALSE(result);
314 #if defined(ENABLE_PEPPER_CDMS)
315 std::string type;
316 EXPECT_DEBUG_DEATH(type = GetPepperType(kUsesAesParent),
317 "org.example is not a known concrete system");
318 EXPECT_TRUE(type.empty());
319 #endif
322 TEST_F(KeySystemsTest, IsSupportedKeySystem_InvalidVariants) {
323 // Case sensitive.
324 EXPECT_FALSE(IsConcreteSupportedKeySystemUTF8("org.example.ClEaR"));
325 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
326 kVideoWebM, no_codecs(), "org.example.ClEaR"));
328 // TLDs are not allowed.
329 EXPECT_FALSE(IsConcreteSupportedKeySystem("org."));
330 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
331 kVideoWebM, no_codecs(), "org."));
332 EXPECT_FALSE(IsConcreteSupportedKeySystem("com"));
333 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
334 kVideoWebM, no_codecs(), "com"));
336 // Extra period.
337 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.example."));
338 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
339 kVideoWebM, no_codecs(), "org.example."));
341 // Incomplete.
342 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.example.clea"));
343 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
344 kVideoWebM, no_codecs(), "org.example.clea"));
346 // Extra character.
347 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.example.clearz"));
348 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
349 kVideoWebM, no_codecs(), "org.example.clearz"));
351 // There are no child key systems for UsesAes.
352 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.example.clear.foo"));
353 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
354 kVideoWebM, no_codecs(), "org.example.clear.foo"));
357 TEST_F(KeySystemsTest, IsSupportedKeySystemWithMediaMimeType_NoType) {
358 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
359 std::string(), no_codecs(), kUsesAes));
360 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
361 std::string(), no_codecs(), kUsesAesParent));
363 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
364 std::string(), no_codecs(), "org.example.foo"));
365 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
366 std::string(), no_codecs(), "org.example.clear.foo"));
369 // Tests the second registered container type.
370 // TODO(ddorwin): Combined with TypesContainer1 in a future CL.
371 TEST_F(KeySystemsTest,
372 IsSupportedKeySystemWithMediaMimeType_UsesAesDecryptor_TypesContainer2) {
373 // Valid video types.
374 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
375 kVideoFoo, no_codecs(), kUsesAes));
376 // The parent should be supported but is not. See http://crbug.com/164303.
377 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
378 kVideoFoo, no_codecs(), kUsesAesParent));
379 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
380 kVideoFoo, foovideo_codec(), kUsesAes));
381 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
382 kVideoFoo, foovideo_and_fooaudio_codecs(), kUsesAes));
383 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
384 kVideoFoo, fooaudio_codec(), kUsesAes));
386 // Extended codecs fail because this is handled by SimpleWebMimeRegistryImpl.
387 // They should really pass canPlayType().
388 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
389 kVideoFoo, foovideo_extended_codec(), kUsesAes));
391 // Invalid codec format.
392 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
393 kVideoFoo, foovideo_dot_codec(), kUsesAes));
395 // Non-container2 codec.
396 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
397 kVideoFoo, vp8_codec(), kUsesAes));
398 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
399 kVideoFoo, unknown_codec(), kUsesAes));
400 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
401 kVideoFoo, mixed_codecs(), kUsesAes));
403 // Valid audio types.
404 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
405 kAudioFoo, no_codecs(), kUsesAes));
406 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
407 kAudioFoo, fooaudio_codec(), kUsesAes));
409 // Non-audio codecs.
410 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
411 kAudioFoo, foovideo_codec(), kUsesAes));
412 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
413 kAudioFoo, foovideo_and_fooaudio_codecs(), kUsesAes));
415 // Non-container2 codec.
416 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
417 kAudioFoo, vorbis_codec(), kUsesAes));
421 // Non-AesDecryptor-based key system.
424 TEST_F(KeySystemsTest, Basic_ExternalDecryptor) {
425 EXPECT_TRUE(IsConcreteSupportedKeySystemUTF8(kExternal));
426 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
427 kVideoWebM, no_codecs(), kExternal));
429 EXPECT_FALSE(CanUseAesDecryptor(kExternal));
430 #if defined(ENABLE_PEPPER_CDMS)
431 EXPECT_EQ("application/x-ppapi-external-cdm", GetPepperType(kExternal));
432 #endif // defined(ENABLE_PEPPER_CDMS)
436 TEST_F(KeySystemsTest, Parent_ParentRegistered) {
437 // The parent system is not a concrete system but is supported.
438 EXPECT_FALSE(IsConcreteSupportedKeySystemUTF8(kExternalParent));
439 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
440 kVideoWebM, no_codecs(), kExternalParent));
442 // The parent is not supported for most things.
443 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kExternalParent));
444 bool result = false;
445 EXPECT_DEBUG_DEATH_PORTABLE(result = CanUseAesDecryptor(kExternalParent),
446 "com.example is not a known concrete system");
447 EXPECT_FALSE(result);
448 #if defined(ENABLE_PEPPER_CDMS)
449 std::string type;
450 EXPECT_DEBUG_DEATH(type = GetPepperType(kExternalParent),
451 "com.example is not a known concrete system");
452 EXPECT_TRUE(type.empty());
453 #endif
456 TEST_F(
457 KeySystemsTest,
458 IsSupportedKeySystemWithMediaMimeType_ExternalDecryptor_TypesContainer1) {
459 // Valid video types.
460 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
461 kVideoWebM, no_codecs(), kExternal));
462 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
463 kVideoWebM, vp8_codec(), kExternal));
464 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
465 kVideoWebM, vp80_codec(), kExternal));
466 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
467 kVideoWebM, vp8_and_vorbis_codecs(), kExternal));
468 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
469 kVideoWebM, vorbis_codec(), kExternal));
471 // Valid video types - parent key system.
472 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
473 kVideoWebM, no_codecs(), kExternalParent));
474 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
475 kVideoWebM, vp8_codec(), kExternalParent));
476 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
477 kVideoWebM, vp80_codec(), kExternalParent));
478 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
479 kVideoWebM, vp8_and_vorbis_codecs(), kExternalParent));
480 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
481 kVideoWebM, vorbis_codec(), kExternalParent));
483 // Non-Webm codecs.
484 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
485 kVideoWebM, foovideo_codec(), kExternal));
486 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
487 kVideoWebM, unknown_codec(), kExternal));
488 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
489 kVideoWebM, mixed_codecs(), kExternal));
491 // Valid audio types.
492 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
493 kAudioWebM, no_codecs(), kExternal));
494 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
495 kAudioWebM, vorbis_codec(), kExternal));
497 // Valid audio types - parent key system.
498 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
499 kAudioWebM, no_codecs(), kExternalParent));
500 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
501 kAudioWebM, vorbis_codec(), kExternalParent));
503 // Non-audio codecs.
504 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
505 kAudioWebM, vp8_codec(), kExternal));
506 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
507 kAudioWebM, vp8_and_vorbis_codecs(), kExternal));
509 // Non-Webm codec.
510 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
511 kAudioWebM, fooaudio_codec(), kExternal));
514 TEST_F(
515 KeySystemsTest,
516 IsSupportedKeySystemWithMediaMimeType_ExternalDecryptor_TypesContainer2) {
517 // Valid video types.
518 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
519 kVideoFoo, no_codecs(), kExternal));
520 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
521 kVideoFoo, foovideo_codec(), kExternal));
522 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
523 kVideoFoo, foovideo_and_fooaudio_codecs(), kExternal));
524 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
525 kVideoFoo, fooaudio_codec(), kExternal));
527 // Valid video types - parent key system.
528 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
529 kVideoFoo, no_codecs(), kExternalParent));
530 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
531 kVideoFoo, foovideo_codec(), kExternalParent));
532 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
533 kVideoFoo, foovideo_and_fooaudio_codecs(), kExternalParent));
534 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
535 kVideoFoo, fooaudio_codec(), kExternalParent));
537 // Extended codecs fail because this is handled by SimpleWebMimeRegistryImpl.
538 // They should really pass canPlayType().
539 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
540 kVideoFoo, foovideo_extended_codec(), kExternal));
542 // Invalid codec format.
543 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
544 kVideoFoo, foovideo_dot_codec(), kExternal));
546 // Non-container2 codecs.
547 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
548 kVideoFoo, vp8_codec(), kExternal));
549 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
550 kVideoFoo, unknown_codec(), kExternal));
551 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
552 kVideoFoo, mixed_codecs(), kExternal));
554 // Valid audio types.
555 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
556 kAudioFoo, no_codecs(), kExternal));
557 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
558 kAudioFoo, fooaudio_codec(), kExternal));
560 // Valid audio types - parent key system.
561 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
562 kAudioFoo, no_codecs(), kExternalParent));
563 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
564 kAudioFoo, fooaudio_codec(), kExternalParent));
566 // Non-audio codecs.
567 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
568 kAudioFoo, foovideo_codec(), kExternal));
569 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
570 kAudioFoo, foovideo_and_fooaudio_codecs(), kExternal));
572 // Non-container2 codec.
573 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
574 kAudioFoo, vorbis_codec(), kExternal));
577 #if defined(OS_ANDROID)
578 TEST_F(KeySystemsTest, GetUUID_RegisteredExternalDecryptor) {
579 std::vector<uint8> uuid = GetUUID(kExternal);
580 EXPECT_EQ(16u, uuid.size());
581 EXPECT_EQ(0xef, uuid[15]);
584 TEST_F(KeySystemsTest, GetUUID_RegisteredAesDecryptor) {
585 EXPECT_TRUE(GetUUID(kUsesAes).empty());
588 TEST_F(KeySystemsTest, GetUUID_Unrecognized) {
589 std::vector<uint8> uuid;
590 EXPECT_DEBUG_DEATH_PORTABLE(uuid = GetUUID(kExternalParent),
591 "com.example is not a known concrete system");
592 EXPECT_TRUE(uuid.empty());
594 EXPECT_DEBUG_DEATH_PORTABLE(uuid = GetUUID(""), " is not a concrete system");
595 EXPECT_TRUE(uuid.empty());
597 #endif // defined(OS_ANDROID)
599 TEST_F(KeySystemsTest, KeySystemNameForUMA) {
600 EXPECT_EQ("ClearKey", KeySystemNameForUMAUTF8(kPrefixedClearKey));
601 // Unprefixed is not yet supported.
602 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kUnprefixedClearKey));
604 // External Clear Key never has a UMA name.
605 EXPECT_EQ("Unknown", KeySystemNameForUMAUTF8(kExternalClearKey));
607 #if defined(WIDEVINE_CDM_AVAILABLE)
608 const char* const kTestWidevineUmaName = "Widevine";
609 #else
610 const char* const kTestWidevineUmaName = "Unknown";
611 #endif
612 EXPECT_EQ(kTestWidevineUmaName,
613 KeySystemNameForUMAUTF8("com.widevine.alpha"));
616 } // namespace content