buffet: add a timeout to HTTP requests
CloudCommandProxy makes the understandable assumption that either one of
the success or error callbacks it provides to
chromeos::http::SendRequest will be invoked in the future. When neither
of these callbacks are invoked future updates to that command will not
be sent to the cloud. Add a timeout to all requests made by buffet to
allow these assumptions to function.
BUG=chrome-os-partner:40663
TEST=FEATURES=test emerge-amd64-generic test
Change-Id: Ia1e1f265818c9c69427fe641651c76c6783d720f
Reviewed-on: https://chromium-review.googlesource.com/274046
Reviewed-by: Garret Kelly <gdk@chromium.org>
Commit-Queue: Garret Kelly <gdk@chromium.org>
Tested-by: Garret Kelly <gdk@chromium.org>
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 1fd85c2..23e4fca 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -16,6 +16,7 @@
#include <chromeos/dbus/async_event_sequencer.h>
#include <chromeos/dbus/exported_object_manager.h>
#include <chromeos/errors/error.h>
+#include <chromeos/http/http_transport.h>
#include <chromeos/key_value_store.h>
#include <dbus/bus.h>
#include <dbus/object_path.h>
@@ -36,6 +37,8 @@
namespace {
// Max of 100 state update events should be enough in the queue.
const size_t kMaxStateChangeQueueSize = 100;
+// The number of seconds each HTTP request will be allowed before timing out.
+const int kRequestTimeoutSeconds = 30;
} // anonymous namespace
Manager::Manager(const base::WeakPtr<ExportedObjectManager>& object_manager)
@@ -69,11 +72,15 @@
base::Bind(&Manager::OnConfigChanged, weak_ptr_factory_.GetWeakPtr()));
config->Load(config_path);
+ auto transport = chromeos::http::Transport::CreateDefault();
+ transport->SetDefaultTimeout(base::TimeDelta::FromSeconds(
+ kRequestTimeoutSeconds));
+
// TODO(avakulenko): Figure out security implications of storing
// device info state data unencrypted.
device_info_.reset(new DeviceRegistrationInfo(
- command_manager_, state_manager_, std::move(config),
- chromeos::http::Transport::CreateDefault(), xmpp_enabled));
+ command_manager_, state_manager_, std::move(config), transport,
+ xmpp_enabled));
device_info_->AddOnRegistrationChangedCallback(base::Bind(
&Manager::OnRegistrationChanged, weak_ptr_factory_.GetWeakPtr()));