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

Side by Side Diff: media/cdm/cenc_utils_unittest.cc

Issue 1163713007: Use 'pssh' data to determine key_id properly (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 6 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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "media/cdm/cenc_utils.h" 5 #include "media/cdm/cenc_utils.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
9 9
10 namespace media { 10 namespace media {
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 box->push_back('p'); 51 box->push_back('p');
52 box->push_back('s'); 52 box->push_back('s');
53 box->push_back('s'); 53 box->push_back('s');
54 box->push_back('h'); 54 box->push_back('h');
55 // Add version. 55 // Add version.
56 box->push_back(version); 56 box->push_back(version);
57 // Add flags. 57 // Add flags.
58 box->push_back(0); 58 box->push_back(0);
59 box->push_back(0); 59 box->push_back(0);
60 box->push_back(0); 60 box->push_back(0);
61 // Add Clear Key SystemID. 61 // Add Clear Key SystemID.
ddorwin 2015/06/04 19:57:17 s/CK/Common/
jrummell 2015/06/15 22:22:10 Done in rebase (https://codereview.chromium.org/11
62 box->push_back(0x10); 62 box->push_back(0x10);
63 box->push_back(0x77); 63 box->push_back(0x77);
64 box->push_back(0xEF); 64 box->push_back(0xEF);
65 box->push_back(0xEC); 65 box->push_back(0xEC);
66 box->push_back(0xC0); 66 box->push_back(0xC0);
67 box->push_back(0xB2); 67 box->push_back(0xB2);
68 box->push_back(0x4D); 68 box->push_back(0x4D);
69 box->push_back(0x02); 69 box->push_back(0x02);
70 box->push_back(0xAC); 70 box->push_back(0xAC);
71 box->push_back(0xE3); 71 box->push_back(0xE3);
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
164 private: 164 private:
165 std::vector<uint8_t> key1_; 165 std::vector<uint8_t> key1_;
166 std::vector<uint8_t> key2_; 166 std::vector<uint8_t> key2_;
167 std::vector<uint8_t> key3_; 167 std::vector<uint8_t> key3_;
168 std::vector<uint8_t> key4_; 168 std::vector<uint8_t> key4_;
169 }; 169 };
170 170
171 TEST_F(CencUtilsTest, EmptyPSSH) { 171 TEST_F(CencUtilsTest, EmptyPSSH) {
172 KeyIdList key_ids; 172 KeyIdList key_ids;
173 EXPECT_TRUE(ValidatePsshInput(std::vector<uint8_t>())); 173 EXPECT_TRUE(ValidatePsshInput(std::vector<uint8_t>()));
174 EXPECT_TRUE(GetKeyIdsForCommonSystemId(std::vector<uint8_t>(), &key_ids)); 174 EXPECT_FALSE(GetKeyIdsForCommonSystemId(std::vector<uint8_t>(), &key_ids));
175 EXPECT_EQ(0u, key_ids.size());
176 } 175 }
177 176
178 TEST_F(CencUtilsTest, PSSHVersion0) { 177 TEST_F(CencUtilsTest, PSSHVersion0) {
179 std::vector<uint8_t> box = MakePSSHBox(0); 178 std::vector<uint8_t> box = MakePSSHBox(0);
180 KeyIdList key_ids; 179 KeyIdList key_ids;
181 EXPECT_TRUE(ValidatePsshInput(box)); 180 EXPECT_TRUE(ValidatePsshInput(box));
182 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); 181 EXPECT_FALSE(GetKeyIdsForCommonSystemId(box, &key_ids));
183 EXPECT_EQ(0u, key_ids.size());
184 } 182 }
185 183
186 TEST_F(CencUtilsTest, PSSHVersion1WithNoKeys) { 184 TEST_F(CencUtilsTest, PSSHVersion1WithNoKeys) {
187 std::vector<uint8_t> box = MakePSSHBox(1); 185 std::vector<uint8_t> box = MakePSSHBox(1);
188 KeyIdList key_ids; 186 KeyIdList key_ids;
189 EXPECT_TRUE(ValidatePsshInput(box)); 187 EXPECT_TRUE(ValidatePsshInput(box));
190 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); 188 EXPECT_FALSE(GetKeyIdsForCommonSystemId(box, &key_ids));
191 EXPECT_EQ(0u, key_ids.size());
192 } 189 }
193 190
194 TEST_F(CencUtilsTest, PSSHVersion1WithOneKey) { 191 TEST_F(CencUtilsTest, PSSHVersion1WithOneKey) {
195 std::vector<uint8_t> box = MakePSSHBox(1, Key1()); 192 std::vector<uint8_t> box = MakePSSHBox(1, Key1());
196 KeyIdList key_ids; 193 KeyIdList key_ids;
197 EXPECT_TRUE(ValidatePsshInput(box)); 194 EXPECT_TRUE(ValidatePsshInput(box));
198 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); 195 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids));
199 EXPECT_EQ(1u, key_ids.size()); 196 EXPECT_EQ(1u, key_ids.size());
200 EXPECT_EQ(key_ids[0], Key1()); 197 EXPECT_EQ(key_ids[0], Key1());
201 } 198 }
(...skipping 16 matching lines...) Expand all
218 for (const auto& value : box1) 215 for (const auto& value : box1)
219 box0.push_back(value); 216 box0.push_back(value);
220 217
221 KeyIdList key_ids; 218 KeyIdList key_ids;
222 EXPECT_TRUE(ValidatePsshInput(box0)); 219 EXPECT_TRUE(ValidatePsshInput(box0));
223 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box0, &key_ids)); 220 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box0, &key_ids));
224 EXPECT_EQ(1u, key_ids.size()); 221 EXPECT_EQ(1u, key_ids.size());
225 EXPECT_EQ(key_ids[0], Key1()); 222 EXPECT_EQ(key_ids[0], Key1());
226 } 223 }
227 224
228 TEST_F(CencUtilsTest, PSSHVersion1Plus0) { 225 TEST_F(CencUtilsTest, PSSHVersion1Plus0) {
ddorwin 2015/06/04 19:57:17 There should be a test for Version2 then Version1
jrummell 2015/06/15 22:22:10 Done in rebase (https://codereview.chromium.org/11
229 std::vector<uint8_t> box0 = MakePSSHBox(0); 226 std::vector<uint8_t> box0 = MakePSSHBox(0);
230 std::vector<uint8_t> box1 = MakePSSHBox(1, Key1()); 227 std::vector<uint8_t> box1 = MakePSSHBox(1, Key1());
231 228
232 // Concatentate box0 into box1. 229 // Concatentate box0 into box1.
233 for (const auto& value : box0) 230 for (const auto& value : box0)
234 box1.push_back(value); 231 box1.push_back(value);
235 232
236 KeyIdList key_ids; 233 KeyIdList key_ids;
237 EXPECT_TRUE(ValidatePsshInput(box1)); 234 EXPECT_TRUE(ValidatePsshInput(box1));
238 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box1, &key_ids)); 235 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box1, &key_ids));
(...skipping 12 matching lines...) Expand all
251 // Concatentate box2 into box. 248 // Concatentate box2 into box.
252 for (const auto& value : box2) 249 for (const auto& value : box2)
253 box.push_back(value); 250 box.push_back(value);
254 251
255 KeyIdList key_ids; 252 KeyIdList key_ids;
256 EXPECT_TRUE(ValidatePsshInput(box)); 253 EXPECT_TRUE(ValidatePsshInput(box));
257 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); 254 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids));
258 EXPECT_EQ(4u, key_ids.size()); 255 EXPECT_EQ(4u, key_ids.size());
259 EXPECT_EQ(key_ids[0], Key1()); 256 EXPECT_EQ(key_ids[0], Key1());
260 EXPECT_EQ(key_ids[1], Key2()); 257 EXPECT_EQ(key_ids[1], Key2());
261 EXPECT_EQ(key_ids[2], Key3()); 258 EXPECT_EQ(key_ids[2], Key3());
ddorwin 2015/06/04 19:57:17 Does the code pull key IDs out of all boxes with t
jrummell 2015/06/15 22:22:10 Done.
262 EXPECT_EQ(key_ids[3], Key4()); 259 EXPECT_EQ(key_ids[3], Key4());
263 } 260 }
264 261
265 TEST_F(CencUtilsTest, InvalidPSSH) { 262 TEST_F(CencUtilsTest, InvalidPSSH) {
ddorwin 2015/06/04 19:57:17 The test name should describe *how* it is invalid.
jrummell 2015/06/15 22:22:10 Done.
266 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2()); 263 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2());
267 KeyIdList key_ids; 264 KeyIdList key_ids;
268 for (uint32 i = 1; i < box.size(); ++i) { 265 for (uint32 i = 1; i < box.size(); ++i) {
269 // Modify size of data passed to be less than real size. 266 // Modify size of data passed to be less than real size.
270 std::vector<uint8_t> truncated(&box[0], &box[0] + i); 267 std::vector<uint8_t> truncated(&box[0], &box[0] + i);
271 EXPECT_FALSE(ValidatePsshInput(truncated)); 268 EXPECT_FALSE(ValidatePsshInput(truncated));
272 EXPECT_FALSE(GetKeyIdsForCommonSystemId(truncated, &key_ids)); 269 EXPECT_FALSE(GetKeyIdsForCommonSystemId(truncated, &key_ids));
273 // Modify starting point. 270 // Modify starting point.
274 std::vector<uint8_t> changed_offset(&box[i], &box[i] + box.size() - i); 271 std::vector<uint8_t> changed_offset(&box[i], &box[i] + box.size() - i);
275 EXPECT_FALSE(ValidatePsshInput(changed_offset)); 272 EXPECT_FALSE(ValidatePsshInput(changed_offset));
276 EXPECT_FALSE(GetKeyIdsForCommonSystemId(changed_offset, &key_ids)); 273 EXPECT_FALSE(GetKeyIdsForCommonSystemId(changed_offset, &key_ids));
277 } 274 }
278 } 275 }
279 276
280 TEST_F(CencUtilsTest, InvalidSystemID) { 277 TEST_F(CencUtilsTest, InvalidSystemID) {
ddorwin 2015/06/04 19:57:17 s/Invalid/Unrecognized/
jrummell 2015/06/15 22:22:09 Done.
281 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2()); 278 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2());
282 279
283 // Modify the System ID. 280 // Modify the System ID.
284 ++box[20]; 281 ++box[20];
285 282
286 KeyIdList key_ids; 283 KeyIdList key_ids;
287 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids)); 284 EXPECT_FALSE(GetKeyIdsForCommonSystemId(box, &key_ids));
288 EXPECT_EQ(0u, key_ids.size());
289 } 285 }
290 286
291 TEST_F(CencUtilsTest, InvalidFlags) { 287 TEST_F(CencUtilsTest, InvalidFlags) {
292 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2()); 288 std::vector<uint8_t> box = MakePSSHBox(1, Key1(), Key2());
293 289
294 // Modify flags. 290 // Modify flags.
295 box[10] = 3; 291 box[10] = 3;
296 292
297 KeyIdList key_ids; 293 KeyIdList key_ids;
298 // TODO(jrummell): This should fail as the 'pssh' box is skipped. 294 EXPECT_FALSE(GetKeyIdsForCommonSystemId(box, &key_ids));
299 EXPECT_TRUE(GetKeyIdsForCommonSystemId(box, &key_ids));
300 EXPECT_EQ(0u, key_ids.size());
301 } 295 }
302 296
303 TEST_F(CencUtilsTest, LongSize) { 297 TEST_F(CencUtilsTest, LongSize) {
304 const uint8_t data[] = { 298 const uint8_t data[] = {
305 0x00, 0x00, 0x00, 0x01, // size = 1 299 0x00, 0x00, 0x00, 0x01, // size = 1
306 0x70, 0x73, 0x73, 0x68, // 'pssh' 300 0x70, 0x73, 0x73, 0x68, // 'pssh'
307 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, // longsize 301 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, // longsize
308 0x01, // version 302 0x01, // version
309 0x00, 0x00, 0x00, // flags 303 0x00, 0x00, 0x00, // flags
310 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID 304 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID
311 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, 305 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B,
312 0x00, 0x00, 0x00, 0x02, // key count 306 0x00, 0x00, 0x00, 0x02, // key count
313 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1 307 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1
314 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, 308 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03,
315 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2 309 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2
316 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, 310 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04,
317 0x00, 0x00, 0x00, 0x00 // datasize 311 0x00, 0x00, 0x00, 0x00 // datasize
318 }; 312 };
319 313
320 KeyIdList key_ids; 314 KeyIdList key_ids;
321 EXPECT_TRUE( 315 EXPECT_TRUE(
322 ValidatePsshInput(std::vector<uint8_t>(data, data + arraysize(data)))); 316 ValidatePsshInput(std::vector<uint8_t>(data, data + arraysize(data))));
323 EXPECT_TRUE(GetKeyIdsForCommonSystemId( 317 EXPECT_TRUE(GetKeyIdsForCommonSystemId(
324 std::vector<uint8_t>(data, data + arraysize(data)), &key_ids)); 318 std::vector<uint8_t>(data, data + arraysize(data)), &key_ids));
325 EXPECT_EQ(2u, key_ids.size()); 319 EXPECT_EQ(2u, key_ids.size());
326 } 320 }
327 321
328 TEST_F(CencUtilsTest, NoSize) { 322 TEST_F(CencUtilsTest, NoSize) {
ddorwin 2015/06/04 19:57:17 SizeIsZero (there is a size)
jrummell 2015/06/15 22:22:09 Done.
329 const uint8_t data[] = { 323 const uint8_t data[] = {
330 0x00, 0x00, 0x00, 0x00, // size = 0 324 0x00, 0x00, 0x00, 0x00, // size = 0
331 0x70, 0x73, 0x73, 0x68, // 'pssh' 325 0x70, 0x73, 0x73, 0x68, // 'pssh'
332 0x01, // version 326 0x01, // version
333 0x00, 0x00, 0x00, // flags 327 0x00, 0x00, 0x00, // flags
334 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID 328 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID
335 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, 329 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B,
336 0x00, 0x00, 0x00, 0x02, // key count 330 0x00, 0x00, 0x00, 0x02, // key count
337 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1 331 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1
338 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, 332 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03,
339 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2 333 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2
340 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, 334 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04,
341 0x00, 0x00, 0x00, 0x00 // datasize 335 0x00, 0x00, 0x00, 0x00 // datasize
342 }; 336 };
343 337
344 KeyIdList key_ids; 338 KeyIdList key_ids;
345 EXPECT_TRUE( 339 EXPECT_TRUE(
346 ValidatePsshInput(std::vector<uint8_t>(data, data + arraysize(data)))); 340 ValidatePsshInput(std::vector<uint8_t>(data, data + arraysize(data))));
ddorwin 2015/06/04 19:57:17 Is size 0 valid?
jrummell 2015/06/15 22:22:10 Yes. It means the box extends to the end of the da
347 EXPECT_TRUE(GetKeyIdsForCommonSystemId( 341 EXPECT_TRUE(GetKeyIdsForCommonSystemId(
348 std::vector<uint8_t>(data, data + arraysize(data)), &key_ids)); 342 std::vector<uint8_t>(data, data + arraysize(data)), &key_ids));
349 EXPECT_EQ(2u, key_ids.size()); 343 EXPECT_EQ(2u, key_ids.size());
350 } 344 }
351 345
352 TEST_F(CencUtilsTest, HugeSize) { 346 TEST_F(CencUtilsTest, HugeSize) {
353 const uint8_t data[] = { 347 const uint8_t data[] = {
354 0x00, 0x00, 0x00, 0x01, // size = 1 348 0x00, 0x00, 0x00, 0x01, // size = 1
355 0x70, 0x73, 0x73, 0x68, // 'pssh' 349 0x70, 0x73, 0x73, 0x68, // 'pssh'
356 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // longsize = big 350 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, // longsize = big
357 0x01, // version 351 0x01, // version
358 0x00, 0x00, 0x00, // flags 352 0x00, 0x00, 0x00, // flags
359 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID 353 0x10, 0x77, 0xEF, 0xEC, 0xC0, 0xB2, 0x4D, 0x02, // SystemID
360 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B, 354 0xAC, 0xE3, 0x3C, 0x1E, 0x52, 0xE2, 0xFB, 0x4B,
361 0x00, 0x00, 0x00, 0x02, // key count 355 0x00, 0x00, 0x00, 0x02, // key count
362 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1 356 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, // key1
363 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03, 357 0x7E, 0x57, 0x1D, 0x03, 0x7E, 0x57, 0x1D, 0x03,
364 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2 358 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, // key2
365 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04, 359 0x7E, 0x57, 0x1D, 0x04, 0x7E, 0x57, 0x1D, 0x04,
366 0x00, 0x00, 0x00, 0x00 // datasize 360 0x00, 0x00, 0x00, 0x00 // datasize
367 }; 361 };
368 362
369 KeyIdList key_ids; 363 KeyIdList key_ids;
370 EXPECT_FALSE( 364 EXPECT_FALSE(
ddorwin 2015/06/04 19:57:17 Explain why it fails.
jrummell 2015/06/15 22:22:10 Done.
371 ValidatePsshInput(std::vector<uint8_t>(data, data + arraysize(data)))); 365 ValidatePsshInput(std::vector<uint8_t>(data, data + arraysize(data))));
372 EXPECT_FALSE(GetKeyIdsForCommonSystemId( 366 EXPECT_FALSE(GetKeyIdsForCommonSystemId(
373 std::vector<uint8_t>(data, data + arraysize(data)), &key_ids)); 367 std::vector<uint8_t>(data, data + arraysize(data)), &key_ids));
374 } 368 }
375 369
376 } // namespace media 370 } // namespace media
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698