Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(776)

Unified Diff: net/url_request/url_request.h

Issue 67019: URLRequest::Interceptor enhancements... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/renderer_host/resource_dispatcher_host.cc ('k') | net/url_request/url_request.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/url_request/url_request.h
===================================================================
--- net/url_request/url_request.h (revision 13871)
+++ net/url_request/url_request.h (working copy)
@@ -5,12 +5,15 @@
#ifndef NET_URL_REQUEST_URL_REQUEST_H_
#define NET_URL_REQUEST_URL_REQUEST_H_
+#include <map>
#include <string>
#include <vector>
#include "base/file_path.h"
+#include "base/linked_ptr.h"
#include "base/logging.h"
#include "base/ref_counted.h"
+#include "base/scoped_ptr.h"
#include "googleurl/src/gurl.h"
#include "net/base/load_states.h"
#include "net/http/http_response_info.h"
@@ -48,7 +51,7 @@
class URLRequest {
public:
// Derive from this class and add your own data members to associate extra
- // information with a URLRequest. Use user_data() and set_user_data()
+ // information with a URLRequest. Use GetUserData(key) and SetUserData()
class UserData {
public:
UserData() {}
@@ -72,6 +75,29 @@
// request if it should be intercepted, or NULL to allow the request to
// be handled in the normal manner.
virtual URLRequestJob* MaybeIntercept(URLRequest* request) = 0;
+
+ // Called after having received a redirect response, but prior to the
+ // the request delegate being informed of the redirect. Can return a new
+ // job to replace the existing job if it should be intercepted, or NULL
+ // to allow the normal handling to continue. If a new job is provided,
+ // the delegate never sees the original redirect response, instead the
+ // response produced by the intercept job will be returned.
+ virtual URLRequestJob* MaybeInterceptRedirect(URLRequest* request,
+ const GURL& location) {
+ return NULL;
+ }
+
+ // Called after having received a final response, but prior to the
+ // the request delegate being informed of the response. This is also
+ // called when there is no server response at all to allow interception
+ // on dns or network errors. Can return a new job to replace the existing
+ // job if it should be intercepted, or NULL to allow the normal handling to
+ // continue. If a new job is provided, the delegate never sees the original
+ // response, instead the response produced by the intercept job will be
+ // returned.
+ virtual URLRequestJob* MaybeInterceptResponse(URLRequest* request) {
+ return NULL;
+ }
};
// The delegate's methods are called from the message loop of the thread
@@ -157,17 +183,12 @@
// will not have any more of its methods called.
~URLRequest();
- // The user data allows the owner to associate data with this request.
- // This request will TAKE OWNERSHIP of the given pointer, and will delete
- // the object if it is changed or the request is destroyed.
- UserData* user_data() const {
- return user_data_;
- }
- void set_user_data(UserData* user_data) {
- if (user_data_)
- delete user_data_;
- user_data_ = user_data;
- }
+ // The user data allows the clients to associate data with this request.
+ // Multiple user data values can be stored under different keys.
+ // This request will TAKE OWNERSHIP of the given data pointer, and will
+ // delete the object if it is changed or the request is destroyed.
+ UserData* GetUserData(void* key) const;
+ void SetUserData(void* key, UserData* data);
// Registers a new protocol handler for the given scheme. If the scheme is
// already handled, this will overwrite the given factory. To delete the
@@ -450,9 +471,23 @@
// successful, otherwise an error code is returned.
int Redirect(const GURL& location, int http_status_code);
+ // Called by URLRequestJob to allow interception when a redirect occurs.
+ void ReceivedRedirect(const GURL& location);
+
+ // Called by URLRequestJob to allow interception when the final response
+ // occurs.
+ void ResponseStarted();
+
+ // Allow an interceptor's URLRequestJob to restart this request.
+ // Should only be called if the original job has not started a resposne.
+ void Restart();
+
private:
friend class URLRequestJob;
+ void StartJob(URLRequestJob* job);
+ void RestartWithJob(URLRequestJob *job);
+
// Detaches the job from this request in preparation for this object going
// away or the job being replaced. The job will not call us back when it has
// been orphaned.
@@ -496,8 +531,9 @@
// whether the job is active.
bool is_pending_;
- // Externally-defined data associated with this request
- UserData* user_data_;
+ // Externally-defined data accessible by key
+ typedef std::map<void*, linked_ptr<UserData> > UserDataMap;
+ UserDataMap user_data_;
// Whether to enable performance profiling on the job serving this request.
bool enable_profiling_;
« no previous file with comments | « chrome/browser/renderer_host/resource_dispatcher_host.cc ('k') | net/url_request/url_request.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698