| 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, | 
|  |