Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(501)

Side by Side Diff: content/renderer/media/crypto/key_systems_unittest.cc

Issue 246033002: Store SupportedCodecs in KeySystemInfo and KeySystems. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: eme_codec.h Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « content/renderer/media/crypto/key_systems.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 15 matching lines...) Expand all
26 #define EXPECT_DEBUG_DEATH_PORTABLE(statement, regex) \ 26 #define EXPECT_DEBUG_DEATH_PORTABLE(statement, regex) \
27 do { statement; } while (false) 27 do { statement; } while (false)
28 #else 28 #else
29 #include "base/logging.h" 29 #include "base/logging.h"
30 #define EXPECT_DEBUG_DEATH_PORTABLE(statement, regex) \ 30 #define EXPECT_DEBUG_DEATH_PORTABLE(statement, regex) \
31 LOG(WARNING) << "Death tests are not supported on this platform.\n" \ 31 LOG(WARNING) << "Death tests are not supported on this platform.\n" \
32 << "Statement '" #statement "' cannot be verified."; 32 << "Statement '" #statement "' cannot be verified.";
33 #endif // defined(NDEBUG) 33 #endif // defined(NDEBUG)
34 #endif // defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID) 34 #endif // defined(GTEST_HAS_DEATH_TEST) && !defined(OS_ANDROID)
35 35
36 namespace content {
37
36 using blink::WebString; 38 using blink::WebString;
37 39
38 // These are the (fake) key systems that are registered for these tests. 40 // These are the (fake) key systems that are registered for these tests.
39 // kUsesAes uses the AesDecryptor like Clear Key. 41 // kUsesAes uses the AesDecryptor like Clear Key.
40 // kExternal uses an external CDM, such as Pepper-based or Android platform CDM. 42 // kExternal uses an external CDM, such as Pepper-based or Android platform CDM.
41 const char kUsesAes[] = "org.example.clear"; 43 const char kUsesAes[] = "org.example.clear";
42 const char kUsesAesParent[] = "org.example"; // Not registered. 44 const char kUsesAesParent[] = "org.example"; // Not registered.
43 const char kExternal[] = "com.example.test"; 45 const char kExternal[] = "com.example.test";
44 const char kExternalParent[] = "com.example"; 46 const char kExternalParent[] = "com.example";
45 47
46 const char kClearKey[] = "org.w3.clearkey"; 48 const char kClearKey[] = "org.w3.clearkey";
47 const char kPrefixedClearKey[] = "webkit-org.w3.clearkey"; 49 const char kPrefixedClearKey[] = "webkit-org.w3.clearkey";
48 const char kExternalClearKey[] = "org.chromium.externalclearkey"; 50 const char kExternalClearKey[] = "org.chromium.externalclearkey";
49 51
50 const char kAudioWebM[] = "audio/webm"; 52 const char kAudioWebM[] = "audio/webm";
51 const char kVideoWebM[] = "video/webm"; 53 const char kVideoWebM[] = "video/webm";
52 const char kVorbis[] = "vorbis";
53 const char kVP8[] = "vp8";
54 const char kVP80[] = "vp8.0";
55
56 const char kAudioFoo[] = "audio/foo"; 54 const char kAudioFoo[] = "audio/foo";
57 const char kVideoFoo[] = "video/foo"; 55 const char kVideoFoo[] = "video/foo";
58 const char kFooAudioCodec[] = "fooaudio";
59 const char kFooVideoCodec[] = "foovideo";
60 56
61 namespace content { 57 // Pick some arbitrary bit fields as long as they are not in conflict with the
58 // real ones.
59 enum TestCodec {
60 TEST_CODEC_FOO_AUDIO = 1 << 10, // An audio codec for foo container.
61 TEST_CODEC_FOO_AUDIO_ALL = TEST_CODEC_FOO_AUDIO,
62 TEST_CODEC_FOO_VIDEO = 1 << 11, // A video codec for foo container.
63 TEST_CODEC_FOO_VIDEO_ALL = TEST_CODEC_FOO_VIDEO,
64 TEST_CODEC_FOO_ALL = TEST_CODEC_FOO_AUDIO_ALL | TEST_CODEC_FOO_VIDEO_ALL
65 };
66
67 COMPILE_ASSERT((TEST_CODEC_FOO_ALL & EME_CODEC_ALL) == EME_CODEC_NONE,
68 test_codec_masks_should_only_use_invalid_codec_masks);
69
70 // Adds test container and codec masks.
71 // This function must be called after SetContentClient() is called.
72 // More details: AddXxxMask() will create KeySystems if it hasn't been created.
73 // During KeySystems's construction GetContentClient() will be used to add key
74 // systems. In test code, the content client is set by SetContentClient().
75 // Therefore, SetContentClient() must be called before this function to avoid
76 // access violation.
77 static void AddContainerAndCodecMasksForTest() {
78 // Since KeySystems is a singleton. Make sure we only add test container and
79 // codec masks once per process.
80 static bool is_test_masks_added = false;
81
82 if (is_test_masks_added)
83 return;
84
85 AddContainerMask("audio/foo", TEST_CODEC_FOO_AUDIO_ALL);
86 AddContainerMask("video/foo", TEST_CODEC_FOO_ALL);
87 AddCodecMask("fooaudio", TEST_CODEC_FOO_AUDIO);
88 AddCodecMask("foovideo", TEST_CODEC_FOO_VIDEO);
89
90 is_test_masks_added = true;
91 }
62 92
63 class TestContentRendererClient : public ContentRendererClient { 93 class TestContentRendererClient : public ContentRendererClient {
64 virtual void AddKeySystems( 94 virtual void AddKeySystems(
65 std::vector<content::KeySystemInfo>* key_systems) OVERRIDE; 95 std::vector<content::KeySystemInfo>* key_systems) OVERRIDE;
66 }; 96 };
67 97
68 void TestContentRendererClient::AddKeySystems( 98 void TestContentRendererClient::AddKeySystems(
69 std::vector<content::KeySystemInfo>* key_systems) { 99 std::vector<content::KeySystemInfo>* key_systems) {
70 KeySystemInfo aes(kUsesAes); 100 KeySystemInfo aes(kUsesAes);
71 101 aes.supported_codecs = EME_CODEC_WEBM_ALL;
72 aes.supported_types[kAudioWebM].insert(kVorbis); 102 aes.supported_codecs |= TEST_CODEC_FOO_ALL;
73 aes.supported_types[kVideoWebM] = aes.supported_types[kAudioWebM];
74 aes.supported_types[kVideoWebM].insert(kVP8);
75 aes.supported_types[kVideoWebM].insert(kVP80);
76 aes.supported_types[kAudioFoo].insert(kFooAudioCodec);
77 aes.supported_types[kVideoFoo] = aes.supported_types[kAudioFoo];
78 aes.supported_types[kVideoFoo].insert(kFooVideoCodec);
79
80 aes.use_aes_decryptor = true; 103 aes.use_aes_decryptor = true;
81
82 key_systems->push_back(aes); 104 key_systems->push_back(aes);
83 105
84 KeySystemInfo ext(kExternal); 106 KeySystemInfo ext(kExternal);
85 107 ext.supported_codecs = EME_CODEC_WEBM_ALL;
86 ext.supported_types[kAudioWebM].insert(kVorbis); 108 ext.supported_codecs |= TEST_CODEC_FOO_ALL;
87 ext.supported_types[kVideoWebM] = ext.supported_types[kAudioWebM];
88 ext.supported_types[kVideoWebM].insert(kVP8);
89 ext.supported_types[kVideoWebM].insert(kVP80);
90 ext.supported_types[kAudioFoo].insert(kFooAudioCodec);
91 ext.supported_types[kVideoFoo] = ext.supported_types[kAudioFoo];
92 ext.supported_types[kVideoFoo].insert(kFooVideoCodec);
93
94 ext.parent_key_system = kExternalParent; 109 ext.parent_key_system = kExternalParent;
95
96 #if defined(ENABLE_PEPPER_CDMS) 110 #if defined(ENABLE_PEPPER_CDMS)
97 ext.pepper_type = "application/x-ppapi-external-cdm"; 111 ext.pepper_type = "application/x-ppapi-external-cdm";
98 #endif // defined(ENABLE_PEPPER_CDMS) 112 #endif // defined(ENABLE_PEPPER_CDMS)
99
100 key_systems->push_back(ext); 113 key_systems->push_back(ext);
101 } 114 }
102 115
103 class KeySystemsTest : public testing::Test { 116 class KeySystemsTest : public testing::Test {
104 protected: 117 protected:
105 KeySystemsTest() { 118 KeySystemsTest() {
106 vp8_codec_.push_back("vp8"); 119 vp8_codec_.push_back("vp8");
107 120
108 vp80_codec_.push_back("vp8.0"); 121 vp80_codec_.push_back("vp8.0");
109 122
(...skipping 22 matching lines...) Expand all
132 // The TestContentClient is not available inside Death Tests on some 145 // The TestContentClient is not available inside Death Tests on some
133 // platforms (see below). Therefore, always provide a TestContentClient. 146 // platforms (see below). Therefore, always provide a TestContentClient.
134 // Explanation: When Death Tests fork, there is a valid ContentClient. 147 // Explanation: When Death Tests fork, there is a valid ContentClient.
135 // However, when they launch a new process instead of forking, the global 148 // However, when they launch a new process instead of forking, the global
136 // variable is not copied and for some reason TestContentClientInitializer 149 // variable is not copied and for some reason TestContentClientInitializer
137 // does not get created to set the global variable in the new process. 150 // does not get created to set the global variable in the new process.
138 SetContentClient(&test_content_client_); 151 SetContentClient(&test_content_client_);
139 SetRendererClientForTesting(&content_renderer_client_); 152 SetRendererClientForTesting(&content_renderer_client_);
140 } 153 }
141 154
155 virtual void SetUp() OVERRIDE {
156 AddContainerAndCodecMasksForTest();
157 }
158
142 virtual ~KeySystemsTest() { 159 virtual ~KeySystemsTest() {
143 // Clear the use of content_client_, which was set in SetUp(). 160 // Clear the use of content_client_, which was set in SetUp().
144 SetContentClient(NULL); 161 SetContentClient(NULL);
145 } 162 }
146 163
147 typedef std::vector<std::string> CodecVector; 164 typedef std::vector<std::string> CodecVector;
148 165
149 const CodecVector& no_codecs() const { return no_codecs_; } 166 const CodecVector& no_codecs() const { return no_codecs_; }
150 167
151 const CodecVector& vp8_codec() const { return vp8_codec_; } 168 const CodecVector& vp8_codec() const { return vp8_codec_; }
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after
578 595
579 #if defined(WIDEVINE_CDM_AVAILABLE) 596 #if defined(WIDEVINE_CDM_AVAILABLE)
580 const char* const kTestWidevineUmaName = "Widevine"; 597 const char* const kTestWidevineUmaName = "Widevine";
581 #else 598 #else
582 const char* const kTestWidevineUmaName = "Unknown"; 599 const char* const kTestWidevineUmaName = "Unknown";
583 #endif 600 #endif
584 EXPECT_EQ(kTestWidevineUmaName, KeySystemNameForUMA("com.widevine.alpha")); 601 EXPECT_EQ(kTestWidevineUmaName, KeySystemNameForUMA("com.widevine.alpha"));
585 } 602 }
586 603
587 } // namespace content 604 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/crypto/key_systems.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698