buffet: Abort limbo commands.

BUG=chromium:420573
TEST=cros_workon_make buffet --test&&manual

Change-Id: I2d887cfc70758a1fca0eb1bba96bc42c7c68f88d
Reviewed-on: https://chromium-review.googlesource.com/226550
Reviewed-by: Anton Muhin <antonm@chromium.org>
Commit-Queue: Anton Muhin <antonm@chromium.org>
Tested-by: Anton Muhin <antonm@chromium.org>
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc
index d4cee76..30c62a9 100644
--- a/buffet/device_registration_info.cc
+++ b/buffet/device_registration_info.cc
@@ -140,6 +140,9 @@
   return chromeos::url::AppendQueryParams(result, params);
 }
 
+auto ignore_cloud_error = base::Bind([](const chromeos::Error&){});
+auto ignore_cloud_result = base::Bind([](const base::DictionaryValue&){});
+
 }  // anonymous namespace
 
 namespace buffet {
@@ -659,7 +662,7 @@
       }),
       // TODO(antonm): Failure to update device resource probably deserves
       // some additional actions.
-      base::Bind([](const chromeos::Error&){}));
+      ignore_cloud_error);
 }
 
 void DeviceRegistrationInfo::FetchCommands(
@@ -676,7 +679,7 @@
         const base::ListValue empty;
         callback.Run(commands ? *commands : empty);
       }),
-      base::Bind([](const chromeos::Error&){}));
+      ignore_cloud_error);
 }
 
 void DeviceRegistrationInfo::AbortLimboCommands(
@@ -704,7 +707,14 @@
       LOG(WARNING) << "Command with no ID at " << i;
       continue;
     }
-    // TODO(antonm): Really abort the command.
+
+    std::unique_ptr<base::DictionaryValue> command_copy{command->DeepCopy()};
+    command_copy->SetString("state", "aborted");
+    DoCloudRequest(
+        chromeos::http::request_type::kPut,
+        GetServiceURL("commands/" + command_id),
+        command_copy.get(),
+        ignore_cloud_result, ignore_cloud_error);
   }
 
   base::MessageLoop::current()->PostTask(FROM_HERE, callback);