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