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/buffet/buffet_config.cc b/buffet/buffet_config.cc
index 9126ead..1bb1473 100644
--- a/buffet/buffet_config.cc
+++ b/buffet/buffet_config.cc
@@ -84,6 +84,17 @@
   store.GetString(config_keys::kOemName, &settings->oem_name);
   store.GetString(config_keys::kModelName, &settings->model_name);
   store.GetString(config_keys::kModelId, &settings->model_id);
+
+  base::FilePath lsb_release_path("/etc/lsb-release");
+  chromeos::KeyValueStore lsb_release_store;
+  if (lsb_release_store.Load(lsb_release_path) &&
+      lsb_release_store.GetString("CHROMEOS_RELEASE_VERSION",
+                                  &settings->firmware_version)) {
+  } else {
+    LOG(ERROR) << "Failed to get CHROMEOS_RELEASE_VERSION from "
+               << lsb_release_path.value();
+  }
+
   std::string polling_period_str;
   if (store.GetString(config_keys::kPollingPeriodMs, &polling_period_str) &&
       !StringToTimeDelta(polling_period_str, &settings->polling_period)) {
diff --git a/buffet/main.cc b/buffet/main.cc
index 280abd6..087707f 100644
--- a/buffet/main.cc
+++ b/buffet/main.cc
@@ -9,7 +9,6 @@
 #include <chromeos/dbus/async_event_sequencer.h>
 #include <chromeos/dbus/exported_object_manager.h>
 #include <chromeos/flag_helper.h>
-#include <chromeos/key_value_store.h>
 #include <chromeos/strings/string_utils.h>
 #include <chromeos/syslog_logging.h>
 
@@ -26,21 +25,28 @@
 class Daemon final : public DBusServiceDaemon {
  public:
   Daemon(const weave::Device::Options& options,
+         const base::FilePath& config_path,
+         const base::FilePath& state_path,
          const std::set<std::string>& device_whitelist)
       : DBusServiceDaemon(kServiceName, kRootServicePath),
         options_{options},
+        config_path_{config_path},
+        state_path_{state_path},
         device_whitelist_{device_whitelist} {}
 
  protected:
   void RegisterDBusObjectsAsync(AsyncEventSequencer* sequencer) override {
     manager_.reset(new buffet::Manager(object_manager_->AsWeakPtr()));
-    manager_->Start(options_, device_whitelist_, sequencer);
+    manager_->Start(options_, config_path_, state_path_, device_whitelist_,
+                    sequencer);
   }
 
   void OnShutdown(int* return_code) override { manager_->Stop(); }
 
  private:
   weave::Device::Options options_;
+  base::FilePath config_path_;
+  base::FilePath state_path_;
   std::set<std::string> device_whitelist_;
 
   std::unique_ptr<buffet::Manager> manager_;
@@ -92,8 +98,6 @@
       chromeos::string_utils::Split(FLAGS_device_whitelist, ",", true, true);
 
   weave::Device::Options options;
-  options.config_path = base::FilePath{FLAGS_config_path};
-  options.state_path = base::FilePath{FLAGS_state_path};
   options.definitions_path = base::FilePath{"/etc/buffet"};
   options.test_definitions_path = base::FilePath{FLAGS_test_definitions_path};
   options.xmpp_enabled = FLAGS_enable_xmpp;
@@ -102,17 +106,9 @@
   options.enable_ping = FLAGS_enable_ping;
   options.test_privet_ssid = FLAGS_test_privet_ssid;
 
-  base::FilePath lsb_release_path("/etc/lsb-release");
-  chromeos::KeyValueStore lsb_release_store;
-  if (lsb_release_store.Load(lsb_release_path) &&
-      lsb_release_store.GetString("CHROMEOS_RELEASE_VERSION",
-                                  &options.firmware_version)) {
-  } else {
-    LOG(ERROR) << "Failed to get CHROMEOS_RELEASE_VERSION from "
-               << lsb_release_path.value();
-  }
-
-  buffet::Daemon daemon{options, std::set<std::string>{device_whitelist.begin(),
-                                                       device_whitelist.end()}};
+  buffet::Daemon daemon{
+      options, base::FilePath{FLAGS_config_path},
+      base::FilePath{FLAGS_state_path},
+      std::set<std::string>{device_whitelist.begin(), device_whitelist.end()}};
   return daemon.Run();
 }
diff --git a/buffet/manager.cc b/buffet/manager.cc
index 6fa818e..710a431 100644
--- a/buffet/manager.cc
+++ b/buffet/manager.cc
@@ -72,6 +72,8 @@
 }
 
 void Manager::Start(const weave::Device::Options& options,
+                    const base::FilePath& config_path,
+                    const base::FilePath& state_path,
                     const std::set<std::string>& device_whitelist,
                     AsyncEventSequencer* sequencer) {
   task_runner_.reset(new TaskRunner{});
@@ -89,7 +91,7 @@
 #endif  // BUFFET_USE_WIFI_BOOTSTRAPPING
 
   device_ = weave::Device::Create();
-  config_.reset(new BuffetConfig{options.config_path, options.state_path});
+  config_.reset(new BuffetConfig{config_path, state_path});
   config_->AddOnChangedCallback(
       base::Bind(&Manager::OnConfigChanged, weak_ptr_factory_.GetWeakPtr()));
 
diff --git a/buffet/manager.h b/buffet/manager.h
index beee585..84861e1 100644
--- a/buffet/manager.h
+++ b/buffet/manager.h
@@ -56,6 +56,8 @@
   ~Manager();
 
   void Start(const weave::Device::Options& options,
+             const base::FilePath& config_path,
+             const base::FilePath& state_path,
              const std::set<std::string>& device_whitelist,
              chromeos::dbus_utils::AsyncEventSequencer* sequencer);