15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 52a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/bind.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "media/formats/webm/webm_constants.h" 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "media/formats/webm/webm_content_encodings_client.h" 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "media/formats/webm/webm_parser.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace media { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class WebMContentEncodingsClientTest : public testing::Test { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMContentEncodingsClientTest() 162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) : client_(LogCB()), 172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) parser_(kWebMIdContentEncodings, &client_) {} 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void ParseAndExpectToFail(const uint8* buf, int size) { 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = parser_.Parse(buf, size); 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(-1, result); 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) protected: 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMContentEncodingsClient client_; 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) WebMListParser parser_; 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, EmptyContentEncodings) { 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0x80, // ContentEncodings (size = 0) 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParseAndExpectToFail(kContentEncodings, size); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, EmptyContentEncoding) { 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0x83, // ContentEncodings (size = 3) 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x63, 0x40, 0x80, // ContentEncoding (size = 0) 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParseAndExpectToFail(kContentEncodings, size); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, SingleContentEncoding) { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0xA1, // ContentEncodings (size = 33) 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x9e, // ContentEncoding (size = 30) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x31, 0x81, 0x00, // ContentEncodingOrder (size = 1) 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x32, 0x81, 0x01, // ContentEncodingScope (size = 1) 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x35, 0x8F, // ContentEncryption (size = 15) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE1, 0x81, 0x05, // ContentEncAlgo (size = 1) 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8) 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = parser_.Parse(kContentEncodings, size); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size, result); 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentEncodings& content_encodings = client_.content_encodings(); 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, content_encodings.size()); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(content_encodings[0]); 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, content_encodings[0]->order()); 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kScopeAllFrameContents, 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_encodings[0]->scope()); 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kTypeEncryption, content_encodings[0]->type()); 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kEncAlgoAes, 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_encodings[0]->encryption_algo()); 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(8u, content_encodings[0]->encryption_key_id().size()); 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, MultipleContentEncoding) { 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0xC2, // ContentEncodings (size = 66) 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x9e, // ContentEncoding (size = 30) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x31, 0x81, 0x00, // ContentEncodingOrder (size = 1) 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x32, 0x81, 0x03, // ContentEncodingScope (size = 1) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x35, 0x8F, // ContentEncryption (size = 15) 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE1, 0x81, 0x05, // ContentEncAlgo (size = 1) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8) 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x9e, // ContentEncoding (size = 30) 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x31, 0x81, 0x01, // ContentEncodingOrder (size = 1) 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x32, 0x81, 0x03, // ContentEncodingScope (size = 1) 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x35, 0x8F, // ContentEncryption (size = 15) 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE1, 0x81, 0x01, // ContentEncAlgo (size = 1) 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8) 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = parser_.Parse(kContentEncodings, size); 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size, result); 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentEncodings& content_encodings = client_.content_encodings(); 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(2u, content_encodings.size()); 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < 2; ++i) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(content_encodings[i]); 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(i, content_encodings[i]->order()); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kScopeAllFrameContents | 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ContentEncoding::kScopeTrackPrivateData, 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_encodings[i]->scope()); 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kTypeEncryption, content_encodings[i]->type()); 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(!i ? ContentEncoding::kEncAlgoAes : ContentEncoding::kEncAlgoDes, 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_encodings[i]->encryption_algo()); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(8u, content_encodings[i]->encryption_key_id().size()); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, DefaultValues) { 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0x8A, // ContentEncodings (size = 10) 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x87, // ContentEncoding (size = 7) 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ContentEncodingOrder missing 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ContentEncodingScope missing 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x35, 0x80, // ContentEncryption (size = 0) 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ContentEncAlgo missing 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = parser_.Parse(kContentEncodings, size); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size, result); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentEncodings& content_encodings = client_.content_encodings(); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, content_encodings.size()); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(content_encodings[0]); 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, content_encodings[0]->order()); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kScopeAllFrameContents, 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_encodings[0]->scope()); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kTypeEncryption, content_encodings[0]->type()); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kEncAlgoNotEncrypted, 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_encodings[0]->encryption_algo()); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_TRUE(content_encodings[0]->encryption_key_id().empty()); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, ContentEncodingsClientReuse) { 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0xA1, // ContentEncodings (size = 33) 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x9e, // ContentEncoding (size = 30) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x31, 0x81, 0x00, // ContentEncodingOrder (size = 1) 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x32, 0x81, 0x01, // ContentEncodingScope (size = 1) 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x35, 0x8F, // ContentEncryption (size = 15) 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE1, 0x81, 0x05, // ContentEncAlgo (size = 1) 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8) 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parse for the first time. 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int result = parser_.Parse(kContentEncodings, size); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size, result); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Parse again. 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) parser_.Reset(); 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) result = parser_.Parse(kContentEncodings, size); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(size, result); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const ContentEncodings& content_encodings = client_.content_encodings(); 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_EQ(1u, content_encodings.size()); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ASSERT_TRUE(content_encodings[0]); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(0, content_encodings[0]->order()); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kScopeAllFrameContents, 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_encodings[0]->scope()); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kTypeEncryption, content_encodings[0]->type()); 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(ContentEncoding::kEncAlgoAes, 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) content_encodings[0]->encryption_algo()); 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(8u, content_encodings[0]->encryption_key_id().size()); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingOrder) { 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14) 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x8B, // ContentEncoding (size = 11) 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x31, 0x81, 0xEE, // ContentEncodingOrder (size = 1), invalid 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x35, 0x80, // ContentEncryption (size = 0) 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParseAndExpectToFail(kContentEncodings, size); 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingScope) { 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14) 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x8B, // ContentEncoding (size = 11) 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x32, 0x81, 0xEE, // ContentEncodingScope (size = 1), invalid 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x35, 0x80, // ContentEncryption (size = 0) 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParseAndExpectToFail(kContentEncodings, size); 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingType) { 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14) 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x8B, // ContentEncoding (size = 11) 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x00, // ContentEncodingType (size = 1), invalid 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x35, 0x80, // ContentEncryption (size = 0) 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParseAndExpectToFail(kContentEncodings, size); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// ContentEncodingType is encryption but no ContentEncryption present. 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, MissingContentEncryption) { 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0x87, // ContentEncodings (size = 7) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x84, // ContentEncoding (size = 4) 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ContentEncryption missing 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParseAndExpectToFail(kContentEncodings, size); 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(WebMContentEncodingsClientTest, InvalidContentEncAlgo) { 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const uint8 kContentEncodings[] = { 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x6D, 0x80, 0x99, // ContentEncodings (size = 25) 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x62, 0x40, 0x96, // ContentEncoding (size = 22) 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x50, 0x35, 0x8F, // ContentEncryption (size = 15) 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE1, 0x81, 0xEE, // ContentEncAlgo (size = 1), invalid 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8) 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) }; 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int size = sizeof(kContentEncodings); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ParseAndExpectToFail(kContentEncodings, size); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace media 239