libweave: Move firmware version generation out of libweave

Temporarily location is weave::Options, should be moved into
weave::Settings.

BUG=brillo:1257,brillo:1253
TEST=`FEATURES=test emerge-gizmo libweave buffet`

Change-Id: Ib24083f02e56b9af28d11d046631f19593394b3e
Reviewed-on: https://chromium-review.googlesource.com/293926
Reviewed-by: Alex Vakulenko <avakulenko@chromium.org>
Tested-by: Vitaly Buka <vitalybuka@chromium.org>
Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index 5802db8..585adba 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -27,6 +27,7 @@
 class Device {
  public:
   struct Options {
+    std::string firmware_version;  // TODO: Move into weave::Settings
     base::FilePath config_path;
     base::FilePath state_path;
     base::FilePath definitions_path;
diff --git a/libweave/src/base_api_handler.cc b/libweave/src/base_api_handler.cc
index ed85d39..d09e512 100644
--- a/libweave/src/base_api_handler.cc
+++ b/libweave/src/base_api_handler.cc
@@ -20,27 +20,17 @@
 
 BaseApiHandler::BaseApiHandler(
     DeviceRegistrationInfo* device_info,
+    const std::string& firmware_version,
     const std::shared_ptr<StateManager>& state_manager,
     const std::shared_ptr<CommandManager>& command_manager)
     : device_info_{device_info}, state_manager_{state_manager} {
   device_info_->AddOnConfigChangedCallback(base::Bind(
       &BaseApiHandler::OnConfigChanged, weak_ptr_factory_.GetWeakPtr()));
 
-  // Populate state fields that belong to the system.
-  base::FilePath lsb_release_path("/etc/lsb-release");
-  chromeos::KeyValueStore lsb_release_store;
-  std::string firmware_version;
-  if (lsb_release_store.Load(lsb_release_path) &&
-      lsb_release_store.GetString("CHROMEOS_RELEASE_VERSION",
-                                  &firmware_version)) {
-    base::DictionaryValue state;
-    state.SetStringWithoutPathExpansion(kBaseStateFirmwareVersion,
-                                        firmware_version);
-    CHECK(state_manager_->SetProperties(state, nullptr));
-  } else {
-    LOG(ERROR) << "Failed to get CHROMEOS_RELEASE_VERSION from "
-               << lsb_release_path.value();
-  }
+  base::DictionaryValue state;
+  state.SetStringWithoutPathExpansion(kBaseStateFirmwareVersion,
+                                      firmware_version);
+  CHECK(state_manager_->SetProperties(state, nullptr));
 
   command_manager->AddOnCommandAddedCallback(base::Bind(
       &BaseApiHandler::OnCommandAdded, weak_ptr_factory_.GetWeakPtr()));
diff --git a/libweave/src/base_api_handler.h b/libweave/src/base_api_handler.h
index c1a5f2e..abb60b1 100644
--- a/libweave/src/base_api_handler.h
+++ b/libweave/src/base_api_handler.h
@@ -27,6 +27,7 @@
 class BaseApiHandler final {
  public:
   BaseApiHandler(DeviceRegistrationInfo* device_info,
+                 const std::string& firmware_version,
                  const std::shared_ptr<StateManager>& state_manager,
                  const std::shared_ptr<CommandManager>& command_manager);
 
diff --git a/libweave/src/base_api_handler_unittest.cc b/libweave/src/base_api_handler_unittest.cc
index 8a1b881..735ddd9 100644
--- a/libweave/src/base_api_handler_unittest.cc
+++ b/libweave/src/base_api_handler_unittest.cc
@@ -60,8 +60,8 @@
         std::unique_ptr<BuffetConfig>{new BuffetConfig{
             std::unique_ptr<StorageInterface>{new MemStorage}}},
         nullptr, &http_client_, true, nullptr));
-    handler_.reset(
-        new BaseApiHandler{dev_reg_.get(), state_manager_, command_manager_});
+    handler_.reset(new BaseApiHandler{dev_reg_.get(), "123123", state_manager_,
+                                      command_manager_});
   }
 
   void LoadCommands(const std::string& command_definitions) {
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index efbac77..4d3c251 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -48,8 +48,9 @@
   device_info_.reset(new DeviceRegistrationInfo(
       command_manager_, state_manager_, std::move(config), task_runner,
       http_client, options.xmpp_enabled, network));
-  base_api_handler_.reset(
-      new BaseApiHandler{device_info_.get(), state_manager_, command_manager_});
+  base_api_handler_.reset(new BaseApiHandler{device_info_.get(),
+                                             options.firmware_version,
+                                             state_manager_, command_manager_});
 
   device_info_->Start();