chromeos-dbus-bindings: Add asynchronous method proxies and timeouts

Added async versions of proxy methods and also optional timeout
parameter when calling D-Bus methods. If the timeout is not specified,
a D-Bus default value is used.

BUG=chromium:431736
TEST=FEATURES=test emerge-link chromeos-dbus-bindings

Change-Id: I3104d8b3c54809c352e361b199d37a4206bb58dc
Reviewed-on: https://chromium-review.googlesource.com/233180
Tested-by: Alex Vakulenko <avakulenko@chromium.org>
Reviewed-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Alex Vakulenko <avakulenko@chromium.org>
diff --git a/chromeos-dbus-bindings/proxy_generator_unittest.cc b/chromeos-dbus-bindings/proxy_generator_unittest.cc
index 9afc9ab..2d26a2b 100644
--- a/chromeos-dbus-bindings/proxy_generator_unittest.cc
+++ b/chromeos-dbus-bindings/proxy_generator_unittest.cc
@@ -121,8 +121,10 @@
       const std::string& in_space_walk,
       const std::vector<dbus::ObjectPath>& in_ramblin_man,
       std::string* out_3,
-      chromeos::ErrorPtr* error) {
-    auto response = chromeos::dbus_utils::CallMethodAndBlock(
+      chromeos::ErrorPtr* error,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    auto response = chromeos::dbus_utils::CallMethodAndBlockWithTimeout(
+        timeout_ms,
         dbus_object_proxy_,
         "org.chromium.TestInterface",
         "Elements",
@@ -133,10 +135,29 @@
         response.get(), error, out_3);
   }
 
+  void ElementsAsync(
+      const std::string& in_space_walk,
+      const std::vector<dbus::ObjectPath>& in_ramblin_man,
+      const base::Callback<void(const std::string&)>& success_callback,
+      const base::Callback<void(chromeos::Error*)>& error_callback,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    chromeos::dbus_utils::CallMethodWithTimeout(
+        timeout_ms,
+        dbus_object_proxy_,
+        "org.chromium.TestInterface",
+        "Elements",
+        success_callback,
+        error_callback,
+        in_space_walk,
+        in_ramblin_man);
+  }
+
   bool ReturnToPatagonia(
       int64_t* out_1,
-      chromeos::ErrorPtr* error) {
-    auto response = chromeos::dbus_utils::CallMethodAndBlock(
+      chromeos::ErrorPtr* error,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    auto response = chromeos::dbus_utils::CallMethodAndBlockWithTimeout(
+        timeout_ms,
         dbus_object_proxy_,
         "org.chromium.TestInterface",
         "ReturnToPatagonia",
@@ -145,10 +166,25 @@
         response.get(), error, out_1);
   }
 
+  void ReturnToPatagoniaAsync(
+      const base::Callback<void(int64_t)>& success_callback,
+      const base::Callback<void(chromeos::Error*)>& error_callback,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    chromeos::dbus_utils::CallMethodWithTimeout(
+        timeout_ms,
+        dbus_object_proxy_,
+        "org.chromium.TestInterface",
+        "ReturnToPatagonia",
+        success_callback,
+        error_callback);
+  }
+
   bool NiceWeatherForDucks(
       bool in_1,
-      chromeos::ErrorPtr* error) {
-    auto response = chromeos::dbus_utils::CallMethodAndBlock(
+      chromeos::ErrorPtr* error,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    auto response = chromeos::dbus_utils::CallMethodAndBlockWithTimeout(
+        timeout_ms,
         dbus_object_proxy_,
         "org.chromium.TestInterface",
         "NiceWeatherForDucks",
@@ -158,11 +194,28 @@
         response.get(), error);
   }
 
+  void NiceWeatherForDucksAsync(
+      bool in_1,
+      const base::Callback<void()>& success_callback,
+      const base::Callback<void(chromeos::Error*)>& error_callback,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    chromeos::dbus_utils::CallMethodWithTimeout(
+        timeout_ms,
+        dbus_object_proxy_,
+        "org.chromium.TestInterface",
+        "NiceWeatherForDucks",
+        success_callback,
+        error_callback,
+        in_1);
+  }
+
   // Comment line1
   // line2
   bool ExperimentNumberSix(
-      chromeos::ErrorPtr* error) {
-    auto response = chromeos::dbus_utils::CallMethodAndBlock(
+      chromeos::ErrorPtr* error,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    auto response = chromeos::dbus_utils::CallMethodAndBlockWithTimeout(
+        timeout_ms,
         dbus_object_proxy_,
         "org.chromium.TestInterface",
         "ExperimentNumberSix",
@@ -171,6 +224,21 @@
         response.get(), error);
   }
 
+  // Comment line1
+  // line2
+  void ExperimentNumberSixAsync(
+      const base::Callback<void()>& success_callback,
+      const base::Callback<void(chromeos::Error*)>& error_callback,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    chromeos::dbus_utils::CallMethodWithTimeout(
+        timeout_ms,
+        dbus_object_proxy_,
+        "org.chromium.TestInterface",
+        "ExperimentNumberSix",
+        success_callback,
+        error_callback);
+  }
+
  private:
   scoped_refptr<dbus::Bus> bus_;
   std::string service_name_;
@@ -216,8 +284,10 @@
   bool GetPersonInfo(
       std::string* out_name,
       int32_t* out_age,
-      chromeos::ErrorPtr* error) {
-    auto response = chromeos::dbus_utils::CallMethodAndBlock(
+      chromeos::ErrorPtr* error,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    auto response = chromeos::dbus_utils::CallMethodAndBlockWithTimeout(
+        timeout_ms,
         dbus_object_proxy_,
         "org.chromium.TestInterface2",
         "GetPersonInfo",
@@ -226,6 +296,19 @@
         response.get(), error, out_name, out_age);
   }
 
+  void GetPersonInfoAsync(
+      const base::Callback<void(const std::string& /*name*/, int32_t /*age*/)>& success_callback,
+      const base::Callback<void(chromeos::Error*)>& error_callback,
+      int timeout_ms = dbus::ObjectProxy::TIMEOUT_USE_DEFAULT) {
+    chromeos::dbus_utils::CallMethodWithTimeout(
+        timeout_ms,
+        dbus_object_proxy_,
+        "org.chromium.TestInterface2",
+        "GetPersonInfo",
+        success_callback,
+        error_callback);
+  }
+
  private:
   scoped_refptr<dbus::Bus> bus_;
   std::string service_name_;