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

Unified Diff: chrome/browser/sync/glue/http_bridge.cc

Issue 258008: Move initialization of ChromeURLRequestContexts to the IO thread. (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: sync again, just in case Created 11 years, 2 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/sync/glue/http_bridge.h ('k') | chrome/browser/sync/glue/http_bridge_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/sync/glue/http_bridge.cc
===================================================================
--- chrome/browser/sync/glue/http_bridge.cc (revision 29872)
+++ chrome/browser/sync/glue/http_bridge.cc (working copy)
@@ -21,24 +21,46 @@
namespace browser_sync {
+HttpBridge::RequestContextGetter::RequestContextGetter(
+ URLRequestContextGetter* baseline_context_getter)
+ : baseline_context_getter_(baseline_context_getter) {
+}
+
+URLRequestContext* HttpBridge::RequestContextGetter::GetURLRequestContext() {
+ // Lazily create the context.
+ if (!context_) {
+ URLRequestContext* baseline_context =
+ baseline_context_getter_->GetURLRequestContext();
+ context_ = new RequestContext(baseline_context);
+ baseline_context_getter_ = NULL;
+ }
+
+ // Apply the user agent which was set earlier.
+ if (is_user_agent_set())
+ context_->set_user_agent(user_agent_);
+
+ return context_;
+}
+
HttpBridgeFactory::HttpBridgeFactory(
- URLRequestContext* baseline_context) {
- DCHECK(baseline_context != NULL);
- request_context_ = new HttpBridge::RequestContext(baseline_context);
- request_context_->AddRef();
+ URLRequestContextGetter* baseline_context_getter) {
+ DCHECK(baseline_context_getter != NULL);
+ request_context_getter_ =
+ new HttpBridge::RequestContextGetter(baseline_context_getter);
+ request_context_getter_->AddRef();
}
HttpBridgeFactory::~HttpBridgeFactory() {
- if (request_context_) {
- // Clean up request context on IO thread.
+ if (request_context_getter_) {
+ // Clean up request context getter on IO thread.
ChromeThread::GetMessageLoop(ChromeThread::IO)->ReleaseSoon(FROM_HERE,
- request_context_);
- request_context_ = NULL;
+ request_context_getter_);
+ request_context_getter_ = NULL;
}
}
sync_api::HttpPostProviderInterface* HttpBridgeFactory::Create() {
- HttpBridge* http = new HttpBridge(request_context_,
+ HttpBridge* http = new HttpBridge(request_context_getter_,
ChromeThread::GetMessageLoop(ChromeThread::IO));
http->AddRef();
return http;
@@ -87,9 +109,9 @@
delete http_transaction_factory_;
}
-HttpBridge::HttpBridge(HttpBridge::RequestContext* context,
+HttpBridge::HttpBridge(HttpBridge::RequestContextGetter* context_getter,
MessageLoop* io_loop)
- : context_for_request_(context),
+ : context_getter_for_request_(context_getter),
url_poster_(NULL),
created_on_loop_(MessageLoop::current()),
io_loop_(io_loop),
@@ -98,17 +120,17 @@
http_response_code_(-1),
http_post_completed_(false, false),
use_io_loop_for_testing_(false) {
- context_for_request_->AddRef();
+ context_getter_for_request_->AddRef();
}
HttpBridge::~HttpBridge() {
- io_loop_->ReleaseSoon(FROM_HERE, context_for_request_);
+ io_loop_->ReleaseSoon(FROM_HERE, context_getter_for_request_);
}
void HttpBridge::SetUserAgent(const char* user_agent) {
DCHECK_EQ(MessageLoop::current(), created_on_loop_);
DCHECK(!request_completed_);
- context_for_request_->set_user_agent(user_agent);
+ context_getter_for_request_->set_user_agent(user_agent);
}
void HttpBridge::SetExtraRequestHeaders(const char * headers) {
@@ -153,7 +175,6 @@
DCHECK(!request_completed_);
DCHECK(url_for_request_.is_valid()) << "Invalid URL for request";
DCHECK(!content_type_.empty()) << "Payload not set";
- DCHECK(context_for_request_->is_user_agent_set()) << "User agent not set";
io_loop_->PostTask(FROM_HERE, NewRunnableMethod(this,
&HttpBridge::CallMakeAsynchronousPost));
@@ -172,7 +193,7 @@
DCHECK(!request_completed_);
url_poster_ = new URLFetcher(url_for_request_, URLFetcher::POST, this);
- url_poster_->set_request_context(context_for_request_);
+ url_poster_->set_request_context(context_getter_for_request_);
url_poster_->set_upload_data(content_type_, request_content_);
url_poster_->set_extra_request_headers(extra_headers_);
@@ -194,10 +215,6 @@
return response_content_.data();
}
-URLRequestContext* HttpBridge::GetRequestContext() const {
- return context_for_request_;
-}
-
void HttpBridge::OnURLFetchComplete(const URLFetcher *source, const GURL &url,
const URLRequestStatus &status,
int response_code,
« no previous file with comments | « chrome/browser/sync/glue/http_bridge.h ('k') | chrome/browser/sync/glue/http_bridge_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698