summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorvlaviano@chromium.org <vlaviano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-24 02:23:33 +0000
committervlaviano@chromium.org <vlaviano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2011-11-24 02:23:33 +0000
commitf34dabdeb6ff9e25515bb68bac78af7f49ce6f3a (patch)
treefc6a84b0a3e496a0a7f52b2ad1559bd50f54908b /chrome/browser
parent89539dec77e9c1625d6616c4060b474e0ebd46bd (diff)
downloadchromium_src-f34dabdeb6ff9e25515bb68bac78af7f49ce6f3a.zip
chromium_src-f34dabdeb6ff9e25515bb68bac78af7f49ce6f3a.tar.gz
chromium_src-f34dabdeb6ff9e25515bb68bac78af7f49ce6f3a.tar.bz2
chrome: dbus: support asynchronous method replies
BUG=chromium-os:23241 TEST=Unit tests and manual testing on device. Change-Id: I4d665897687030f4ab2379e4f6ddb9b3ebe02af4 Review URL: http://codereview.chromium.org/8637002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@111479 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc20
-rw-r--r--chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h10
2 files changed, 18 insertions, 12 deletions
diff --git a/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc b/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc
index 921cf80..a564c1d 100644
--- a/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc
+++ b/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc
@@ -224,8 +224,9 @@ bool ProxyResolutionServiceProvider::OnOriginThread() {
return base::PlatformThread::CurrentId() == origin_thread_id_;
}
-dbus::Response* ProxyResolutionServiceProvider::ResolveProxyHandler(
- dbus::MethodCall* method_call) {
+void ProxyResolutionServiceProvider::ResolveProxyHandler(
+ dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender) {
DCHECK(OnOriginThread());
VLOG(1) << "Handing method call: " << method_call->ToString();
// The method call should contain the three string parameters.
@@ -237,7 +238,8 @@ dbus::Response* ProxyResolutionServiceProvider::ResolveProxyHandler(
!reader.PopString(&signal_interface) ||
!reader.PopString(&signal_name)) {
LOG(ERROR) << "Unexpected method call: " << method_call->ToString();
- return NULL;
+ response_sender.Run(NULL);
+ return;
}
resolver_->ResolveProxy(source_url,
@@ -248,18 +250,20 @@ dbus::Response* ProxyResolutionServiceProvider::ResolveProxyHandler(
// Return an empty response for now. We'll send a signal once the
// network proxy resolution is completed.
dbus::Response* response = dbus::Response::FromMethodCall(method_call);
- return response;
+ response_sender.Run(response);
}
// static
-dbus::Response* ProxyResolutionServiceProvider::CallResolveProxyHandler(
+void ProxyResolutionServiceProvider::CallResolveProxyHandler(
base::WeakPtr<ProxyResolutionServiceProvider> provider_weak_ptr,
- dbus::MethodCall* method_call) {
+ dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender) {
if (!provider_weak_ptr) {
LOG(WARNING) << "Called after the object is deleted";
- return NULL;
+ response_sender.Run(NULL);
+ return;
}
- return provider_weak_ptr->ResolveProxyHandler(method_call);
+ provider_weak_ptr->ResolveProxyHandler(method_call, response_sender);
}
ProxyResolutionServiceProvider* ProxyResolutionServiceProvider::Create() {
diff --git a/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h b/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h
index 5a26358..383c082 100644
--- a/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h
+++ b/chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h
@@ -15,9 +15,9 @@
#include "base/synchronization/lock.h"
#include "base/threading/platform_thread.h"
#include "chrome/browser/chromeos/dbus/cros_dbus_service.h"
+#include "dbus/exported_object.h"
namespace dbus {
-class ExportedObject;
class MethodCall;
class Response;
}
@@ -104,13 +104,15 @@ class ProxyResolutionServiceProvider
// Callback to be invoked when ChromeOS clients send network proxy
// resolution requests to the service running in chrome executable.
// Called on UI thread from dbus request.
- dbus::Response* ResolveProxyHandler(dbus::MethodCall* method_call);
+ void ResolveProxyHandler(dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender);
// Calls ResolveProxyHandler() if weak_ptr is not NULL. Used to ensure a
// safe shutdown.
- static dbus::Response* CallResolveProxyHandler(
+ static void CallResolveProxyHandler(
base::WeakPtr<ProxyResolutionServiceProvider> weak_ptr,
- dbus::MethodCall* method_call);
+ dbus::MethodCall* method_call,
+ dbus::ExportedObject::ResponseSender response_sender);
// Returns true if the current thread is on the origin thread.
bool OnOriginThread();