Index: chrome/browser/net/url_fetcher.cc |
=================================================================== |
--- chrome/browser/net/url_fetcher.cc (revision 46098) |
+++ chrome/browser/net/url_fetcher.cc (working copy) |
@@ -5,10 +5,9 @@ |
#include "chrome/browser/net/url_fetcher.h" |
#include "base/compiler_specific.h" |
+#include "base/message_loop_proxy.h" |
#include "base/string_util.h" |
#include "base/thread.h" |
-#include "chrome/browser/browser_process.h" |
-#include "chrome/browser/chrome_thread.h" |
#include "chrome/browser/net/url_fetcher_protect.h" |
#include "chrome/browser/net/url_request_context_getter.h" |
#include "googleurl/src/gurl.h" |
@@ -70,6 +69,9 @@ |
RequestType request_type_; // What type of request is this? |
URLFetcher::Delegate* delegate_; // Object to notify on completion |
MessageLoop* delegate_loop_; // Message loop of the creating thread |
+ scoped_refptr<MessageLoopProxy> io_message_loop_proxy_; |
+ // The message loop proxy for the thread |
+ // on which the request IO happens. |
URLRequest* request_; // The actual request this wraps |
int load_flags_; // Flags for the load operation |
int response_code_; // HTTP status code for the request |
@@ -147,8 +149,10 @@ |
void URLFetcher::Core::Start() { |
DCHECK(delegate_loop_); |
CHECK(request_context_getter_) << "We need an URLRequestContext!"; |
- ChromeThread::PostDelayedTask( |
- ChromeThread::IO, FROM_HERE, |
+ io_message_loop_proxy_ = request_context_getter_->GetIOMessageLoopProxy(); |
+ CHECK(io_message_loop_proxy_.get()) << "We need an IO message loop proxy"; |
+ io_message_loop_proxy_->PostDelayedTask( |
+ FROM_HERE, |
NewRunnableMethod(this, &Core::StartURLRequest), |
protect_entry_->UpdateBackoff(URLFetcherProtectEntry::SEND)); |
} |
@@ -157,14 +161,15 @@ |
DCHECK_EQ(MessageLoop::current(), delegate_loop_); |
delegate_ = NULL; |
fetcher_ = NULL; |
- ChromeThread::PostTask( |
- ChromeThread::IO, FROM_HERE, |
- NewRunnableMethod(this, &Core::CancelURLRequest)); |
+ if (io_message_loop_proxy_.get()) { |
+ io_message_loop_proxy_->PostTask( |
+ FROM_HERE, NewRunnableMethod(this, &Core::CancelURLRequest)); |
+ } |
} |
void URLFetcher::Core::OnResponseStarted(URLRequest* request) { |
DCHECK(request == request_); |
- DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); |
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
if (request_->status().is_success()) { |
response_code_ = request_->GetResponseCode(); |
response_headers_ = request_->response_headers(); |
@@ -182,7 +187,7 @@ |
void URLFetcher::Core::OnReadCompleted(URLRequest* request, int bytes_read) { |
DCHECK(request == request_); |
- DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); |
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
url_ = request->url(); |
@@ -205,7 +210,7 @@ |
} |
void URLFetcher::Core::StartURLRequest() { |
- DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); |
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
if (was_cancelled_) { |
// Since StartURLRequest() is posted as a *delayed* task, it may |
@@ -256,7 +261,8 @@ |
} |
void URLFetcher::Core::CancelURLRequest() { |
- DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO)); |
+ DCHECK(io_message_loop_proxy_->BelongsToCurrentThread()); |
+ |
if (request_) { |
request_->Cancel(); |
delete request_; |
@@ -288,8 +294,8 @@ |
if (delegate_) { |
if (fetcher_->automatically_retry_on_5xx_ && |
num_retries_ <= protect_entry_->max_retries()) { |
- ChromeThread::PostDelayedTask( |
- ChromeThread::IO, FROM_HERE, |
+ io_message_loop_proxy_->PostDelayedTask( |
+ FROM_HERE, |
NewRunnableMethod(this, &Core::StartURLRequest), back_off_time); |
} else { |
delegate_->OnURLFetchComplete(fetcher_, url_, status, response_code_, |