summaryrefslogtreecommitdiffstats
path: root/content/common
diff options
context:
space:
mode:
authorakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-19 22:45:58 +0000
committerakalin@chromium.org <akalin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-19 22:45:58 +0000
commit389c3515d5eadbfc84cfba172e7bd479aa788393 (patch)
tree493714fe63cc7928c2ac1f2c521c10fed3d39d84 /content/common
parent6664b2d8bca10b2b15f7af5fdb1462ec71564c76 (diff)
downloadchromium_src-389c3515d5eadbfc84cfba172e7bd479aa788393.zip
chromium_src-389c3515d5eadbfc84cfba172e7bd479aa788393.tar.gz
chromium_src-389c3515d5eadbfc84cfba172e7bd479aa788393.tar.bz2
Remove references to renderer from URLFetcherCore
Replace AssociateWithRenderView() with SetFirstPartyForCookies() and SetPersistentURLRequestUserData(). This will make it possible to move URLFetcherCore to net/. BUG=118220 TEST= Review URL: http://codereview.chromium.org/10025032 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133076 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'content/common')
-rw-r--r--content/common/net/url_fetcher_core.cc38
-rw-r--r--content/common/net/url_fetcher_core.h22
-rw-r--r--content/common/net/url_fetcher_impl.cc19
3 files changed, 49 insertions, 30 deletions
diff --git a/content/common/net/url_fetcher_core.cc b/content/common/net/url_fetcher_core.cc
index b062fb3..1e8ac77 100644
--- a/content/common/net/url_fetcher_core.cc
+++ b/content/common/net/url_fetcher_core.cc
@@ -11,7 +11,6 @@
#include "base/metrics/histogram.h"
#include "base/stl_util.h"
#include "base/tracked_objects.h"
-#include "content/common/net/url_request_user_data.h"
#include "content/public/common/url_fetcher_delegate.h"
#include "net/base/io_buffer.h"
#include "net/base/load_flags.h"
@@ -256,8 +255,6 @@ URLFetcherCore::URLFetcherCore(URLFetcher* fetcher,
load_flags_(net::LOAD_NORMAL),
response_code_(URLFetcher::RESPONSE_CODE_INVALID),
buffer_(new net::IOBuffer(kBufferSize)),
- render_process_id_(-1),
- render_view_id_(-1),
was_fetched_via_proxy_(false),
is_chunked_upload_(false),
num_retries_(0),
@@ -400,18 +397,18 @@ void URLFetcherCore::SetRequestContext(
request_context_getter_ = request_context_getter;
}
-void URLFetcherCore::AssociateWithRenderView(
- const GURL& first_party_for_cookies,
- int render_process_id,
- int render_view_id) {
+void URLFetcherCore::SetFirstPartyForCookies(
+ const GURL& first_party_for_cookies) {
DCHECK(first_party_for_cookies_.is_empty());
- DCHECK_EQ(render_process_id_, -1);
- DCHECK_EQ(render_view_id_, -1);
- DCHECK_GE(render_process_id, 0);
- DCHECK_GE(render_view_id, 0);
first_party_for_cookies_ = first_party_for_cookies;
- render_process_id_ = render_process_id;
- render_view_id_ = render_view_id;
+}
+
+void URLFetcherCore::SetURLRequestUserData(
+ const void* key, const CreateDataCallback& create_data_callback) {
+ DCHECK(key);
+ DCHECK(!create_data_callback.is_null());
+ url_request_data_key_ = key;
+ url_request_create_data_callback_ = create_data_callback;
}
void URLFetcherCore::SetAutomaticallyRetryOn5xx(bool retry) {
@@ -672,9 +669,9 @@ void URLFetcherCore::RetryOrCompleteUrlFetch() {
backoff_delay = base::TimeDelta();
}
request_context_getter_ = NULL;
- render_process_id_ = -1;
- render_view_id_ = -1;
first_party_for_cookies_ = GURL();
+ url_request_data_key_ = NULL;
+ url_request_create_data_callback_.Reset();
bool posted = delegate_loop_proxy_->PostTask(
FROM_HERE,
base::Bind(&URLFetcherCore::OnCompletedURLRequest, this, backoff_delay));
@@ -725,10 +722,9 @@ void URLFetcherCore::StartURLRequest() {
request_->set_referrer(referrer_);
request_->set_first_party_for_cookies(first_party_for_cookies_.is_empty() ?
original_url_ : first_party_for_cookies_);
- if (render_process_id_ != -1 && render_view_id_ != -1) {
- request_->SetUserData(
- URLRequestUserData::kUserDataKey,
- new URLRequestUserData(render_process_id_, render_view_id_));
+ if (url_request_data_key_ && !url_request_create_data_callback_.is_null()) {
+ request_->SetUserData(url_request_data_key_,
+ url_request_create_data_callback_.Run());
}
switch (request_type_) {
@@ -820,9 +816,9 @@ void URLFetcherCore::CancelURLRequest() {
// delete the object, but we cannot delay the destruction of the request
// context.
request_context_getter_ = NULL;
- render_process_id_ = -1;
- render_view_id_ = -1;
first_party_for_cookies_ = GURL();
+ url_request_data_key_ = NULL;
+ url_request_create_data_callback_.Reset();
was_cancelled_ = true;
file_writer_.reset();
}
diff --git a/content/common/net/url_fetcher_core.h b/content/common/net/url_fetcher_core.h
index 8fe0116..d0e67ff 100644
--- a/content/common/net/url_fetcher_core.h
+++ b/content/common/net/url_fetcher_core.h
@@ -10,6 +10,7 @@
#include <string>
#include "base/basictypes.h"
+#include "base/callback_forward.h"
#include "base/compiler_specific.h"
#include "base/file_path.h"
#include "base/lazy_instance.h"
@@ -17,6 +18,7 @@
#include "base/memory/scoped_ptr.h"
#include "base/memory/weak_ptr.h"
#include "base/platform_file.h"
+#include "base/supports_user_data.h"
#include "base/timer.h"
#include "content/public/common/url_fetcher.h"
#include "googleurl/src/gurl.h"
@@ -44,6 +46,10 @@ class URLFetcherCore
: public base::RefCountedThreadSafe<URLFetcherCore>,
public net::URLRequest::Delegate {
public:
+ // Used by SetURLRequestUserData. The callback should make a fresh
+ // Data* object every time it's called.
+ typedef base::Callback<base::SupportsUserData::Data*()> CreateDataCallback;
+
URLFetcherCore(URLFetcher* fetcher,
const GURL& original_url,
URLFetcher::RequestType request_type,
@@ -80,11 +86,12 @@ class URLFetcherCore
void AddExtraRequestHeader(const std::string& header_line);
void GetExtraRequestHeaders(net::HttpRequestHeaders* headers) const;
void SetRequestContext(net::URLRequestContextGetter* request_context_getter);
- // TODO(akalin): When we move this class to net/, this has to stay
- // in content/ somehow.
- void AssociateWithRenderView(const GURL& first_party_for_cookies,
- int render_process_id,
- int render_view_id);
+ void SetFirstPartyForCookies(const GURL& first_party_for_cookies);
+ // Whenever a URLRequest object is created, SetUserData() will be
+ // called on it with the given key and the result of the given
+ // callback.
+ void SetURLRequestUserData(
+ const void* key, const CreateDataCallback& create_data_callback);
void SetAutomaticallyRetryOn5xx(bool retry);
void SetMaxRetries(int max_retries);
int GetMaxRetries() const;
@@ -311,9 +318,10 @@ class URLFetcherCore
// Read buffer
scoped_refptr<net::URLRequestContextGetter> request_context_getter_;
// Cookie/cache info for the request
- int render_process_id_; // The RenderView associated with the
- int render_view_id_; // request
GURL first_party_for_cookies_; // The first party URL for the request
+ // The user data to add to each newly-created URLRequest.
+ const void* url_request_data_key_;
+ CreateDataCallback url_request_create_data_callback_;
net::ResponseCookies cookies_; // Response cookies
net::HttpRequestHeaders extra_request_headers_;
scoped_refptr<net::HttpResponseHeaders> response_headers_;
diff --git a/content/common/net/url_fetcher_impl.cc b/content/common/net/url_fetcher_impl.cc
index a441435d..35f7c5a 100644
--- a/content/common/net/url_fetcher_impl.cc
+++ b/content/common/net/url_fetcher_impl.cc
@@ -4,8 +4,10 @@
#include "content/common/net/url_fetcher_impl.h"
+#include "base/bind.h"
#include "base/message_loop_proxy.h"
#include "content/common/net/url_fetcher_core.h"
+#include "content/common/net/url_request_user_data.h"
#include "content/public/common/url_fetcher_factory.h"
static content::URLFetcherFactory* g_factory = NULL;
@@ -96,12 +98,25 @@ void URLFetcherImpl::SetRequestContext(
core_->SetRequestContext(request_context_getter);
}
+namespace {
+
+base::SupportsUserData::Data* CreateURLRequestUserData(
+ int render_process_id,
+ int render_view_id) {
+ return new URLRequestUserData(render_process_id, render_view_id);
+}
+
+} // namespace
+
void URLFetcherImpl::AssociateWithRenderView(
const GURL& first_party_for_cookies,
int render_process_id,
int render_view_id) {
- core_->AssociateWithRenderView(
- first_party_for_cookies, render_process_id, render_view_id);
+ core_->SetFirstPartyForCookies(first_party_for_cookies);
+ core_->SetURLRequestUserData(
+ URLRequestUserData::kUserDataKey,
+ base::Bind(&CreateURLRequestUserData,
+ render_process_id, render_view_id));
}
void URLFetcherImpl::SetAutomaticallyRetryOn5xx(bool retry) {