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.
8 #include "base/base_switches.h"
9 #include "base/command_line.h"
10 #include "base/files/file_path.h"
11 #include "base/path_service.h"
12 #include "base/strings/utf_string_conversions.h"
13 #include "chrome/browser/ui/browser.h"
14 #include "chrome/browser/ui/tabs/tab_strip_model.h"
15 #include "chrome/common/chrome_paths.h"
16 #include "chrome/test/base/in_process_browser_test.h"
17 #include "chrome/test/base/ui_test_utils.h"
18 #include "content/public/common/content_switches.h"
19 #include "content/public/test/browser_test_utils.h"
22 #include "widevine_cdm_version.h" // In SHARED_INTERMEDIATE_DIR.
24 #if defined(OS_ANDROID)
25 #error This file needs to be updated to run on Android.
28 #if defined(USE_PROPRIETARY_CODECS)
29 #define EXPECT_PROPRIETARY EXPECT_TRUE
31 #define EXPECT_PROPRIETARY EXPECT_FALSE
34 // Expectations for External Clear Key.
35 #if defined(ENABLE_PEPPER_CDMS)
36 #define EXPECT_ECK EXPECT_TRUE
37 #define EXPECT_ECKPROPRIETARY EXPECT_PROPRIETARY
39 #define EXPECT_ECK EXPECT_FALSE
40 #define EXPECT_ECKPROPRIETARY EXPECT_FALSE
41 #endif // defined(ENABLE_PEPPER_CDMS)
43 // Expectations for Widevine.
44 // Note: Widevine is not available on platforms using components because
45 // RegisterPepperCdm() cannot set the codecs.
46 // TODO(ddorwin): Enable these tests after we have the ability to use the CUS
47 // in these tests. See http://crbug.com/311724.
48 #if defined(WIDEVINE_CDM_AVAILABLE) && !defined(WIDEVINE_CDM_IS_COMPONENT)
49 #define EXPECT_WV EXPECT_TRUE
51 #if defined(WIDEVINE_CDM_AVC1_SUPPORT_AVAILABLE)
52 #define EXPECT_WVMP4 EXPECT_TRUE
53 #define EXPECT_WVAVC1 EXPECT_TRUE
54 #if defined(WIDEVINE_CDM_AAC_SUPPORT_AVAILABLE)
55 #define EXPECT_WVAVC1AAC EXPECT_TRUE
57 #define EXPECT_WVAVC1AAC EXPECT_FALSE
58 #endif // defined(WIDEVINE_CDM_AAC_SUPPORT_AVAILABLE)
59 #else // !defined(WIDEVINE_CDM_AVC1_SUPPORT_AVAILABLE)
60 #define EXPECT_WVMP4 EXPECT_FALSE
61 #define EXPECT_WVAVC1 EXPECT_FALSE
62 #define EXPECT_WVAVC1AAC EXPECT_FALSE
63 #endif // defined(WIDEVINE_CDM_AVC1_SUPPORT_AVAILABLE)
65 #if defined(WIDEVINE_CDM_AAC_SUPPORT_AVAILABLE)
66 #define EXPECT_WVAAC EXPECT_TRUE
68 #define EXPECT_WVAAC EXPECT_FALSE
71 #else // defined(WIDEVINE_CDM_AVAILABLE) && !defined(WIDEVINE_CDM_IS_COMPONENT)
72 #define EXPECT_WV EXPECT_FALSE
73 #define EXPECT_WVMP4 EXPECT_FALSE
74 #define EXPECT_WVAVC1 EXPECT_FALSE
75 #define EXPECT_WVAVC1AAC EXPECT_FALSE
76 #define EXPECT_WVAAC EXPECT_FALSE
77 #endif // defined(WIDEVINE_CDM_AVAILABLE) &&
78 // !defined(WIDEVINE_CDM_IS_COMPONENT)
82 const char kPrefixedClearKey[] = "webkit-org.w3.clearkey";
83 const char kPrefixedClearKeyParent[] = "webkit-org.w3";
84 // TODO(ddorwin): Duplicate prefixed tests for unprefixed.
85 const char kUnprefixedClearKey[] = "org.w3.clearkey";
86 const char kExternalClearKey[] = "org.chromium.externalclearkey";
87 const char kWidevineAlpha[] = "com.widevine.alpha";
88 const char kWidevine[] = "com.widevine";
89 const char kWidevineAlphaHr[] = "com.widevine.alpha.hr";
90 const char kWidevineAlphaHrNonCompositing[] =
91 "com.widevine.alpha.hrnoncompositing";
93 // TODO(xhwang): Simplify this test! See http://crbug.com/367158
95 class EncryptedMediaIsTypeSupportedTest : public InProcessBrowserTest {
97 EncryptedMediaIsTypeSupportedTest()
98 : is_test_page_loaded_(false), is_pepper_cdm_registered_(false) {
99 vp8_codec_.push_back("vp8");
101 vp80_codec_.push_back("vp8.0");
103 vp9_codec_.push_back("vp9");
105 vp90_codec_.push_back("vp9.0");
107 vorbis_codec_.push_back("vorbis");
109 vp8_and_vorbis_codecs_.push_back("vp8");
110 vp8_and_vorbis_codecs_.push_back("vorbis");
112 vp9_and_vorbis_codecs_.push_back("vp9");
113 vp9_and_vorbis_codecs_.push_back("vorbis");
115 avc1_codec_.push_back("avc1");
117 avc1_extended_codec_.push_back("avc1.4D400C");
119 avc1_dot_codec_.push_back("avc1.");
121 avc2_codec_.push_back("avc2");
123 avc3_codec_.push_back("avc3");
125 avc3_extended_codec_.push_back("avc3.64001f");
127 aac_codec_.push_back("mp4a");
129 avc1_and_aac_codecs_.push_back("avc1");
130 avc1_and_aac_codecs_.push_back("mp4a");
132 unknown_codec_.push_back("foo");
134 mixed_codecs_.push_back("vorbis");
135 mixed_codecs_.push_back("avc1");
138 typedef std::vector<std::string> CodecVector;
140 const CodecVector& no_codecs() const { return no_codecs_; }
141 const CodecVector& vp8_codec() const { return vp8_codec_; }
142 const CodecVector& vp80_codec() const { return vp80_codec_; }
143 const CodecVector& vp9_codec() const { return vp9_codec_; }
144 const CodecVector& vp90_codec() const { return vp90_codec_; }
145 const CodecVector& vorbis_codec() const { return vorbis_codec_; }
146 const CodecVector& vp8_and_vorbis_codecs() const {
147 return vp8_and_vorbis_codecs_;
149 const CodecVector& vp9_and_vorbis_codecs() const {
150 return vp9_and_vorbis_codecs_;
152 const CodecVector& avc1_codec() const { return avc1_codec_; }
153 const CodecVector& avc1_extended_codec() const {
154 return avc1_extended_codec_;
156 const CodecVector& avc1_dot_codec() const { return avc1_dot_codec_; }
157 const CodecVector& avc2_codec() const { return avc2_codec_; }
158 const CodecVector& avc3_codec() const { return avc3_codec_; }
159 const CodecVector& avc3_extended_codec() const {
160 return avc3_extended_codec_;
162 const CodecVector& aac_codec() const { return aac_codec_; }
163 const CodecVector& avc1_and_aac_codecs() const {
164 return avc1_and_aac_codecs_;
166 const CodecVector& unknown_codec() const { return unknown_codec_; }
167 const CodecVector& mixed_codecs() const { return mixed_codecs_; }
169 // Update the command line to load |adapter_name| for
170 // |pepper_type_for_key_system|.
171 void RegisterPepperCdm(CommandLine* command_line,
172 const std::string& adapter_name,
173 const std::string& pepper_type_for_key_system,
174 bool expect_adapter_exists = true) {
175 DCHECK(!is_pepper_cdm_registered_)
176 << "RegisterPepperCdm() can only be called once.";
177 is_pepper_cdm_registered_ = true;
179 // Append the switch to register the appropriate adapter.
180 base::FilePath plugin_dir;
181 EXPECT_TRUE(PathService::Get(base::DIR_MODULE, &plugin_dir));
182 base::FilePath plugin_lib = plugin_dir.AppendASCII(adapter_name);
183 EXPECT_EQ(expect_adapter_exists, base::PathExists(plugin_lib));
184 base::FilePath::StringType pepper_plugin = plugin_lib.value();
185 pepper_plugin.append(FILE_PATH_LITERAL("#CDM#0.1.0.0;"));
187 pepper_plugin.append(base::ASCIIToWide(pepper_type_for_key_system));
189 pepper_plugin.append(pepper_type_for_key_system);
191 command_line->AppendSwitchNative(switches::kRegisterPepperPlugins,
195 void LoadTestPage() {
196 // Load the test page needed. IsConcreteSupportedKeySystem() needs some
197 // JavaScript and a video loaded in order to work.
198 if (!is_test_page_loaded_) {
199 ASSERT_TRUE(test_server()->Start());
200 GURL gurl = test_server()->GetURL(
201 "files/media/test_key_system_instantiation.html");
202 ui_test_utils::NavigateToURL(browser(), gurl);
203 is_test_page_loaded_ = true;
207 bool IsConcreteSupportedKeySystem(const std::string& key) {
209 "window.domAutomationController.send(testKeySystemInstantiation('");
211 command.append("'));");
213 // testKeySystemInstantiation() is a JavaScript function which needs to
218 EXPECT_TRUE(content::ExecuteScriptAndExtractString(
219 browser()->tab_strip_model()->GetActiveWebContents(),
222 CHECK(result == "success" || result == "NotSupportedError") << result;
223 return (result == "success");
226 bool IsSupportedKeySystemWithMediaMimeType(const std::string& type,
227 const CodecVector& codecs,
228 const std::string& keySystem) {
229 std::string command("document.createElement('video').canPlayType(");
231 // Simple case, pass "null" as first argument.
232 command.append("null");
233 DCHECK(codecs.empty());
236 command.append(type);
237 if (!codecs.empty()) {
238 command.append("; codecs=\"");
239 for (CodecVector::const_iterator it = codecs.begin();
245 command.replace(command.length() - 1, 1, "\"");
249 command.append(",'");
250 command.append(keySystem);
251 command.append("')");
254 EXPECT_TRUE(content::ExecuteScriptAndExtractString(
255 browser()->tab_strip_model()->GetActiveWebContents(),
256 "window.domAutomationController.send(" + command + ");",
258 return (result == "maybe" || result == "probably");
262 const CodecVector no_codecs_;
263 CodecVector vp8_codec_;
264 CodecVector vp80_codec_;
265 CodecVector vp9_codec_;
266 CodecVector vp90_codec_;
267 CodecVector vorbis_codec_;
268 CodecVector vp8_and_vorbis_codecs_;
269 CodecVector vp9_and_vorbis_codecs_;
270 CodecVector avc1_codec_;
271 CodecVector avc1_extended_codec_;
272 CodecVector avc1_dot_codec_;
273 CodecVector avc2_codec_;
274 CodecVector avc3_codec_;
275 CodecVector avc3_extended_codec_;
276 CodecVector aac_codec_;
277 CodecVector avc1_and_aac_codecs_;
278 CodecVector unknown_codec_;
279 CodecVector mixed_codecs_;
280 bool is_test_page_loaded_;
281 bool is_pepper_cdm_registered_;
284 // For ExternalClearKey tests, ensure that the ClearKey adapter is loaded.
285 class EncryptedMediaIsTypeSupportedExternalClearKeyTest
286 : public EncryptedMediaIsTypeSupportedTest {
287 #if defined(ENABLE_PEPPER_CDMS)
289 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
290 // Platform-specific filename relative to the chrome executable.
291 const char adapter_file_name[] =
292 #if defined(OS_MACOSX)
293 "clearkeycdmadapter.plugin";
294 #elif defined(OS_WIN)
295 "clearkeycdmadapter.dll";
296 #elif defined(OS_POSIX)
297 "libclearkeycdmadapter.so";
300 const std::string pepper_name("application/x-ppapi-clearkey-cdm");
301 RegisterPepperCdm(command_line, adapter_file_name, pepper_name);
303 #endif // defined(ENABLE_PEPPER_CDMS)
306 // For Widevine tests, ensure that the Widevine adapter is loaded.
307 class EncryptedMediaIsTypeSupportedWidevineTest
308 : public EncryptedMediaIsTypeSupportedTest {
309 #if defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS) && \
310 defined(WIDEVINE_CDM_IS_COMPONENT)
312 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
313 // File name of the adapter on different platforms.
314 const char adapter_file_name[] =
315 #if defined(OS_MACOSX)
316 "widevinecdmadapter.plugin";
317 #elif defined(OS_WIN)
318 "widevinecdmadapter.dll";
319 #else // OS_LINUX, etc.
320 "libwidevinecdmadapter.so";
323 const std::string pepper_name("application/x-ppapi-widevine-cdm");
324 RegisterPepperCdm(command_line, adapter_file_name, pepper_name);
326 #endif // defined(WIDEVINE_CDM_AVAILABLE) && defined(ENABLE_PEPPER_CDMS) &&
327 // defined(WIDEVINE_CDM_IS_COMPONENT)
330 #if defined(ENABLE_PEPPER_CDMS)
331 // Registers ClearKey CDM with the wrong path (filename).
332 class EncryptedMediaIsTypeSupportedClearKeyCDMRegisteredWithWrongPathTest
333 : public EncryptedMediaIsTypeSupportedTest {
335 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
336 RegisterPepperCdm(command_line,
337 "clearkeycdmadapterwrongname.dll",
338 "application/x-ppapi-clearkey-cdm",
343 // Registers Widevine CDM with the wrong path (filename).
344 class EncryptedMediaIsTypeSupportedWidevineCDMRegisteredWithWrongPathTest
345 : public EncryptedMediaIsTypeSupportedTest {
347 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE {
348 RegisterPepperCdm(command_line,
349 "widevinecdmadapterwrongname.dll",
350 "application/x-ppapi-widevine-cdm",
354 #endif // defined(ENABLE_PEPPER_CDMS)
356 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedTest, ClearKey_Basic) {
357 EXPECT_TRUE(IsConcreteSupportedKeySystem(kPrefixedClearKey));
358 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
359 "video/webm", no_codecs(), kPrefixedClearKey));
361 // Not yet out from behind the vendor prefix.
362 EXPECT_FALSE(IsConcreteSupportedKeySystem(kUnprefixedClearKey));
363 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
364 "video/webm", no_codecs(), kUnprefixedClearKey));
367 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedTest, ClearKey_Parent) {
368 // The parent should be supported but is not. See http://crbug.com/164303.
369 EXPECT_FALSE(IsConcreteSupportedKeySystem(kPrefixedClearKeyParent));
370 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
371 "video/webm", no_codecs(), kPrefixedClearKeyParent));
374 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedTest,
375 ClearKey_IsSupportedKeySystem_InvalidVariants) {
377 EXPECT_FALSE(IsConcreteSupportedKeySystem("webkit-org.w3.ClEaRkEy"));
378 // This should fail, but currently canPlayType() converts it to lowercase.
379 // See http://crbug.com/286036.
380 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
381 "video/webm", no_codecs(), "webkit-org.w3.ClEaRkEy"));
383 // TLDs are not allowed.
384 EXPECT_FALSE(IsConcreteSupportedKeySystem("webkit-org."));
385 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
386 "video/webm", no_codecs(), "webkit-org."));
387 EXPECT_FALSE(IsConcreteSupportedKeySystem("webkit-org"));
388 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
389 "video/webm", no_codecs(), "webkit-org"));
390 EXPECT_FALSE(IsConcreteSupportedKeySystem("org."));
392 IsSupportedKeySystemWithMediaMimeType("video/webm", no_codecs(), "org."));
393 EXPECT_FALSE(IsConcreteSupportedKeySystem("org"));
395 IsSupportedKeySystemWithMediaMimeType("video/webm", no_codecs(), "org"));
398 EXPECT_FALSE(IsConcreteSupportedKeySystem("webkit-org.w3."));
399 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
400 "video/webm", no_codecs(), "webkit-org.w3."));
403 EXPECT_FALSE(IsConcreteSupportedKeySystem("webkit-org.w3.clearke"));
404 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
405 "video/webm", no_codecs(), "webkit-org.w3.clearke"));
408 EXPECT_FALSE(IsConcreteSupportedKeySystem("webkit-org.w3.clearkeyz"));
409 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
410 "video/webm", no_codecs(), "webkit-org.w3.clearkeyz"));
412 // There are no child key systems for Clear Key.
413 EXPECT_FALSE(IsConcreteSupportedKeySystem("webkit-org.w3.clearkey.foo"));
414 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
415 "video/webm", no_codecs(), "webkit-org.w3.clearkey.foo"));
418 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedTest,
419 IsSupportedKeySystemWithMediaMimeType_ClearKey_NoType) {
420 // These two should be true. See http://crbug.com/164303.
421 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
422 std::string(), no_codecs(), kPrefixedClearKey));
423 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
424 std::string(), no_codecs(), kPrefixedClearKeyParent));
426 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
427 std::string(), no_codecs(), "webkit-org.w3.foo"));
428 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
429 std::string(), no_codecs(), "webkit-org.w3.clearkey.foo"));
432 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedTest,
433 IsSupportedKeySystemWithMediaMimeType_ClearKey_WebM) {
434 // Valid video types.
435 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
436 "video/webm", no_codecs(), kPrefixedClearKey));
437 // The parent should be supported but is not. See http://crbug.com/164303.
438 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
439 "video/webm", no_codecs(), kPrefixedClearKeyParent));
440 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
441 "video/webm", vp8_codec(), kPrefixedClearKey));
442 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
443 "video/webm", vp80_codec(), kPrefixedClearKey));
444 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
445 "video/webm", vp8_and_vorbis_codecs(), kPrefixedClearKey));
446 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
447 "video/webm", vp9_codec(), kPrefixedClearKey));
448 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
449 "video/webm", vp90_codec(), kPrefixedClearKey));
450 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
451 "video/webm", vp9_and_vorbis_codecs(), kPrefixedClearKey));
452 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
453 "video/webm", vorbis_codec(), kPrefixedClearKey));
456 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
457 "video/webm", avc1_codec(), kPrefixedClearKey));
458 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
459 "video/webm", unknown_codec(), kPrefixedClearKey));
460 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
461 "video/webm", mixed_codecs(), kPrefixedClearKey));
463 // Valid audio types.
464 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
465 "audio/webm", no_codecs(), kPrefixedClearKey));
466 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
467 "audio/webm", vorbis_codec(), kPrefixedClearKey));
470 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
471 "audio/webm", vp8_codec(), kPrefixedClearKey));
472 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
473 "audio/webm", vp8_and_vorbis_codecs(), kPrefixedClearKey));
474 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
475 "audio/webm", vp9_codec(), kPrefixedClearKey));
476 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
477 "audio/webm", vp9_and_vorbis_codecs(), kPrefixedClearKey));
480 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
481 "audio/webm", aac_codec(), kPrefixedClearKey));
484 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedTest,
485 IsSupportedKeySystemWithMediaMimeType_ClearKey_MP4) {
486 // Valid video types.
487 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
488 "video/mp4", no_codecs(), kPrefixedClearKey));
489 // The parent should be supported but is not. See http://crbug.com/164303.
490 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
491 "video/mp4", no_codecs(), kPrefixedClearKeyParent));
492 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
493 "video/mp4", avc1_codec(), kPrefixedClearKey));
494 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
495 "video/mp4", avc1_and_aac_codecs(), kPrefixedClearKey));
496 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
497 "video/mp4", avc3_codec(), kPrefixedClearKey));
498 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
499 "video/mp4", aac_codec(), kPrefixedClearKey));
502 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
503 "video/mp4", avc1_extended_codec(), kPrefixedClearKey));
504 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
505 "video/mp4", avc3_extended_codec(), kPrefixedClearKey));
507 // Invalid codec format, but canPlayType() strips away the period.
508 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
509 "video/mp4", avc1_dot_codec(), kPrefixedClearKey));
512 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
513 "video/mp4", avc2_codec(), kPrefixedClearKey));
514 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
515 "video/mp4", vp8_codec(), kPrefixedClearKey));
516 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
517 "video/mp4", unknown_codec(), kPrefixedClearKey));
518 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
519 "video/mp4", mixed_codecs(), kPrefixedClearKey));
521 // Valid audio types.
522 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
523 "audio/mp4", no_codecs(), kPrefixedClearKey));
524 EXPECT_PROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
525 "audio/mp4", aac_codec(), kPrefixedClearKey));
528 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
529 "audio/mp4", avc1_codec(), kPrefixedClearKey));
530 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
531 "audio/mp4", avc1_and_aac_codecs(), kPrefixedClearKey));
532 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
533 "audio/mp4", avc3_codec(), kPrefixedClearKey));
536 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
537 "audio/mp4", vorbis_codec(), kPrefixedClearKey));
541 // External Clear Key
544 // When defined(ENABLE_PEPPER_CDMS), this also tests the Pepper CDM check.
545 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedExternalClearKeyTest,
546 ExternalClearKey_Basic) {
547 EXPECT_ECK(IsConcreteSupportedKeySystem(kExternalClearKey));
548 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
549 "video/webm", no_codecs(), kExternalClearKey));
552 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedExternalClearKeyTest,
553 ExternalClearKey_Parent) {
554 const char* const kExternalClearKeyParent = "org.chromium";
556 // The parent should be supported but is not. See http://crbug.com/164303.
557 EXPECT_FALSE(IsConcreteSupportedKeySystem(kExternalClearKeyParent));
558 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
559 "video/webm", no_codecs(), kExternalClearKeyParent));
562 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedExternalClearKeyTest,
563 ExternalClearKey_IsSupportedKeySystem_InvalidVariants) {
565 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.chromium.ExTeRnAlClEaRkEy"));
566 // This should fail, but currently canPlayType() converts it to lowercase.
567 // See http://crbug.com/286036.
568 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
569 "video/webm", no_codecs(), "org.chromium.ExTeRnAlClEaRkEy"));
571 // TLDs are not allowed.
572 EXPECT_FALSE(IsConcreteSupportedKeySystem("org."));
574 IsSupportedKeySystemWithMediaMimeType("video/webm", no_codecs(), "org."));
575 EXPECT_FALSE(IsConcreteSupportedKeySystem("org"));
577 IsSupportedKeySystemWithMediaMimeType("video/webm", no_codecs(), "org"));
580 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.chromium."));
581 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
582 "video/webm", no_codecs(), "org.chromium."));
585 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.chromium.externalclearke"));
586 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
587 "video/webm", no_codecs(), "org.chromium.externalclearke"));
590 EXPECT_FALSE(IsConcreteSupportedKeySystem("org.chromium.externalclearkeyz"));
591 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
592 "video/webm", no_codecs(), "org.chromium.externalclearkeyz"));
594 // There are no child key systems for Clear Key.
596 IsConcreteSupportedKeySystem("org.chromium.externalclearkey.foo"));
597 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
598 "video/webm", no_codecs(), "org.chromium.externalclearkey.foo"));
601 IN_PROC_BROWSER_TEST_F(
602 EncryptedMediaIsTypeSupportedExternalClearKeyTest,
603 IsSupportedKeySystemWithMediaMimeType_ExternalClearKey_NoType) {
604 // These two should be true. See http://crbug.com/164303.
605 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
606 std::string(), no_codecs(), kExternalClearKey));
607 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
608 std::string(), no_codecs(), "org.chromium"));
610 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
611 std::string(), no_codecs(), "org.chromium.foo"));
612 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
613 std::string(), no_codecs(), "org.chromium.externalclearkey.foo"));
616 IN_PROC_BROWSER_TEST_F(
617 EncryptedMediaIsTypeSupportedExternalClearKeyTest,
618 IsSupportedKeySystemWithMediaMimeType_ExternalClearKey_WebM) {
619 // Valid video types.
620 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
621 "video/webm", no_codecs(), kExternalClearKey));
622 // The parent should be supported but is not. See http://crbug.com/164303.
623 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
624 "video/webm", no_codecs(), "org.chromium"));
625 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
626 "video/webm", vp8_codec(), kExternalClearKey));
627 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
628 "video/webm", vp80_codec(), kExternalClearKey));
629 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
630 "video/webm", vp8_and_vorbis_codecs(), kExternalClearKey));
631 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
632 "video/webm", vp9_codec(), kExternalClearKey));
633 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
634 "video/webm", vp90_codec(), kExternalClearKey));
635 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
636 "video/webm", vp9_and_vorbis_codecs(), kExternalClearKey));
637 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
638 "video/webm", vorbis_codec(), kExternalClearKey));
641 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
642 "video/webm", avc1_codec(), kExternalClearKey));
643 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
644 "video/webm", unknown_codec(), kExternalClearKey));
645 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
646 "video/webm", mixed_codecs(), kExternalClearKey));
648 // Valid audio types.
649 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
650 "audio/webm", no_codecs(), kExternalClearKey));
651 EXPECT_ECK(IsSupportedKeySystemWithMediaMimeType(
652 "audio/webm", vorbis_codec(), kExternalClearKey));
655 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
656 "audio/webm", vp8_codec(), kExternalClearKey));
657 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
658 "audio/webm", vp8_and_vorbis_codecs(), kExternalClearKey));
659 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
660 "audio/webm", vp9_codec(), kExternalClearKey));
661 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
662 "audio/webm", vp9_and_vorbis_codecs(), kExternalClearKey));
665 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
666 "audio/webm", aac_codec(), kExternalClearKey));
669 IN_PROC_BROWSER_TEST_F(
670 EncryptedMediaIsTypeSupportedExternalClearKeyTest,
671 IsSupportedKeySystemWithMediaMimeType_ExternalClearKey_MP4) {
672 // Valid video types.
673 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
674 "video/mp4", no_codecs(), kExternalClearKey));
675 // The parent should be supported but is not. See http://crbug.com/164303.
676 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
677 "video/mp4", no_codecs(), "org.chromium"));
678 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
679 "video/mp4", avc1_codec(), kExternalClearKey));
680 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
681 "video/mp4", avc1_and_aac_codecs(), kExternalClearKey));
682 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
683 "video/mp4", avc3_codec(), kExternalClearKey));
684 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
685 "video/mp4", aac_codec(), kExternalClearKey));
688 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
689 "video/mp4", avc1_extended_codec(), kExternalClearKey));
690 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
691 "video/mp4", avc3_extended_codec(), kExternalClearKey));
693 // Invalid codec format, but canPlayType() strips away the period.
694 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
695 "video/mp4", avc1_dot_codec(), kExternalClearKey));
698 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
699 "video/mp4", avc2_codec(), kExternalClearKey));
700 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
701 "video/mp4", vp8_codec(), kExternalClearKey));
702 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
703 "video/mp4", unknown_codec(), kExternalClearKey));
704 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
705 "video/mp4", mixed_codecs(), kExternalClearKey));
707 // Valid audio types.
708 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
709 "audio/mp4", no_codecs(), kExternalClearKey));
710 EXPECT_ECKPROPRIETARY(IsSupportedKeySystemWithMediaMimeType(
711 "audio/mp4", aac_codec(), kExternalClearKey));
714 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
715 "audio/mp4", avc1_codec(), kExternalClearKey));
716 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
717 "audio/mp4", avc1_and_aac_codecs(), kExternalClearKey));
718 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
719 "audio/mp4", avc3_codec(), kExternalClearKey));
722 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
723 "audio/mp4", vorbis_codec(), kExternalClearKey));
730 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedWidevineTest,
732 #if defined(WIDEVINE_CDM_AVAILABLE) && defined(WIDEVINE_CDM_IS_COMPONENT)
733 EXPECT_TRUE(IsConcreteSupportedKeySystem(kWidevineAlpha));
735 EXPECT_WV(IsConcreteSupportedKeySystem(kWidevineAlpha));
737 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
738 "video/webm", no_codecs(), kWidevineAlpha));
741 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedWidevineTest,
743 // The parent system is not a concrete system but is supported.
744 EXPECT_FALSE(IsConcreteSupportedKeySystem(kWidevine));
745 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
746 "video/webm", no_codecs(), kWidevine));
749 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedWidevineTest,
750 Widevine_IsSupportedKeySystem_InvalidVariants) {
752 EXPECT_FALSE(IsConcreteSupportedKeySystem("com.widevine.AlPhA"));
753 // This should fail, but currently canPlayType() converts it to lowercase.
754 // See http://crbug.com/286036.
755 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
756 "video/webm", no_codecs(), "com.widevine.AlPhA"));
758 // TLDs are not allowed.
759 EXPECT_FALSE(IsConcreteSupportedKeySystem("com."));
761 IsSupportedKeySystemWithMediaMimeType("video/webm", no_codecs(), "com."));
762 EXPECT_FALSE(IsConcreteSupportedKeySystem("com"));
764 IsSupportedKeySystemWithMediaMimeType("video/webm", no_codecs(), "com"));
767 EXPECT_FALSE(IsConcreteSupportedKeySystem("com.widevine."));
768 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
769 "video/webm", no_codecs(), "com.widevine."));
772 EXPECT_FALSE(IsConcreteSupportedKeySystem("com.widevine.alph"));
773 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
774 "video/webm", no_codecs(), "com.widevine.alph"));
777 EXPECT_FALSE(IsConcreteSupportedKeySystem("com.widevine.alphab"));
778 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
779 "video/webm", no_codecs(), "com.widevine.alphab"));
781 // There are no child key systems for Widevine Alpha.
782 EXPECT_FALSE(IsConcreteSupportedKeySystem("com.widevine.alpha.foo"));
783 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
784 "video/webm", no_codecs(), "com.widevine.alpha.foo"));
787 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedWidevineTest,
788 IsSupportedKeySystemWithMediaMimeType_Widevine_NoType) {
789 // These two should be true. See http://crbug.com/164303.
790 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
791 std::string(), no_codecs(), kWidevineAlpha));
792 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
793 std::string(), no_codecs(), kWidevine));
795 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
796 std::string(), no_codecs(), "com.widevine.foo"));
797 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
798 std::string(), no_codecs(), "com.widevine.alpha.foo"));
801 // TODO(xhwang): Add VP9 Widevine tests after VP9 is supported by Widevine CDM.
802 // See http://crbug.com/361318
804 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedWidevineTest,
805 IsSupportedKeySystemWithMediaMimeType_Widevine_WebM) {
806 // Valid video types.
807 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
808 "video/webm", no_codecs(), kWidevineAlpha));
809 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
810 "video/webm", vp8_codec(), kWidevineAlpha));
811 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
812 "video/webm", vp80_codec(), kWidevineAlpha));
813 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
814 "video/webm", vp8_and_vorbis_codecs(), kWidevineAlpha));
815 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
816 "video/webm", vorbis_codec(), kWidevineAlpha));
818 // Valid video types - parent key system.
819 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
820 "video/webm", no_codecs(), kWidevine));
821 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
822 "video/webm", vp8_codec(), kWidevine));
823 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
824 "video/webm", vp80_codec(), kWidevine));
825 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
826 "video/webm", vp8_and_vorbis_codecs(), kWidevine));
827 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
828 "video/webm", vorbis_codec(), kWidevine));
831 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
832 "video/webm", avc1_codec(), kWidevineAlpha));
833 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
834 "video/webm", unknown_codec(), kWidevineAlpha));
835 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
836 "video/webm", mixed_codecs(), kWidevineAlpha));
838 // Valid audio types.
839 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
840 "audio/webm", no_codecs(), kWidevineAlpha));
841 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
842 "audio/webm", vorbis_codec(), kWidevineAlpha));
844 // Valid audio types - parent key system.
845 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
846 "audio/webm", no_codecs(), kWidevine));
847 EXPECT_WV(IsSupportedKeySystemWithMediaMimeType(
848 "audio/webm", vorbis_codec(), kWidevine));
851 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
852 "audio/webm", vp8_codec(), kWidevineAlpha));
853 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
854 "audio/webm", vp8_and_vorbis_codecs(), kWidevineAlpha));
857 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
858 "audio/webm", aac_codec(), kWidevineAlpha));
861 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedWidevineTest,
862 IsSupportedKeySystemWithMediaMimeType_Widevine_MP4) {
863 // Valid video types.
864 EXPECT_WVMP4(IsSupportedKeySystemWithMediaMimeType(
865 "video/mp4", no_codecs(), kWidevineAlpha));
866 EXPECT_WVAVC1(IsSupportedKeySystemWithMediaMimeType(
867 "video/mp4", avc1_codec(), kWidevineAlpha));
868 EXPECT_WVAVC1AAC(IsSupportedKeySystemWithMediaMimeType(
869 "video/mp4", avc1_and_aac_codecs(), kWidevineAlpha));
870 EXPECT_WVAVC1(IsSupportedKeySystemWithMediaMimeType(
871 "video/mp4", avc3_codec(), kWidevineAlpha));
872 EXPECT_WVAVC1AAC(IsSupportedKeySystemWithMediaMimeType(
873 "video/mp4", aac_codec(), kWidevineAlpha));
875 // Valid video types - parent key system.
876 EXPECT_WVMP4(IsSupportedKeySystemWithMediaMimeType(
877 "video/mp4", no_codecs(), kWidevine));
878 EXPECT_WVAVC1(IsSupportedKeySystemWithMediaMimeType(
879 "video/mp4", avc1_codec(), kWidevine));
880 EXPECT_WVAVC1AAC(IsSupportedKeySystemWithMediaMimeType(
881 "video/mp4", avc1_and_aac_codecs(), kWidevine));
882 EXPECT_WVAVC1AAC(IsSupportedKeySystemWithMediaMimeType(
883 "video/mp4", aac_codec(), kWidevine));
886 EXPECT_WVAVC1(IsSupportedKeySystemWithMediaMimeType(
887 "video/mp4", avc1_extended_codec(), kWidevineAlpha));
888 EXPECT_WVAVC1(IsSupportedKeySystemWithMediaMimeType(
889 "video/mp4", avc3_extended_codec(), kWidevineAlpha));
891 // Invalid codec format, but canPlayType() strips away the period.
892 EXPECT_WVAVC1(IsSupportedKeySystemWithMediaMimeType(
893 "video/mp4", avc1_dot_codec(), kWidevineAlpha));
896 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
897 "video/mp4", avc2_codec(), kWidevineAlpha));
898 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
899 "video/mp4", vp8_codec(), kWidevineAlpha));
900 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
901 "video/mp4", unknown_codec(), kWidevineAlpha));
902 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
903 "video/mp4", mixed_codecs(), kWidevineAlpha));
905 // Valid audio types.
906 EXPECT_WVMP4(IsSupportedKeySystemWithMediaMimeType(
907 "audio/mp4", no_codecs(), kWidevineAlpha));
908 EXPECT_WVAAC(IsSupportedKeySystemWithMediaMimeType(
909 "audio/mp4", aac_codec(), kWidevineAlpha));
911 // Valid audio types - parent key system.
912 EXPECT_WVMP4(IsSupportedKeySystemWithMediaMimeType(
913 "audio/mp4", no_codecs(), kWidevine));
914 EXPECT_WVAAC(IsSupportedKeySystemWithMediaMimeType(
915 "audio/mp4", aac_codec(), kWidevine));
918 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
919 "audio/mp4", avc1_codec(), kWidevineAlpha));
920 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
921 "audio/mp4", avc1_and_aac_codecs(), kWidevineAlpha));
922 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
923 "audio/mp4", avc3_codec(), kWidevineAlpha));
926 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
927 "audio/mp4", vorbis_codec(), kWidevineAlpha));
930 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedWidevineTest,
932 // HR support cannot be detected in tests, so this is expected to fail
934 EXPECT_FALSE(IsConcreteSupportedKeySystem(kWidevineAlphaHr));
935 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
936 "video/webm", no_codecs(), kWidevineAlphaHr));
939 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedWidevineTest,
940 Widevine_HR_NonCompositing_Basic) {
941 // HR non-compositing support cannot be detected in tests, so this is expected
942 // to fail everywhere.
943 EXPECT_FALSE(IsConcreteSupportedKeySystem(kWidevineAlphaHrNonCompositing));
944 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
945 "video/webm", no_codecs(), kWidevineAlphaHrNonCompositing));
948 #if defined(ENABLE_PEPPER_CDMS)
949 // Since this test fixture does not register the CDMs on the command line, the
950 // check for the CDMs in chrome_key_systems.cc should fail, and they should not
951 // be registered with KeySystems.
952 IN_PROC_BROWSER_TEST_F(EncryptedMediaIsTypeSupportedTest,
953 PepperCDMsNotRegistered) {
954 EXPECT_FALSE(IsConcreteSupportedKeySystem(kExternalClearKey));
955 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
956 "video/webm", no_codecs(), kExternalClearKey));
958 // This will fail in all builds unless widevine is available but not a
959 // component, in which case it is registered internally
960 #if !defined(WIDEVINE_CDM_AVAILABLE) || defined(WIDEVINE_CDM_IS_COMPONENT)
961 EXPECT_FALSE(IsConcreteSupportedKeySystem(kWidevineAlpha));
962 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
963 "video/webm", no_codecs(), kWidevineAlpha));
966 // Clear Key should still be registered.
967 EXPECT_TRUE(IsConcreteSupportedKeySystem(kPrefixedClearKey));
968 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
969 "video/webm", no_codecs(), kPrefixedClearKey));
971 // Not yet out from behind the vendor prefix.
972 EXPECT_FALSE(IsConcreteSupportedKeySystem(kUnprefixedClearKey));
973 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
974 "video/webm", no_codecs(), kUnprefixedClearKey));
977 // Since this test fixture does not register the CDMs on the command line, the
978 // check for the CDMs in chrome_key_systems.cc should fail, and they should not
979 // be registered with KeySystems.
980 IN_PROC_BROWSER_TEST_F(
981 EncryptedMediaIsTypeSupportedClearKeyCDMRegisteredWithWrongPathTest,
982 PepperCDMsRegisteredButAdapterNotPresent) {
983 EXPECT_FALSE(IsConcreteSupportedKeySystem(kExternalClearKey));
984 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
985 "video/webm", no_codecs(), kExternalClearKey));
987 // Clear Key should still be registered.
988 EXPECT_TRUE(IsConcreteSupportedKeySystem(kPrefixedClearKey));
989 EXPECT_TRUE(IsSupportedKeySystemWithMediaMimeType(
990 "video/webm", no_codecs(), kPrefixedClearKey));
992 // Not yet out from behind the vendor prefix.
993 EXPECT_FALSE(IsConcreteSupportedKeySystem(kUnprefixedClearKey));
994 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
995 "video/webm", no_codecs(), kUnprefixedClearKey));
998 // This will fail in all builds unless Widevine is available but not a
999 // component, in which case it is registered internally.
1000 // TODO(xhwang): Define EXPECT_WV and run this test in all cases.
1001 #if !defined(WIDEVINE_CDM_AVAILABLE) || defined(WIDEVINE_CDM_IS_COMPONENT)
1002 IN_PROC_BROWSER_TEST_F(
1003 EncryptedMediaIsTypeSupportedWidevineCDMRegisteredWithWrongPathTest,
1004 PepperCDMsRegisteredButAdapterNotPresent) {
1005 EXPECT_FALSE(IsConcreteSupportedKeySystem(kWidevineAlpha));
1006 EXPECT_FALSE(IsSupportedKeySystemWithMediaMimeType(
1007 "video/webm", no_codecs(), kWidevineAlpha));
1009 #endif // !defined(WIDEVINE_CDM_AVAILABLE) || defined(WIDEVINE_CDM_IS_COMPONENT)
1010 #endif // defined(ENABLE_PEPPER_CDMS)
1012 } // namespace chrome