| Index: dbus/test_service.cc
|
| diff --git a/dbus/test_service.cc b/dbus/test_service.cc
|
| index b0207b0e7e9afb14ae4cd1033766855f12b3cdff..ea8e3601b0f12a1f414f7f972bcb0441794f8dd9 100644
|
| --- a/dbus/test_service.cc
|
| +++ b/dbus/test_service.cc
|
| @@ -13,8 +13,8 @@
|
|
|
| namespace dbus {
|
|
|
| -// Echo, SlowEcho, BrokenMethod.
|
| -const int TestService::kNumMethodsToExport = 3;
|
| +// Echo, SlowEcho, AsyncEcho, BrokenMethod.
|
| +const int TestService::kNumMethodsToExport = 4;
|
|
|
| TestService::Options::Options() {
|
| }
|
| @@ -148,6 +148,15 @@ void TestService::Run(MessageLoop* message_loop) {
|
|
|
| exported_object_->ExportMethod(
|
| "org.chromium.TestInterface",
|
| + "AsyncEcho",
|
| + base::Bind(&TestService::AsyncEcho,
|
| + base::Unretained(this)),
|
| + base::Bind(&TestService::OnExported,
|
| + base::Unretained(this)));
|
| + ++num_methods;
|
| +
|
| + exported_object_->ExportMethod(
|
| + "org.chromium.TestInterface",
|
| "BrokenMethod",
|
| base::Bind(&TestService::BrokenMethod,
|
| base::Unretained(this)),
|
| @@ -163,25 +172,44 @@ void TestService::Run(MessageLoop* message_loop) {
|
| message_loop->Run();
|
| }
|
|
|
| -Response* TestService::Echo(MethodCall* method_call) {
|
| +void TestService::Echo(MethodCall* method_call,
|
| + dbus::ExportedObject::ResponseSender response_sender) {
|
| MessageReader reader(method_call);
|
| std::string text_message;
|
| - if (!reader.PopString(&text_message))
|
| - return NULL;
|
| + if (!reader.PopString(&text_message)) {
|
| + response_sender.Run(NULL);
|
| + return;
|
| + }
|
|
|
| Response* response = Response::FromMethodCall(method_call);
|
| MessageWriter writer(response);
|
| writer.AppendString(text_message);
|
| - return response;
|
| + response_sender.Run(response);
|
| }
|
|
|
| -Response* TestService::SlowEcho(MethodCall* method_call) {
|
| +void TestService::SlowEcho(
|
| + MethodCall* method_call,
|
| + dbus::ExportedObject::ResponseSender response_sender) {
|
| base::PlatformThread::Sleep(TestTimeouts::tiny_timeout_ms());
|
| - return Echo(method_call);
|
| + Echo(method_call, response_sender);
|
| +}
|
| +
|
| +void TestService::AsyncEcho(
|
| + MethodCall* method_call,
|
| + dbus::ExportedObject::ResponseSender response_sender) {
|
| + // Schedule a call to Echo() to send an asynchronous response after we return.
|
| + message_loop()->PostDelayedTask(FROM_HERE,
|
| + base::Bind(&TestService::Echo,
|
| + base::Unretained(this),
|
| + method_call,
|
| + response_sender),
|
| + TestTimeouts::tiny_timeout_ms());
|
| }
|
|
|
| -Response* TestService::BrokenMethod(MethodCall* method_call) {
|
| - return NULL;
|
| +void TestService::BrokenMethod(
|
| + MethodCall* method_call,
|
| + dbus::ExportedObject::ResponseSender response_sender) {
|
| + response_sender.Run(NULL);
|
| }
|
|
|
| } // namespace dbus
|
|
|