libbrillo: avoid double-binding callbacks and operator()

The second bind is a no-op since it doesn't provide any extra
arguments, so it's just an unnecessary allocation. Also, it looks
like new versions of base::Bind don't like functor objects, so
instead of packaging the callback's environment as part of an
enclosing object we should just bind in the bits we need as
arguments.

BUG=b:37434548
TEST=unit tests

Change-Id: I4bed9857655958f300bc99fa9508f2e940fc4a9a
Reviewed-on: https://chromium-review.googlesource.com/1064880
Commit-Ready: Eric Caruso <ejcaruso@chromium.org>
Tested-by: Eric Caruso <ejcaruso@chromium.org>
Reviewed-by: Eric Caruso <ejcaruso@chromium.org>
diff --git a/brillo/dbus/dbus_method_invoker_unittest.cc b/brillo/dbus/dbus_method_invoker_unittest.cc
index 08d8a22..4dc1f49 100644
--- a/brillo/dbus/dbus_method_invoker_unittest.cc
+++ b/brillo/dbus/dbus_method_invoker_unittest.cc
@@ -25,6 +25,37 @@
 using dbus::MessageWriter;
 using dbus::Response;
 
+namespace {
+
+void SuccessCallback(const std::string& expected_result,
+                     int* counter,
+                     const std::string& actual_result) {
+  (*counter)++;
+  EXPECT_EQ(expected_result, actual_result);
+}
+
+void SimpleSuccessCallback(int* counter, const std::string& result) {
+  (*counter)++;
+}
+
+void ErrorCallback(const std::string& domain,
+                   const std::string& code,
+                   const std::string& message,
+                   int* counter,
+                   brillo::Error* error) {
+  (*counter)++;
+  ASSERT_NE(nullptr, error);
+  EXPECT_EQ(domain, error->GetDomain());
+  EXPECT_EQ(code, error->GetCode());
+  EXPECT_EQ(message, error->GetMessage());
+}
+
+void SimpleErrorCallback(int* counter, brillo::Error* error) {
+  (*counter)++;
+}
+
+}  // namespace
+
 namespace brillo {
 namespace dbus_utils {
 
@@ -247,46 +278,6 @@
     LOG(FATAL) << "Unexpected method call: " << method_call->ToString();
   }
 
-  struct SuccessCallback {
-    SuccessCallback(const std::string& in_result, int* in_counter)
-        : result(in_result), counter(in_counter) {}
-
-    explicit SuccessCallback(int* in_counter) : counter(in_counter) {}
-
-    void operator()(const std::string& actual_result) {
-      (*counter)++;
-      EXPECT_EQ(result, actual_result);
-    }
-    std::string result;
-    int* counter;
-  };
-
-  struct ErrorCallback {
-    ErrorCallback(const std::string& in_domain,
-                  const std::string& in_code,
-                  const std::string& in_message,
-                  int* in_counter)
-        : domain(in_domain),
-          code(in_code),
-          message(in_message),
-          counter(in_counter) {}
-
-    explicit ErrorCallback(int* in_counter) : counter(in_counter) {}
-
-    void operator()(brillo::Error* error) {
-      (*counter)++;
-      EXPECT_NE(nullptr, error);
-      EXPECT_EQ(domain, error->GetDomain());
-      EXPECT_EQ(code, error->GetCode());
-      EXPECT_EQ(message, error->GetMessage());
-    }
-
-    std::string domain;
-    std::string code;
-    std::string message;
-    int* counter;
-  };
-
   scoped_refptr<dbus::MockBus> bus_;
   scoped_refptr<dbus::MockObjectProxy> mock_object_proxy_;
 };
@@ -298,22 +289,22 @@
       mock_object_proxy_.get(),
       kTestInterface,
       kTestMethod1,
-      base::Bind(SuccessCallback{"4", &success_count}),
-      base::Bind(ErrorCallback{&error_count}),
+      base::Bind(SuccessCallback, "4", &success_count),
+      base::Bind(SimpleErrorCallback, &error_count),
       2, 2);
   brillo::dbus_utils::CallMethod(
       mock_object_proxy_.get(),
       kTestInterface,
       kTestMethod1,
-      base::Bind(SuccessCallback{"10", &success_count}),
-      base::Bind(ErrorCallback{&error_count}),
+      base::Bind(SuccessCallback, "10", &success_count),
+      base::Bind(SimpleErrorCallback, &error_count),
       3, 7);
   brillo::dbus_utils::CallMethod(
       mock_object_proxy_.get(),
       kTestInterface,
       kTestMethod1,
-      base::Bind(SuccessCallback{"-4", &success_count}),
-      base::Bind(ErrorCallback{&error_count}),
+      base::Bind(SuccessCallback, "-4", &success_count),
+      base::Bind(SimpleErrorCallback, &error_count),
       13, -17);
   EXPECT_EQ(0, error_count);
   EXPECT_EQ(3, success_count);
@@ -326,11 +317,12 @@
       mock_object_proxy_.get(),
       kTestInterface,
       kTestMethod2,
-      base::Bind(SuccessCallback{&success_count}),
-      base::Bind(ErrorCallback{brillo::errors::dbus::kDomain,
-                               "org.MyError",
-                               "My error message",
-                               &error_count}),
+      base::Bind(SimpleSuccessCallback, &success_count),
+      base::Bind(ErrorCallback,
+                 brillo::errors::dbus::kDomain,
+                 "org.MyError",
+                 "My error message",
+                 &error_count),
       2, 2);
   EXPECT_EQ(1, error_count);
   EXPECT_EQ(0, success_count);
diff --git a/brillo/http/http_utils_unittest.cc b/brillo/http/http_utils_unittest.cc
index 1497c3d..d619bb3 100644
--- a/brillo/http/http_utils_unittest.cc
+++ b/brillo/http/http_utils_unittest.cc
@@ -315,8 +315,7 @@
   }, fake_data);
 
   std::shared_ptr<fake::Transport> transport(new fake::Transport);
-  transport->AddHandler(
-      kFakeUrl, request_type::kPost, base::Bind(post_handler));
+  transport->AddHandler(kFakeUrl, request_type::kPost, post_handler);
 
   auto response = http::PostTextAndBlock(kFakeUrl,
                                          fake_data,
diff --git a/brillo/message_loops/message_loop_unittest.cc b/brillo/message_loops/message_loop_unittest.cc
index 7c8d1b6..8024256 100644
--- a/brillo/message_loops/message_loop_unittest.cc
+++ b/brillo/message_loops/message_loop_unittest.cc
@@ -318,7 +318,7 @@
          base::Closure* timeout_callback, MessageLoop::TaskId* timeout_task) {
       (*timeout_called)++;
       (*total_calls)++;
-      *timeout_task = loop->PostTask(FROM_HERE, Bind(*timeout_callback));
+      *timeout_task = loop->PostTask(FROM_HERE, *timeout_callback);
       if (*total_calls > 100)
         loop->BreakLoop();
       },