libweave: Buffet includes only weave/include files External components should include only weave/include files BUG=brillo:1242 TEST='FEATURES=test emerge-gizmo buffet' Change-Id: I39edb5662694be23afa2a09aaca39f041e2d009b Reviewed-on: https://chromium-review.googlesource.com/285673 Trybot-Ready: Vitaly Buka <vitalybuka@chromium.org> Tested-by: Vitaly Buka <vitalybuka@chromium.org> Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/buffet.gyp b/buffet/buffet.gyp index 7b92439..1716756 100644 --- a/buffet/buffet.gyp +++ b/buffet/buffet.gyp
@@ -46,6 +46,7 @@ '../libweave/src/commands/schema_constants.cc', '../libweave/src/commands/schema_utils.cc', '../libweave/src/commands/user_role.cc', + '../libweave/src/device_manager.cc', '../libweave/src/device_registration_info.cc', '../libweave/src/notification/notification_parser.cc', '../libweave/src/notification/pull_channel.cc',
diff --git a/buffet/main.cc b/buffet/main.cc index 3a76046..510dd04 100644 --- a/buffet/main.cc +++ b/buffet/main.cc
@@ -24,7 +24,7 @@ class Daemon final : public DBusServiceDaemon { public: - explicit Daemon(const buffet::Manager::Options& options) + explicit Daemon(const weave::Device::Options& options) : DBusServiceDaemon(kServiceName, kRootServicePath), options_{options} {} protected: @@ -36,7 +36,7 @@ void OnShutdown(int* return_code) override { manager_->Stop(); } private: - buffet::Manager::Options options_; + weave::Device::Options options_; std::unique_ptr<buffet::Manager> manager_; DISALLOW_COPY_AND_ASSIGN(Daemon); }; @@ -80,17 +80,17 @@ auto device_whitelist = chromeos::string_utils::Split(FLAGS_device_whitelist, ",", true, true); - buffet::Manager::Options options; + 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; options.device_whitelist.insert(device_whitelist.begin(), device_whitelist.end()); - options.privet.config_path = base::FilePath{FLAGS_config_path}; - options.privet.disable_privet = FLAGS_disable_privet; - options.privet.disable_security = FLAGS_disable_security; - options.privet.enable_ping = FLAGS_enable_ping; + options.disable_privet = FLAGS_disable_privet; + options.disable_security = FLAGS_disable_security; + options.enable_ping = FLAGS_enable_ping; buffet::Daemon daemon{options}; return daemon.Run();
diff --git a/buffet/manager.cc b/buffet/manager.cc index f7ecc0e..3ba5f5f 100644 --- a/buffet/manager.cc +++ b/buffet/manager.cc
@@ -23,34 +23,35 @@ #include <dbus/object_path.h> #include <dbus/values_util.h> -#include "libweave/src/base_api_handler.h" -#include "libweave/src/commands/command_instance.h" -#include "libweave/src/commands/schema_constants.h" -#include "libweave/src/privet/constants.h" -#include "libweave/src/privet/security_manager.h" -#include "libweave/src/privet/shill_client.h" -#include "libweave/src/privet/wifi_bootstrap_manager.h" -#include "libweave/src/states/state_change_queue.h" -#include "libweave/src/states/state_manager.h" -#include "libweave/src/storage_impls.h" - using chromeos::dbus_utils::AsyncEventSequencer; using chromeos::dbus_utils::ExportedObjectManager; -namespace privet = weave::privet; namespace buffet { 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; - const char kPairingSessionIdKey[] = "sessionId"; const char kPairingModeKey[] = "mode"; const char kPairingCodeKey[] = "code"; +const char kErrorDomain[] = "buffet"; +const char kNotImplemented[] = "notImplemented"; + +std::string StatusToString(weave::RegistrationStatus status) { + switch (status) { + case weave::RegistrationStatus::kUnconfigured: + return "unconfigured"; + case weave::RegistrationStatus::kConnecting: + return "connecting"; + case weave::RegistrationStatus::kConnected: + return "connected"; + case weave::RegistrationStatus::kInvalidCredentials: + return "invalid_credentials"; + } + CHECK(0) << "Unknown status"; + return "unknown"; +} + } // anonymous namespace Manager::Manager(const base::WeakPtr<ExportedObjectManager>& object_manager) @@ -62,108 +63,57 @@ Manager::~Manager() { } -void Manager::Start(const Options& options, AsyncEventSequencer* sequencer) { - command_manager_ = - std::make_shared<weave::CommandManager>(dbus_object_.GetObjectManager()); - command_manager_->AddOnCommandDefChanged(base::Bind( +void Manager::Start(const weave::Device::Options& options, + AsyncEventSequencer* sequencer) { + device_ = weave::Device::Create(); + device_->Start(options, &dbus_object_, sequencer); + + device_->GetCommands()->AddOnCommandDefChanged(base::Bind( &Manager::OnCommandDefsChanged, weak_ptr_factory_.GetWeakPtr())); - command_manager_->Startup(base::FilePath{"/etc/buffet"}, - options.test_definitions_path); - state_change_queue_.reset( - new weave::StateChangeQueue(kMaxStateChangeQueueSize)); - state_manager_ = - std::make_shared<weave::StateManager>(state_change_queue_.get()); - state_manager_->AddOnChangedCallback( + + device_->GetState()->AddOnChangedCallback( base::Bind(&Manager::OnStateChanged, weak_ptr_factory_.GetWeakPtr())); - state_manager_->Startup(); - std::unique_ptr<weave::BuffetConfig> config{ - new weave::BuffetConfig{options.state_path}}; - config->AddOnChangedCallback( + device_->GetConfig()->AddOnChangedCallback( base::Bind(&Manager::OnConfigChanged, weak_ptr_factory_.GetWeakPtr())); - config->Load(options.config_path); - auto transport = chromeos::http::Transport::CreateDefault(); - transport->SetDefaultTimeout(base::TimeDelta::FromSeconds( - kRequestTimeoutSeconds)); - - shill_client_.reset(new weave::privet::ShillClient(dbus_object_.GetBus(), - options.device_whitelist)); - - // TODO(avakulenko): Figure out security implications of storing - // device info state data unencrypted. - device_info_.reset(new weave::DeviceRegistrationInfo( - command_manager_, state_manager_, std::move(config), transport, - base::MessageLoop::current()->task_runner(), options.xmpp_enabled, - shill_client_.get())); - device_info_->AddOnRegistrationChangedCallback(base::Bind( + device_->GetCloud()->AddOnRegistrationChangedCallback(base::Bind( &Manager::OnRegistrationChanged, weak_ptr_factory_.GetWeakPtr())); - base_api_handler_.reset(new weave::BaseApiHandler{ - device_info_->AsWeakPtr(), state_manager_, command_manager_}); + device_->GetPrivet()->AddOnWifiSetupChangedCallback(base::Bind( + &Manager::UpdateWiFiBootstrapState, weak_ptr_factory_.GetWeakPtr())); - device_info_->Start(); + device_->GetPrivet()->AddOnPairingChangedCallbacks( + base::Bind(&Manager::OnPairingStart, weak_ptr_factory_.GetWeakPtr()), + base::Bind(&Manager::OnPairingEnd, weak_ptr_factory_.GetWeakPtr())); dbus_adaptor_.RegisterWithDBusObject(&dbus_object_); dbus_object_.RegisterAsync( sequencer->GetHandler("Manager.RegisterAsync() failed.", true)); - - if (!options.privet.disable_privet) - StartPrivet(options.privet, sequencer); -} - -void Manager::StartPrivet(const weave::privet::Manager::Options& options, - AsyncEventSequencer* sequencer) { - privet_.reset(new weave::privet::Manager{}); - privet_->Start(options, dbus_object_.GetBus(), shill_client_.get(), - device_info_.get(), command_manager_.get(), - state_manager_.get(), sequencer); - - if (privet_->GetWifiBootstrapManager()) { - privet_->GetWifiBootstrapManager()->RegisterStateListener(base::Bind( - &Manager::UpdateWiFiBootstrapState, weak_ptr_factory_.GetWeakPtr())); - } else { - UpdateWiFiBootstrapState(weave::privet::WifiBootstrapManager::kDisabled); - } - - privet_->GetSecurityManager()->RegisterPairingListeners( - base::Bind(&Manager::OnPairingStart, weak_ptr_factory_.GetWeakPtr()), - base::Bind(&Manager::OnPairingEnd, weak_ptr_factory_.GetWeakPtr())); - // TODO(wiley) Watch for appropriate state variables from |cloud_delegate|. } void Manager::Stop() { - if (privet_) - privet_->OnShutdown(); + device_.reset(); } +// TODO(vitalybuka): Remove, it's just duplicate of property. void Manager::CheckDeviceRegistered( DBusMethodResponsePtr<std::string> response) { LOG(INFO) << "Received call to Manager.CheckDeviceRegistered()"; - chromeos::ErrorPtr error; - bool registered = device_info_->VerifyRegistrationCredentials(&error); - // If it fails due to any reason other than 'device not registered', - // treat it as a real error and report it to the caller. - if (!registered && - !error->HasError(weave::kErrorDomainGCD, "device_not_registered")) { - response->ReplyWithError(error.get()); - return; - } - - response->Return(registered ? device_info_->GetConfig().device_id() - : std::string()); + response->Return(dbus_adaptor_.GetDeviceId()); } +// TODO(vitalybuka): Remove or rename to leave for testing. void Manager::GetDeviceInfo(DBusMethodResponsePtr<std::string> response) { LOG(INFO) << "Received call to Manager.GetDeviceInfo()"; std::shared_ptr<DBusMethodResponse<std::string>> shared_response = std::move(response); - device_info_->GetDeviceInfo( + device_->GetCloud()->GetDeviceInfo( base::Bind(&Manager::OnGetDeviceInfoSuccess, weak_ptr_factory_.GetWeakPtr(), shared_response), - base::Bind(&Manager::OnGetDeviceInfoError, - weak_ptr_factory_.GetWeakPtr(), shared_response)); + base::Bind(&Manager::OnGetDeviceInfoError, weak_ptr_factory_.GetWeakPtr(), + shared_response)); } void Manager::OnGetDeviceInfoSuccess( @@ -186,32 +136,27 @@ LOG(INFO) << "Received call to Manager.RegisterDevice()"; chromeos::ErrorPtr error; - std::string device_id = device_info_->RegisterDevice(ticket_id, &error); + std::string device_id = + device_->GetCloud()->RegisterDevice(ticket_id, &error); if (!device_id.empty()) { response->Return(device_id); return; } - if (!error) { - // TODO(zeuthen): This can be changed to CHECK(error) once - // RegisterDevice() has been fixed to set |error| when failing. - chromeos::Error::AddTo(&error, FROM_HERE, weave::kErrorDomainGCD, - "internal_error", - "device_id empty but error not set"); - } + CHECK(error); response->ReplyWithError(error.get()); } void Manager::UpdateState(DBusMethodResponsePtr<> response, const chromeos::VariantDictionary& property_set) { chromeos::ErrorPtr error; - if (!state_manager_->SetProperties(property_set, &error)) + if (!device_->GetState()->SetProperties(property_set, &error)) response->ReplyWithError(error.get()); else response->Return(); } bool Manager::GetState(chromeos::ErrorPtr* error, std::string* state) { - auto json = state_manager_->GetStateValuesAsJson(error); + auto json = device_->GetState()->GetStateValuesAsJson(error); if (!json) return false; base::JSONWriter::WriteWithOptions( @@ -240,7 +185,7 @@ return response->ReplyWithError(error.get()); std::string id; - if (!command_manager_->AddCommand(*command, role, &id, &error)) + if (!device_->GetCommands()->AddCommand(*command, role, &id, &error)) return response->ReplyWithError(error.get()); response->Return(id); @@ -248,10 +193,10 @@ void Manager::GetCommand(DBusMethodResponsePtr<std::string> response, const std::string& id) { - const weave::CommandInstance* command = command_manager_->FindCommand(id); + const weave::CommandInstance* command = + device_->GetCommands()->FindCommand(id); if (!command) { - response->ReplyWithError(FROM_HERE, weave::kErrorDomainGCD, - "unknown_command", + response->ReplyWithError(FROM_HERE, kErrorDomain, "unknown_command", "Can't find command with id: " + id); return; } @@ -270,7 +215,8 @@ response->ReplyWithError(error.get()); return; } - if (!command_manager_->SetCommandVisibility(in_names, visibility, &error)) { + if (!device_->GetCommands()->SetCommandVisibility(in_names, visibility, + &error)) { response->ReplyWithError(error.get()); return; } @@ -286,15 +232,13 @@ chromeos::ErrorPtr* error, const dbus::ObjectPath& in_listener_path, const chromeos::VariantDictionary& in_options) { - chromeos::Error::AddTo(error, FROM_HERE, weave::privet::errors::kDomain, - weave::privet::errors::kNotImplemented, + chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kNotImplemented, "Manual WiFi bootstrapping is not implemented"); return false; } bool Manager::DisableWiFiBootstrapping(chromeos::ErrorPtr* error) { - chromeos::Error::AddTo(error, FROM_HERE, weave::privet::errors::kDomain, - weave::privet::errors::kNotImplemented, + chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kNotImplemented, "Manual WiFi bootstrapping is not implemented"); return false; } @@ -303,25 +247,23 @@ chromeos::ErrorPtr* error, const dbus::ObjectPath& in_listener_path, const chromeos::VariantDictionary& in_options) { - chromeos::Error::AddTo(error, FROM_HERE, weave::privet::errors::kDomain, - weave::privet::errors::kNotImplemented, + chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kNotImplemented, "Manual GCD bootstrapping is not implemented"); return false; } bool Manager::DisableGCDBootstrapping(chromeos::ErrorPtr* error) { - chromeos::Error::AddTo(error, FROM_HERE, weave::privet::errors::kDomain, - weave::privet::errors::kNotImplemented, + chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kNotImplemented, "Manual GCD bootstrapping is not implemented"); return false; } bool Manager::UpdateDeviceInfo(chromeos::ErrorPtr* error, - const std::string& in_name, - const std::string& in_description, - const std::string& in_location) { - return device_info_->UpdateDeviceInfo(in_name, in_description, in_location, - error); + const std::string& name, + const std::string& description, + const std::string& location) { + return device_->GetCloud()->UpdateDeviceInfo(name, description, location, + error); } bool Manager::UpdateServiceConfig(chromeos::ErrorPtr* error, @@ -330,17 +272,18 @@ const std::string& api_key, const std::string& oauth_url, const std::string& service_url) { - return device_info_->UpdateServiceConfig(client_id, client_secret, api_key, - oauth_url, service_url, error); + return device_->GetCloud()->UpdateServiceConfig( + client_id, client_secret, api_key, oauth_url, service_url, error); } void Manager::OnCommandDefsChanged() { // Limit only to commands that are visible to the local clients. - auto commands = command_manager_->GetCommandDictionary().GetCommandsAsJson( - [](const weave::CommandDefinition* def) { - return def->GetVisibility().local; - }, - true, nullptr); + auto commands = + device_->GetCommands()->GetCommandDictionary().GetCommandsAsJson( + [](const weave::CommandDefinition* def) { + return def->GetVisibility().local; + }, + true, nullptr); CHECK(commands); std::string json; base::JSONWriter::WriteWithOptions( @@ -349,7 +292,7 @@ } void Manager::OnStateChanged() { - auto state = state_manager_->GetStateValuesAsJson(nullptr); + auto state = device_->GetState()->GetStateValuesAsJson(nullptr); CHECK(state); std::string json; base::JSONWriter::WriteWithOptions( @@ -374,38 +317,30 @@ void Manager::UpdateWiFiBootstrapState( weave::privet::WifiBootstrapManager::State state) { - if (auto wifi = privet_->GetWifiBootstrapManager()) { - const std::string& ssid{wifi->GetCurrentlyConnectedSsid()}; - if (ssid != device_info_->GetConfig().last_configured_ssid()) { - weave::BuffetConfig::Transaction change{device_info_->GetMutableConfig()}; - change.set_last_configured_ssid(ssid); - } - } - switch (state) { - case weave::privet::WifiBootstrapManager::kDisabled: + case weave::WifiSetupState::kDisabled: dbus_adaptor_.SetWiFiBootstrapState("disabled"); break; - case weave::privet::WifiBootstrapManager::kBootstrapping: + case weave::WifiSetupState::kBootstrapping: dbus_adaptor_.SetWiFiBootstrapState("waiting"); break; - case weave::privet::WifiBootstrapManager::kMonitoring: + case weave::WifiSetupState::kMonitoring: dbus_adaptor_.SetWiFiBootstrapState("monitoring"); break; - case weave::privet::WifiBootstrapManager::kConnecting: + case weave::WifiSetupState::kConnecting: dbus_adaptor_.SetWiFiBootstrapState("connecting"); break; } } void Manager::OnPairingStart(const std::string& session_id, - privet::PairingType pairing_type, + weave::PairingType pairing_type, const std::vector<uint8_t>& code) { // For now, just overwrite the exposed PairInfo with // the most recent pairing attempt. dbus_adaptor_.SetPairingInfo(chromeos::VariantDictionary{ {kPairingSessionIdKey, session_id}, - {kPairingModeKey, PairingTypeToString(pairing_type)}, + {kPairingModeKey, weave::privet::PairingTypeToString(pairing_type)}, {kPairingCodeKey, code}, }); }
diff --git a/buffet/manager.h b/buffet/manager.h index 4f73a3c..af01a80 100644 --- a/buffet/manager.h +++ b/buffet/manager.h
@@ -20,10 +20,7 @@ #include <chromeos/errors/error.h> #include "buffet/org.chromium.Buffet.Manager.h" -#include "libweave/src/commands/command_manager.h" -#include "libweave/src/device_registration_info.h" -#include "libweave/src/privet/privet_manager.h" -#include "libweave/src/privet/wifi_bootstrap_manager.h" +#include "weave/device.h" namespace chromeos { namespace dbus_utils { @@ -31,13 +28,6 @@ } // namespace dbus_utils } // namespace chromeos -namespace weave { -class BaseApiHandler; -class BuffetConfig; -class StateChangeQueue; -class StateManager; -} // namespace weave - namespace buffet { template<typename... Types> @@ -58,16 +48,7 @@ object_manager); ~Manager(); - struct Options { - base::FilePath config_path; - base::FilePath state_path; - base::FilePath test_definitions_path; - bool xmpp_enabled{true}; - std::set<std::string> device_whitelist; - weave::privet::Manager::Options privet; - }; - - void Start(const Options& options, + void Start(const weave::Device::Options& options, chromeos::dbus_utils::AsyncEventSequencer* sequencer); void Stop(); @@ -80,9 +61,9 @@ void RegisterDevice(DBusMethodResponsePtr<std::string> response, const std::string& ticket_id) override; bool UpdateDeviceInfo(chromeos::ErrorPtr* error, - const std::string& in_name, - const std::string& in_description, - const std::string& in_location) override; + const std::string& name, + const std::string& description, + const std::string& location) override; bool UpdateServiceConfig(chromeos::ErrorPtr* error, const std::string& client_id, const std::string& client_secret, @@ -119,30 +100,23 @@ const std::shared_ptr<DBusMethodResponse<std::string>>& response, const chromeos::Error* error); - void StartPrivet(const weave::privet::Manager::Options& options, + void StartPrivet(const weave::Device::Options& options, chromeos::dbus_utils::AsyncEventSequencer* sequencer); void OnCommandDefsChanged(); void OnStateChanged(); void OnRegistrationChanged(weave::RegistrationStatus status); void OnConfigChanged(const weave::BuffetConfig& config); - void UpdateWiFiBootstrapState( - weave::privet::WifiBootstrapManager::State state); + void UpdateWiFiBootstrapState(weave::WifiSetupState state); void OnPairingStart(const std::string& session_id, - weave::privet::PairingType pairing_type, + weave::PairingType pairing_type, const std::vector<uint8_t>& code); void OnPairingEnd(const std::string& session_id); org::chromium::Buffet::ManagerAdaptor dbus_adaptor_{this}; chromeos::dbus_utils::DBusObject dbus_object_; - std::shared_ptr<weave::CommandManager> command_manager_; - std::unique_ptr<weave::StateChangeQueue> state_change_queue_; - std::shared_ptr<weave::StateManager> state_manager_; - std::unique_ptr<weave::DeviceRegistrationInfo> device_info_; - std::unique_ptr<weave::BaseApiHandler> base_api_handler_; - std::unique_ptr<weave::privet::ShillClient> shill_client_; - std::unique_ptr<weave::privet::Manager> privet_; + std::unique_ptr<weave::Device> device_; base::WeakPtrFactory<Manager> weak_ptr_factory_{this}; DISALLOW_COPY_AND_ASSIGN(Manager);
diff --git a/libweave/include/weave/device.h b/libweave/include/weave/device.h new file mode 100644 index 0000000..5a49409 --- /dev/null +++ b/libweave/include/weave/device.h
@@ -0,0 +1,80 @@ +// Copyright 2015 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef LIBWEAVE_INCLUDE_WEAVE_DEVICE_H_ +#define LIBWEAVE_INCLUDE_WEAVE_DEVICE_H_ + +#include <memory> +#include <set> +#include <string> + +#include <base/files/file_path.h> +#include <chromeos/errors/error.h> +#include <chromeos/variant_dictionary.h> + +#include "weave/types.h" + +namespace chromeos { +namespace dbus_utils { +class AsyncEventSequencer; +class DBusObject; +} +} + +namespace weave { + +class CommandManager; +class StateManager; +class BuffetConfig; +class DeviceRegistrationInfo; +namespace privet { +class Manager; +} + +// TODO(vitalybuka): Replace with interfaces. +using Commands = CommandManager; +using State = StateManager; +using Config = BuffetConfig; +using Cloud = DeviceRegistrationInfo; +using Privet = privet::Manager; + +class Device { + public: + struct Options { + base::FilePath config_path; + base::FilePath state_path; + base::FilePath definitions_path; + base::FilePath test_definitions_path; + bool xmpp_enabled{true}; + std::set<std::string> device_whitelist; + bool disable_privet{false}; + bool disable_security{false}; + bool enable_ping{false}; + }; + + virtual ~Device() = default; + + virtual void Start(const Options& options, + chromeos::dbus_utils::DBusObject* dbus_object, + chromeos::dbus_utils::AsyncEventSequencer* sequencer) = 0; + + virtual Commands* GetCommands() = 0; + virtual State* GetState() = 0; + virtual Config* GetConfig() = 0; + virtual Cloud* GetCloud() = 0; + virtual Privet* GetPrivet() = 0; + + static std::unique_ptr<Device> Create(); +}; + +} // namespace weave + +// TODO(vitalybuka): Replace with interfaces +#include "libweave/src/buffet_config.h" +#include "libweave/src/commands/command_manager.h" +#include "libweave/src/device_registration_info.h" +#include "libweave/src/privet/privet_manager.h" +#include "libweave/src/states/state_manager.h" + +#endif // LIBWEAVE_INCLUDE_WEAVE_DEVICE_H_
diff --git a/libweave/include/weave/types.h b/libweave/include/weave/types.h new file mode 100644 index 0000000..55a1fb0 --- /dev/null +++ b/libweave/include/weave/types.h
@@ -0,0 +1,36 @@ +// Copyright 2015 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef LIBWEAVE_INCLUDE_WEAVE_TYPES_H_ +#define LIBWEAVE_INCLUDE_WEAVE_TYPES_H_ + +#include <string> + +namespace weave { + +// See the DBus interface XML file for complete descriptions of these states. +enum class RegistrationStatus { + kUnconfigured, // We have no credentials. + kConnecting, // We have credentials but not yet connected. + kConnected, // We're registered and connected to the cloud. + kInvalidCredentials, // Our registration has been revoked. +}; + +enum class PairingType { + kPinCode, + kEmbeddedCode, + kUltrasound32, + kAudible32, +}; + +enum class WifiSetupState { + kDisabled, + kBootstrapping, + kMonitoring, + kConnecting, +}; + +} // namespace weave + +#endif // LIBWEAVE_INCLUDE_WEAVE_TYPES_H_
diff --git a/libweave/src/buffet_config.cc b/libweave/src/buffet_config.cc index 2d4aa58..2b62c27 100644 --- a/libweave/src/buffet_config.cc +++ b/libweave/src/buffet_config.cc
@@ -150,15 +150,15 @@ if (store.GetString(config_keys::kEmbeddedCodePath, &embedded_code_path)) { embedded_code_path_ = base::FilePath(embedded_code_path); if (!embedded_code_path_.empty()) - pairing_modes_ = {privet::PairingType::kEmbeddedCode}; + pairing_modes_ = {PairingType::kEmbeddedCode}; } std::string modes_str; if (store.GetString(config_keys::kPairingModes, &modes_str)) { - std::set<privet::PairingType> pairing_modes; + std::set<PairingType> pairing_modes; for (const std::string& mode : chromeos::string_utils::Split(modes_str, ",", true, true)) { - privet::PairingType pairing_mode; + PairingType pairing_mode; CHECK(privet::StringToPairingType(mode, &pairing_mode)); pairing_modes.insert(pairing_mode); }
diff --git a/libweave/src/buffet_config.h b/libweave/src/buffet_config.h index d08a1b8..d384b89 100644 --- a/libweave/src/buffet_config.h +++ b/libweave/src/buffet_config.h
@@ -108,9 +108,7 @@ } bool wifi_auto_setup_enabled() const { return wifi_auto_setup_enabled_; } - const std::set<privet::PairingType>& pairing_modes() const { - return pairing_modes_; - } + const std::set<PairingType>& pairing_modes() const { return pairing_modes_; } const base::FilePath& embedded_code_path() const { return embedded_code_path_; } @@ -153,7 +151,7 @@ base::TimeDelta backup_polling_period_{base::TimeDelta::FromMinutes(30)}; bool wifi_auto_setup_enabled_{true}; - std::set<privet::PairingType> pairing_modes_{privet::PairingType::kPinCode}; + std::set<PairingType> pairing_modes_{PairingType::kPinCode}; base::FilePath embedded_code_path_; std::string device_id_;
diff --git a/libweave/src/buffet_config_unittest.cc b/libweave/src/buffet_config_unittest.cc index bd46403..a286c34 100644 --- a/libweave/src/buffet_config_unittest.cc +++ b/libweave/src/buffet_config_unittest.cc
@@ -58,7 +58,7 @@ 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()); - EXPECT_EQ(std::set<privet::PairingType>{privet::PairingType::kPinCode}, + EXPECT_EQ(std::set<PairingType>{PairingType::kPinCode}, config_->pairing_modes()); EXPECT_EQ("", config_->embedded_code_path().value()); EXPECT_EQ("Developer device", config_->name()); @@ -120,9 +120,9 @@ EXPECT_EQ(base::TimeDelta::FromMilliseconds(6589), config_->backup_polling_period()); EXPECT_FALSE(config_->wifi_auto_setup_enabled()); - std::set<privet::PairingType> pairing_types{ - privet::PairingType::kPinCode, privet::PairingType::kEmbeddedCode, - privet::PairingType::kUltrasound32, privet::PairingType::kAudible32}; + std::set<PairingType> pairing_types{ + PairingType::kPinCode, PairingType::kEmbeddedCode, + PairingType::kUltrasound32, PairingType::kAudible32}; EXPECT_EQ(pairing_types, config_->pairing_modes()); EXPECT_EQ("/conf_code", config_->embedded_code_path().value()); EXPECT_EQ("conf_name", config_->name());
diff --git a/libweave/src/device_manager.cc b/libweave/src/device_manager.cc new file mode 100644 index 0000000..7d2943b --- /dev/null +++ b/libweave/src/device_manager.cc
@@ -0,0 +1,119 @@ +// Copyright 2015 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#include "libweave/src/device_manager.h" + +#include <string> + +#include <chromeos/dbus/dbus_object.h> + +#include <base/message_loop/message_loop.h> + +#include "libweave/src/base_api_handler.h" +#include "libweave/src/commands/command_manager.h" +#include "libweave/src/privet/privet_manager.h" +#include "libweave/src/privet/shill_client.h" +#include "libweave/src/states/state_change_queue.h" +#include "libweave/src/states/state_manager.h" + +namespace weave { + +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; + +} // namespace + +DeviceManager::DeviceManager() {} + +DeviceManager::~DeviceManager() {} + +void DeviceManager::Start( + const Options& options, + chromeos::dbus_utils::DBusObject* dbus_object, + chromeos::dbus_utils::AsyncEventSequencer* sequencer) { + command_manager_ = + std::make_shared<CommandManager>(dbus_object->GetObjectManager()); + command_manager_->Startup(options.definitions_path, + options.test_definitions_path); + state_change_queue_.reset(new StateChangeQueue(kMaxStateChangeQueueSize)); + state_manager_ = std::make_shared<StateManager>(state_change_queue_.get()); + state_manager_->Startup(); + + auto transport = chromeos::http::Transport::CreateDefault(); + transport->SetDefaultTimeout( + base::TimeDelta::FromSeconds(kRequestTimeoutSeconds)); + + std::unique_ptr<BuffetConfig> config{new BuffetConfig{options.state_path}}; + config->Load(options.config_path); + + shill_client_.reset( + new privet::ShillClient(dbus_object->GetBus(), options.device_whitelist)); + + // 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), transport, + base::MessageLoop::current()->task_runner(), options.xmpp_enabled, + shill_client_.get())); + base_api_handler_.reset(new BaseApiHandler{device_info_->AsWeakPtr(), + state_manager_, command_manager_}); + + device_info_->Start(); + + if (!options.disable_privet) + StartPrivet(options, dbus_object, sequencer); +} + +CommandManager* DeviceManager::GetCommands() { + return command_manager_.get(); +} + +StateManager* DeviceManager::GetState() { + return state_manager_.get(); +} + +BuffetConfig* DeviceManager::GetConfig() { + return device_info_->GetMutableConfig(); +} + +DeviceRegistrationInfo* DeviceManager::GetCloud() { + return device_info_.get(); +} + +privet::Manager* DeviceManager::GetPrivet() { + return privet_.get(); +} + +void DeviceManager::StartPrivet( + const Options& options, + chromeos::dbus_utils::DBusObject* dbus_object, + chromeos::dbus_utils::AsyncEventSequencer* sequencer) { + privet_.reset(new privet::Manager{}); + privet_->Start(options, dbus_object->GetBus(), shill_client_.get(), + device_info_.get(), command_manager_.get(), + state_manager_.get(), sequencer); + + privet_->AddOnWifiSetupChangedCallback( + base::Bind(&DeviceManager::OnWiFiBootstrapStateChanged, + weak_ptr_factory_.GetWeakPtr())); +} + +void DeviceManager::OnWiFiBootstrapStateChanged( + weave::privet::WifiBootstrapManager::State state) { + const std::string& ssid = privet_->GetCurrentlyConnectedSsid(); + if (ssid != device_info_->GetConfig().last_configured_ssid()) { + weave::BuffetConfig::Transaction change{device_info_->GetMutableConfig()}; + change.set_last_configured_ssid(ssid); + } +} + +std::unique_ptr<Device> Device::Create() { + return std::unique_ptr<Device>{new DeviceManager}; +} + +} // namespace weave
diff --git a/libweave/src/device_manager.h b/libweave/src/device_manager.h new file mode 100644 index 0000000..0eba82a --- /dev/null +++ b/libweave/src/device_manager.h
@@ -0,0 +1,66 @@ +// Copyright 2015 The Chromium OS Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef LIBWEAVE_SRC_DEVICE_MANAGER_H_ +#define LIBWEAVE_SRC_DEVICE_MANAGER_H_ + +#include "weave/device.h" + +namespace chromeos { +namespace dbus_utils { +class DBusObject; +} +} + +namespace weave { + +class BaseApiHandler; +class BuffetConfig; +class CommandManager; +class DeviceRegistrationInfo; +class StateChangeQueue; +class StateManager; + +namespace privet { +class ShillClient; +class Manager; +} // namespace privet + +class DeviceManager final : public Device { + public: + DeviceManager(); + ~DeviceManager() override; + + void Start(const Options& options, + chromeos::dbus_utils::DBusObject* dbus_object, + chromeos::dbus_utils::AsyncEventSequencer* sequencer) override; + + CommandManager* GetCommands() override; + StateManager* GetState() override; + BuffetConfig* GetConfig() override; + DeviceRegistrationInfo* GetCloud() override; + privet::Manager* GetPrivet() override; + + private: + void StartPrivet(const Options& options, + chromeos::dbus_utils::DBusObject* dbus_object, + chromeos::dbus_utils::AsyncEventSequencer* sequencer); + + void OnWiFiBootstrapStateChanged(weave::WifiSetupState state); + + std::shared_ptr<CommandManager> command_manager_; + std::unique_ptr<StateChangeQueue> state_change_queue_; + std::shared_ptr<StateManager> state_manager_; + std::unique_ptr<DeviceRegistrationInfo> device_info_; + std::unique_ptr<BaseApiHandler> base_api_handler_; + std::unique_ptr<privet::ShillClient> shill_client_; + std::unique_ptr<privet::Manager> privet_; + + base::WeakPtrFactory<DeviceManager> weak_ptr_factory_{this}; + DISALLOW_COPY_AND_ASSIGN(DeviceManager); +}; + +} // namespace weave + +#endif // LIBWEAVE_SRC_DEVICE_MANAGER_H_
diff --git a/libweave/src/device_registration_info.cc b/libweave/src/device_registration_info.cc index 4671010..d88b00a 100644 --- a/libweave/src/device_registration_info.cc +++ b/libweave/src/device_registration_info.cc
@@ -704,7 +704,7 @@ chromeos::ErrorPtr* error) { BuffetConfig::Transaction change(config_.get()); if (!change.set_local_anonymous_access_role(anonymous_access_role)) { - chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet, + chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomain, "invalid_parameter", "Invalid role: %s", anonymous_access_role.c_str()); return false; @@ -724,8 +724,7 @@ const std::string& service_url, chromeos::ErrorPtr* error) { if (HaveRegistrationCredentials()) { - chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet, - "already_registered", + chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, "already_registered", "Unable to change config for registered device"); return false; } @@ -1010,7 +1009,7 @@ void DeviceRegistrationInfo::SetRegistrationStatus( RegistrationStatus new_status) { VLOG_IF(1, new_status != registration_status_) - << "Changing registration status to " << StatusToString(new_status); + << "Changing registration status to " << static_cast<int>(new_status); registration_status_ = new_status; for (const auto& cb : on_registration_changed_) cb.Run(registration_status_);
diff --git a/libweave/src/device_registration_info.h b/libweave/src/device_registration_info.h index 5d55ee6..afb64d1 100644 --- a/libweave/src/device_registration_info.h +++ b/libweave/src/device_registration_info.h
@@ -29,7 +29,6 @@ #include "libweave/src/notification/notification_channel.h" #include "libweave/src/notification/notification_delegate.h" #include "libweave/src/notification/pull_channel.h" -#include "libweave/src/registration_status.h" #include "libweave/src/states/state_change_queue_interface.h" #include "libweave/src/storage_interface.h"
diff --git a/libweave/src/privet/cloud_delegate.cc b/libweave/src/privet/cloud_delegate.cc index 1737b10..8f2aefc 100644 --- a/libweave/src/privet/cloud_delegate.cc +++ b/libweave/src/privet/cloud_delegate.cc
@@ -21,6 +21,7 @@ #include "libweave/src/commands/command_manager.h" #include "libweave/src/device_registration_info.h" #include "libweave/src/privet/constants.h" +#include "libweave/src/registration_status.h" #include "libweave/src/states/state_manager.h" using chromeos::ErrorPtr;
diff --git a/libweave/src/privet/privet_manager.cc b/libweave/src/privet/privet_manager.cc index 7fe3a78..1c48548 100644 --- a/libweave/src/privet/privet_manager.cc +++ b/libweave/src/privet/privet_manager.cc
@@ -35,9 +35,7 @@ #include "libweave/src/privet/device_delegate.h" #include "libweave/src/privet/peerd_client.h" #include "libweave/src/privet/privet_handler.h" -#include "libweave/src/privet/security_manager.h" #include "libweave/src/privet/shill_client.h" -#include "libweave/src/privet/wifi_bootstrap_manager.h" namespace weave { namespace privet { @@ -62,7 +60,7 @@ Manager::~Manager() { } -void Manager::Start(const Options& options, +void Manager::Start(const Device::Options& options, const scoped_refptr<dbus::Bus>& bus, ShillClient* shill_client, DeviceRegistrationInfo* device, @@ -123,7 +121,27 @@ } } -void Manager::OnShutdown() { +std::string Manager::GetCurrentlyConnectedSsid() const { + return wifi_bootstrap_manager_ + ? wifi_bootstrap_manager_->GetCurrentlyConnectedSsid() + : ""; +} + +void Manager::AddOnWifiSetupChangedCallback( + const WifiBootstrapManager::StateListener& callback) { + if (wifi_bootstrap_manager_) + wifi_bootstrap_manager_->RegisterStateListener(callback); + else + callback.Run(WifiSetupState::kDisabled); +} + +void Manager::AddOnPairingChangedCallbacks( + const SecurityManager::PairingStartListener& on_start, + const SecurityManager::PairingEndListener& on_end) { + security_->RegisterPairingListeners(on_start, on_end); +} + +void Manager::Shutdown() { web_server_->Disconnect(); }
diff --git a/libweave/src/privet/privet_manager.h b/libweave/src/privet/privet_manager.h index f16330d..3a01f13 100644 --- a/libweave/src/privet/privet_manager.h +++ b/libweave/src/privet/privet_manager.h
@@ -14,6 +14,9 @@ #include <base/scoped_observer.h> #include "libweave/src/privet/cloud_delegate.h" +#include "libweave/src/privet/security_manager.h" +#include "libweave/src/privet/wifi_bootstrap_manager.h" +#include "weave/device.h" namespace chromeos { namespace dbus_utils { @@ -44,21 +47,13 @@ class PrivetHandler; class SecurityManager; class ShillClient; -class WifiBootstrapManager; class Manager : public CloudDelegate::Observer { public: - struct Options { - bool disable_privet{false}; - bool disable_security{false}; - bool enable_ping{false}; - base::FilePath config_path; - }; - Manager(); ~Manager(); - void Start(const Options& options, + void Start(const weave::Device::Options& options, const scoped_refptr<dbus::Bus>& bus, ShillClient* shill_client, DeviceRegistrationInfo* device, @@ -66,17 +61,21 @@ StateManager* state_manager, chromeos::dbus_utils::AsyncEventSequencer* sequencer); - void OnShutdown(); + std::string GetCurrentlyConnectedSsid() const; - void OnDeviceInfoChanged() override; + void AddOnWifiSetupChangedCallback( + const WifiBootstrapManager::StateListener& callback); - privet::WifiBootstrapManager* GetWifiBootstrapManager() { - return wifi_bootstrap_manager_.get(); - } + void AddOnPairingChangedCallbacks( + const SecurityManager::PairingStartListener& on_start, + const SecurityManager::PairingEndListener& on_end); - privet::SecurityManager* GetSecurityManager() { return security_.get(); } + void Shutdown(); private: + // CloudDelegate::Observer + void OnDeviceInfoChanged() override; + void PrivetRequestHandler(std::unique_ptr<libwebserv::Request> request, std::unique_ptr<libwebserv::Response> response); @@ -88,7 +87,6 @@ std::unique_ptr<libwebserv::Response> response); void OnChanged(); - void OnConnectivityChanged(bool online); void OnProtocolHandlerConnected(
diff --git a/libweave/src/privet/security_delegate.h b/libweave/src/privet/security_delegate.h index 430e882..57098f6 100644 --- a/libweave/src/privet/security_delegate.h +++ b/libweave/src/privet/security_delegate.h
@@ -13,17 +13,11 @@ #include <chromeos/secure_blob.h> #include "libweave/src/privet/privet_types.h" +#include "weave/types.h" namespace weave { namespace privet { -enum class PairingType { - kPinCode, - kEmbeddedCode, - kUltrasound32, - kAudible32, -}; - enum class CryptoType { kNone, kSpake_p224,
diff --git a/libweave/src/privet/wifi_bootstrap_manager.cc b/libweave/src/privet/wifi_bootstrap_manager.cc index ef7096a..487450c 100644 --- a/libweave/src/privet/wifi_bootstrap_manager.cc +++ b/libweave/src/privet/wifi_bootstrap_manager.cc
@@ -70,7 +70,7 @@ return; } - UpdateState(kBootstrapping); + UpdateState(State::kBootstrapping); if (!last_configured_ssid_.empty()) { // If we have been configured before, we'd like to periodically take down // our AP and find out if we can connect again. Many kinds of failures are @@ -94,7 +94,7 @@ const std::string& passphrase) { VLOG(1) << "WiFi is attempting to connect. (ssid=" << ssid << ", pass=" << passphrase << ")."; - UpdateState(kConnecting); + UpdateState(State::kConnecting); base::MessageLoop::current()->PostDelayedTask( FROM_HERE, base::Bind(&WifiBootstrapManager::OnConnectTimeout, tasks_weak_factory_.GetWeakPtr()), @@ -112,27 +112,28 @@ VLOG(1) << "Monitoring connectivity."; // We already have a callback in place with |shill_client_| to update our // connectivity state. See OnConnectivityChange(). - UpdateState(kMonitoring); + UpdateState(State::kMonitoring); } void WifiBootstrapManager::EndMonitoring() { } void WifiBootstrapManager::UpdateState(State new_state) { - VLOG(3) << "Switching state from " << state_ << " to " << new_state; + VLOG(3) << "Switching state from " << static_cast<int>(state_) << " to " + << static_cast<int>(new_state); // Abort irrelevant tasks. tasks_weak_factory_.InvalidateWeakPtrs(); switch (state_) { - case kDisabled: + case State::kDisabled: break; - case kBootstrapping: + case State::kBootstrapping: EndBootstrapping(); break; - case kMonitoring: + case State::kMonitoring: EndMonitoring(); break; - case kConnecting: + case State::kConnecting: EndConnecting(); break; } @@ -221,11 +222,11 @@ VLOG(3) << "ConnectivityChanged: " << is_connected; UpdateConnectionState(); - if (state_ == kBootstrapping) { + if (state_ == State::kBootstrapping) { StartMonitoring(); return; } - if (state_ == kMonitoring) { + if (state_ == State::kMonitoring) { if (is_connected) { tasks_weak_factory_.InvalidateWeakPtrs(); } else {
diff --git a/libweave/src/privet/wifi_bootstrap_manager.h b/libweave/src/privet/wifi_bootstrap_manager.h index 5b51c87..4a68c46 100644 --- a/libweave/src/privet/wifi_bootstrap_manager.h +++ b/libweave/src/privet/wifi_bootstrap_manager.h
@@ -31,12 +31,7 @@ class WifiBootstrapManager : public WifiDelegate, public CloudDelegate::Observer { public: - enum State { - kDisabled, - kBootstrapping, - kMonitoring, - kConnecting, - }; + using State = WifiSetupState; using StateListener = base::Callback<void(State)>; @@ -94,7 +89,7 @@ // Initialization could be delayed if ssid_generator_ is not ready. bool is_initialized_{false}; - State state_{kDisabled}; + State state_{State::kDisabled}; // Setup state is the temporal state of the most recent bootstrapping attempt. // It is not persisted to disk. SetupState setup_state_{SetupState::kNone};
diff --git a/libweave/src/registration_status.h b/libweave/src/registration_status.h index 7b6694f..6511de1 100644 --- a/libweave/src/registration_status.h +++ b/libweave/src/registration_status.h
@@ -7,16 +7,11 @@ #include <string> +#include "weave/types.h" + namespace weave { -// See the DBus interface XML file for complete descriptions of these states. -enum class RegistrationStatus { - kUnconfigured, // We have no credentials. - kConnecting, // We have credentials but not yet connected. - kConnected, // We're registered and connected to the cloud. - kInvalidCredentials, // Our registration has been revoked. -}; - +// TODO(vitalybuka): Use EnumToString. std::string StatusToString(RegistrationStatus status); } // namespace weave
diff --git a/libweave/src/states/state_manager.cc b/libweave/src/states/state_manager.cc index a548062..7b867ca 100644 --- a/libweave/src/states/state_manager.cc +++ b/libweave/src/states/state_manager.cc
@@ -181,7 +181,7 @@ while (!iter.IsAtEnd()) { std::string package_name = iter.key(); if (package_name.empty()) { - chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet, + chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kInvalidPackageError, "State package name is empty"); return false; @@ -214,7 +214,7 @@ return false; std::string category = json_file_path.BaseName().RemoveExtension().value(); if (category == kDefaultCategory) { - chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet, + chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomain, kInvalidCategoryError, "Invalid state category specified in '%s'", json_file_path.value().c_str()); @@ -222,8 +222,8 @@ } if (!LoadStateDefinition(*json, category, error)) { - chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet, - kFileReadError, "Failed to load file '%s'", + chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomain, kFileReadError, + "Failed to load file '%s'", json_file_path.value().c_str()); return false; } @@ -237,8 +237,8 @@ if (!json) return false; if (!LoadStateDefinition(*json, kDefaultCategory, error)) { - chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet, - kFileReadError, "Failed to load file '%s'", + chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomain, kFileReadError, + "Failed to load file '%s'", json_file_path.value().c_str()); return false; } @@ -251,7 +251,7 @@ while (!iter.IsAtEnd()) { std::string package_name = iter.key(); if (package_name.empty()) { - chromeos::Error::AddTo(error, FROM_HERE, kErrorDomainBuffet, + chromeos::Error::AddTo(error, FROM_HERE, kErrorDomain, kInvalidPackageError, "State package name is empty"); return false; @@ -287,8 +287,8 @@ if (!json) return false; if (!LoadStateDefaults(*json, error)) { - chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet, - kFileReadError, "Failed to load file '%s'", + chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomain, kFileReadError, + "Failed to load file '%s'", json_file_path.value().c_str()); return false; }
diff --git a/libweave/src/utils.cc b/libweave/src/utils.cc index a8cd587..7e0864c 100644 --- a/libweave/src/utils.cc +++ b/libweave/src/utils.cc
@@ -33,7 +33,7 @@ } // anonymous namespace -const char kErrorDomainBuffet[] = "buffet"; +const char kErrorDomain[] = "weave"; const char kFileReadError[] = "file_read_error"; const char kInvalidCategoryError[] = "invalid_category"; const char kInvalidPackageError[] = "invalid_package"; @@ -44,8 +44,8 @@ std::string json_string; if (!base::ReadFileToString(json_file_path, &json_string)) { chromeos::errors::system::AddSystemError(error, FROM_HERE, errno); - chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomainBuffet, - kFileReadError, "Failed to read file '%s'", + chromeos::Error::AddToPrintf(error, FROM_HERE, kErrorDomain, kFileReadError, + "Failed to read file '%s'", json_file_path.value().c_str()); return {}; }
diff --git a/libweave/src/utils.h b/libweave/src/utils.h index 8fa556a..8bbae3e 100644 --- a/libweave/src/utils.h +++ b/libweave/src/utils.h
@@ -14,10 +14,9 @@ namespace weave { -// Buffet-wide errors. // TODO(avakulenko): This should be consolidated into errors::<domain> namespace // See crbug.com/417274 -extern const char kErrorDomainBuffet[]; +extern const char kErrorDomain[]; extern const char kFileReadError[]; extern const char kInvalidCategoryError[]; extern const char kInvalidPackageError[];