summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorwaffles <waffles@chromium.org>2014-11-14 16:07:15 -0800
committerCommit bot <commit-bot@chromium.org>2014-11-15 00:08:12 +0000
commit720946a28eb0d60d08e02c8273b276a7d05aea50 (patch)
tree386e58f21afb1fefa96787e23d4ee661d1d0f22f
parentd05fc383ac123024e4cfaadaea53e9878dde5ab7 (diff)
downloadchromium_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.cc9
-rw-r--r--components/component_updater/request_sender.h3
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);
};