Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
| 7 #include "base/win/windows_version.h" | 7 #include "base/win/windows_version.h" |
| 8 #include "build/build_config.h" | 8 #include "build/build_config.h" |
| 9 #include "content/browser/media/media_browsertest.h" | 9 #include "content/browser/media/media_browsertest.h" |
| 10 #include "content/public/common/content_switches.h" | 10 #include "content/public/common/content_switches.h" |
| 11 #include "content/public/test/browser_test_utils.h" | 11 #include "content/public/test/browser_test_utils.h" |
| 12 #include "content/shell/browser/shell.h" | 12 #include "content/shell/browser/shell.h" |
| 13 | |
| 13 #if defined(OS_ANDROID) | 14 #if defined(OS_ANDROID) |
| 14 #include "base/android/build_info.h" | 15 #include "base/android/build_info.h" |
| 15 #include "media/base/media.h" | 16 #include "media/base/media.h" |
| 17 #include "media/base/media_switches.h" | |
| 16 #endif | 18 #endif |
| 17 | 19 |
| 18 #if defined(ENABLE_MOJO_RENDERER) | 20 #if defined(ENABLE_MOJO_RENDERER) |
| 19 // TODO(xhwang): Enable tests by running AesDecryptor in remote mojo CDM and | 21 // TODO(xhwang): Enable tests by running AesDecryptor in remote mojo CDM and |
| 20 // using ExternalClearKey instead of ClearKey: crbug.com/641559 | 22 // using ExternalClearKey instead of ClearKey: crbug.com/641559 |
| 21 #define DISABLE_ENCRYPTED_MEDIA_PLAYBACK_TESTS 1 | 23 #define DISABLE_ENCRYPTED_MEDIA_PLAYBACK_TESTS 1 |
| 22 #endif | 24 #endif |
| 23 | 25 |
| 24 // Available key systems. | 26 // Available key systems. |
| 25 const char kClearKeyKeySystem[] = "org.w3.clearkey"; | 27 const char kClearKeyKeySystem[] = "org.w3.clearkey"; |
| 26 | 28 |
| 29 #if defined(OS_ANDROID) | |
| 30 const char kExternalClearKeyKeySystem[] = "org.chromium.externalclearkey"; | |
| 31 #endif | |
| 32 | |
| 27 // Supported media types. | 33 // Supported media types. |
| 28 const char kWebMVorbisAudioOnly[] = "audio/webm; codecs=\"vorbis\""; | 34 const char kWebMVorbisAudioOnly[] = "audio/webm; codecs=\"vorbis\""; |
| 29 #if !defined(DISABLE_ENCRYPTED_MEDIA_PLAYBACK_TESTS) | 35 #if !defined(DISABLE_ENCRYPTED_MEDIA_PLAYBACK_TESTS) |
| 30 const char kWebMOpusAudioOnly[] = "audio/webm; codecs=\"opus\""; | 36 const char kWebMOpusAudioOnly[] = "audio/webm; codecs=\"opus\""; |
| 31 const char kWebMVP8VideoOnly[] = "video/webm; codecs=\"vp8\""; | 37 const char kWebMVP8VideoOnly[] = "video/webm; codecs=\"vp8\""; |
| 32 const char kWebMOpusAudioVP9Video[] = "video/webm; codecs=\"opus, vp9\""; | 38 const char kWebMOpusAudioVP9Video[] = "video/webm; codecs=\"opus, vp9\""; |
| 33 #endif | 39 #endif |
| 34 const char kWebMVorbisAudioVP8Video[] = "video/webm; codecs=\"vorbis, vp8\""; | 40 const char kWebMVorbisAudioVP8Video[] = "video/webm; codecs=\"vorbis, vp8\""; |
| 35 | 41 |
| 36 // EME-specific test results and errors. | 42 // EME-specific test results and errors. |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 53 if (base::android::BuildInfo::GetInstance()->sdk_int() < 16) { | 59 if (base::android::BuildInfo::GetInstance()->sdk_int() < 16) { |
| 54 VLOG(0) << "MSE is only supported in Android 4.1 and later."; | 60 VLOG(0) << "MSE is only supported in Android 4.1 and later."; |
| 55 return false; | 61 return false; |
| 56 } | 62 } |
| 57 #endif // defined(OS_ANDROID) | 63 #endif // defined(OS_ANDROID) |
| 58 return true; | 64 return true; |
| 59 } | 65 } |
| 60 | 66 |
| 61 // Tests encrypted media playback with a combination of parameters: | 67 // Tests encrypted media playback with a combination of parameters: |
| 62 // - char*: Key system name. | 68 // - char*: Key system name. |
| 63 // - bool: True to load media using MSE, otherwise use src. | 69 // - SrcType: The type of video src used to load media, MSE or SRC. |
| 70 // It is okay to run this test as a non-parameterized test, in this case, | |
| 71 // GetParam() should not be called. | |
| 64 class EncryptedMediaTest : public content::MediaBrowserTest, | 72 class EncryptedMediaTest : public content::MediaBrowserTest, |
| 65 public testing::WithParamInterface<std::tr1::tuple<const char*, SrcType> > { | 73 public testing::WithParamInterface<std::tr1::tuple<const char*, SrcType> > { |
| 66 public: | 74 public: |
| 67 // Can only be used in parameterized (*_P) tests. | 75 // Can only be used in parameterized (*_P) tests. |
| 68 const std::string CurrentKeySystem() { | 76 const std::string CurrentKeySystem() { |
| 69 return std::tr1::get<0>(GetParam()); | 77 return std::tr1::get<0>(GetParam()); |
| 70 } | 78 } |
| 71 | 79 |
| 72 // Can only be used in parameterized (*_P) tests. | 80 // Can only be used in parameterized (*_P) tests. |
| 73 SrcType CurrentSourceType() { | 81 SrcType CurrentSourceType() { |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 135 // We want to fail quickly when a test fails because an error is encountered. | 143 // We want to fail quickly when a test fails because an error is encountered. |
| 136 void AddWaitForTitles(content::TitleWatcher* title_watcher) override { | 144 void AddWaitForTitles(content::TitleWatcher* title_watcher) override { |
| 137 MediaBrowserTest::AddWaitForTitles(title_watcher); | 145 MediaBrowserTest::AddWaitForTitles(title_watcher); |
| 138 title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kEmeNotSupportedError)); | 146 title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kEmeNotSupportedError)); |
| 139 title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kEmeKeyError)); | 147 title_watcher->AlsoWaitForTitle(base::ASCIIToUTF16(kEmeKeyError)); |
| 140 } | 148 } |
| 141 | 149 |
| 142 void SetUpCommandLine(base::CommandLine* command_line) override { | 150 void SetUpCommandLine(base::CommandLine* command_line) override { |
| 143 command_line->AppendSwitch( | 151 command_line->AppendSwitch( |
| 144 switches::kDisableGestureRequirementForMediaPlayback); | 152 switches::kDisableGestureRequirementForMediaPlayback); |
| 153 #if defined(OS_ANDROID) | |
| 154 command_line->AppendSwitchASCII(switches::kEnableFeatures, | |
| 155 media::kExternalClearKeyForTesting.name); | |
| 156 #endif | |
| 145 } | 157 } |
| 146 }; | 158 }; |
| 147 | 159 |
| 148 using ::testing::Combine; | 160 using ::testing::Combine; |
| 149 using ::testing::Values; | 161 using ::testing::Values; |
| 150 | 162 |
| 151 INSTANTIATE_TEST_CASE_P(SRC_ClearKey, EncryptedMediaTest, | 163 INSTANTIATE_TEST_CASE_P(SRC_ClearKey, EncryptedMediaTest, |
| 152 Combine(Values(kClearKeyKeySystem), Values(SRC))); | 164 Combine(Values(kClearKeyKeySystem), Values(SRC))); |
| 153 | 165 |
| 154 INSTANTIATE_TEST_CASE_P(MSE_ClearKey, EncryptedMediaTest, | 166 INSTANTIATE_TEST_CASE_P(MSE_ClearKey, EncryptedMediaTest, |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 208 TestFrameSizeChange(); | 220 TestFrameSizeChange(); |
| 209 } | 221 } |
| 210 #endif // !defined(DISABLE_ENCRYPTED_MEDIA_PLAYBACK_TESTS) | 222 #endif // !defined(DISABLE_ENCRYPTED_MEDIA_PLAYBACK_TESTS) |
| 211 | 223 |
| 212 IN_PROC_BROWSER_TEST_F(EncryptedMediaTest, UnknownKeySystemThrowsException) { | 224 IN_PROC_BROWSER_TEST_F(EncryptedMediaTest, UnknownKeySystemThrowsException) { |
| 213 RunEncryptedMediaTest(kDefaultEmePlayer, "bear-a_enc-a.webm", | 225 RunEncryptedMediaTest(kDefaultEmePlayer, "bear-a_enc-a.webm", |
| 214 kWebMVorbisAudioOnly, "com.example.foo", MSE, | 226 kWebMVorbisAudioOnly, "com.example.foo", MSE, |
| 215 kEmeNotSupportedError); | 227 kEmeNotSupportedError); |
| 216 } | 228 } |
| 217 | 229 |
| 230 #if defined(OS_ANDROID) | |
| 231 // On Android, External Clear Key is supported in shell/ by using mojo CDM | |
|
Peter Beverloo
2016/09/22 11:55:23
nit: consider using //content/shell/ instead of ju
xhwang
2016/09/22 16:54:58
Good to know. Done.
| |
| 232 // with AesDecryptor running in the GPU process. | |
| 233 // On other platforms, External Clear Key is supported in chrome/, so it is | |
| 234 // tested in browser_tests. | |
| 235 IN_PROC_BROWSER_TEST_F(EncryptedMediaTest, ExternalClearKeyPlayback) { | |
| 236 RunSimpleEncryptedMediaTest("bear-320x240-av_enc-av.webm", | |
| 237 kWebMVorbisAudioVP8Video, | |
| 238 kExternalClearKeyKeySystem, MSE); | |
| 239 } | |
| 240 #endif | |
| 241 | |
| 218 } // namespace content | 242 } // namespace content |
| OLD | NEW |