Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1430)

Unified Diff: net/filter/filter_unittest.cc

Issue 1662763002: [ON HOLD] Implement pull-based design for content decoding (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/filter/filter.cc ('k') | net/filter/gzip_filter.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/filter/filter_unittest.cc
diff --git a/net/filter/filter_unittest.cc b/net/filter/filter_unittest.cc
deleted file mode 100644
index d2b6afcf9ecdeb3db4db8718c8c9c0e1378c8698..0000000000000000000000000000000000000000
--- a/net/filter/filter_unittest.cc
+++ /dev/null
@@ -1,213 +0,0 @@
-// Copyright 2014 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/filter/filter.h"
-
-#include <utility>
-
-#include "base/macros.h"
-#include "net/base/io_buffer.h"
-#include "net/filter/mock_filter_context.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace net {
-
-namespace {
-
-class PassThroughFilter : public Filter {
- public:
- PassThroughFilter() : Filter(FILTER_TYPE_UNSUPPORTED) {}
-
- FilterStatus ReadFilteredData(char* dest_buffer, int* dest_len) override {
- return CopyOut(dest_buffer, dest_len);
- }
-
- DISALLOW_COPY_AND_ASSIGN(PassThroughFilter);
-};
-
-} // namespace
-
-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_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"));
-}
-
-TEST(FilterTest, SdchEncoding) {
- // Handle content encodings including SDCH.
- const std::string kTextHtmlMime("text/html");
- MockFilterContext filter_context;
- // Empty handle indicates to filter that SDCH is active.
- filter_context.SetSdchResponse(
- SdchManager::CreateEmptyDictionarySetForTesting());
-
- 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_context.SetMimeType(kTextHtmlMime);
- Filter::FixupEncodingTypes(filter_context, &encoding_types);
- ASSERT_EQ(2U, 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_context.SetMimeType("other/type");
- Filter::FixupEncodingTypes(filter_context, &encoding_types);
- ASSERT_EQ(2U, 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(filter_context, &encoding_types);
- ASSERT_EQ(2U, 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 std::string kTextHtmlMime("text/html");
- MockFilterContext filter_context;
- filter_context.SetSdchResponse(
- SdchManager::CreateEmptyDictionarySetForTesting());
-
- std::vector<Filter::FilterType> encoding_types;
-
- // Loss of encoding, but it was an SDCH response with html type.
- encoding_types.clear();
- filter_context.SetMimeType(kTextHtmlMime);
- Filter::FixupEncodingTypes(filter_context, &encoding_types);
- ASSERT_EQ(2U, encoding_types.size());
- EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]);
- EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]);
-
- // Loss of encoding, but it was an SDCH response with a prefix that says it
- // was an html type. Note that it *should* be the case that a precise match
- // with "text/html" we be collected by GetMimeType() and passed in, but we
- // coded the fixup defensively (scanning for a prefix of "text/html", so this
- // is an example which could survive such confusion in the caller).
- encoding_types.clear();
- filter_context.SetMimeType("text/html; charset=UTF-8");
- Filter::FixupEncodingTypes(filter_context, &encoding_types);
- ASSERT_EQ(2U, encoding_types.size());
- EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, 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_context.SetMimeType("other/mime");
- Filter::FixupEncodingTypes(filter_context, &encoding_types);
- ASSERT_EQ(2U, encoding_types.size());
- EXPECT_EQ(Filter::FILTER_TYPE_SDCH_POSSIBLE, encoding_types[0]);
- EXPECT_EQ(Filter::FILTER_TYPE_GZIP_HELPING_SDCH, encoding_types[1]);
-}
-
-// FixupEncodingTypes() should leave gzip encoding intact.
-TEST(FilterTest, Gzip) {
- const std::string kUrl("http://example.com/foo");
- MockFilterContext filter_context;
- std::vector<Filter::FilterType> encoding_types;
- filter_context.SetURL(GURL(kUrl));
-
- Filter::FixupEncodingTypes(filter_context, &encoding_types);
- EXPECT_EQ(0U, encoding_types.size());
-
- encoding_types.clear();
- encoding_types.push_back(Filter::FILTER_TYPE_GZIP);
- Filter::FixupEncodingTypes(filter_context, &encoding_types);
- ASSERT_EQ(1U, encoding_types.size());
- EXPECT_EQ(Filter::FILTER_TYPE_GZIP, encoding_types.front());
-}
-
-// Make sure a series of three pass-through filters copies the data cleanly.
-// Regression test for http://crbug.com/418975.
-TEST(FilterTest, ThreeFilterChain) {
- std::unique_ptr<PassThroughFilter> filter1(new PassThroughFilter);
- std::unique_ptr<PassThroughFilter> filter2(new PassThroughFilter);
- std::unique_ptr<PassThroughFilter> filter3(new PassThroughFilter);
-
- filter1->InitBuffer(32 * 1024);
- filter2->InitBuffer(32 * 1024);
- filter3->InitBuffer(32 * 1024);
-
- filter2->next_filter_ = std::move(filter3);
- filter1->next_filter_ = std::move(filter2);
-
- // Initialize the input array with a varying byte sequence.
- const size_t input_array_size = 64 * 1024;
- char input_array[input_array_size];
- size_t read_array_index = 0;
- for (size_t i = 0; i < input_array_size; i++) {
- input_array[i] = i % 113;
- }
-
- const size_t output_array_size = 4 * 1024;
- char output_array[output_array_size];
-
- size_t compare_array_index = 0;
-
- do {
- // Read data from the filter chain.
- int amount_read = output_array_size;
- Filter::FilterStatus status = filter1->ReadData(output_array, &amount_read);
- EXPECT_NE(Filter::FILTER_ERROR, status);
- EXPECT_EQ(0, memcmp(output_array, input_array + compare_array_index,
- amount_read));
- compare_array_index += amount_read;
-
- // Detect the various indications that data transfer along the chain is
- // complete.
- if (Filter::FILTER_DONE == status || Filter::FILTER_ERROR == status ||
- (Filter::FILTER_OK == status && amount_read == 0) ||
- (Filter::FILTER_NEED_MORE_DATA == status &&
- read_array_index == input_array_size))
- break;
-
- if (Filter::FILTER_OK == status)
- continue;
-
- // Write needed data into the filter chain.
- ASSERT_EQ(Filter::FILTER_NEED_MORE_DATA, status);
- ASSERT_NE(0, filter1->stream_buffer_size());
- size_t amount_to_copy = std::min(
- static_cast<size_t>(filter1->stream_buffer_size()),
- input_array_size - read_array_index);
- memcpy(filter1->stream_buffer()->data(),
- input_array + read_array_index,
- amount_to_copy);
- filter1->FlushStreamBuffer(amount_to_copy);
- read_array_index += amount_to_copy;
- } while (true);
-
- EXPECT_EQ(read_array_index, input_array_size);
- EXPECT_EQ(compare_array_index, input_array_size);
-}
-
-} // Namespace net
« no previous file with comments | « net/filter/filter.cc ('k') | net/filter/gzip_filter.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698