diff options
author | adamk@chromium.org <adamk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-17 01:24:05 +0000 |
---|---|---|
committer | adamk@chromium.org <adamk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-03-17 01:24:05 +0000 |
commit | 5a3b4d3d89a226326174279ba1478ee069d015be (patch) | |
tree | 18f94db862326c21d522000e8fc5445ee4834f1a /net/url_request | |
parent | 6acaea63ab984c081f40a6f20d04196ade867188 (diff) | |
download | chromium_src-5a3b4d3d89a226326174279ba1478ee069d015be.zip chromium_src-5a3b4d3d89a226326174279ba1478ee069d015be.tar.gz chromium_src-5a3b4d3d89a226326174279ba1478ee069d015be.tar.bz2 |
Make URLRequestHttpJob the only URLRequestJob concerned with FilterContext.
In order to allow this, provide a new factory method in Filter to return a
GZipFilter (used by URLRequestFileJob and URLRequestJobTrackerTest), and
invert control so that URLRequestJobs are responsible for constructing filters.
This is one step away from removing FilterContext as a base class of URLRequestJob,
which will be tackled in a followup change.
BUG=none
TEST=net_unittests
Review URL: http://codereview.chromium.org/6674042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@78489 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/url_request')
-rw-r--r-- | net/url_request/url_request_file_job.cc | 13 | ||||
-rw-r--r-- | net/url_request/url_request_file_job.h | 5 | ||||
-rw-r--r-- | net/url_request/url_request_http_job.cc | 16 | ||||
-rw-r--r-- | net/url_request/url_request_http_job.h | 3 | ||||
-rw-r--r-- | net/url_request/url_request_job.cc | 14 | ||||
-rw-r--r-- | net/url_request/url_request_job.h | 21 | ||||
-rw-r--r-- | net/url_request/url_request_job_tracker_unittest.cc | 13 |
7 files changed, 27 insertions, 58 deletions
diff --git a/net/url_request/url_request_file_job.cc b/net/url_request/url_request_file_job.cc index c8e90c1..47ef980 100644 --- a/net/url_request/url_request_file_job.cc +++ b/net/url_request/url_request_file_job.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 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. @@ -263,15 +263,10 @@ bool URLRequestFileJob::IsRedirectResponse(GURL* location, #endif } -bool URLRequestFileJob::GetContentEncodings( - std::vector<Filter::FilterType>* encoding_types) { - DCHECK(encoding_types->empty()); - +Filter* URLRequestFileJob::SetupFilter() const { // Bug 9936 - .svgz files needs to be decompressed. - if (LowerCaseEqualsASCII(file_path_.Extension(), ".svgz")) - encoding_types->push_back(Filter::FILTER_TYPE_GZIP); - - return !encoding_types->empty(); + return LowerCaseEqualsASCII(file_path_.Extension(), ".svgz") + ? Filter::GZipFactory() : NULL; } bool URLRequestFileJob::GetMimeType(std::string* mime_type) const { diff --git a/net/url_request/url_request_file_job.h b/net/url_request/url_request_file_job.h index 4dbcb0b..1baac7a 100644 --- a/net/url_request/url_request_file_job.h +++ b/net/url_request/url_request_file_job.h @@ -1,4 +1,4 @@ -// Copyright (c) 2006-2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 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. @@ -39,8 +39,7 @@ class URLRequestFileJob : public URLRequestJob { virtual void Kill(); virtual bool ReadRawData(IOBuffer* buf, int buf_size, int* bytes_read); virtual bool IsRedirectResponse(GURL* location, int* http_status_code); - virtual bool GetContentEncodings( - std::vector<Filter::FilterType>* encoding_type); + virtual Filter* SetupFilter() const; virtual bool GetMimeType(std::string* mime_type) const; virtual void SetExtraRequestHeaders(const HttpRequestHeaders& headers); diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc index 56de783..480833a 100644 --- a/net/url_request/url_request_http_job.cc +++ b/net/url_request/url_request_http_job.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 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. @@ -731,27 +731,27 @@ int URLRequestHttpJob::GetResponseCode() const { return response_info_->headers->response_code(); } -bool URLRequestHttpJob::GetContentEncodings( - std::vector<Filter::FilterType>* encoding_types) { +Filter* URLRequestHttpJob::SetupFilter() const { DCHECK(transaction_.get()); if (!response_info_) - return false; - DCHECK(encoding_types->empty()); + return NULL; + std::vector<Filter::FilterType> encoding_types; std::string encoding_type; void* iter = NULL; while (response_info_->headers->EnumerateHeader(&iter, "Content-Encoding", &encoding_type)) { - encoding_types->push_back(Filter::ConvertEncodingToType(encoding_type)); + encoding_types.push_back(Filter::ConvertEncodingToType(encoding_type)); } // Even if encoding types are empty, there is a chance that we need to add // some decoding, as some proxies strip encoding completely. In such cases, // we may need to add (for example) SDCH filtering (when the context suggests // it is appropriate). - Filter::FixupEncodingTypes(*this, encoding_types); + Filter::FixupEncodingTypes(*this, &encoding_types); - return !encoding_types->empty(); + return !encoding_types.empty() + ? Filter::Factory(encoding_types, *this) : NULL; } bool URLRequestHttpJob::IsCachedContent() const { diff --git a/net/url_request/url_request_http_job.h b/net/url_request/url_request_http_job.h index 27ba59b..6f742ec 100644 --- a/net/url_request/url_request_http_job.h +++ b/net/url_request/url_request_http_job.h @@ -72,8 +72,7 @@ class URLRequestHttpJob : public URLRequestJob { virtual void GetResponseInfo(HttpResponseInfo* info); virtual bool GetResponseCookies(std::vector<std::string>* cookies); virtual int GetResponseCode() const; - virtual bool GetContentEncodings( - std::vector<Filter::FilterType>* encoding_type); + virtual Filter* SetupFilter() const; virtual bool IsCachedContent() const; virtual bool IsSdchResponse() const; virtual bool IsSafeRedirect(const GURL& location); diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc index 59e63b3..67031ce 100644 --- a/net/url_request/url_request_job.cc +++ b/net/url_request/url_request_job.cc @@ -121,16 +121,8 @@ bool URLRequestJob::GetResponseCookies(std::vector<std::string>* cookies) { return false; } -bool URLRequestJob::GetContentEncodings( - std::vector<Filter::FilterType>* encoding_types) { - return false; -} - -void URLRequestJob::SetupFilter() { - std::vector<Filter::FilterType> encoding_types; - if (GetContentEncodings(&encoding_types)) { - filter_.reset(Filter::Factory(encoding_types, *this)); - } +Filter* URLRequestJob::SetupFilter() const { + return NULL; } bool URLRequestJob::IsRedirectResponse(GURL* location, @@ -457,7 +449,7 @@ void URLRequestJob::NotifyHeadersComplete() { has_handled_response_ = true; if (request_->status().is_success()) { - SetupFilter(); + filter_.reset(SetupFilter()); // Check if this content appears to be compressible. std::string mime_type; diff --git a/net/url_request/url_request_job.h b/net/url_request/url_request_job.h index 3b65f8b..49b3e6c 100644 --- a/net/url_request/url_request_job.h +++ b/net/url_request/url_request_job.h @@ -115,22 +115,13 @@ class URLRequestJob : public base::RefCounted<URLRequestJob>, // useful results once per job. virtual bool GetResponseCookies(std::vector<std::string>* cookies); - // Called to fetch the encoding types for this request. Only makes sense for - // some types of requests. Returns true on success. Calling this on a request - // that doesn't have or specify an encoding type will return false. - // Returns a array of strings showing the sequential encodings used on the - // content. - // For example, encoding_types[0] = FILTER_TYPE_SDCH and encoding_types[1] = - // FILTER_TYPE_GZIP, means the content was first encoded by sdch, and then - // result was encoded by gzip. To decode, a series of filters must be applied - // in the reverse order (in the above example, ungzip first, and then sdch - // expand). - virtual bool GetContentEncodings( - std::vector<Filter::FilterType>* encoding_types); - - // Called to setup stream filter for this request. An example of filter is + // Called to setup a stream filter for this request. An example of filter is // content encoding/decoding. - void SetupFilter(); + // Subclasses should return the appropriate Filter, or NULL for no Filter. + // This class takes ownership of the returned Filter. + // + // The default implementation returns NULL. + virtual Filter* SetupFilter() const; // Called to determine if this response is a redirect. Only makes sense // for some types of requests. This method returns true if the response diff --git a/net/url_request/url_request_job_tracker_unittest.cc b/net/url_request/url_request_job_tracker_unittest.cc index 3ea429b..d29f2d3 100644 --- a/net/url_request/url_request_job_tracker_unittest.cc +++ b/net/url_request/url_request_job_tracker_unittest.cc @@ -118,16 +118,9 @@ class URLRequestJobTrackerTestJob : public URLRequestJob { NotifyReadComplete(status); } - bool GetContentEncodings( - std::vector<Filter::FilterType>* encoding_types) { - if (request_->url().spec() == "test:basic") { - return false; - } else if (request_->url().spec() == "test:compressed") { - encoding_types->push_back(Filter::FILTER_TYPE_GZIP); - return true; - } else { - return URLRequestJob::GetContentEncodings(encoding_types); - } + Filter* SetupFilter() const { + return request_->url().spec() == "test:compressed" + ? Filter::GZipFactory() : NULL; } // The data to send, will be set in Start(). |