| Index: net/filter/sdch_filter_unittest.cc | 
| diff --git a/net/filter/sdch_filter_unittest.cc b/net/filter/sdch_filter_unittest.cc | 
| index 37f48866707bfece16ba4c183b33f7d3f603d43c..16012c3edcc13b71da2ebbc5b066159da95f9b5f 100644 | 
| --- a/net/filter/sdch_filter_unittest.cc | 
| +++ b/net/filter/sdch_filter_unittest.cc | 
| @@ -13,6 +13,7 @@ | 
| #include "net/base/io_buffer.h" | 
| #include "net/filter/mock_filter_context.h" | 
| #include "net/filter/sdch_filter.h" | 
| +#include "net/url_request/url_request_context.h" | 
| #include "net/url_request/url_request_http_job.h" | 
| #include "testing/gtest/include/gtest/gtest.h" | 
| #include "third_party/zlib/zlib.h" | 
| @@ -54,16 +55,24 @@ class SdchFilterTest : public testing::Test { | 
| vcdiff_compressed_data_(kSdchCompressedTestData, | 
| sizeof(kSdchCompressedTestData) - 1), | 
| expanded_(kTestData, sizeof(kTestData) - 1), | 
| -      sdch_manager_(new SdchManager) { | 
| +      sdch_manager_(new SdchManager), | 
| +      filter_context_(new MockFilterContext) { | 
| +    URLRequestContext* url_request_context = | 
| +        filter_context_->GetModifiableURLRequestContext(); | 
| + | 
| +    url_request_context->set_sdch_manager(sdch_manager_.get()); | 
| } | 
|  | 
| +  MockFilterContext* filter_context() { return filter_context_.get(); } | 
| + | 
| std::string NewSdchCompressedData(const std::string dictionary); | 
|  | 
| const std::string test_vcdiff_dictionary_; | 
| const std::string vcdiff_compressed_data_; | 
| const std::string expanded_;  // Desired final, decompressed data. | 
|  | 
| -  scoped_ptr<SdchManager> sdch_manager_;  // A singleton database. | 
| +  scoped_ptr<SdchManager> sdch_manager_; | 
| +  scoped_ptr<MockFilterContext> filter_context_; | 
| }; | 
|  | 
| std::string SdchFilterTest::NewSdchCompressedData( | 
| @@ -152,10 +161,9 @@ TEST_F(SdchFilterTest, EmptyInputOk) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
| char output_buffer[20]; | 
| -  MockFilterContext filter_context; | 
| std::string url_string("http://ignore.com"); | 
| -  filter_context.SetURL(GURL(url_string)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
|  | 
| // With no input data, try to read output. | 
| @@ -172,12 +180,11 @@ TEST_F(SdchFilterTest, PassThroughWhenTentative) { | 
| // Selective a tentative filter (which can fall back to pass through). | 
| filter_types.push_back(Filter::FILTER_TYPE_GZIP_HELPING_SDCH); | 
| char output_buffer[20]; | 
| -  MockFilterContext filter_context; | 
| // Response code needs to be 200 to allow a pass through. | 
| -  filter_context.SetResponseCode(200); | 
| +  filter_context()->SetResponseCode(200); | 
| std::string url_string("http://ignore.com"); | 
| -  filter_context.SetURL(GURL(url_string)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| // Supply enough data to force a pass-through mode.. | 
| std::string non_gzip_content("not GZIPed data"); | 
| @@ -210,14 +217,13 @@ TEST_F(SdchFilterTest, RefreshBadReturnCode) { | 
| // Selective a tentative filter (which can fall back to pass through). | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH_POSSIBLE); | 
| char output_buffer[20]; | 
| -  MockFilterContext filter_context; | 
| // Response code needs to be 200 to allow a pass through. | 
| -  filter_context.SetResponseCode(403); | 
| +  filter_context()->SetResponseCode(403); | 
| // Meta refresh will only appear for html content | 
| -  filter_context.SetMimeType("text/html"); | 
| +  filter_context()->SetMimeType("text/html"); | 
| std::string url_string("http://ignore.com"); | 
| -  filter_context.SetURL(GURL(url_string)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| // Supply enough data to force a pass-through mode, which means we have | 
| // provided more than 9 characters that can't be a dictionary hash. | 
| @@ -251,15 +257,14 @@ TEST_F(SdchFilterTest, ErrorOnBadReturnCode) { | 
| // Selective a tentative filter (which can fall back to pass through). | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH_POSSIBLE); | 
| char output_buffer[20]; | 
| -  MockFilterContext filter_context; | 
| // Response code needs to be 200 to allow a pass through. | 
| -  filter_context.SetResponseCode(403); | 
| +  filter_context()->SetResponseCode(403); | 
| // Meta refresh will only appear for html content, so set to something else | 
| // to induce an error (we can't meta refresh). | 
| -  filter_context.SetMimeType("anything"); | 
| +  filter_context()->SetMimeType("anything"); | 
| std::string url_string("http://ignore.com"); | 
| -  filter_context.SetURL(GURL(url_string)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| // Supply enough data to force a pass-through mode, which means we have | 
| // provided more than 9 characters that can't be a dictionary hash. | 
| @@ -288,14 +293,13 @@ TEST_F(SdchFilterTest, ErrorOnBadReturnCodeWithHtml) { | 
| // Selective a tentative filter (which can fall back to pass through). | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH_POSSIBLE); | 
| char output_buffer[20]; | 
| -  MockFilterContext filter_context; | 
| // Response code needs to be 200 to allow a pass through. | 
| -  filter_context.SetResponseCode(403); | 
| +  filter_context()->SetResponseCode(403); | 
| // Meta refresh will only appear for html content | 
| -  filter_context.SetMimeType("text/html"); | 
| +  filter_context()->SetMimeType("text/html"); | 
| std::string url_string("http://ignore.com"); | 
| -  filter_context.SetURL(GURL(url_string)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| // Supply enough data to force a pass-through mode, which means we have | 
| // provided more than 9 characters that can't be a dictionary hash. | 
| @@ -329,10 +333,9 @@ TEST_F(SdchFilterTest, BasicBadDictionary) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
| char output_buffer[20]; | 
| -  MockFilterContext filter_context; | 
| std::string url_string("http://ignore.com"); | 
| -  filter_context.SetURL(GURL(url_string)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| // Supply bogus data (which doesn't yet specify a full dictionary hash). | 
| // Dictionary hash is 8 characters followed by a null. | 
| @@ -372,9 +375,9 @@ TEST_F(SdchFilterTest, BasicBadDictionary) { | 
| EXPECT_EQ(0, output_bytes_or_buffer_size); | 
| EXPECT_EQ(Filter::FILTER_ERROR, status); | 
|  | 
| -  EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); | 
| -  SdchManager::ClearBlacklistings(); | 
| -  EXPECT_TRUE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); | 
| +  EXPECT_FALSE(sdch_manager_->IsInSupportedDomain(GURL(url_string))); | 
| +  sdch_manager_->ClearBlacklistings(); | 
| +  EXPECT_TRUE(sdch_manager_->IsInSupportedDomain(GURL(url_string))); | 
| } | 
|  | 
| TEST_F(SdchFilterTest, DictionaryAddOnce) { | 
| @@ -414,10 +417,9 @@ TEST_F(SdchFilterTest, BasicDictionary) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(url); | 
| +  filter_context()->SetURL(url); | 
|  | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| size_t feed_block_size = 100; | 
| size_t output_block_size = 100; | 
| @@ -427,7 +429,7 @@ TEST_F(SdchFilterTest, BasicDictionary) { | 
| EXPECT_EQ(output, expanded_); | 
|  | 
| // Decode with really small buffers (size 1) to check for edge effects. | 
| -  filter.reset(Filter::Factory(filter_types, filter_context)); | 
| +  filter.reset(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| feed_block_size = 1; | 
| output_block_size = 1; | 
| @@ -452,9 +454,8 @@ TEST_F(SdchFilterTest, NoDecodeHttps) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(GURL("https://" + kSampleDomain)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL("https://" + kSampleDomain)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| const size_t feed_block_size(100); | 
| const size_t output_block_size(100); | 
| @@ -483,9 +484,8 @@ TEST_F(SdchFilterTest, NoDecodeFtp) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(GURL("ftp://" + kSampleDomain)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL("ftp://" + kSampleDomain)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| const size_t feed_block_size(100); | 
| const size_t output_block_size(100); | 
| @@ -510,9 +510,8 @@ TEST_F(SdchFilterTest, NoDecodeFileColon) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(GURL("file://" + kSampleDomain)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL("file://" + kSampleDomain)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| const size_t feed_block_size(100); | 
| const size_t output_block_size(100); | 
| @@ -537,9 +536,8 @@ TEST_F(SdchFilterTest, NoDecodeAboutColon) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(GURL("about://" + kSampleDomain)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL("about://" + kSampleDomain)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| const size_t feed_block_size(100); | 
| const size_t output_block_size(100); | 
| @@ -564,9 +562,8 @@ TEST_F(SdchFilterTest, NoDecodeJavaScript) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(GURL("javascript://" + kSampleDomain)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL("javascript://" + kSampleDomain)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| const size_t feed_block_size(100); | 
| const size_t output_block_size(100); | 
| @@ -591,9 +588,8 @@ TEST_F(SdchFilterTest, CanStillDecodeHttp) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(GURL("http://" + kSampleDomain)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL("http://" + kSampleDomain)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| const size_t feed_block_size(100); | 
| const size_t output_block_size(100); | 
| @@ -620,10 +616,9 @@ TEST_F(SdchFilterTest, CrossDomainDictionaryUse) { | 
|  | 
| // Decode with content arriving from the "wrong" domain. | 
| // This tests SdchManager::CanSet(). | 
| -  MockFilterContext filter_context; | 
| GURL wrong_domain_url("http://www.wrongdomain.com"); | 
| -  filter_context.SetURL(wrong_domain_url); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types,  filter_context)); | 
| +  filter_context()->SetURL(wrong_domain_url); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types,  *filter_context())); | 
|  | 
| size_t feed_block_size = 100; | 
| size_t output_block_size = 100; | 
| @@ -632,10 +627,10 @@ TEST_F(SdchFilterTest, CrossDomainDictionaryUse) { | 
| filter.get(), &output)); | 
| EXPECT_EQ(output.size(), 0u);  // No output written. | 
|  | 
| -  EXPECT_TRUE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); | 
| -  EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(wrong_domain_url)); | 
| -  SdchManager::ClearBlacklistings(); | 
| -  EXPECT_TRUE(SdchManager::Global()->IsInSupportedDomain(wrong_domain_url)); | 
| +  EXPECT_TRUE(sdch_manager_->IsInSupportedDomain(GURL(url_string))); | 
| +  EXPECT_FALSE(sdch_manager_->IsInSupportedDomain(wrong_domain_url)); | 
| +  sdch_manager_->ClearBlacklistings(); | 
| +  EXPECT_TRUE(sdch_manager_->IsInSupportedDomain(wrong_domain_url)); | 
| } | 
|  | 
| TEST_F(SdchFilterTest, DictionaryPathValidation) { | 
| @@ -660,9 +655,8 @@ TEST_F(SdchFilterTest, DictionaryPathValidation) { | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| // Test decode the path data, arriving from a valid path. | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(GURL(url_string + path)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string + path)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| size_t feed_block_size = 100; | 
| size_t output_block_size = 100; | 
| @@ -673,8 +667,8 @@ TEST_F(SdchFilterTest, DictionaryPathValidation) { | 
| EXPECT_EQ(output, expanded_); | 
|  | 
| // Test decode the path data, arriving from a invalid path. | 
| -  filter_context.SetURL(GURL(url_string)); | 
| -  filter.reset(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string)); | 
| +  filter.reset(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| feed_block_size = 100; | 
| output_block_size = 100; | 
| @@ -683,9 +677,9 @@ TEST_F(SdchFilterTest, DictionaryPathValidation) { | 
| output_block_size, filter.get(), &output)); | 
| EXPECT_EQ(output.size(), 0u);  // No output written. | 
|  | 
| -  EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); | 
| -  SdchManager::ClearBlacklistings(); | 
| -  EXPECT_TRUE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); | 
| +  EXPECT_FALSE(sdch_manager_->IsInSupportedDomain(GURL(url_string))); | 
| +  sdch_manager_->ClearBlacklistings(); | 
| +  EXPECT_TRUE(sdch_manager_->IsInSupportedDomain(GURL(url_string))); | 
| } | 
|  | 
| TEST_F(SdchFilterTest, DictionaryPortValidation) { | 
| @@ -713,9 +707,8 @@ TEST_F(SdchFilterTest, DictionaryPortValidation) { | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| // Test decode the port data, arriving from a valid port. | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(GURL(url_string + ":" + port)); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string + ":" + port)); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| size_t feed_block_size = 100; | 
| size_t output_block_size = 100; | 
| @@ -725,8 +718,8 @@ TEST_F(SdchFilterTest, DictionaryPortValidation) { | 
| EXPECT_EQ(output, expanded_); | 
|  | 
| // Test decode the port data, arriving from a valid (default) port. | 
| -  filter_context.SetURL(GURL(url_string));  // Default port. | 
| -  filter.reset(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string));  // Default port. | 
| +  filter.reset(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| feed_block_size = 100; | 
| output_block_size = 100; | 
| @@ -736,8 +729,8 @@ TEST_F(SdchFilterTest, DictionaryPortValidation) { | 
| EXPECT_EQ(output, expanded_); | 
|  | 
| // Test decode the port data, arriving from a invalid port. | 
| -  filter_context.SetURL(GURL(url_string + ":" + port + "1")); | 
| -  filter.reset(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(GURL(url_string + ":" + port + "1")); | 
| +  filter.reset(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| feed_block_size = 100; | 
| output_block_size = 100; | 
| @@ -746,9 +739,9 @@ TEST_F(SdchFilterTest, DictionaryPortValidation) { | 
| output_block_size, filter.get(), &output)); | 
| EXPECT_EQ(output.size(), 0u);  // No output written. | 
|  | 
| -  EXPECT_FALSE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); | 
| -  SdchManager::ClearBlacklistings(); | 
| -  EXPECT_TRUE(SdchManager::Global()->IsInSupportedDomain(GURL(url_string))); | 
| +  EXPECT_FALSE(sdch_manager_->IsInSupportedDomain(GURL(url_string))); | 
| +  sdch_manager_->ClearBlacklistings(); | 
| +  EXPECT_TRUE(sdch_manager_->IsInSupportedDomain(GURL(url_string))); | 
| } | 
|  | 
| //------------------------------------------------------------------------------ | 
| @@ -844,10 +837,9 @@ TEST_F(SdchFilterTest, FilterChaining) { | 
| CHECK_GT(kLargeInputBufferSize, gzip_compressed_sdch.size()); | 
| CHECK_GT(kLargeInputBufferSize, sdch_compressed.size()); | 
| CHECK_GT(kLargeInputBufferSize, expanded_.size()); | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetURL(url); | 
| +  filter_context()->SetURL(url); | 
| scoped_ptr<Filter> filter( | 
| -      SdchFilterChainingTest::Factory(filter_types, filter_context, | 
| +      SdchFilterChainingTest::Factory(filter_types, *filter_context(), | 
| kLargeInputBufferSize)); | 
| EXPECT_EQ(static_cast<int>(kLargeInputBufferSize), | 
| filter->stream_buffer_size()); | 
| @@ -874,9 +866,9 @@ TEST_F(SdchFilterTest, FilterChaining) { | 
| // We'll go even further, and force the chain to flush the buffer between the | 
| // two filters more than once (that is why we multiply by 2). | 
| CHECK_LT(kMidSizedInputBufferSize * 2, sdch_compressed.size()); | 
| -  filter_context.SetURL(url); | 
| +  filter_context()->SetURL(url); | 
| filter.reset( | 
| -      SdchFilterChainingTest::Factory(filter_types, filter_context, | 
| +      SdchFilterChainingTest::Factory(filter_types, *filter_context(), | 
| kMidSizedInputBufferSize)); | 
| EXPECT_EQ(static_cast<int>(kMidSizedInputBufferSize), | 
| filter->stream_buffer_size()); | 
| @@ -889,7 +881,7 @@ TEST_F(SdchFilterTest, FilterChaining) { | 
| EXPECT_EQ(output, expanded_); | 
|  | 
| // Next try with a tiny input and output buffer to cover edge effects. | 
| -  filter.reset(SdchFilterChainingTest::Factory(filter_types, filter_context, | 
| +  filter.reset(SdchFilterChainingTest::Factory(filter_types, *filter_context(), | 
| kLargeInputBufferSize)); | 
| EXPECT_EQ(static_cast<int>(kLargeInputBufferSize), | 
| filter->stream_buffer_size()); | 
| @@ -922,17 +914,16 @@ TEST_F(SdchFilterTest, DefaultGzipIfSdch) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_SDCH); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetMimeType("anything/mime"); | 
| -  filter_context.SetSdchResponse(true); | 
| -  Filter::FixupEncodingTypes(filter_context, &filter_types); | 
| +  filter_context()->SetMimeType("anything/mime"); | 
| +  filter_context()->SetSdchResponse(true); | 
| +  Filter::FixupEncodingTypes(*filter_context(), &filter_types); | 
| ASSERT_EQ(filter_types.size(), 2u); | 
| EXPECT_EQ(filter_types[0], Filter::FILTER_TYPE_SDCH); | 
| EXPECT_EQ(filter_types[1], Filter::FILTER_TYPE_GZIP_HELPING_SDCH); | 
|  | 
| // First try with a large buffer (larger than test input, or compressed data). | 
| -  filter_context.SetURL(url); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(url); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
|  | 
| // Verify that chained filter is waiting for data. | 
| @@ -949,7 +940,7 @@ TEST_F(SdchFilterTest, DefaultGzipIfSdch) { | 
| EXPECT_EQ(output, expanded_); | 
|  | 
| // Next try with a tiny buffer to cover edge effects. | 
| -  filter.reset(Filter::Factory(filter_types, filter_context)); | 
| +  filter.reset(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| feed_block_size = 1; | 
| output_block_size = 1; | 
| @@ -981,18 +972,17 @@ TEST_F(SdchFilterTest, AcceptGzipSdchIfGzip) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_GZIP); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetMimeType("anything/mime"); | 
| -  filter_context.SetSdchResponse(true); | 
| -  Filter::FixupEncodingTypes(filter_context, &filter_types); | 
| +  filter_context()->SetMimeType("anything/mime"); | 
| +  filter_context()->SetSdchResponse(true); | 
| +  Filter::FixupEncodingTypes(*filter_context(), &filter_types); | 
| ASSERT_EQ(filter_types.size(), 3u); | 
| EXPECT_EQ(filter_types[0], Filter::FILTER_TYPE_SDCH_POSSIBLE); | 
| EXPECT_EQ(filter_types[1], Filter::FILTER_TYPE_GZIP_HELPING_SDCH); | 
| EXPECT_EQ(filter_types[2], Filter::FILTER_TYPE_GZIP); | 
|  | 
| // First try with a large buffer (larger than test input, or compressed data). | 
| -  filter_context.SetURL(url); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(url); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
|  | 
| // Verify that chained filter is waiting for data. | 
| @@ -1009,7 +999,7 @@ TEST_F(SdchFilterTest, AcceptGzipSdchIfGzip) { | 
| EXPECT_EQ(output, expanded_); | 
|  | 
| // Next try with a tiny buffer to cover edge effects. | 
| -  filter.reset(Filter::Factory(filter_types, filter_context)); | 
| +  filter.reset(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| feed_block_size = 1; | 
| output_block_size = 1; | 
| @@ -1039,17 +1029,16 @@ TEST_F(SdchFilterTest, DefaultSdchGzipIfEmpty) { | 
| // System should automatically add the missing (optional) sdch,gzip. | 
| std::vector<Filter::FilterType> filter_types; | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetMimeType("anything/mime"); | 
| -  filter_context.SetSdchResponse(true); | 
| -  Filter::FixupEncodingTypes(filter_context, &filter_types); | 
| +  filter_context()->SetMimeType("anything/mime"); | 
| +  filter_context()->SetSdchResponse(true); | 
| +  Filter::FixupEncodingTypes(*filter_context(), &filter_types); | 
| ASSERT_EQ(filter_types.size(), 2u); | 
| EXPECT_EQ(filter_types[0], Filter::FILTER_TYPE_SDCH_POSSIBLE); | 
| EXPECT_EQ(filter_types[1], Filter::FILTER_TYPE_GZIP_HELPING_SDCH); | 
|  | 
| // First try with a large buffer (larger than test input, or compressed data). | 
| -  filter_context.SetURL(url); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(url); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
|  | 
| // Verify that chained filter is waiting for data. | 
| @@ -1066,7 +1055,7 @@ TEST_F(SdchFilterTest, DefaultSdchGzipIfEmpty) { | 
| EXPECT_EQ(output, expanded_); | 
|  | 
| // Next try with a tiny buffer to cover edge effects. | 
| -  filter.reset(Filter::Factory(filter_types, filter_context)); | 
| +  filter.reset(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| feed_block_size = 1; | 
| output_block_size = 1; | 
| @@ -1101,18 +1090,17 @@ TEST_F(SdchFilterTest, AcceptGzipGzipSdchIfGzip) { | 
| std::vector<Filter::FilterType> filter_types; | 
| filter_types.push_back(Filter::FILTER_TYPE_GZIP); | 
|  | 
| -  MockFilterContext filter_context; | 
| -  filter_context.SetMimeType("anything/mime"); | 
| -  filter_context.SetSdchResponse(true); | 
| -  Filter::FixupEncodingTypes(filter_context, &filter_types); | 
| +  filter_context()->SetMimeType("anything/mime"); | 
| +  filter_context()->SetSdchResponse(true); | 
| +  Filter::FixupEncodingTypes(*filter_context(), &filter_types); | 
| ASSERT_EQ(filter_types.size(), 3u); | 
| EXPECT_EQ(filter_types[0], Filter::FILTER_TYPE_SDCH_POSSIBLE); | 
| EXPECT_EQ(filter_types[1], Filter::FILTER_TYPE_GZIP_HELPING_SDCH); | 
| EXPECT_EQ(filter_types[2], Filter::FILTER_TYPE_GZIP); | 
|  | 
| // First try with a large buffer (larger than test input, or compressed data). | 
| -  filter_context.SetURL(url); | 
| -  scoped_ptr<Filter> filter(Filter::Factory(filter_types, filter_context)); | 
| +  filter_context()->SetURL(url); | 
| +  scoped_ptr<Filter> filter(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| // Verify that chained filter is waiting for data. | 
| char tiny_output_buffer[10]; | 
| @@ -1128,7 +1116,7 @@ TEST_F(SdchFilterTest, AcceptGzipGzipSdchIfGzip) { | 
| EXPECT_EQ(output, expanded_); | 
|  | 
| // Next try with a tiny buffer to cover edge effects. | 
| -  filter.reset(Filter::Factory(filter_types, filter_context)); | 
| +  filter.reset(Filter::Factory(filter_types, *filter_context())); | 
|  | 
| feed_block_size = 1; | 
| output_block_size = 1; | 
|  |