| 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 |