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

Side by Side Diff: chrome/browser/chromeos/dbus/proxy_resolution_service_provider.cc

Issue 8728020: chrome: dbus: support asynchronous method replies (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix comment Created 9 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h" 5 #include "chrome/browser/chromeos/dbus/proxy_resolution_service_provider.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/threading/platform_thread.h" 8 #include "base/threading/platform_thread.h"
9 #include "chrome/browser/browser_process.h" 9 #include "chrome/browser/browser_process.h"
10 #include "chrome/browser/profiles/profile_manager.h" 10 #include "chrome/browser/profiles/profile_manager.h"
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 LOG(ERROR) << "Failed to export " << interface_name << "." 217 LOG(ERROR) << "Failed to export " << interface_name << "."
218 << method_name; 218 << method_name;
219 } 219 }
220 VLOG(1) << "Method exported: " << interface_name << "." << method_name; 220 VLOG(1) << "Method exported: " << interface_name << "." << method_name;
221 } 221 }
222 222
223 bool ProxyResolutionServiceProvider::OnOriginThread() { 223 bool ProxyResolutionServiceProvider::OnOriginThread() {
224 return base::PlatformThread::CurrentId() == origin_thread_id_; 224 return base::PlatformThread::CurrentId() == origin_thread_id_;
225 } 225 }
226 226
227 dbus::Response* ProxyResolutionServiceProvider::ResolveProxyHandler( 227 void ProxyResolutionServiceProvider::ResolveProxyHandler(
228 dbus::MethodCall* method_call) { 228 dbus::MethodCall* method_call,
229 dbus::ExportedObject::ResponseSender response_sender) {
229 DCHECK(OnOriginThread()); 230 DCHECK(OnOriginThread());
230 VLOG(1) << "Handing method call: " << method_call->ToString(); 231 VLOG(1) << "Handing method call: " << method_call->ToString();
231 // The method call should contain the three string parameters. 232 // The method call should contain the three string parameters.
232 dbus::MessageReader reader(method_call); 233 dbus::MessageReader reader(method_call);
233 std::string source_url; 234 std::string source_url;
234 std::string signal_interface; 235 std::string signal_interface;
235 std::string signal_name; 236 std::string signal_name;
236 if (!reader.PopString(&source_url) || 237 if (!reader.PopString(&source_url) ||
237 !reader.PopString(&signal_interface) || 238 !reader.PopString(&signal_interface) ||
238 !reader.PopString(&signal_name)) { 239 !reader.PopString(&signal_name)) {
239 LOG(ERROR) << "Unexpected method call: " << method_call->ToString(); 240 LOG(ERROR) << "Unexpected method call: " << method_call->ToString();
240 return NULL; 241 response_sender.Run(NULL);
242 return;
241 } 243 }
242 244
243 resolver_->ResolveProxy(source_url, 245 resolver_->ResolveProxy(source_url,
244 signal_interface, 246 signal_interface,
245 signal_name, 247 signal_name,
246 exported_object_); 248 exported_object_);
247 249
248 // Return an empty response for now. We'll send a signal once the 250 // Send an empty response for now. We'll send a signal once the network proxy
249 // network proxy resolution is completed. 251 // resolution is completed.
250 dbus::Response* response = dbus::Response::FromMethodCall(method_call); 252 dbus::Response* response = dbus::Response::FromMethodCall(method_call);
251 return response; 253 response_sender.Run(response);
252 } 254 }
253 255
254 // static 256 // static
255 dbus::Response* ProxyResolutionServiceProvider::CallResolveProxyHandler( 257 void ProxyResolutionServiceProvider::CallResolveProxyHandler(
256 base::WeakPtr<ProxyResolutionServiceProvider> provider_weak_ptr, 258 base::WeakPtr<ProxyResolutionServiceProvider> provider_weak_ptr,
257 dbus::MethodCall* method_call) { 259 dbus::MethodCall* method_call,
260 dbus::ExportedObject::ResponseSender response_sender) {
258 if (!provider_weak_ptr) { 261 if (!provider_weak_ptr) {
259 LOG(WARNING) << "Called after the object is deleted"; 262 LOG(WARNING) << "Called after the object is deleted";
260 return NULL; 263 response_sender.Run(NULL);
264 return;
261 } 265 }
262 return provider_weak_ptr->ResolveProxyHandler(method_call); 266 provider_weak_ptr->ResolveProxyHandler(method_call, response_sender);
263 } 267 }
264 268
265 ProxyResolutionServiceProvider* ProxyResolutionServiceProvider::Create() { 269 ProxyResolutionServiceProvider* ProxyResolutionServiceProvider::Create() {
266 return new ProxyResolutionServiceProvider(new ProxyResolverImpl); 270 return new ProxyResolutionServiceProvider(new ProxyResolverImpl);
267 } 271 }
268 272
269 ProxyResolutionServiceProvider* 273 ProxyResolutionServiceProvider*
270 ProxyResolutionServiceProvider::CreateForTesting( 274 ProxyResolutionServiceProvider::CreateForTesting(
271 ProxyResolverInterface* resolver) { 275 ProxyResolverInterface* resolver) {
272 return new ProxyResolutionServiceProvider(resolver); 276 return new ProxyResolutionServiceProvider(resolver);
273 } 277 }
274 278
275 ProxyResolverInterface::~ProxyResolverInterface() { 279 ProxyResolverInterface::~ProxyResolverInterface() {
276 } 280 }
277 281
278 } // namespace chromeos 282 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698