diff options
author | waffles <waffles@chromium.org> | 2014-11-14 16:07:15 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2014-11-15 00:08:12 +0000 |
commit | 720946a28eb0d60d08e02c8273b276a7d05aea50 (patch) | |
tree | 386e58f21afb1fefa96787e23d4ee661d1d0f22f | |
parent | d05fc383ac123024e4cfaadaea53e9878dde5ab7 (diff) | |
download | chromium_src-720946a28eb0d60d08e02c8273b276a7d05aea50.zip chromium_src-720946a28eb0d60d08e02c8273b276a7d05aea50.tar.gz chromium_src-720946a28eb0d60d08e02c8273b276a7d05aea50.tar.bz2 |
Request_sender must not use the worker pool to construct an URLFetcher,
as this causes a crash. Instead, the class will post to the same thread
that is already running on.
A thread checker has been added to check thread affinity.
BUG=432307
Review URL: https://codereview.chromium.org/729013002
Cr-Commit-Position: refs/heads/master@{#304308}
-rw-r--r-- | components/component_updater/request_sender.cc | 9 | ||||
-rw-r--r-- | components/component_updater/request_sender.h | 3 |
2 files changed, 10 insertions, 2 deletions
diff --git a/components/component_updater/request_sender.cc b/components/component_updater/request_sender.cc index 8c80622..da6f794 100644 --- a/components/component_updater/request_sender.cc +++ b/components/component_updater/request_sender.cc @@ -8,7 +8,8 @@ #include "base/bind_helpers.h" #include "base/location.h" #include "base/logging.h" -#include "base/sequenced_task_runner.h" +#include "base/single_thread_task_runner.h" +#include "base/thread_task_runner_handle.h" #include "components/component_updater/component_updater_configurator.h" #include "components/component_updater/component_updater_utils.h" #include "net/url_request/url_fetcher.h" @@ -19,11 +20,13 @@ RequestSender::RequestSender(const Configurator& config) : config_(config) { } RequestSender::~RequestSender() { + DCHECK(thread_checker_.CalledOnValidThread()); } void RequestSender::Send(const std::string& request_string, const std::vector<GURL>& urls, const RequestSenderCallback& request_sender_callback) { + DCHECK(thread_checker_.CalledOnValidThread()); if (urls.empty()) { request_sender_callback.Run(NULL); return; @@ -41,19 +44,21 @@ void RequestSender::Send(const std::string& request_string, void RequestSender::SendInternal() { DCHECK(cur_url_ != urls_.end()); DCHECK(cur_url_->is_valid()); + DCHECK(thread_checker_.CalledOnValidThread()); url_fetcher_.reset(SendProtocolRequest( *cur_url_, request_string_, this, config_.RequestContext())); } void RequestSender::OnURLFetchComplete(const net::URLFetcher* source) { + DCHECK(thread_checker_.CalledOnValidThread()); if (GetFetchError(*source) == 0) { request_sender_callback_.Run(source); return; } if (++cur_url_ != urls_.end() && - config_.GetSequencedTaskRunner()->PostTask( + base::ThreadTaskRunnerHandle::Get()->PostTask( FROM_HERE, base::Bind(&RequestSender::SendInternal, base::Unretained(this)))) { return; diff --git a/components/component_updater/request_sender.h b/components/component_updater/request_sender.h index 10a26f8..5d137e2 100644 --- a/components/component_updater/request_sender.h +++ b/components/component_updater/request_sender.h @@ -12,6 +12,7 @@ #include "base/compiler_specific.h" #include "base/macros.h" #include "base/memory/scoped_ptr.h" +#include "base/threading/thread_checker.h" #include "net/url_request/url_fetcher_delegate.h" #include "url/gurl.h" @@ -53,6 +54,8 @@ class RequestSender : public net::URLFetcherDelegate { std::string request_string_; RequestSenderCallback request_sender_callback_; + base::ThreadChecker thread_checker_; + DISALLOW_COPY_AND_ASSIGN(RequestSender); }; |