diff options
author | vlaviano@chromium.org <vlaviano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-24 02:23:33 +0000 |
---|---|---|
committer | vlaviano@chromium.org <vlaviano@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-11-24 02:23:33 +0000 |
commit | f34dabdeb6ff9e25515bb68bac78af7f49ce6f3a (patch) | |
tree | fc6a84b0a3e496a0a7f52b2ad1559bd50f54908b /chrome/browser | |
parent | 89539dec77e9c1625d6616c4060b474e0ebd46bd (diff) | |
download | chromium_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.cc | 20 | ||||
-rw-r--r-- | chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h | 10 |
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(); |