| 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/mock_filter_context.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 }; |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 EXPECT_EQ(Filter::FILTER_TYPE_SDCH, | 28 EXPECT_EQ(Filter::FILTER_TYPE_SDCH, |
| 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 net::MockFilterContext filter_context; |
| 39 net::MockFilterContext filter_context(kInputBufferSize); | |
| 40 filter_context.SetSdchResponse(false); | 39 filter_context.SetSdchResponse(false); |
| 41 | 40 |
| 42 // Check that redundant gzip mime type removes only solo gzip encoding. | 41 // Check that redundant gzip mime type removes only solo gzip encoding. |
| 43 const std::string kGzipMime1("application/x-gzip"); | 42 const std::string kGzipMime1("application/x-gzip"); |
| 44 const std::string kGzipMime2("application/gzip"); | 43 const std::string kGzipMime2("application/gzip"); |
| 45 const std::string kGzipMime3("application/x-gunzip"); | 44 const std::string kGzipMime3("application/x-gunzip"); |
| 46 std::vector<Filter::FilterType> encoding_types; | 45 std::vector<Filter::FilterType> encoding_types; |
| 47 | 46 |
| 48 // First show it removes the gzip, given any gzip style mime type. | 47 // First show it removes the gzip, given any gzip style mime type. |
| 49 encoding_types.clear(); | 48 encoding_types.clear(); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 77 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); | 76 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
| 78 filter_context.SetMimeType("other/mime"); | 77 filter_context.SetMimeType("other/mime"); |
| 79 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 78 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
| 80 ASSERT_EQ(1U, encoding_types.size()); | 79 ASSERT_EQ(1U, encoding_types.size()); |
| 81 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); | 80 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); |
| 82 } | 81 } |
| 83 | 82 |
| 84 TEST(FilterTest, SdchEncoding) { | 83 TEST(FilterTest, SdchEncoding) { |
| 85 // Handle content encodings including SDCH. | 84 // Handle content encodings including SDCH. |
| 86 const std::string kTextHtmlMime("text/html"); | 85 const std::string kTextHtmlMime("text/html"); |
| 87 const int kInputBufferSize(100); | 86 net::MockFilterContext filter_context; |
| 88 net::MockFilterContext filter_context(kInputBufferSize); | |
| 89 filter_context.SetSdchResponse(true); | 87 filter_context.SetSdchResponse(true); |
| 90 | 88 |
| 91 std::vector<Filter::FilterType> encoding_types; | 89 std::vector<Filter::FilterType> encoding_types; |
| 92 | 90 |
| 93 // Check for most common encoding, and verify it survives unchanged. | 91 // Check for most common encoding, and verify it survives unchanged. |
| 94 encoding_types.clear(); | 92 encoding_types.clear(); |
| 95 encoding_types.push_back(Filter::FILTER_TYPE_SDCH); | 93 encoding_types.push_back(Filter::FILTER_TYPE_SDCH); |
| 96 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); | 94 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
| 97 filter_context.SetMimeType(kTextHtmlMime); | 95 filter_context.SetMimeType(kTextHtmlMime); |
| 98 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 96 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 115 encoding_types.push_back(Filter::FILTER_TYPE_SDCH); | 113 encoding_types.push_back(Filter::FILTER_TYPE_SDCH); |
| 116 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 114 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
| 117 ASSERT_EQ(2U, encoding_types.size()); | 115 ASSERT_EQ(2U, encoding_types.size()); |
| 118 EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]); | 116 EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]); |
| 119 EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); | 117 EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); |
| 120 } | 118 } |
| 121 | 119 |
| 122 TEST(FilterTest, MissingSdchEncoding) { | 120 TEST(FilterTest, MissingSdchEncoding) { |
| 123 // Handle interesting case where entire SDCH encoding assertion "got lost." | 121 // Handle interesting case where entire SDCH encoding assertion "got lost." |
| 124 const std::string kTextHtmlMime("text/html"); | 122 const std::string kTextHtmlMime("text/html"); |
| 125 const int kInputBufferSize(100); | 123 net::MockFilterContext filter_context; |
| 126 net::MockFilterContext filter_context(kInputBufferSize); | |
| 127 filter_context.SetSdchResponse(true); | 124 filter_context.SetSdchResponse(true); |
| 128 | 125 |
| 129 std::vector<Filter::FilterType> encoding_types; | 126 std::vector<Filter::FilterType> encoding_types; |
| 130 | 127 |
| 131 // Loss of encoding, but it was an SDCH response with html type. | 128 // Loss of encoding, but it was an SDCH response with html type. |
| 132 encoding_types.clear(); | 129 encoding_types.clear(); |
| 133 filter_context.SetMimeType(kTextHtmlMime); | 130 filter_context.SetMimeType(kTextHtmlMime); |
| 134 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 131 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
| 135 ASSERT_EQ(2U, encoding_types.size()); | 132 ASSERT_EQ(2U, encoding_types.size()); |
| 136 EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]); | 133 EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]); |
| (...skipping 14 matching lines...) Expand all Loading... |
| 151 // No encoding, but it was an SDCH response with non-html type. | 148 // No encoding, but it was an SDCH response with non-html type. |
| 152 encoding_types.clear(); | 149 encoding_types.clear(); |
| 153 filter_context.SetMimeType("other/mime"); | 150 filter_context.SetMimeType("other/mime"); |
| 154 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 151 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
| 155 ASSERT_EQ(2U, encoding_types.size()); | 152 ASSERT_EQ(2U, encoding_types.size()); |
| 156 EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]); | 153 EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]); |
| 157 EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); | 154 EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); |
| 158 } | 155 } |
| 159 | 156 |
| 160 TEST(FilterTest, Svgz) { | 157 TEST(FilterTest, Svgz) { |
| 161 const int kInputBufferSize(100); | 158 net::MockFilterContext filter_context; |
| 162 net::MockFilterContext filter_context(kInputBufferSize); | |
| 163 | 159 |
| 164 // Check that svgz files are only decompressed when not downloading. | 160 // Check that svgz files are only decompressed when not downloading. |
| 165 const std::string kSvgzMime("image/svg+xml"); | 161 const std::string kSvgzMime("image/svg+xml"); |
| 166 const std::string kSvgzUrl("http://ignore.com/foo.svgz"); | 162 const std::string kSvgzUrl("http://ignore.com/foo.svgz"); |
| 167 const std::string kSvgUrl("http://ignore.com/foo.svg"); | 163 const std::string kSvgUrl("http://ignore.com/foo.svg"); |
| 168 std::vector<Filter::FilterType> encoding_types; | 164 std::vector<Filter::FilterType> encoding_types; |
| 169 | 165 |
| 170 // Test svgz extension | 166 // Test svgz extension |
| 171 encoding_types.clear(); | 167 encoding_types.clear(); |
| 172 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); | 168 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
| (...skipping 27 matching lines...) Expand all Loading... |
| 200 filter_context.SetDownload(true); | 196 filter_context.SetDownload(true); |
| 201 filter_context.SetMimeType(kSvgzMime); | 197 filter_context.SetMimeType(kSvgzMime); |
| 202 filter_context.SetURL(GURL(kSvgUrl)); | 198 filter_context.SetURL(GURL(kSvgUrl)); |
| 203 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 199 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
| 204 ASSERT_EQ(1U, encoding_types.size()); | 200 ASSERT_EQ(1U, encoding_types.size()); |
| 205 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); | 201 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); |
| 206 } | 202 } |
| 207 | 203 |
| 208 TEST(FilterTest, UnsupportedMimeGzip) { | 204 TEST(FilterTest, UnsupportedMimeGzip) { |
| 209 // From issue 8170 - handling files with Content-Encoding: x-gzip | 205 // From issue 8170 - handling files with Content-Encoding: x-gzip |
| 210 const int kInputBufferSize(100); | 206 net::MockFilterContext filter_context; |
| 211 net::MockFilterContext filter_context(kInputBufferSize); | |
| 212 std::vector<Filter::FilterType> encoding_types; | 207 std::vector<Filter::FilterType> encoding_types; |
| 213 const std::string kTarMime("application/x-tar"); | 208 const std::string kTarMime("application/x-tar"); |
| 214 const std::string kCpioMime("application/x-cpio"); | 209 const std::string kCpioMime("application/x-cpio"); |
| 215 const std::string kTarUrl("http://ignore.com/foo.tar"); | 210 const std::string kTarUrl("http://ignore.com/foo.tar"); |
| 216 const std::string kTargzUrl("http://ignore.com/foo.tar.gz"); | 211 const std::string kTargzUrl("http://ignore.com/foo.tar.gz"); |
| 217 const std::string kTgzUrl("http://ignore.com/foo.tgz"); | 212 const std::string kTgzUrl("http://ignore.com/foo.tgz"); |
| 218 const std::string kBadTgzUrl("http://ignore.com/foo.targz"); | 213 const std::string kBadTgzUrl("http://ignore.com/foo.targz"); |
| 219 const std::string kUrl("http://ignore.com/foo"); | 214 const std::string kUrl("http://ignore.com/foo"); |
| 220 | 215 |
| 221 // Firefox 3 does not decompress when we have unsupported mime types for | 216 // Firefox 3 does not decompress when we have unsupported mime types for |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 288 filter_context.SetMimeType(kTarMime); | 283 filter_context.SetMimeType(kTarMime); |
| 289 filter_context.SetURL(GURL(kBadTgzUrl)); | 284 filter_context.SetURL(GURL(kBadTgzUrl)); |
| 290 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 285 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
| 291 ASSERT_EQ(1U, encoding_types.size()); | 286 ASSERT_EQ(1U, encoding_types.size()); |
| 292 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); | 287 EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); |
| 293 } | 288 } |
| 294 | 289 |
| 295 TEST(FilterTest, SupportedMimeGzip) { | 290 TEST(FilterTest, SupportedMimeGzip) { |
| 296 // From issue 16430 - Files with supported mime types should be decompressed, | 291 // From issue 16430 - Files with supported mime types should be decompressed, |
| 297 // even though these files end in .gz/.tgz. | 292 // even though these files end in .gz/.tgz. |
| 298 const int kInputBufferSize(100); | 293 net::MockFilterContext filter_context; |
| 299 net::MockFilterContext filter_context(kInputBufferSize); | |
| 300 std::vector<Filter::FilterType> encoding_types; | 294 std::vector<Filter::FilterType> encoding_types; |
| 301 const std::string kGzUrl("http://ignore.com/foo.gz"); | 295 const std::string kGzUrl("http://ignore.com/foo.gz"); |
| 302 const std::string kUrl("http://ignore.com/foo"); | 296 const std::string kUrl("http://ignore.com/foo"); |
| 303 const std::string kHtmlMime("text/html"); | 297 const std::string kHtmlMime("text/html"); |
| 304 const std::string kJavascriptMime("text/javascript"); | 298 const std::string kJavascriptMime("text/javascript"); |
| 305 | 299 |
| 306 // For files that does not end in .gz/.tgz, we always decompress. | 300 // For files that does not end in .gz/.tgz, we always decompress. |
| 307 encoding_types.clear(); | 301 encoding_types.clear(); |
| 308 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); | 302 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
| 309 filter_context.SetDownload(false); | 303 filter_context.SetDownload(false); |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 343 | 337 |
| 344 // Except on downloads, where they just get saved. | 338 // Except on downloads, where they just get saved. |
| 345 encoding_types.clear(); | 339 encoding_types.clear(); |
| 346 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); | 340 encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
| 347 filter_context.SetDownload(true); | 341 filter_context.SetDownload(true); |
| 348 filter_context.SetMimeType(kHtmlMime); | 342 filter_context.SetMimeType(kHtmlMime); |
| 349 filter_context.SetURL(GURL(kGzUrl)); | 343 filter_context.SetURL(GURL(kGzUrl)); |
| 350 Filter::FixupEncodingTypes(filter_context, &encoding_types); | 344 Filter::FixupEncodingTypes(filter_context, &encoding_types); |
| 351 EXPECT_TRUE(encoding_types.empty()); | 345 EXPECT_TRUE(encoding_types.empty()); |
| 352 } | 346 } |
| OLD | NEW |