diff options
author | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-09 16:53:31 +0000 |
---|---|---|
committer | jar@chromium.org <jar@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-03-09 16:53:31 +0000 |
commit | 60c413c96834553e182e8c9c34d1e8958f3b0fb5 (patch) | |
tree | db8e37e57691ad25bd737895a5ec487e47107960 /net/url_request | |
parent | dedf2055a80cf9d869767bbd0c99f51e4f31260e (diff) | |
download | chromium_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.cc | 2 | ||||
-rw-r--r-- | net/url_request/url_request_about_job.h | 6 | ||||
-rw-r--r-- | net/url_request/url_request_file_dir_job.cc | 2 | ||||
-rw-r--r-- | net/url_request/url_request_file_dir_job.h | 4 | ||||
-rw-r--r-- | net/url_request/url_request_file_job.cc | 2 | ||||
-rw-r--r-- | net/url_request/url_request_file_job.h | 4 | ||||
-rw-r--r-- | net/url_request/url_request_ftp_job.cc | 2 | ||||
-rw-r--r-- | net/url_request/url_request_ftp_job.h | 20 | ||||
-rw-r--r-- | net/url_request/url_request_http_job.cc | 3 | ||||
-rw-r--r-- | net/url_request/url_request_http_job.h | 3 | ||||
-rw-r--r-- | net/url_request/url_request_job.cc | 35 | ||||
-rw-r--r-- | net/url_request/url_request_job.h | 20 | ||||
-rw-r--r-- | net/url_request/url_request_simple_job.cc | 2 | ||||
-rw-r--r-- | net/url_request/url_request_simple_job.h | 6 | ||||
-rw-r--r-- | net/url_request/url_request_test_job.cc | 2 | ||||
-rw-r--r-- | net/url_request/url_request_test_job.h | 6 |
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: |