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

Unified Diff: chromeos/dbus/services/proxy_resolution_service_provider.cc

Issue 2786103002: chromeos: Avoid DCHECK in ProxyResolutionServiceProvider. (Closed)
Patch Set: rename RunAllTasks to RunPendingTasks to avoid tricking future me Created 3 years, 9 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
Index: chromeos/dbus/services/proxy_resolution_service_provider.cc
diff --git a/chromeos/dbus/services/proxy_resolution_service_provider.cc b/chromeos/dbus/services/proxy_resolution_service_provider.cc
index 87279d6057c2a286d989e84a219181d0e8464d4d..2400344a7ea92873f1f4471194ff6c170fc51b15 100644
--- a/chromeos/dbus/services/proxy_resolution_service_provider.cc
+++ b/chromeos/dbus/services/proxy_resolution_service_provider.cc
@@ -163,6 +163,10 @@ void ProxyResolutionServiceProvider::ResolveProxy(
: base::MakeUnique<Request>(source_url, std::move(response),
response_sender, context_getter);
+ NotifyCallback notify_callback =
+ base::Bind(&ProxyResolutionServiceProvider::NotifyProxyResolved,
+ weak_ptr_factory_.GetWeakPtr());
+
// This would ideally call PostTaskAndReply() instead of PostTask(), but
// ResolveProxyOnNetworkThread()'s call to net::ProxyService::ResolveProxy()
// can result in an asynchronous lookup, in which case the result won't be
@@ -170,8 +174,8 @@ void ProxyResolutionServiceProvider::ResolveProxy(
context_getter->GetNetworkTaskRunner()->PostTask(
FROM_HERE,
base::Bind(&ProxyResolutionServiceProvider::ResolveProxyOnNetworkThread,
- weak_ptr_factory_.GetWeakPtr(),
- base::Passed(std::move(request))));
+ base::Passed(std::move(request)), origin_thread_,
+ notify_callback));
// If we didn't already pass the response to the Request object because we're
// returning data via a signal, send an empty response immediately.
@@ -179,8 +183,11 @@ void ProxyResolutionServiceProvider::ResolveProxy(
response_sender.Run(std::move(response));
}
+// static
void ProxyResolutionServiceProvider::ResolveProxyOnNetworkThread(
- std::unique_ptr<Request> request) {
+ std::unique_ptr<Request> request,
+ scoped_refptr<base::SingleThreadTaskRunner> notify_thread,
+ NotifyCallback notify_callback) {
DCHECK(request->context_getter->GetNetworkTaskRunner()
->BelongsToCurrentThread());
@@ -188,14 +195,15 @@ void ProxyResolutionServiceProvider::ResolveProxyOnNetworkThread(
request->context_getter->GetURLRequestContext()->proxy_service();
if (!proxy_service) {
request->error = "No proxy service in chrome";
- OnResolutionComplete(std::move(request), net::ERR_UNEXPECTED);
+ OnResolutionComplete(std::move(request), notify_thread, notify_callback,
+ net::ERR_UNEXPECTED);
return;
}
Request* request_ptr = request.get();
net::CompletionCallback callback = base::Bind(
&ProxyResolutionServiceProvider::OnResolutionComplete,
- weak_ptr_factory_.GetWeakPtr(), base::Passed(std::move(request)));
+ base::Passed(std::move(request)), notify_thread, notify_callback);
VLOG(1) << "Starting network proxy resolution for "
<< request_ptr->source_url;
@@ -208,8 +216,11 @@ void ProxyResolutionServiceProvider::ResolveProxyOnNetworkThread(
}
}
+// static
void ProxyResolutionServiceProvider::OnResolutionComplete(
std::unique_ptr<Request> request,
+ scoped_refptr<base::SingleThreadTaskRunner> notify_thread,
+ NotifyCallback notify_callback,
int result) {
DCHECK(request->context_getter->GetNetworkTaskRunner()
->BelongsToCurrentThread());
@@ -217,11 +228,8 @@ void ProxyResolutionServiceProvider::OnResolutionComplete(
if (request->error.empty() && result != net::OK)
request->error = net::ErrorToString(result);
- origin_thread_->PostTask(
- FROM_HERE,
- base::Bind(&ProxyResolutionServiceProvider::NotifyProxyResolved,
- weak_ptr_factory_.GetWeakPtr(),
- base::Passed(std::move(request))));
+ notify_thread->PostTask(
+ FROM_HERE, base::Bind(notify_callback, base::Passed(std::move(request))));
}
void ProxyResolutionServiceProvider::NotifyProxyResolved(

Powered by Google App Engine
This is Rietveld 408576698