buffet: Introduce a helper method to do cloud API request.
For now this helper is somewhat naive and it requires a lot of
love to reach production quality.
Eventually it will go away from device_registration_info.
BUG=chromium:420580
TEST=cros_workon_make buffet --test && manual testing.
Change-Id: Iada36af6ea6b0be4c5af6c318818e3ad0682625e
Reviewed-on: https://chromium-review.googlesource.com/221075
Reviewed-by: Christopher Wiley <wiley@chromium.org>
Tested-by: Anton Muhin <antonm@chromium.org>
Commit-Queue: Anton Muhin <antonm@chromium.org>
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h
index 6a82ffa..8292ea6 100644
--- a/buffet/device_registration_info.h
+++ b/buffet/device_registration_info.h
@@ -10,6 +10,7 @@
#include <string>
#include <utility>
+#include <base/callback.h>
#include <base/macros.h>
#include <base/time/time.h>
#include <chromeos/data_encoding.h>
@@ -120,6 +121,23 @@
// Makes sure the access token is available and up-to-date.
bool ValidateAndRefreshAccessToken(chromeos::ErrorPtr* error);
+ using CloudRequestCallback =
+ base::Callback<void(const base::DictionaryValue&)>;
+ using CloudRequestErroback =
+ base::Callback<void(const chromeos::Error& error)>;
+
+ // Do a HTTPS request to cloud services.
+ // Handles many cases like reauthorization, 5xx HTTP response codes
+ // and device removal. It is a recommended way to do cloud API
+ // requests.
+ // TODO(antonm): Consider moving into some other class.
+ void DoCloudRequest(
+ const char* method,
+ const std::string& url,
+ const base::DictionaryValue* body,
+ CloudRequestCallback callback,
+ CloudRequestErroback errorback);
+
// Builds Cloud API devices collection REST resouce which matches
// current state of the device including command definitions
// for all supported commands and current device state.