OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 "net/base/filter.h" | 5 #include "net/base/filter.h" |
6 #include "net/base/filter_unittest.h" | 6 #include "net/base/mock_filter_context.h" |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 | 8 |
9 class FilterTest : public testing::Test { | 9 class FilterTest : public testing::Test { |
10 }; | 10 }; |
11 | 11 |
12 TEST(FilterTest, ContentTypeId) { | 12 TEST(FilterTest, ContentTypeId) { |
13 // Check for basic translation of Content-Encoding, including case variations. | 13 // Check for basic translation of Content-Encoding, including case variations. |
14 EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE, | 14 EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE, |
15 Filter::ConvertEncodingToType("deflate")); | 15 Filter::ConvertEncodingToType("deflate")); |
16 EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE, | 16 EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE, |
(...skipping 12 matching lines...) Expand all Loading... |
29 Filter::ConvertEncodingToType("sDcH")); | 29 Filter::ConvertEncodingToType("sDcH")); |
30 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | 30 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, |
31 Filter::ConvertEncodingToType("weird")); | 31 Filter::ConvertEncodingToType("weird")); |
32 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, | 32 EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, |
33 Filter::ConvertEncodingToType("strange")); | 33 Filter::ConvertEncodingToType("strange")); |
34 } | 34 } |
35 | 35 |
36 // Check various fixups that modify content encoding lists. | 36 // Check various fixups that modify content encoding lists. |
37 TEST(FilterTest, ApacheGzip) { | 37 TEST(FilterTest, ApacheGzip) { |
38 const int kInputBufferSize(100); | 38 const int kInputBufferSize(100); |
39 MockFilterContext filter_context(kInputBufferSize); | 39 net::MockFilterContext filter_context(kInputBufferSize); |
40 filter_context.SetSdchResponse(false); | 40 filter_context.SetSdchResponse(false); |
41 | 41 |
42 // Check that redundant gzip mime type removes only solo gzip encoding. | 42 // Check that redundant gzip mime type removes only solo gzip encoding. |
43 const std::string kGzipMime1("application/x-gzip"); | 43 const std::string kGzipMime1("application/x-gzip"); |
44 const std::string kGzipMime2("application/gzip"); | 44 const std::string kGzipMime2("application/gzip"); |
45 const std::string kGzipMime3("application/x-gunzip"); | 45 const std::string kGzipMime3("application/x-gunzip"); |
46 std::vector<Filter::FilterType> encoding_types; | 46 std::vector<Filter::FilterType> encoding_types; |
47 | 47 |
48 // First show it removes the gzip, given any gzip style mime type. | 48 // First show it removes the gzip, given any gzip style mime type. |
49 encoding_types.clear(); | 49 encoding_types.clear(); |
(...skipping 28 matching lines...) Expand all Loading... |
78 filter_context.SetMimeType("other/mime"); | 78 filter_context.SetMimeType("other/mime"); |
79 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 79 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
80 ASSERT_EQ(1U, encoding_types.size()); | 80 ASSERT_EQ(1U, encoding_types.size()); |
81 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); | 81 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); |
82 } | 82 } |
83 | 83 |
84 TEST(FilterTest, SdchEncoding) { | 84 TEST(FilterTest, SdchEncoding) { |
85 // Handle content encodings including SDCH. | 85 // Handle content encodings including SDCH. |
86 const std::string kTextHtmlMime("text/html"); | 86 const std::string kTextHtmlMime("text/html"); |
87 const int kInputBufferSize(100); | 87 const int kInputBufferSize(100); |
88 MockFilterContext filter_context(kInputBufferSize); | 88 net::MockFilterContext filter_context(kInputBufferSize); |
89 filter_context.SetSdchResponse(true); | 89 filter_context.SetSdchResponse(true); |
90 | 90 |
91 std::vector<Filter::FilterType> encoding_types; | 91 std::vector<Filter::FilterType> encoding_types; |
92 | 92 |
93 // Check for most common encoding, and verify it survives unchanged. | 93 // Check for most common encoding, and verify it survives unchanged. |
94 encoding_types.clear(); | 94 encoding_types.clear(); |
95 encoding_types.push_back(Filter::FILTER_TYPE_SDCH); | 95 encoding_types.push_back(Filter::FILTER_TYPE_SDCH); |
96 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); | 96 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
97 filter_context.SetMimeType(kTextHtmlMime); | 97 filter_context.SetMimeType(kTextHtmlMime); |
98 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 98 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
(...skipping 17 matching lines...) Expand all Loading... |
116 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 116 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
117 ASSERT_EQ(2U, encoding_types.size()); | 117 ASSERT_EQ(2U, encoding_types.size()); |
118 EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]); | 118 EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]); |
119 EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); | 119 EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); |
120 } | 120 } |
121 | 121 |
122 TEST(FilterTest, MissingSdchEncoding) { | 122 TEST(FilterTest, MissingSdchEncoding) { |
123 // Handle interesting case where entire SDCH encoding assertion "got lost." | 123 // Handle interesting case where entire SDCH encoding assertion "got lost." |
124 const std::string kTextHtmlMime("text/html"); | 124 const std::string kTextHtmlMime("text/html"); |
125 const int kInputBufferSize(100); | 125 const int kInputBufferSize(100); |
126 MockFilterContext filter_context(kInputBufferSize); | 126 net::MockFilterContext filter_context(kInputBufferSize); |
127 filter_context.SetSdchResponse(true); | 127 filter_context.SetSdchResponse(true); |
128 | 128 |
129 std::vector<Filter::FilterType> encoding_types; | 129 std::vector<Filter::FilterType> encoding_types; |
130 | 130 |
131 // Loss of encoding, but it was an SDCH response with html type. | 131 // Loss of encoding, but it was an SDCH response with html type. |
132 encoding_types.clear(); | 132 encoding_types.clear(); |
133 filter_context.SetMimeType(kTextHtmlMime); | 133 filter_context.SetMimeType(kTextHtmlMime); |
134 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 134 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
135 ASSERT_EQ(2U, encoding_types.size()); | 135 ASSERT_EQ(2U, encoding_types.size()); |
136 EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]); | 136 EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]); |
(...skipping 15 matching lines...) Expand all Loading... |
152 encoding_types.clear(); | 152 encoding_types.clear(); |
153 filter_context.SetMimeType("other/mime"); | 153 filter_context.SetMimeType("other/mime"); |
154 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 154 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
155 ASSERT_EQ(2U, encoding_types.size()); | 155 ASSERT_EQ(2U, encoding_types.size()); |
156 EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]); | 156 EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]); |
157 EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); | 157 EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); |
158 } | 158 } |
159 | 159 |
160 TEST(FilterTest, Svgz) { | 160 TEST(FilterTest, Svgz) { |
161 const int kInputBufferSize(100); | 161 const int kInputBufferSize(100); |
162 MockFilterContext filter_context(kInputBufferSize); | 162 net::MockFilterContext filter_context(kInputBufferSize); |
163 | 163 |
164 // Check that svgz files are only decompressed when not downloading. | 164 // Check that svgz files are only decompressed when not downloading. |
165 const std::string kSvgzMime("image/svg+xml"); | 165 const std::string kSvgzMime("image/svg+xml"); |
166 const std::string kSvgzUrl("http://ignore.com/foo.svgz"); | 166 const std::string kSvgzUrl("http://ignore.com/foo.svgz"); |
167 const std::string kSvgUrl("http://ignore.com/foo.svg"); | 167 const std::string kSvgUrl("http://ignore.com/foo.svg"); |
168 std::vector<Filter::FilterType> encoding_types; | 168 std::vector<Filter::FilterType> encoding_types; |
169 | 169 |
170 // Test svgz extension | 170 // Test svgz extension |
171 encoding_types.clear(); | 171 encoding_types.clear(); |
172 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); | 172 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
(...skipping 28 matching lines...) Expand all Loading... |
201 filter_context.SetMimeType(kSvgzMime); | 201 filter_context.SetMimeType(kSvgzMime); |
202 filter_context.SetURL(GURL(kSvgUrl)); | 202 filter_context.SetURL(GURL(kSvgUrl)); |
203 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 203 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
204 ASSERT_EQ(1U, encoding_types.size()); | 204 ASSERT_EQ(1U, encoding_types.size()); |
205 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); | 205 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); |
206 } | 206 } |
207 | 207 |
208 TEST(FilterTest, UnsupportedMimeGzip) { | 208 TEST(FilterTest, UnsupportedMimeGzip) { |
209 // From issue 8170 - handling files with Content-Encoding: x-gzip | 209 // From issue 8170 - handling files with Content-Encoding: x-gzip |
210 const int kInputBufferSize(100); | 210 const int kInputBufferSize(100); |
211 MockFilterContext filter_context(kInputBufferSize); | 211 net::MockFilterContext filter_context(kInputBufferSize); |
212 std::vector<Filter::FilterType> encoding_types; | 212 std::vector<Filter::FilterType> encoding_types; |
213 const std::string kTarMime("application/x-tar"); | 213 const std::string kTarMime("application/x-tar"); |
214 const std::string kCpioMime("application/x-cpio"); | 214 const std::string kCpioMime("application/x-cpio"); |
215 const std::string kTarUrl("http://ignore.com/foo.tar"); | 215 const std::string kTarUrl("http://ignore.com/foo.tar"); |
216 const std::string kTargzUrl("http://ignore.com/foo.tar.gz"); | 216 const std::string kTargzUrl("http://ignore.com/foo.tar.gz"); |
217 const std::string kTgzUrl("http://ignore.com/foo.tgz"); | 217 const std::string kTgzUrl("http://ignore.com/foo.tgz"); |
218 const std::string kBadTgzUrl("http://ignore.com/foo.targz"); | 218 const std::string kBadTgzUrl("http://ignore.com/foo.targz"); |
219 const std::string kUrl("http://ignore.com/foo"); | 219 const std::string kUrl("http://ignore.com/foo"); |
220 | 220 |
221 // Firefox 3 does not decompress when we have unsupported mime types for | 221 // Firefox 3 does not decompress when we have unsupported mime types for |
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 filter_context.SetURL(GURL(kBadTgzUrl)); | 289 filter_context.SetURL(GURL(kBadTgzUrl)); |
290 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 290 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
291 ASSERT_EQ(1U, encoding_types.size()); | 291 ASSERT_EQ(1U, encoding_types.size()); |
292 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); | 292 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); |
293 } | 293 } |
294 | 294 |
295 TEST(FilterTest, SupportedMimeGzip) { | 295 TEST(FilterTest, SupportedMimeGzip) { |
296 // From issue 16430 - Files with supported mime types should be decompressed, | 296 // From issue 16430 - Files with supported mime types should be decompressed, |
297 // even though these files end in .gz/.tgz. | 297 // even though these files end in .gz/.tgz. |
298 const int kInputBufferSize(100); | 298 const int kInputBufferSize(100); |
299 MockFilterContext filter_context(kInputBufferSize); | 299 net::MockFilterContext filter_context(kInputBufferSize); |
300 std::vector<Filter::FilterType> encoding_types; | 300 std::vector<Filter::FilterType> encoding_types; |
301 const std::string kGzUrl("http://ignore.com/foo.gz"); | 301 const std::string kGzUrl("http://ignore.com/foo.gz"); |
302 const std::string kUrl("http://ignore.com/foo"); | 302 const std::string kUrl("http://ignore.com/foo"); |
303 const std::string kHtmlMime("text/html"); | 303 const std::string kHtmlMime("text/html"); |
304 const std::string kJavascriptMime("text/javascript"); | 304 const std::string kJavascriptMime("text/javascript"); |
305 | 305 |
306 // For files that does not end in .gz/.tgz, we always decompress. | 306 // For files that does not end in .gz/.tgz, we always decompress. |
307 encoding_types.clear(); | 307 encoding_types.clear(); |
308 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); | 308 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
309 filter_context.SetDownload(false); | 309 filter_context.SetDownload(false); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
343 | 343 |
344 // Except on downloads, where they just get saved. | 344 // Except on downloads, where they just get saved. |
345 encoding_types.clear(); | 345 encoding_types.clear(); |
346 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); | 346 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
347 filter_context.SetDownload(true); | 347 filter_context.SetDownload(true); |
348 filter_context.SetMimeType(kHtmlMime); | 348 filter_context.SetMimeType(kHtmlMime); |
349 filter_context.SetURL(GURL(kGzUrl)); | 349 filter_context.SetURL(GURL(kGzUrl)); |
350 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 350 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
351 EXPECT_TRUE(encoding_types.empty()); | 351 EXPECT_TRUE(encoding_types.empty()); |
352 } | 352 } |
OLD | NEW |