summaryrefslogtreecommitdiffstats
path: root/net/url_request
diff options
context:
space:
mode:
authorjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-09 16:53:31 +0000
committerjar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-03-09 16:53:31 +0000
commit60c413c96834553e182e8c9c34d1e8958f3b0fb5 (patch)
treedb8e37e57691ad25bd737895a5ec487e47107960 /net/url_request
parentdedf2055a80cf9d869767bbd0c99f51e4f31260e (diff)
downloadchromium_src-60c413c96834553e182e8c9c34d1e8958f3b0fb5.zip
chromium_src-60c413c96834553e182e8c9c34d1e8958f3b0fb5.tar.gz
chromium_src-60c413c96834553e182e8c9c34d1e8958f3b0fb5.tar.bz2
Use FilterContext to allow filters to access URLRequestJob data
r=wtc,darin,huanr Review URL: http://codereview.chromium.org/40138 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@11248 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/url_request')
-rw-r--r--net/url_request/url_request_about_job.cc2
-rw-r--r--net/url_request/url_request_about_job.h6
-rw-r--r--net/url_request/url_request_file_dir_job.cc2
-rw-r--r--net/url_request/url_request_file_dir_job.h4
-rw-r--r--net/url_request/url_request_file_job.cc2
-rw-r--r--net/url_request/url_request_file_job.h4
-rw-r--r--net/url_request/url_request_ftp_job.cc2
-rw-r--r--net/url_request/url_request_ftp_job.h20
-rw-r--r--net/url_request/url_request_http_job.cc3
-rw-r--r--net/url_request/url_request_http_job.h3
-rw-r--r--net/url_request/url_request_job.cc35
-rw-r--r--net/url_request/url_request_job.h20
-rw-r--r--net/url_request/url_request_simple_job.cc2
-rw-r--r--net/url_request/url_request_simple_job.h6
-rw-r--r--net/url_request/url_request_test_job.cc2
-rw-r--r--net/url_request/url_request_test_job.h6
16 files changed, 76 insertions, 43 deletions
diff --git a/net/url_request/url_request_about_job.cc b/net/url_request/url_request_about_job.cc
index a9afd67..9c4bd30 100644
--- a/net/url_request/url_request_about_job.cc
+++ b/net/url_request/url_request_about_job.cc
@@ -27,7 +27,7 @@ void URLRequestAboutJob::Start() {
this, &URLRequestAboutJob::StartAsync));
}
-bool URLRequestAboutJob::GetMimeType(std::string* mime_type) {
+bool URLRequestAboutJob::GetMimeType(std::string* mime_type) const {
*mime_type = "text/html";
return true;
}
diff --git a/net/url_request/url_request_about_job.h b/net/url_request/url_request_about_job.h
index f64b1f3e..bcddd6a 100644
--- a/net/url_request/url_request_about_job.h
+++ b/net/url_request/url_request_about_job.h
@@ -5,15 +5,17 @@
#ifndef NET_URL_REQUEST_URL_REQUEST_ABOUT_JOB_H_
#define NET_URL_REQUEST_URL_REQUEST_ABOUT_JOB_H_
+#include <string>
+
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_job.h"
class URLRequestAboutJob : public URLRequestJob {
public:
- URLRequestAboutJob(URLRequest* request);
+ explicit URLRequestAboutJob(URLRequest* request);
virtual void Start();
- virtual bool GetMimeType(std::string* mime_type);
+ virtual bool GetMimeType(std::string* mime_type) const;
static URLRequest::ProtocolFactory Factory;
diff --git a/net/url_request/url_request_file_dir_job.cc b/net/url_request/url_request_file_dir_job.cc
index 1608684..4a21f98 100644
--- a/net/url_request/url_request_file_dir_job.cc
+++ b/net/url_request/url_request_file_dir_job.cc
@@ -86,7 +86,7 @@ bool URLRequestFileDirJob::ReadRawData(net::IOBuffer* buf, int buf_size,
return false;
}
-bool URLRequestFileDirJob::GetMimeType(string* mime_type) {
+bool URLRequestFileDirJob::GetMimeType(string* mime_type) const {
*mime_type = "text/html";
return true;
}
diff --git a/net/url_request/url_request_file_dir_job.h b/net/url_request/url_request_file_dir_job.h
index c3881dc..6dea9d7 100644
--- a/net/url_request/url_request_file_dir_job.h
+++ b/net/url_request/url_request_file_dir_job.h
@@ -5,6 +5,8 @@
#ifndef NET_URL_REQUEST_URL_REQUEST_FILE_DIR_JOB_H__
#define NET_URL_REQUEST_URL_REQUEST_FILE_DIR_JOB_H__
+#include <string>
+
#include "base/file_path.h"
#include "base/file_util.h"
#include "net/base/directory_lister.h"
@@ -22,7 +24,7 @@ class URLRequestFileDirJob
virtual void StartAsync();
virtual void Kill();
virtual bool ReadRawData(net::IOBuffer* buf, int buf_size, int *bytes_read);
- virtual bool GetMimeType(std::string* mime_type);
+ virtual bool GetMimeType(std::string* mime_type) const;
virtual bool GetCharset(std::string* charset);
virtual bool IsRedirectResponse(GURL* location, int* http_status_code);
diff --git a/net/url_request/url_request_file_job.cc b/net/url_request/url_request_file_job.cc
index e120aa6..bc7a50d 100644
--- a/net/url_request/url_request_file_job.cc
+++ b/net/url_request/url_request_file_job.cc
@@ -150,7 +150,7 @@ bool URLRequestFileJob::ReadRawData(net::IOBuffer* dest, int dest_size,
return false;
}
-bool URLRequestFileJob::GetMimeType(std::string* mime_type) {
+bool URLRequestFileJob::GetMimeType(std::string* mime_type) const {
DCHECK(request_);
return net::GetMimeTypeFromFile(file_path_, mime_type);
}
diff --git a/net/url_request/url_request_file_job.h b/net/url_request/url_request_file_job.h
index 3aff74b..1558c61 100644
--- a/net/url_request/url_request_file_job.h
+++ b/net/url_request/url_request_file_job.h
@@ -5,6 +5,8 @@
#ifndef NET_URL_REQUEST_URL_REQUEST_FILE_JOB_H_
#define NET_URL_REQUEST_URL_REQUEST_FILE_JOB_H_
+#include <string>
+
#include "base/file_path.h"
#include "base/file_util.h"
#include "net/base/completion_callback.h"
@@ -22,7 +24,7 @@ class URLRequestFileJob : public URLRequestJob {
virtual void Kill();
virtual bool ReadRawData(net::IOBuffer* buf, int buf_size, int* bytes_read);
virtual bool IsRedirectResponse(GURL* location, int* http_status_code);
- virtual bool GetMimeType(std::string* mime_type);
+ virtual bool GetMimeType(std::string* mime_type) const;
static URLRequest::ProtocolFactory Factory;
diff --git a/net/url_request/url_request_ftp_job.cc b/net/url_request/url_request_ftp_job.cc
index cf41f11..dee4fbb 100644
--- a/net/url_request/url_request_ftp_job.cc
+++ b/net/url_request/url_request_ftp_job.cc
@@ -80,7 +80,7 @@ void URLRequestFtpJob::Start() {
SendRequest();
}
-bool URLRequestFtpJob::GetMimeType(std::string* mime_type) {
+bool URLRequestFtpJob::GetMimeType(std::string* mime_type) const {
if (!is_directory_)
return false;
diff --git a/net/url_request/url_request_ftp_job.h b/net/url_request/url_request_ftp_job.h
index 44e845c..9dcd7e4 100644
--- a/net/url_request/url_request_ftp_job.h
+++ b/net/url_request/url_request_ftp_job.h
@@ -5,6 +5,8 @@
#ifndef NET_URL_REQUEST_URL_REQUEST_FTP_JOB_H_
#define NET_URL_REQUEST_URL_REQUEST_FTP_JOB_H_
+#include <string>
+
#include "net/url_request/url_request_inet_job.h"
// A basic FTP job that handles download files and showing directory listings.
@@ -16,13 +18,13 @@ class URLRequestFtpJob : public URLRequestInetJob {
// URLRequestJob methods:
virtual void Start();
- virtual bool GetMimeType(std::string* mime_type);
+ virtual bool GetMimeType(std::string* mime_type) const;
// URLRequestInetJob methods:
virtual void OnIOComplete(const AsyncResult& result);
protected:
- URLRequestFtpJob(URLRequest* request);
+ explicit URLRequestFtpJob(URLRequest* request);
// Starts the WinInet request.
virtual void SendRequest();
@@ -65,17 +67,19 @@ class URLRequestFtpJob : public URLRequestInetJob {
// Continuation function for calling OnIOComplete through the message loop.
virtual void ContinueIOComplete(int bytes_written);
- // Continuation function for calling NotifyHeadersComplete through
- //the message loop
+ // Continuation function for calling NotifyHeadersComplete through the message
+ // loop.
virtual void ContinueNotifyHeadersComplete();
typedef enum {
START = 0x200, // initial state of the ftp job
CONNECTING, // opening the url
- SETTING_CUR_DIRECTORY, // attempting to change current dir to match request
- FINDING_FIRST_FILE, // retrieving first file information in cur dir (by FtpFindFirstFile)
+ SETTING_CUR_DIRECTORY, // attempting to change current dir to match request
+ FINDING_FIRST_FILE, // retrieving first file information in cur dir (by
+ // FtpFindFirstFile)
GETTING_DIRECTORY, // retrieving the directory listing (if directory)
- GETTING_FILE_HANDLE, // initiate access to file by call to FtpOpenFile (if file)
+ GETTING_FILE_HANDLE, // initiate access to file by call to FtpOpenFile
+ // (if file).
GETTING_FILE, // retrieving the file (if file)
DONE // URLRequestInetJob is reading the response now
} FtpJobState;
@@ -91,7 +95,7 @@ class URLRequestFtpJob : public URLRequestInetJob {
bool is_directory_; // does the url point to a file or directory
WIN32_FIND_DATAA find_data_;
- std::string directory_html_; // if url is directory holds html
+ std::string directory_html_; // if url is directory holds html
// When building a directory listing, we need to temporarily hold on to the
// buffer in between the time a Read() call comes in and we get the file
diff --git a/net/url_request/url_request_http_job.cc b/net/url_request/url_request_http_job.cc
index 32c6ed2..62ffb42 100644
--- a/net/url_request/url_request_http_job.cc
+++ b/net/url_request/url_request_http_job.cc
@@ -139,7 +139,7 @@ uint64 URLRequestHttpJob::GetUploadProgress() const {
return transaction_.get() ? transaction_->GetUploadProgress() : 0;
}
-bool URLRequestHttpJob::GetMimeType(std::string* mime_type) {
+bool URLRequestHttpJob::GetMimeType(std::string* mime_type) const {
DCHECK(transaction_.get());
if (!response_info_)
@@ -206,6 +206,7 @@ bool URLRequestHttpJob::GetContentEncodings(
if (!encoding_types->empty()) {
std::string mime_type;
GetMimeType(&mime_type);
+ // TODO(jar): Need to change this call to use the FilterContext interfaces.
Filter::FixupEncodingTypes(IsSdchResponse(), mime_type, encoding_types);
}
return !encoding_types->empty();
diff --git a/net/url_request/url_request_http_job.h b/net/url_request/url_request_http_job.h
index 53d46f4..b165d2e 100644
--- a/net/url_request/url_request_http_job.h
+++ b/net/url_request/url_request_http_job.h
@@ -5,6 +5,7 @@
#ifndef NET_URL_REQUEST_URL_REQUEST_HTTP_JOB_H_
#define NET_URL_REQUEST_URL_REQUEST_HTTP_JOB_H_
+#include <string>
#include <vector>
#include "base/scoped_ptr.h"
@@ -37,7 +38,7 @@ class URLRequestHttpJob : public URLRequestJob {
virtual void Kill();
virtual net::LoadState GetLoadState() const;
virtual uint64 GetUploadProgress() const;
- virtual bool GetMimeType(std::string* mime_type);
+ virtual bool GetMimeType(std::string* mime_type) const;
virtual bool GetCharset(std::string* charset);
virtual void GetResponseInfo(net::HttpResponseInfo* info);
virtual bool GetResponseCookies(std::vector<std::string>* cookies);
diff --git a/net/url_request/url_request_job.cc b/net/url_request/url_request_job.cc
index a82f879..2873ae2 100644
--- a/net/url_request/url_request_job.cc
+++ b/net/url_request/url_request_job.cc
@@ -18,7 +18,8 @@ using base::Time;
using base::TimeTicks;
// Buffer size allocated when de-compressing data.
-static const int kFilterBufSize = 32 * 1024;
+// static
+const int URLRequestJob::kFilterBufSize = 32 * 1024;
URLRequestJob::URLRequestJob(URLRequest* request)
: request_(request),
@@ -54,18 +55,7 @@ void URLRequestJob::DetachRequest() {
void URLRequestJob::SetupFilter() {
std::vector<Filter::FilterType> encoding_types;
if (GetContentEncodings(&encoding_types)) {
- filter_.reset(Filter::Factory(encoding_types, kFilterBufSize));
- if (filter_.get()) {
- std::string mime_type;
- GetMimeType(&mime_type);
- filter_->SetURL(request_->url());
- filter_->SetMimeType(mime_type);
- // Approximate connect time with request_time. If it is not cached, then
- // this is a good approximation for when the first bytes went on the
- // wire.
- filter_->SetConnectTime(request_->response_info_.request_time,
- request_->response_info_.was_cached);
- }
+ filter_.reset(Filter::Factory(encoding_types, *this));
}
}
@@ -96,6 +86,25 @@ void URLRequestJob::ContinueDespiteLastError() {
NOTREACHED();
}
+bool URLRequestJob::GetURL(GURL* gurl) const {
+ if (!request_)
+ return false;
+ *gurl = request_->url();
+ return true;
+}
+
+base::Time URLRequestJob::GetRequestTime() const {
+ if (!request_)
+ return base::Time();
+ return request_->request_time();
+};
+
+bool URLRequestJob::IsCachedContent() const {
+ if (!request_)
+ return false;
+ return request_->was_cached();
+};
+
// This function calls ReadData to get stream data. If a filter exists, passes
// the data to the attached filter. Then returns the output from filter back to
// the caller.
diff --git a/net/url_request/url_request_job.h b/net/url_request/url_request_job.h
index aac3768..121519e 100644
--- a/net/url_request/url_request_job.h
+++ b/net/url_request/url_request_job.h
@@ -9,6 +9,7 @@
#include <vector>
#include "base/ref_counted.h"
+#include "base/scoped_ptr.h"
#include "net/base/filter.h"
#include "net/base/load_states.h"
@@ -27,7 +28,8 @@ class URLRequestJobMetrics;
// The URLRequestJob is using RefCounterThreadSafe because some sub classes
// can be destroyed on multiple threads. This is the case of the
// UrlRequestFileJob.
-class URLRequestJob : public base::RefCountedThreadSafe<URLRequestJob> {
+class URLRequestJob : public base::RefCountedThreadSafe<URLRequestJob>,
+ public FilterContext {
public:
explicit URLRequestJob(URLRequest* request);
virtual ~URLRequestJob();
@@ -86,11 +88,6 @@ class URLRequestJob : public base::RefCountedThreadSafe<URLRequestJob> {
// Called to get the upload progress in bytes.
virtual uint64 GetUploadProgress() const { return 0; }
- // Called to fetch the mime_type for this request. Only makes sense for some
- // types of requests. Returns true on success. Calling this on a type that
- // doesn't have a mime type will return false.
- virtual bool GetMimeType(std::string* mime_type) { return false; }
-
// Called to fetch the charset for this request. Only makes sense for some
// types of requests. Returns true on success. Calling this on a type that
// doesn't have a charset will return false.
@@ -195,6 +192,14 @@ class URLRequestJob : public base::RefCountedThreadSafe<URLRequestJob> {
// Whether we have processed the response for that request yet.
bool has_response_started() const { return has_handled_response_; }
+ // FilterContext methods:
+ // These methods are not applicable to all connections.
+ virtual bool GetMimeType(std::string* mime_type) const { return false; }
+ virtual bool GetURL(GURL* gurl) const;
+ virtual base::Time GetRequestTime() const;
+ virtual bool IsCachedContent() const;
+ virtual int GetInputStreambufferSize() const { return kFilterBufSize; }
+
protected:
// Notifies the job that headers have been received.
void NotifyHeadersComplete();
@@ -262,6 +267,9 @@ class URLRequestJob : public base::RefCountedThreadSafe<URLRequestJob> {
scoped_ptr<URLRequestJobMetrics> metrics_;
private:
+ // Size of filter input buffers used by this class.
+ static const int kFilterBufSize;
+
// When data filtering is enabled, this function is used to read data
// for the filter. Returns true if raw data was read. Returns false if
// an error occurred (or we are waiting for IO to complete).
diff --git a/net/url_request/url_request_simple_job.cc b/net/url_request/url_request_simple_job.cc
index 8f684ab..38ee61b 100644
--- a/net/url_request/url_request_simple_job.cc
+++ b/net/url_request/url_request_simple_job.cc
@@ -20,7 +20,7 @@ void URLRequestSimpleJob::Start() {
this, &URLRequestSimpleJob::StartAsync));
}
-bool URLRequestSimpleJob::GetMimeType(std::string* mime_type) {
+bool URLRequestSimpleJob::GetMimeType(std::string* mime_type) const {
*mime_type = mime_type_;
return true;
}
diff --git a/net/url_request/url_request_simple_job.h b/net/url_request/url_request_simple_job.h
index 87dbcb1..0879948 100644
--- a/net/url_request/url_request_simple_job.h
+++ b/net/url_request/url_request_simple_job.h
@@ -5,17 +5,19 @@
#ifndef NET_URL_REQUEST_URL_REQUEST_SIMPLE_JOB_H_
#define NET_URL_REQUEST_URL_REQUEST_SIMPLE_JOB_H_
+#include <string>
+
#include "net/url_request/url_request_job.h"
class URLRequest;
class URLRequestSimpleJob : public URLRequestJob {
public:
- URLRequestSimpleJob(URLRequest* request);
+ explicit URLRequestSimpleJob(URLRequest* request);
virtual void Start();
virtual bool ReadRawData(net::IOBuffer* buf, int buf_size, int *bytes_read);
- virtual bool GetMimeType(std::string* mime_type);
+ virtual bool GetMimeType(std::string* mime_type) const;
virtual bool GetCharset(std::string* charset);
protected:
diff --git a/net/url_request/url_request_test_job.cc b/net/url_request/url_request_test_job.cc
index fce29fd..0843c98 100644
--- a/net/url_request/url_request_test_job.cc
+++ b/net/url_request/url_request_test_job.cc
@@ -57,7 +57,7 @@ URLRequestTestJob::URLRequestTestJob(URLRequest* request)
}
// Force the response to set a reasonable MIME type
-bool URLRequestTestJob::GetMimeType(std::string* mime_type) {
+bool URLRequestTestJob::GetMimeType(std::string* mime_type) const {
DCHECK(mime_type);
*mime_type = "text/html";
return true;
diff --git a/net/url_request/url_request_test_job.h b/net/url_request/url_request_test_job.h
index 4cbf37e..b7e0566 100644
--- a/net/url_request/url_request_test_job.h
+++ b/net/url_request/url_request_test_job.h
@@ -5,6 +5,8 @@
#ifndef NET_URL_REQUEST_URL_REQUEST_TEST_JOB_H_
#define NET_URL_REQUEST_URL_REQUEST_TEST_JOB_H_
+#include <string>
+
#include "net/url_request/url_request.h"
#include "net/url_request/url_request_job.h"
@@ -26,7 +28,7 @@
// end of the queue.
class URLRequestTestJob : public URLRequestJob {
public:
- URLRequestTestJob(URLRequest* request);
+ explicit URLRequestTestJob(URLRequest* request);
virtual ~URLRequestTestJob() {}
// the three URLs this handler will respond to
@@ -53,7 +55,7 @@ class URLRequestTestJob : public URLRequestJob {
virtual void Start();
virtual bool ReadRawData(net::IOBuffer* buf, int buf_size, int *bytes_read);
virtual void Kill();
- virtual bool GetMimeType(std::string* mime_type);
+ virtual bool GetMimeType(std::string* mime_type) const;
virtual void GetResponseInfo(net::HttpResponseInfo* info);
protected: