libweave: Pass firmware using weave::Settings

Also removed unused weave::Options fields.

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

Change-Id: I9299e3d2f58e9b8f2965cb2198107e865dabb953
Reviewed-on: https://chromium-review.googlesource.com/293927
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/config_store.h b/libweave/include/weave/config_store.h
index f13ec8f..e2bb710 100644
--- a/libweave/include/weave/config_store.h
+++ b/libweave/include/weave/config_store.h
@@ -27,6 +27,7 @@
   std::string local_anonymous_access_role;
   bool local_discovery_enabled{true};
   bool local_pairing_enabled{true};
+  std::string firmware_version;
   std::string oem_name;
   std::string model_name;
   std::string model_id;
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h
index 25f18c0..47e854c 100644
--- a/libweave/include/weave/device.h
+++ b/libweave/include/weave/device.h
@@ -27,9 +27,6 @@
 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;
     base::FilePath test_definitions_path;
     bool xmpp_enabled = true;
diff --git a/libweave/src/base_api_handler.cc b/libweave/src/base_api_handler.cc
index 655983b..3e641d7 100644
--- a/libweave/src/base_api_handler.cc
+++ b/libweave/src/base_api_handler.cc
@@ -20,16 +20,16 @@
 
 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()));
 
+  const Config& config{device_info_->GetConfig()};
   base::DictionaryValue state;
   state.SetStringWithoutPathExpansion(kBaseStateFirmwareVersion,
-                                      firmware_version);
+                                      config.firmware_version());
   CHECK(state_manager_->SetProperties(state, nullptr));
 
   command_manager->AddOnCommandAddedCallback(base::Bind(
diff --git a/libweave/src/base_api_handler.h b/libweave/src/base_api_handler.h
index abb60b1..c1a5f2e 100644
--- a/libweave/src/base_api_handler.h
+++ b/libweave/src/base_api_handler.h
@@ -27,7 +27,6 @@
 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 9b22ef8..7ffc3d9 100644
--- a/libweave/src/base_api_handler_unittest.cc
+++ b/libweave/src/base_api_handler_unittest.cc
@@ -18,14 +18,21 @@
 #include "libweave/src/states/state_manager.h"
 
 using testing::_;
-using testing::StrictMock;
+using testing::Invoke;
 using testing::Return;
+using testing::StrictMock;
 
 namespace weave {
 
 class BaseApiHandlerTest : public ::testing::Test {
  protected:
   void SetUp() override {
+    EXPECT_CALL(config_store_, LoadDefaults(_))
+        .WillOnce(Invoke([](Settings* settings) {
+          settings->firmware_version = "123123";
+          return true;
+        }));
+
     EXPECT_CALL(mock_state_change_queue_, NotifyPropertiesUpdated(_, _))
         .WillRepeatedly(Return(true));
 
@@ -55,12 +62,13 @@
     ASSERT_TRUE(state_manager_->LoadStateDefinition(*state_definition, "base",
                                                     nullptr));
     ASSERT_TRUE(state_manager_->LoadStateDefaults(*state_defaults, nullptr));
-    dev_reg_.reset(new DeviceRegistrationInfo(
-        command_manager_, state_manager_,
-        std::unique_ptr<Config>{new Config{&config_store_}}, nullptr,
-        &http_client_, true, nullptr));
-    handler_.reset(new BaseApiHandler{dev_reg_.get(), "123123", state_manager_,
-                                      command_manager_});
+    std::unique_ptr<Config> config{new Config{&config_store_}};
+    config->Load();
+    dev_reg_.reset(new DeviceRegistrationInfo(command_manager_, state_manager_,
+                                              std::move(config), nullptr,
+                                              &http_client_, true, nullptr));
+    handler_.reset(
+        new BaseApiHandler{dev_reg_.get(), state_manager_, command_manager_});
   }
 
   void LoadCommands(const std::string& command_definitions) {
diff --git a/libweave/src/config.h b/libweave/src/config.h
index 55d7d09..a54e018 100644
--- a/libweave/src/config.h
+++ b/libweave/src/config.h
@@ -97,6 +97,9 @@
   const std::string& oem_name() const { return settings_.oem_name; }
   const std::string& model_name() const { return settings_.model_name; }
   const std::string& model_id() const { return settings_.model_id; }
+  const std::string& firmware_version() const {
+    return settings_.firmware_version;
+  }
   base::TimeDelta polling_period() const { return settings_.polling_period; }
   base::TimeDelta backup_polling_period() const {
     return settings_.backup_polling_period;
diff --git a/libweave/src/config_unittest.cc b/libweave/src/config_unittest.cc
index be24e00..794f5cb 100644
--- a/libweave/src/config_unittest.cc
+++ b/libweave/src/config_unittest.cc
@@ -51,6 +51,7 @@
   EXPECT_EQ("Chromium", config_->oem_name());
   EXPECT_EQ("Brillo", config_->model_name());
   EXPECT_EQ("AAAAA", config_->model_id());
+  EXPECT_EQ("", config_->firmware_version());
   EXPECT_EQ(base::TimeDelta::FromSeconds(7), config_->polling_period());
   EXPECT_EQ(base::TimeDelta::FromMinutes(30), config_->backup_polling_period());
   EXPECT_TRUE(config_->wifi_auto_setup_enabled());
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc
index 846298a..e5710d4 100644
--- a/libweave/src/device_manager.cc
+++ b/libweave/src/device_manager.cc
@@ -49,9 +49,8 @@
   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(),
-                                             options.firmware_version,
-                                             state_manager_, command_manager_});
+  base_api_handler_.reset(
+      new BaseApiHandler{device_info_.get(), state_manager_, command_manager_});
 
   device_info_->Start();