cc: Added inline to Tile::IsReadyToDraw
[chromium-blink-merge.git] / media / webm / webm_content_encodings_client_unittest.cc
blobbb9e6943126eddd6e41ebe3e0a6484fe48adf726
1 // Copyright (c) 2012 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.
5 #include "base/bind.h"
6 #include "media/webm/webm_constants.h"
7 #include "media/webm/webm_content_encodings_client.h"
8 #include "media/webm/webm_parser.h"
9 #include "testing/gtest/include/gtest/gtest.h"
11 namespace media {
13 class WebMContentEncodingsClientTest : public testing::Test {
14 public:
15 WebMContentEncodingsClientTest()
16 : client_(LogCB()),
17 parser_(kWebMIdContentEncodings, &client_) {}
19 void ParseAndExpectToFail(const uint8* buf, int size) {
20 int result = parser_.Parse(buf, size);
21 EXPECT_EQ(-1, result);
24 protected:
25 WebMContentEncodingsClient client_;
26 WebMListParser parser_;
29 TEST_F(WebMContentEncodingsClientTest, EmptyContentEncodings) {
30 const uint8 kContentEncodings[] = {
31 0x6D, 0x80, 0x80, // ContentEncodings (size = 0)
33 int size = sizeof(kContentEncodings);
34 ParseAndExpectToFail(kContentEncodings, size);
37 TEST_F(WebMContentEncodingsClientTest, EmptyContentEncoding) {
38 const uint8 kContentEncodings[] = {
39 0x6D, 0x80, 0x83, // ContentEncodings (size = 3)
40 0x63, 0x40, 0x80, // ContentEncoding (size = 0)
42 int size = sizeof(kContentEncodings);
43 ParseAndExpectToFail(kContentEncodings, size);
46 TEST_F(WebMContentEncodingsClientTest, SingleContentEncoding) {
47 const uint8 kContentEncodings[] = {
48 0x6D, 0x80, 0xA1, // ContentEncodings (size = 33)
49 0x62, 0x40, 0x9e, // ContentEncoding (size = 30)
50 0x50, 0x31, 0x81, 0x00, // ContentEncodingOrder (size = 1)
51 0x50, 0x32, 0x81, 0x01, // ContentEncodingScope (size = 1)
52 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1)
53 0x50, 0x35, 0x8F, // ContentEncryption (size = 15)
54 0x47, 0xE1, 0x81, 0x05, // ContentEncAlgo (size = 1)
55 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8)
56 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
58 int size = sizeof(kContentEncodings);
60 int result = parser_.Parse(kContentEncodings, size);
61 ASSERT_EQ(size, result);
62 const ContentEncodings& content_encodings = client_.content_encodings();
64 ASSERT_EQ(1u, content_encodings.size());
65 ASSERT_TRUE(content_encodings[0]);
66 EXPECT_EQ(0, content_encodings[0]->order());
67 EXPECT_EQ(ContentEncoding::kScopeAllFrameContents,
68 content_encodings[0]->scope());
69 EXPECT_EQ(ContentEncoding::kTypeEncryption, content_encodings[0]->type());
70 EXPECT_EQ(ContentEncoding::kEncAlgoAes,
71 content_encodings[0]->encryption_algo());
72 EXPECT_EQ(8u, content_encodings[0]->encryption_key_id().size());
75 TEST_F(WebMContentEncodingsClientTest, MultipleContentEncoding) {
76 const uint8 kContentEncodings[] = {
77 0x6D, 0x80, 0xC2, // ContentEncodings (size = 66)
78 0x62, 0x40, 0x9e, // ContentEncoding (size = 30)
79 0x50, 0x31, 0x81, 0x00, // ContentEncodingOrder (size = 1)
80 0x50, 0x32, 0x81, 0x03, // ContentEncodingScope (size = 1)
81 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1)
82 0x50, 0x35, 0x8F, // ContentEncryption (size = 15)
83 0x47, 0xE1, 0x81, 0x05, // ContentEncAlgo (size = 1)
84 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8)
85 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
86 0x62, 0x40, 0x9e, // ContentEncoding (size = 30)
87 0x50, 0x31, 0x81, 0x01, // ContentEncodingOrder (size = 1)
88 0x50, 0x32, 0x81, 0x03, // ContentEncodingScope (size = 1)
89 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1)
90 0x50, 0x35, 0x8F, // ContentEncryption (size = 15)
91 0x47, 0xE1, 0x81, 0x01, // ContentEncAlgo (size = 1)
92 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8)
93 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB, 0xBB,
95 int size = sizeof(kContentEncodings);
97 int result = parser_.Parse(kContentEncodings, size);
98 ASSERT_EQ(size, result);
99 const ContentEncodings& content_encodings = client_.content_encodings();
100 ASSERT_EQ(2u, content_encodings.size());
102 for (int i = 0; i < 2; ++i) {
103 ASSERT_TRUE(content_encodings[i]);
104 EXPECT_EQ(i, content_encodings[i]->order());
105 EXPECT_EQ(ContentEncoding::kScopeAllFrameContents |
106 ContentEncoding::kScopeTrackPrivateData,
107 content_encodings[i]->scope());
108 EXPECT_EQ(ContentEncoding::kTypeEncryption, content_encodings[i]->type());
109 EXPECT_EQ(!i ? ContentEncoding::kEncAlgoAes : ContentEncoding::kEncAlgoDes,
110 content_encodings[i]->encryption_algo());
111 EXPECT_EQ(8u, content_encodings[i]->encryption_key_id().size());
115 TEST_F(WebMContentEncodingsClientTest, DefaultValues) {
116 const uint8 kContentEncodings[] = {
117 0x6D, 0x80, 0x8A, // ContentEncodings (size = 10)
118 0x62, 0x40, 0x87, // ContentEncoding (size = 7)
119 // ContentEncodingOrder missing
120 // ContentEncodingScope missing
121 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1)
122 0x50, 0x35, 0x80, // ContentEncryption (size = 0)
123 // ContentEncAlgo missing
125 int size = sizeof(kContentEncodings);
127 int result = parser_.Parse(kContentEncodings, size);
128 ASSERT_EQ(size, result);
129 const ContentEncodings& content_encodings = client_.content_encodings();
131 ASSERT_EQ(1u, content_encodings.size());
132 ASSERT_TRUE(content_encodings[0]);
133 EXPECT_EQ(0, content_encodings[0]->order());
134 EXPECT_EQ(ContentEncoding::kScopeAllFrameContents,
135 content_encodings[0]->scope());
136 EXPECT_EQ(ContentEncoding::kTypeEncryption, content_encodings[0]->type());
137 EXPECT_EQ(ContentEncoding::kEncAlgoNotEncrypted,
138 content_encodings[0]->encryption_algo());
139 EXPECT_TRUE(content_encodings[0]->encryption_key_id().empty());
142 TEST_F(WebMContentEncodingsClientTest, ContentEncodingsClientReuse) {
143 const uint8 kContentEncodings[] = {
144 0x6D, 0x80, 0xA1, // ContentEncodings (size = 33)
145 0x62, 0x40, 0x9e, // ContentEncoding (size = 30)
146 0x50, 0x31, 0x81, 0x00, // ContentEncodingOrder (size = 1)
147 0x50, 0x32, 0x81, 0x01, // ContentEncodingScope (size = 1)
148 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1)
149 0x50, 0x35, 0x8F, // ContentEncryption (size = 15)
150 0x47, 0xE1, 0x81, 0x05, // ContentEncAlgo (size = 1)
151 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8)
152 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
154 int size = sizeof(kContentEncodings);
156 // Parse for the first time.
157 int result = parser_.Parse(kContentEncodings, size);
158 ASSERT_EQ(size, result);
160 // Parse again.
161 parser_.Reset();
162 result = parser_.Parse(kContentEncodings, size);
163 ASSERT_EQ(size, result);
164 const ContentEncodings& content_encodings = client_.content_encodings();
166 ASSERT_EQ(1u, content_encodings.size());
167 ASSERT_TRUE(content_encodings[0]);
168 EXPECT_EQ(0, content_encodings[0]->order());
169 EXPECT_EQ(ContentEncoding::kScopeAllFrameContents,
170 content_encodings[0]->scope());
171 EXPECT_EQ(ContentEncoding::kTypeEncryption, content_encodings[0]->type());
172 EXPECT_EQ(ContentEncoding::kEncAlgoAes,
173 content_encodings[0]->encryption_algo());
174 EXPECT_EQ(8u, content_encodings[0]->encryption_key_id().size());
177 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingOrder) {
178 const uint8 kContentEncodings[] = {
179 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14)
180 0x62, 0x40, 0x8B, // ContentEncoding (size = 11)
181 0x50, 0x31, 0x81, 0xEE, // ContentEncodingOrder (size = 1), invalid
182 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1)
183 0x50, 0x35, 0x80, // ContentEncryption (size = 0)
185 int size = sizeof(kContentEncodings);
186 ParseAndExpectToFail(kContentEncodings, size);
189 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingScope) {
190 const uint8 kContentEncodings[] = {
191 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14)
192 0x62, 0x40, 0x8B, // ContentEncoding (size = 11)
193 0x50, 0x32, 0x81, 0xEE, // ContentEncodingScope (size = 1), invalid
194 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1)
195 0x50, 0x35, 0x80, // ContentEncryption (size = 0)
197 int size = sizeof(kContentEncodings);
198 ParseAndExpectToFail(kContentEncodings, size);
201 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncodingType) {
202 const uint8 kContentEncodings[] = {
203 0x6D, 0x80, 0x8E, // ContentEncodings (size = 14)
204 0x62, 0x40, 0x8B, // ContentEncoding (size = 11)
205 0x50, 0x33, 0x81, 0x00, // ContentEncodingType (size = 1), invalid
206 0x50, 0x35, 0x80, // ContentEncryption (size = 0)
208 int size = sizeof(kContentEncodings);
209 ParseAndExpectToFail(kContentEncodings, size);
212 // ContentEncodingType is encryption but no ContentEncryption present.
213 TEST_F(WebMContentEncodingsClientTest, MissingContentEncryption) {
214 const uint8 kContentEncodings[] = {
215 0x6D, 0x80, 0x87, // ContentEncodings (size = 7)
216 0x62, 0x40, 0x84, // ContentEncoding (size = 4)
217 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1)
218 // ContentEncryption missing
220 int size = sizeof(kContentEncodings);
221 ParseAndExpectToFail(kContentEncodings, size);
224 TEST_F(WebMContentEncodingsClientTest, InvalidContentEncAlgo) {
225 const uint8 kContentEncodings[] = {
226 0x6D, 0x80, 0x99, // ContentEncodings (size = 25)
227 0x62, 0x40, 0x96, // ContentEncoding (size = 22)
228 0x50, 0x33, 0x81, 0x01, // ContentEncodingType (size = 1)
229 0x50, 0x35, 0x8F, // ContentEncryption (size = 15)
230 0x47, 0xE1, 0x81, 0xEE, // ContentEncAlgo (size = 1), invalid
231 0x47, 0xE2, 0x88, // ContentEncKeyID (size = 8)
232 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA, 0xAA,
234 int size = sizeof(kContentEncodings);
235 ParseAndExpectToFail(kContentEncodings, size);
238 } // namespace media