Index: net/base/filter_unittest.cc |
=================================================================== |
--- net/base/filter_unittest.cc (revision 0) |
+++ net/base/filter_unittest.cc (revision 0) |
@@ -0,0 +1,133 @@ |
+// Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "net/base/filter.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+ |
+class FilterTest : public testing::Test { |
+}; |
+ |
+TEST(FilterTest, ContentTypeId) { |
+ // Check for basic translation of Content-Encoding, including case variations. |
+ EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE, |
+ Filter::ConvertEncodingToType("deflate")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_DEFLATE, |
+ Filter::ConvertEncodingToType("deflAte")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_GZIP, |
+ Filter::ConvertEncodingToType("gzip")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_GZIP, |
+ Filter::ConvertEncodingToType("GzIp")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_GZIP, |
+ Filter::ConvertEncodingToType("x-gzip")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_GZIP, |
+ Filter::ConvertEncodingToType("X-GzIp")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_BZIP2, |
+ Filter::ConvertEncodingToType("bzip2")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_BZIP2, |
+ Filter::ConvertEncodingToType("BZiP2")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_BZIP2, |
+ Filter::ConvertEncodingToType("x-bzip2")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_BZIP2, |
+ Filter::ConvertEncodingToType("X-BZiP2")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_SDCH, |
+ Filter::ConvertEncodingToType("sdch")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_SDCH, |
+ Filter::ConvertEncodingToType("sDcH")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, |
+ Filter::ConvertEncodingToType("weird")); |
+ EXPECT_EQ(Filter::FILTER_TYPE_UNSUPPORTED, |
+ Filter::ConvertEncodingToType("strange")); |
+} |
+ |
+// Check various fixups that modify content encoding lists. |
+TEST(FilterTest, ApacheGzip) { |
+ // Check that redundant gzip mime type removes only solo gzip encoding. |
+ const bool is_sdch_response = false; |
+ const std::string kGzipMime1("application/x-gzip"); |
+ const std::string kGzipMime2("application/gzip"); |
+ const std::string kGzipMime3("application/x-gunzip"); |
+ std::vector<Filter::FilterType> encoding_types; |
+ |
+ // First show it removes the gzip, given any gzip style mime type. |
+ encoding_types.clear(); |
+ encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
+ Filter::FixupEncodingTypes(is_sdch_response, kGzipMime1, &encoding_types); |
+ EXPECT_TRUE(encoding_types.empty()); |
+ |
+ encoding_types.clear(); |
+ encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
+ Filter::FixupEncodingTypes(is_sdch_response, kGzipMime2, &encoding_types); |
+ EXPECT_TRUE(encoding_types.empty()); |
+ |
+ encoding_types.clear(); |
+ encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
+ Filter::FixupEncodingTypes(is_sdch_response, kGzipMime3, &encoding_types); |
+ EXPECT_TRUE(encoding_types.empty()); |
+ |
+ // Check to be sure it doesn't remove everything when it has such a type. |
+ encoding_types.clear(); |
+ encoding_types.push_back(Filter::FILTER_TYPE_SDCH); |
+ Filter::FixupEncodingTypes(is_sdch_response, kGzipMime1, &encoding_types); |
+ EXPECT_EQ(1, encoding_types.size()); |
+ EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types.front()); |
+ |
+ // Check to be sure that gzip can survive with other mime types. |
+ encoding_types.clear(); |
+ encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
+ Filter::FixupEncodingTypes(is_sdch_response, "other/mime", &encoding_types); |
+ EXPECT_EQ(1, encoding_types.size()); |
+ EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front()); |
+} |
+ |
+TEST(FilterTest, SdchEncoding) { |
+ // Handle content encodings including SDCH. |
+ const bool is_sdch_response = true; |
+ const std::string kTextHtmlMime("text/html"); |
+ std::vector<Filter::FilterType> encoding_types; |
+ |
+ // Check for most common encoding, and verify it survives unchanged. |
+ encoding_types.clear(); |
+ encoding_types.push_back(Filter::FILTER_TYPE_SDCH); |
+ encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
+ Filter::FixupEncodingTypes(is_sdch_response, kTextHtmlMime, &encoding_types); |
+ EXPECT_EQ(2, encoding_types.size()); |
+ EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]); |
+ EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types[1]); |
+ |
+ // Unchanged even with other mime types. |
+ encoding_types.clear(); |
+ encoding_types.push_back(Filter::FILTER_TYPE_SDCH); |
+ encoding_types.push_back(Filter::FILTER_TYPE_GZIP); |
+ Filter::FixupEncodingTypes(is_sdch_response, "other/type", &encoding_types); |
+ EXPECT_EQ(2, encoding_types.size()); |
+ EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]); |
+ EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types[1]); |
+ |
+ // Solo SDCH is extended to include optional gunzip. |
+ encoding_types.clear(); |
+ encoding_types.push_back(Filter::FILTER_TYPE_SDCH); |
+ Filter::FixupEncodingTypes(is_sdch_response, "other/type", &encoding_types); |
+ EXPECT_EQ(2, encoding_types.size()); |
+ EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]); |
+ EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); |
+} |
+ |
+TEST(FilterTest, MissingSdchEncoding) { |
+ // Handle interesting case where entire SDCH encoding assertion "got lost." |
+ const bool is_sdch_response = true; |
+ const std::string kTextHtmlMime("text/html"); |
+ std::vector<Filter::FilterType> encoding_types; |
+ |
+ // Loss of encoding, but it was an SDCH response with html type. |
+ encoding_types.clear(); |
+ Filter::FixupEncodingTypes(is_sdch_response, kTextHtmlMime, &encoding_types); |
+ EXPECT_EQ(2, encoding_types.size()); |
+ EXPECT_EQ(Filter::FILTER_TYPE_SDCH, encoding_types[0]); |
+ EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]); |
+ |
+ // No encoding, but it was an SDCH response with non-html type. |
+ encoding_types.clear(); |
+ Filter::FixupEncodingTypes(is_sdch_response, "other/mime", &encoding_types); |
+ EXPECT_TRUE(encoding_types.empty()); |
+} |
Property changes on: net\base\filter_unittest.cc |
___________________________________________________________________ |
Added: svn:eol-style |
+ LF |