summaryrefslogtreecommitdiffstats
path: root/net/url_request
diff options
context:
space:
mode:
authoradamk@chromium.org <adamk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-17 01:24:05 +0000
committeradamk@chromium.org <adamk@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-03-17 01:24:05 +0000
commit5a3b4d3d89a226326174279ba1478ee069d015be (patch)
tree18f94db862326c21d522000e8fc5445ee4834f1a /net/url_request
parent6acaea63ab984c081f40a6f20d04196ade867188 (diff)
downloadchromium_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.cc13
-rw-r--r--net/url_request/url_request_file_job.h5
-rw-r--r--net/url_request/url_request_http_job.cc16
-rw-r--r--net/url_request/url_request_http_job.h3
-rw-r--r--net/url_request/url_request_job.cc14
-rw-r--r--net/url_request/url_request_job.h21
-rw-r--r--net/url_request/url_request_job_tracker_unittest.cc13
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().