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

Side by Side Diff: content/common/media/content_decryption_module_service_unittest.cc

Issue 1637083002: Add CdmService to keep track of CDMs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ContentDecryptionModule Created 4 years, 9 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
OLDNEW
(Empty)
1 // Copyright 2016 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.
4
5 #include <algorithm>
6 #include <string>
7 #include <vector>
8
9 #include "base/base_paths.h"
10 #include "base/files/file_path.h"
11 #include "base/strings/string16.h"
12 #include "base/strings/string_split.h"
13 #include "base/strings/string_util.h"
14 #include "base/strings/utf_string_conversions.h"
15 #include "content/public/common/content_decryption_module_service.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 namespace content {
19
20 const char kTestPath[] = "/aa/bb";
21 const char kVersion1[] = "1.1.1.1";
22 const char kVersion2[] = "1.1.1.2";
23 const char kTestCodecs[] = "webm,mp4";
24 const char kCodecDelimiter[] = ",";
25 const char kTestInitDataTypes[] = "keyids,cenc,webm";
26 const char kInitDataTypeDelimiter[] = ",";
27
28 // For simplicity and to make failures easier to diagnose, this test uses
29 // std::string instead of base::FilePath and std::vector<base::string16>
30 // for module_library_path and supported_codecs, respectively.
31 class ContentDecryptionModuleServiceTest : public testing::Test {
32 public:
33 ContentDecryptionModuleServiceTest() {}
34 ~ContentDecryptionModuleServiceTest() override {}
35
36 protected:
37 void Register(const std::string& key_system,
38 const std::string& version,
39 const std::string& module_library_path,
40 const std::string& supported_codecs,
41 const std::string& supported_init_data_types) {
42 std::vector<base::string16> codecs =
43 base::SplitString(base::ASCIIToUTF16(supported_codecs),
44 base::ASCIIToUTF16(kCodecDelimiter),
45 base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
46 std::vector<base::string16> init_data_types =
47 base::SplitString(base::ASCIIToUTF16(supported_init_data_types),
48 base::ASCIIToUTF16(kInitDataTypeDelimiter),
49 base::KEEP_WHITESPACE, base::SPLIT_WANT_ALL);
50 ContentDecryptionModuleService::GetInstance()->Register(
51 key_system, version,
52 base::FilePath::FromUTF8Unsafe(module_library_path), codecs,
53 init_data_types);
54 }
55
56 bool PathDefined(const std::string& key_system, const std::string& version) {
57 base::FilePath module_library_path;
58 return ContentDecryptionModuleService::GetInstance()->GetCdmLibraryPath(
59 key_system, version, &module_library_path);
60 }
61
62 std::string Path(const std::string& key_system, const std::string& version) {
63 base::FilePath module_library_path;
64 EXPECT_TRUE(
65 ContentDecryptionModuleService::GetInstance()->GetCdmLibraryPath(
66 key_system, version, &module_library_path));
67 return module_library_path.AsUTF8Unsafe();
68 }
69
70 bool CodecsDefined(const std::string& key_system,
71 const std::string& version) {
72 std::vector<base::string16> supported_codecs;
73 return ContentDecryptionModuleService::GetInstance()->GetSupportedCodecs(
74 key_system, version, &supported_codecs);
75 }
76
77 std::string Codecs(const std::string& key_system,
78 const std::string& version) {
79 std::vector<base::string16> supported_codecs;
80 EXPECT_TRUE(
81 ContentDecryptionModuleService::GetInstance()->GetSupportedCodecs(
82 key_system, version, &supported_codecs));
83 return base::UTF16ToASCII(base::JoinString(
84 supported_codecs, base::ASCIIToUTF16(kCodecDelimiter)));
85 }
86
87 bool InitDataTypesDefined(const std::string& key_system,
88 const std::string& version) {
89 std::vector<base::string16> supported_init_data_types;
90 return ContentDecryptionModuleService::GetInstance()
91 ->GetSupportedInitDataTypes(key_system, version,
92 &supported_init_data_types);
93 }
94
95 std::string InitDataTypes(const std::string& key_system,
96 const std::string& version) {
97 std::vector<base::string16> supported_init_data_types;
98 EXPECT_TRUE(ContentDecryptionModuleService::GetInstance()
99 ->GetSupportedInitDataTypes(key_system, version,
100 &supported_init_data_types));
101 return base::UTF16ToASCII(base::JoinString(
102 supported_init_data_types, base::ASCIIToUTF16(kInitDataTypeDelimiter)));
103 }
104
105 void GetAllRegisteredKeySystems(
106 std::vector<std::pair<std::string, std::string>>* key_systems) {
107 std::vector<std::pair<std::string, base::FilePath>> registered_key_systems;
108 ContentDecryptionModuleService::GetInstance()->GetAllRegisteredModules(
109 &registered_key_systems);
110 for (const auto& key_system : registered_key_systems)
111 key_systems->push_back(
112 std::make_pair(key_system.first, key_system.second.AsUTF8Unsafe()));
113 }
114 };
115
116 // Note that KeySystemService is a singleton, and thus the actions of
117 // one test impact other tests. So each test defines a different key system
118 // name to avoid conflicts.
119
120 TEST_F(ContentDecryptionModuleServiceTest, Register) {
121 const char kTestKeySystem[] = "test1";
122 Register(kTestKeySystem, kVersion1, kTestPath, kTestCodecs,
123 kTestInitDataTypes);
124 EXPECT_TRUE(PathDefined(kTestKeySystem, kVersion1));
125 EXPECT_TRUE(CodecsDefined(kTestKeySystem, kVersion1));
126 }
127
128 TEST_F(ContentDecryptionModuleServiceTest, Path) {
129 const char kTestKeySystem[] = "test2";
130 Register(kTestKeySystem, kVersion1, kTestPath, kTestCodecs,
131 kTestInitDataTypes);
132 EXPECT_TRUE(PathDefined(kTestKeySystem, kVersion1));
133 EXPECT_EQ(Path(kTestKeySystem, kVersion1), kTestPath);
134 }
135
136 TEST_F(ContentDecryptionModuleServiceTest, Codecs) {
137 const char kTestKeySystem[] = "test3";
138 Register(kTestKeySystem, kVersion1, kTestPath, kTestCodecs,
139 kTestInitDataTypes);
140 EXPECT_TRUE(CodecsDefined(kTestKeySystem, kVersion1));
141 EXPECT_EQ(Codecs(kTestKeySystem, kVersion1), kTestCodecs);
142 }
143
144 TEST_F(ContentDecryptionModuleServiceTest, InitDataTypes) {
145 const char kTestKeySystem[] = "test4";
146 Register(kTestKeySystem, kVersion1, kTestPath, kTestCodecs,
147 kTestInitDataTypes);
148 EXPECT_TRUE(InitDataTypesDefined(kTestKeySystem, kVersion1));
149 EXPECT_EQ(InitDataTypes(kTestKeySystem, kVersion1), kTestInitDataTypes);
150 }
151
152 TEST_F(ContentDecryptionModuleServiceTest, ReRegister) {
153 const char kTestKeySystem[] = "test5";
154 Register(kTestKeySystem, kVersion1, "/bb/cc", "unknown", "cenc");
155 EXPECT_TRUE(PathDefined(kTestKeySystem, kVersion1));
156 EXPECT_EQ(Path(kTestKeySystem, kVersion1), "/bb/cc");
157 EXPECT_TRUE(CodecsDefined(kTestKeySystem, kVersion1));
158 EXPECT_EQ(Codecs(kTestKeySystem, kVersion1), "unknown");
159 EXPECT_TRUE(InitDataTypesDefined(kTestKeySystem, kVersion1));
160 EXPECT_EQ(InitDataTypes(kTestKeySystem, kVersion1), "cenc");
161
162 // Now register same key system with different values.
163 Register(kTestKeySystem, kVersion1, kTestPath, kTestCodecs,
164 kTestInitDataTypes);
165 EXPECT_TRUE(PathDefined(kTestKeySystem, kVersion1));
166 EXPECT_EQ(Path(kTestKeySystem, kVersion1), kTestPath);
167 EXPECT_TRUE(CodecsDefined(kTestKeySystem, kVersion1));
168 EXPECT_EQ(Codecs(kTestKeySystem, kVersion1), kTestCodecs);
169 EXPECT_TRUE(InitDataTypesDefined(kTestKeySystem, kVersion1));
170 EXPECT_EQ(InitDataTypes(kTestKeySystem, kVersion1), kTestInitDataTypes);
171 }
172
173 TEST_F(ContentDecryptionModuleServiceTest, DifferentVersions) {
174 const char kTestKeySystem[] = "test6";
175 Register(kTestKeySystem, kVersion1, kTestPath, kTestCodecs,
176 kTestInitDataTypes);
177 EXPECT_TRUE(PathDefined(kTestKeySystem, kVersion1));
178 EXPECT_FALSE(PathDefined(kTestKeySystem, kVersion2));
179 EXPECT_EQ(Path(kTestKeySystem, kVersion1), kTestPath);
180 EXPECT_TRUE(CodecsDefined(kTestKeySystem, kVersion1));
181 EXPECT_FALSE(CodecsDefined(kTestKeySystem, kVersion2));
182 EXPECT_EQ(Codecs(kTestKeySystem, kVersion1), kTestCodecs);
183 EXPECT_TRUE(InitDataTypesDefined(kTestKeySystem, kVersion1));
184 EXPECT_FALSE(InitDataTypesDefined(kTestKeySystem, kVersion2));
185 EXPECT_EQ(InitDataTypes(kTestKeySystem, kVersion1), kTestInitDataTypes);
186 }
187
188 TEST_F(ContentDecryptionModuleServiceTest, LatestVersion) {
189 const char kTestKeySystem[] = "test7";
190 Register(kTestKeySystem, kVersion1, kTestPath, kTestCodecs,
191 kTestInitDataTypes);
192 EXPECT_TRUE(PathDefined(kTestKeySystem, std::string()));
193 EXPECT_EQ(Path(kTestKeySystem, std::string()), kTestPath);
194 EXPECT_TRUE(CodecsDefined(kTestKeySystem, std::string()));
195 EXPECT_EQ(Codecs(kTestKeySystem, std::string()), kTestCodecs);
196 EXPECT_TRUE(InitDataTypesDefined(kTestKeySystem, std::string()));
197 EXPECT_EQ(InitDataTypes(kTestKeySystem, std::string()), kTestInitDataTypes);
198 }
199
200 TEST_F(ContentDecryptionModuleServiceTest, MultipleVersions) {
201 const char kTestKeySystem[] = "test8";
202 Register(kTestKeySystem, kVersion1, kTestPath, kTestCodecs,
203 kTestInitDataTypes);
204 Register(kTestKeySystem, kVersion2, "/bb/cc", "unknown", "cenc");
205
206 EXPECT_TRUE(PathDefined(kTestKeySystem, kVersion1));
207 EXPECT_TRUE(PathDefined(kTestKeySystem, kVersion2));
208 EXPECT_TRUE(PathDefined(kTestKeySystem, std::string()));
209 EXPECT_EQ(Path(kTestKeySystem, kVersion1), kTestPath);
210 EXPECT_EQ(Path(kTestKeySystem, kVersion2), "/bb/cc");
211 EXPECT_EQ(Path(kTestKeySystem, std::string()), "/bb/cc");
212
213 EXPECT_TRUE(CodecsDefined(kTestKeySystem, kVersion1));
214 EXPECT_TRUE(CodecsDefined(kTestKeySystem, kVersion2));
215 EXPECT_TRUE(CodecsDefined(kTestKeySystem, std::string()));
216 EXPECT_EQ(Codecs(kTestKeySystem, kVersion1), kTestCodecs);
217 EXPECT_EQ(Codecs(kTestKeySystem, kVersion2), "unknown");
218 EXPECT_EQ(Codecs(kTestKeySystem, std::string()), "unknown");
219
220 EXPECT_TRUE(InitDataTypesDefined(kTestKeySystem, kVersion1));
221 EXPECT_TRUE(InitDataTypesDefined(kTestKeySystem, kVersion2));
222 EXPECT_TRUE(InitDataTypesDefined(kTestKeySystem, std::string()));
223 EXPECT_EQ(InitDataTypes(kTestKeySystem, kVersion1), kTestInitDataTypes);
224 EXPECT_EQ(InitDataTypes(kTestKeySystem, kVersion2), "cenc");
225 EXPECT_EQ(InitDataTypes(kTestKeySystem, std::string()), "cenc");
226 }
227
228 TEST_F(ContentDecryptionModuleServiceTest, RegisteredKeySystems) {
229 const char kTestKeySystem[] = "test9";
230 const char kDifferentTestPath[] = "/cc/dd";
231 std::vector<std::pair<std::string, std::string>> key_systems;
232
233 Register(kTestKeySystem, kVersion1, kDifferentTestPath, kTestCodecs,
234 kTestInitDataTypes);
235 GetAllRegisteredKeySystems(&key_systems);
236 EXPECT_GT(key_systems.size(), 0u);
237
238 // Verify |kTestKeySystem| and |kDifferentTestPath| is in the returned data.
239 bool found = false;
240 for (const auto& key_system : key_systems) {
241 if (key_system.first == kTestKeySystem) {
242 EXPECT_EQ(key_system.second, kDifferentTestPath);
243 found = true;
244 break;
245 }
246 }
247 EXPECT_EQ(found, true);
248 }
249
250 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698