libweave: only base::Bind captureless lambdas

The new libchrome provides base::Bind support for lambdas but
it causes a compile error when the lambda expression has captures.
Bind those arguments explicitly where they exist.

BUG=b:37434548
TEST=unit tests

Change-Id: I7fc1137585d0d2aa8973a60de21f7b6e467f400e
Reviewed-on: https://chromium-review.googlesource.com/1058335
Commit-Ready: Eric Caruso <ejcaruso@chromium.org>
Tested-by: Eric Caruso <ejcaruso@chromium.org>
Reviewed-by: Dan Erat <derat@chromium.org>
diff --git a/src/commands/command_manager_unittest.cc b/src/commands/command_manager_unittest.cc
index 0c890a9..8faa97f 100644
--- a/src/commands/command_manager_unittest.cc
+++ b/src/commands/command_manager_unittest.cc
@@ -94,8 +94,8 @@
 TEST(CommandManager, UpdateCommandVisibility) {
   CommandManager manager;
   int update_count = 0;
-  auto on_command_change = [&update_count]() { update_count++; };
-  manager.AddCommandDefChanged(base::Bind(on_command_change));
+  auto on_command_change = [](int* update_count) { (*update_count)++; };
+  manager.AddCommandDefChanged(base::Bind(on_command_change, &update_count));
 
   auto json = CreateDictionaryValue(R"({
     'foo': {
diff --git a/src/device_registration_info_unittest.cc b/src/device_registration_info_unittest.cc
index 03755d9..3ac7ed1 100644
--- a/src/device_registration_info_unittest.cc
+++ b/src/device_registration_info_unittest.cc
@@ -171,14 +171,15 @@
 
   bool RefreshAccessToken(ErrorPtr* error) const {
     bool succeeded = false;
-    auto callback = [&succeeded, &error](ErrorPtr in_error) {
-      if (error) {
-        *error = std::move(in_error);
+    auto callback = [](bool* succeeded, ErrorPtr* out_error,
+                       ErrorPtr in_error) {
+      if (out_error) {
+        *out_error = std::move(in_error);
         return;
       }
-      succeeded = true;
+      *succeeded = true;
     };
-    dev_reg_->RefreshAccessToken(base::Bind(callback));
+    dev_reg_->RefreshAccessToken(base::Bind(callback, &succeeded, error));
     return succeeded;
   }
 
@@ -338,15 +339,15 @@
           })));
 
   bool succeeded = false;
-  auto callback = [&succeeded](const base::DictionaryValue& info,
-                               ErrorPtr error) {
+  auto callback = [](bool* succeeded, const base::DictionaryValue& info,
+                     ErrorPtr error) {
     EXPECT_FALSE(error);
     std::string id;
     EXPECT_TRUE(info.GetString("id", &id));
     EXPECT_EQ(test_data::kDeviceId, id);
-    succeeded = true;
+    *succeeded = true;
   };
-  dev_reg_->GetDeviceInfo(base::Bind(callback));
+  dev_reg_->GetDeviceInfo(base::Bind(callback, &succeeded));
   EXPECT_TRUE(succeeded);
 }
 
@@ -485,19 +486,24 @@
 
   bool done = false;
   dev_reg_->RegisterDevice(
-      test_data::kClaimTicketId, base::Bind([this, &done](ErrorPtr error) {
-        EXPECT_FALSE(error);
-        done = true;
-        task_runner_.Break();
-        EXPECT_EQ(GcdState::kConnecting, GetGcdState());
+      test_data::kClaimTicketId,
+      base::Bind(
+          [](DeviceRegistrationInfo* dev_reg,
+             provider::test::FakeTaskRunner* task_runner, bool* done,
+             ErrorPtr error) {
+            EXPECT_FALSE(error);
+            *done = true;
+            task_runner->Break();
+            EXPECT_EQ(GcdState::kConnecting, dev_reg->GetGcdState());
 
-        // Validate the device info saved to storage...
-        EXPECT_EQ(test_data::kDeviceId, dev_reg_->GetSettings().cloud_id);
-        EXPECT_EQ(test_data::kRefreshToken,
-                  dev_reg_->GetSettings().refresh_token);
-        EXPECT_EQ(test_data::kRobotAccountEmail,
-                  dev_reg_->GetSettings().robot_account);
-      }));
+            // Validate the device info saved to storage...
+            EXPECT_EQ(test_data::kDeviceId, dev_reg->GetSettings().cloud_id);
+            EXPECT_EQ(test_data::kRefreshToken,
+                      dev_reg->GetSettings().refresh_token);
+            EXPECT_EQ(test_data::kRobotAccountEmail,
+                      dev_reg->GetSettings().robot_account);
+          },
+          dev_reg_.get(), &task_runner_, &done));
   task_runner_.Run();
   EXPECT_TRUE(done);
 }
diff --git a/src/notification/xmpp_iq_stanza_handler_unittest.cc b/src/notification/xmpp_iq_stanza_handler_unittest.cc
index 052b7c5..35f78b0 100644
--- a/src/notification/xmpp_iq_stanza_handler_unittest.cc
+++ b/src/notification/xmpp_iq_stanza_handler_unittest.cc
@@ -159,12 +159,12 @@
 
 TEST_F(IqStanzaHandlerTest, RequestTimeout) {
   bool called = false;
-  auto on_timeout = [&called]() { called = true; };
+  auto on_timeout = [](bool* called) { *called = true; };
 
   EXPECT_CALL(mock_xmpp_channel_, SendMessage(_)).Times(1);
   EXPECT_FALSE(called);
   iq_stanza_handler_.SendRequest("set", "", "", "<body/>", {},
-                                 base::Bind(on_timeout));
+                                 base::Bind(on_timeout, &called));
   task_runner_.Run();
   EXPECT_TRUE(called);
 }
diff --git a/src/states/state_change_queue_unittest.cc b/src/states/state_change_queue_unittest.cc
index 9f26071..2e7c36a 100644
--- a/src/states/state_change_queue_unittest.cc
+++ b/src/states/state_change_queue_unittest.cc
@@ -151,10 +151,10 @@
 TEST_F(StateChangeQueueTest, ImmediateStateChangeNotification) {
   // When queue is empty, registering a new callback will trigger it.
   bool called = false;
-  auto callback = [&called](StateChangeQueueInterface::UpdateID id) {
-    called = true;
+  auto callback = [](bool* called, StateChangeQueueInterface::UpdateID id) {
+    *called = true;
   };
-  queue_->AddOnStateUpdatedCallback(base::Bind(callback));
+  queue_->AddOnStateUpdatedCallback(base::Bind(callback, &called));
   EXPECT_TRUE(called);
 }
 
diff --git a/src/streams_unittest.cc b/src/streams_unittest.cc
index fba6ca5..f35b1ff 100644
--- a/src/streams_unittest.cc
+++ b/src/streams_unittest.cc
@@ -24,11 +24,13 @@
   bool done = false;
 
   auto callback = base::Bind(
-      [&test_data, &done, &destination](size_t size, ErrorPtr error) {
+      [](std::vector<uint8_t>* test_data, bool* done, MemoryStream* destination,
+         size_t size, ErrorPtr error) {
         EXPECT_FALSE(error);
-        done = true;
-        EXPECT_EQ(test_data, destination.GetData());
-      });
+        *done = true;
+        EXPECT_EQ(*test_data, destination->GetData());
+      },
+      &test_data, &done, &destination);
   StreamCopier copier{&source, &destination};
   copier.Copy(callback);
 
diff --git a/src/weave_unittest.cc b/src/weave_unittest.cc
index d7855df..29f804e 100644
--- a/src/weave_unittest.cc
+++ b/src/weave_unittest.cc
@@ -272,13 +272,18 @@
 
   void NotifyNetworkChanged(provider::Network::State state,
                             base::TimeDelta delay) {
-    auto task = [this, state] {
-      EXPECT_CALL(network_, GetConnectionState()).WillRepeatedly(Return(state));
-      for (const auto& cb : network_callbacks_)
+    auto task = [](provider::test::MockNetwork* network,
+                   std::vector<provider::Network::ConnectionChangedCallback>*
+                       network_callbacks,
+                   provider::Network::State state) {
+      EXPECT_CALL(*network, GetConnectionState()).WillRepeatedly(Return(state));
+      for (const auto& cb : *network_callbacks)
         cb.Run();
     };
 
-    task_runner_.PostDelayedTask(FROM_HERE, base::Bind(task), delay);
+    task_runner_.PostDelayedTask(
+        FROM_HERE, base::Bind(task, &network_, &network_callbacks_, state),
+        delay);
   }
 
   std::map<std::string, provider::HttpServer::RequestHandlerCallback>
@@ -369,12 +374,16 @@
   InitDnsSdPublishing(true, "DB");
 
   bool done = false;
-  device_->Register("TICKET_ID", base::Bind([this, &done](ErrorPtr error) {
-                      EXPECT_FALSE(error);
-                      done = true;
-                      task_runner_.Break();
-                      EXPECT_EQ("CLOUD_ID", device_->GetSettings().cloud_id);
-                    }));
+  device_->Register("TICKET_ID",
+                    base::Bind(
+                        [](provider::test::FakeTaskRunner* task_runner,
+                           weave::Device* device, bool* done, ErrorPtr error) {
+                          EXPECT_FALSE(error);
+                          *done = true;
+                          task_runner->Break();
+                          EXPECT_EQ("CLOUD_ID", device->GetSettings().cloud_id);
+                        },
+                        &task_runner_, device_.get(), &done));
   task_runner_.Run();
   EXPECT_TRUE(done);
 }