buffet: Remove D-Bus between CloudDelegate and Buffet Now code runs in the same process so no need in IPC. BUG=brillo:1161 TEST=`FEATURES=test emerge-gizmo buffet` Change-Id: Ia23551b335cae9051948b62b6e15a2d2e3d4d106 Reviewed-on: https://chromium-review.googlesource.com/276603 Reviewed-by: Alex Vakulenko <avakulenko@chromium.org> Commit-Queue: Vitaly Buka <vitalybuka@chromium.org> Tested-by: Vitaly Buka <vitalybuka@chromium.org>
diff --git a/buffet/commands/command_manager.h b/buffet/commands/command_manager.h index 5a1cc5e..3c2f720 100644 --- a/buffet/commands/command_manager.h +++ b/buffet/commands/command_manager.h
@@ -41,7 +41,8 @@ // Sets callback which is called when command definitions is changed. void AddOnCommandDefChanged(const base::Closure& callback) { - return on_command_changed_.push_back(callback); + on_command_changed_.push_back(callback); + callback.Run(); } // Returns the command definitions for the device.
diff --git a/buffet/commands/command_manager_unittest.cc b/buffet/commands/command_manager_unittest.cc index 76a3246..f270655 100644 --- a/buffet/commands/command_manager_unittest.cc +++ b/buffet/commands/command_manager_unittest.cc
@@ -186,11 +186,11 @@ } })"); ASSERT_TRUE(manager.LoadCommands(*json, "test", nullptr)); - EXPECT_EQ(1, update_count); + EXPECT_EQ(2, update_count); const CommandDictionary& dict = manager.GetCommandDictionary(); EXPECT_TRUE(manager.SetCommandVisibility( {"foo._baz"}, CommandDefinition::Visibility::GetLocal(), nullptr)); - EXPECT_EQ(2, update_count); + EXPECT_EQ(3, update_count); EXPECT_EQ("local", dict.FindCommand("foo._baz")->GetVisibility().ToString()); EXPECT_EQ("all", dict.FindCommand("foo._bar")->GetVisibility().ToString()); EXPECT_EQ("none", dict.FindCommand("bar._quux")->GetVisibility().ToString()); @@ -202,7 +202,7 @@ EXPECT_EQ(errors::commands::kInvalidCommandName, error->GetCode()); EXPECT_EQ("Command 'test.cmd' is unknown", error->GetMessage()); // The visibility state of commands shouldn't have changed. - EXPECT_EQ(2, update_count); + EXPECT_EQ(3, update_count); EXPECT_EQ("local", dict.FindCommand("foo._baz")->GetVisibility().ToString()); EXPECT_EQ("all", dict.FindCommand("foo._bar")->GetVisibility().ToString()); EXPECT_EQ("none", dict.FindCommand("bar._quux")->GetVisibility().ToString()); @@ -210,7 +210,7 @@ EXPECT_TRUE(manager.SetCommandVisibility( {"foo._baz", "bar._quux"}, CommandDefinition::Visibility::GetCloud(), nullptr)); - EXPECT_EQ(3, update_count); + EXPECT_EQ(4, update_count); EXPECT_EQ("cloud", dict.FindCommand("foo._baz")->GetVisibility().ToString()); EXPECT_EQ("all", dict.FindCommand("foo._bar")->GetVisibility().ToString()); EXPECT_EQ("cloud", dict.FindCommand("bar._quux")->GetVisibility().ToString());
diff --git a/buffet/device_registration_info.cc b/buffet/device_registration_info.cc index bd02b23..cb0cb3e 100644 --- a/buffet/device_registration_info.cc +++ b/buffet/device_registration_info.cc
@@ -343,6 +343,11 @@ callback.Run(registration_status_); } +void DeviceRegistrationInfo::AddOnConfigChangedCallback( + const BuffetConfig::OnChangedCallback& callback) { + config_->AddOnChangedCallback(callback); +} + std::unique_ptr<base::DictionaryValue> DeviceRegistrationInfo::BuildDeviceResource(chromeos::ErrorPtr* error) { // Limit only to commands that are visible to the cloud.
diff --git a/buffet/device_registration_info.h b/buffet/device_registration_info.h index 9e8a8b0..52187ef 100644 --- a/buffet/device_registration_info.h +++ b/buffet/device_registration_info.h
@@ -62,6 +62,10 @@ void AddOnRegistrationChangedCallback( const OnRegistrationChangedCallback& callback); + // Add callback to listen for changes in config. + void AddOnConfigChangedCallback( + const BuffetConfig::OnChangedCallback& callback); + // Returns the authorization HTTP header that can be used to talk // to GCD server for authenticated device communication. // Make sure ValidateAndRefreshAccessToken() is called before this call.
diff --git a/buffet/manager.cc b/buffet/manager.cc index d9ddfaf..86f6988 100644 --- a/buffet/manager.cc +++ b/buffet/manager.cc
@@ -105,7 +105,8 @@ void Manager::StartPrivet(const privetd::Manager::Options& options, AsyncEventSequencer* sequencer) { privet_.reset(new privetd::Manager{}); - privet_->Start(options, dbus_object_.GetBus(), sequencer); + privet_->Start(options, dbus_object_.GetBus(), device_info_.get(), + command_manager_.get(), state_manager_.get(), sequencer); if (privet_->GetWifiBootstrapManager()) { privet_->GetWifiBootstrapManager()->RegisterStateListener(base::Bind(
diff --git a/buffet/privet/cloud_delegate.cc b/buffet/privet/cloud_delegate.cc index 653bf5d..95b0aff 100644 --- a/buffet/privet/cloud_delegate.cc +++ b/buffet/privet/cloud_delegate.cc
@@ -8,8 +8,6 @@ #include <vector> #include <base/bind.h> -#include <base/json/json_reader.h> -#include <base/json/json_writer.h> #include <base/logging.h> #include <base/memory/weak_ptr.h> #include <base/message_loop/message_loop.h> @@ -18,8 +16,12 @@ #include <chromeos/variant_dictionary.h> #include <dbus/bus.h> +#include "buffet/buffet_config.h" +#include "buffet/commands/command_manager.h" #include "buffet/dbus-proxies.h" +#include "buffet/device_registration_info.h" #include "buffet/privet/constants.h" +#include "buffet/states/state_manager.h" namespace privetd { @@ -33,47 +35,64 @@ const int kMaxSetupRetries = 5; const int kFirstRetryTimeoutSec = 1; +buffet::CommandInstance* ReturnNotFound(const std::string& command_id, + chromeos::ErrorPtr* error) { + chromeos::Error::AddToPrintf(error, FROM_HERE, errors::kDomain, + errors::kNotFound, "Command not found, ID='%s'", + command_id.c_str()); + return nullptr; +} + class CloudDelegateImpl : public CloudDelegate { public: - CloudDelegateImpl(const scoped_refptr<dbus::Bus>& bus, - bool is_gcd_setup_enabled) - : object_manager_{bus}, is_gcd_setup_enabled_(is_gcd_setup_enabled) { - object_manager_.SetManagerAddedCallback(base::Bind( - &CloudDelegateImpl::OnManagerAdded, weak_factory_.GetWeakPtr())); - object_manager_.SetManagerRemovedCallback(base::Bind( - &CloudDelegateImpl::OnManagerRemoved, weak_factory_.GetWeakPtr())); - object_manager_.SetCommandRemovedCallback(base::Bind( + CloudDelegateImpl(bool is_gcd_setup_enabled, + buffet::DeviceRegistrationInfo* device, + buffet::CommandManager* command_manager, + buffet::StateManager* state_manager) + : is_gcd_setup_enabled_(is_gcd_setup_enabled), + device_{device}, + command_manager_{command_manager}, + state_manager_{state_manager} { + device_->AddOnConfigChangedCallback(base::Bind( + &CloudDelegateImpl::OnConfigChanged, weak_factory_.GetWeakPtr())); + device_->AddOnRegistrationChangedCallback(base::Bind( + &CloudDelegateImpl::OnRegistrationChanged, weak_factory_.GetWeakPtr())); + + command_manager_->AddOnCommandDefChanged(base::Bind( + &CloudDelegateImpl::OnCommandDefChanged, weak_factory_.GetWeakPtr())); + command_manager_->AddOnCommandAddedCallback(base::Bind( + &CloudDelegateImpl::OnCommandAdded, weak_factory_.GetWeakPtr())); + command_manager_->AddOnCommandAddedCallback(base::Bind( &CloudDelegateImpl::OnCommandRemoved, weak_factory_.GetWeakPtr())); + + state_manager_->AddOnChangedCallback(base::Bind( + &CloudDelegateImpl::OnStateChanged, weak_factory_.GetWeakPtr())); } ~CloudDelegateImpl() override = default; bool GetModelId(std::string* id, chromeos::ErrorPtr* error) const override { - if (!IsManagerReady(error)) - return false; - if (manager_->model_id().size() != 5) { + if (device_->GetConfig().model_id().size() != 5) { chromeos::Error::AddToPrintf( error, FROM_HERE, errors::kDomain, errors::kInvalidState, - "Model ID is invalid: %s", manager_->model_id().c_str()); + "Model ID is invalid: %s", device_->GetConfig().model_id().c_str()); return false; } - *id = manager_->model_id(); + *id = device_->GetConfig().model_id(); return true; } bool GetName(std::string* name, chromeos::ErrorPtr* error) const override { - if (!IsManagerReady(error)) - return false; - *name = manager_->name(); + *name = device_->GetConfig().name(); return true; } std::string GetDescription() const override { - return manager_ ? manager_->description() : std::string{}; + return device_->GetConfig().description(); } std::string GetLocation() const override { - return manager_ ? manager_->location() : std::string{}; + return device_->GetConfig().location(); } void UpdateDeviceInfo(const std::string& name, @@ -82,24 +101,17 @@ const base::Closure& success_callback, const ErrorCallback& error_callback) override { chromeos::ErrorPtr error; - if (!IsManagerReady(&error)) + if (!device_->UpdateDeviceInfo(name, description, location, &error)) return error_callback.Run(error.get()); - - if (name == manager_->name() && description == manager_->description() && - location == manager_->location()) { - return success_callback.Run(); - } - - manager_->UpdateDeviceInfoAsync(name, description, location, - success_callback, error_callback); + success_callback.Run(); } std::string GetOemName() const override { - return manager_ ? manager_->oem_name() : std::string{}; + return device_->GetConfig().oem_name(); } std::string GetModelName() const override { - return manager_ ? manager_->model_name() : std::string{}; + return device_->GetConfig().model_name(); } std::set<std::string> GetServices() const override { @@ -112,10 +124,10 @@ } AuthScope GetAnonymousMaxScope() const override { - if (manager_) { - AuthScope scope; - if (StringToAuthScope(manager_->anonymous_access_role(), &scope)) - return scope; + AuthScope scope; + if (StringToAuthScope(device_->GetConfig().local_anonymous_access_role(), + &scope)) { + return scope; } return AuthScope::kNone; } @@ -135,11 +147,6 @@ "GCD setup unavailible"); return false; } - if (!object_manager_.GetManagerProxy()) { - chromeos::Error::AddTo(error, FROM_HERE, errors::kDomain, - errors::kDeviceBusy, "Buffet is not ready"); - return false; - } if (setup_state_.IsStatusEqual(SetupState::kInProgress)) { chromeos::Error::AddTo(error, FROM_HERE, errors::kDomain, errors::kDeviceBusy, "Setup in progress"); @@ -158,7 +165,7 @@ } std::string GetCloudId() const override { - return manager_ ? manager_->device_id() : std::string{}; + return device_->GetConfig().device_id(); } const base::DictionaryValue& GetState() const override { return state_; } @@ -172,19 +179,19 @@ const SuccessCallback& success_callback, const ErrorCallback& error_callback) override { CHECK(user_info.scope() != AuthScope::kNone); + CHECK_NE(user_info.user_id(), 0u); chromeos::ErrorPtr error; - if (!IsManagerReady(&error)) + buffet::UserRole role; + if (!FromString(AuthScopeToString(user_info.scope()), &role, &error)) return error_callback.Run(error.get()); - std::string command_str; - base::JSONWriter::Write(&command, &command_str); - manager_->AddCommandAsync( - command_str, AuthScopeToString(user_info.scope()), - base::Bind(&CloudDelegateImpl::OnAddCommandSucceeded, - weak_factory_.GetWeakPtr(), success_callback, - error_callback), - error_callback); + std::string id; + if (!command_manager_->AddCommand(command, role, &id, &error)) + return error_callback.Run(error.get()); + + CHECK(command_owners_.emplace(id, user_info.user_id()).second); + success_callback.Run(*command_manager_->FindCommand(id)->ToJson()); } void GetCommand(const std::string& id, @@ -193,14 +200,10 @@ const ErrorCallback& error_callback) override { CHECK(user_info.scope() != AuthScope::kNone); chromeos::ErrorPtr error; - if (!CanAccessCommand(id, user_info)) { - chromeos::Error::AddTo(&error, FROM_HERE, errors::kDomain, - errors::kAccessDenied, - "Need to be owner of the command."); + auto command = GetCommandInternal(id, user_info, &error); + if (!command) return error_callback.Run(error.get()); - } - - GetCommandInternal(id, success_callback, error_callback); + success_callback.Run(*command->ToJson()); } void CancelCommand(const std::string& id, @@ -209,27 +212,12 @@ const ErrorCallback& error_callback) override { CHECK(user_info.scope() != AuthScope::kNone); chromeos::ErrorPtr error; - if (!CanAccessCommand(id, user_info)) { - chromeos::Error::AddTo(&error, FROM_HERE, errors::kDomain, - errors::kAccessDenied, - "Need to be owner of the command."); + auto command = GetCommandInternal(id, user_info, &error); + if (!command) return error_callback.Run(error.get()); - } - for (auto command : object_manager_.GetCommandInstances()) { - if (command->id() == id) { - return command->CancelAsync( - base::Bind(&CloudDelegateImpl::GetCommandInternal, - weak_factory_.GetWeakPtr(), id, success_callback, - error_callback), - error_callback); - } - } - - chromeos::Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, - errors::kNotFound, - "Command not found, ID='%s'", id.c_str()); - error_callback.Run(error.get()); + command->Cancel(); + success_callback.Run(*command->ToJson()); } void ListCommands(const UserInfo& user_info, @@ -237,126 +225,74 @@ const ErrorCallback& error_callback) override { CHECK(user_info.scope() != AuthScope::kNone); - std::vector<org::chromium::Buffet::CommandProxy*> commands{ - object_manager_.GetCommandInstances()}; + base::ListValue list_value; - auto ids = std::make_shared<std::vector<std::string>>(); - for (auto command : commands) { - if (CanAccessCommand(command->id(), user_info)) - ids->push_back(command->id()); + for (const auto& it : command_owners_) { + if (CanAccessCommand(it.second, user_info, nullptr)) { + list_value.Append( + command_manager_->FindCommand(it.first)->ToJson().release()); + } } - GetNextCommand(ids, std::make_shared<base::ListValue>(), success_callback, - error_callback, base::DictionaryValue{}); + base::DictionaryValue commands_json; + commands_json.Set("commands", list_value.DeepCopy()); + + success_callback.Run(commands_json); } private: - void GetCommandInternal(const std::string& id, - const SuccessCallback& success_callback, - const ErrorCallback& error_callback) { - chromeos::ErrorPtr error; - if (!IsManagerReady(&error)) - return error_callback.Run(error.get()); - manager_->GetCommandAsync( - id, base::Bind(&CloudDelegateImpl::OnGetCommandSucceeded, - weak_factory_.GetWeakPtr(), success_callback, - error_callback), - error_callback); + void OnCommandAdded(buffet::CommandInstance* command) { + // Set to 0 for any new unknown command. + command_owners_.emplace(command->GetID(), 0); } - void OnManagerAdded(ManagerProxy* manager) { - manager_ = manager; - manager_->SetPropertyChangedCallback( - base::Bind(&CloudDelegateImpl::OnManagerPropertyChanged, - weak_factory_.GetWeakPtr())); - // Read all initial values. - OnManagerPropertyChanged(manager, std::string{}); + void OnCommandRemoved(buffet::CommandInstance* command) { + CHECK(command_owners_.erase(command->GetID())); } - void OnCommandRemoved(const dbus::ObjectPath& object_path) { - command_owners_.erase(object_manager_.GetCommandProxy(object_path)->id()); + void OnConfigChanged(const buffet::BuffetConfig&) { + NotifyOnDeviceInfoChanged(); } - void OnManagerPropertyChanged(ManagerProxy* manager, - const std::string& property_name) { - CHECK_EQ(manager_, manager); - - if (property_name.empty() || property_name == ManagerProxy::StatusName()) { - OnStatusPropertyChanged(); - } - - if (property_name.empty() || - property_name == ManagerProxy::DeviceIdName() || - property_name == ManagerProxy::OemNameName() || - property_name == ManagerProxy::ModelNameName() || - property_name == ManagerProxy::ModelIdName() || - property_name == ManagerProxy::NameName() || - property_name == ManagerProxy::DescriptionName() || - property_name == ManagerProxy::LocationName() || - property_name == ManagerProxy::AnonymousAccessRoleName()) { - NotifyOnDeviceInfoChanged(); - } - - if (property_name.empty() || property_name == ManagerProxy::StateName()) { - OnStatePropertyChanged(); - } - - if (property_name.empty() || - property_name == ManagerProxy::CommandDefsName()) { - OnCommandDefsPropertyChanged(); - } - } - - void OnStatusPropertyChanged() { - const std::string& status = manager_->status(); - if (status == "unconfigured") { + void OnRegistrationChanged(buffet::RegistrationStatus status) { + if (status == buffet::RegistrationStatus::kUnconfigured) { connection_state_ = ConnectionState{ConnectionState::kUnconfigured}; - } else if (status == "connecting") { + } else if (status == buffet::RegistrationStatus::kConnecting) { // TODO(vitalybuka): Find conditions for kOffline. connection_state_ = ConnectionState{ConnectionState::kConnecting}; - } else if (status == "connected") { + } else if (status == buffet::RegistrationStatus::kConnected) { connection_state_ = ConnectionState{ConnectionState::kOnline}; } else { chromeos::ErrorPtr error; - chromeos::Error::AddToPrintf( - &error, FROM_HERE, errors::kDomain, errors::kInvalidState, - "Unexpected buffet status: %s", status.c_str()); + chromeos::Error::AddToPrintf(&error, FROM_HERE, errors::kDomain, + errors::kInvalidState, + "Unexpected buffet status: %s", + buffet::StatusToString(status).c_str()); connection_state_ = ConnectionState{std::move(error)}; } NotifyOnDeviceInfoChanged(); } - void OnStatePropertyChanged() { + void OnStateChanged() { state_.Clear(); - std::unique_ptr<base::Value> value{ - base::JSONReader::Read(manager_->state())}; - const base::DictionaryValue* state{nullptr}; - if (value && value->GetAsDictionary(&state)) - state_.MergeDictionary(state); + auto state = state_manager_->GetStateValuesAsJson(nullptr); + CHECK(state); + state_.MergeDictionary(state.get()); NotifyOnStateChanged(); } - void OnCommandDefsPropertyChanged() { + void OnCommandDefChanged() { command_defs_.Clear(); - std::unique_ptr<base::Value> value{ - base::JSONReader::Read(manager_->command_defs())}; - const base::DictionaryValue* defs{nullptr}; - if (value && value->GetAsDictionary(&defs)) - command_defs_.MergeDictionary(defs); + auto commands = command_manager_->GetCommandDictionary().GetCommandsAsJson( + [](const buffet::CommandDefinition* def) { + return def->GetVisibility().local; + }, + true, nullptr); + CHECK(commands); + command_defs_.MergeDictionary(commands.get()); NotifyOnCommandDefsChanged(); } - void OnManagerRemoved(const dbus::ObjectPath& path) { - manager_ = nullptr; - connection_state_ = ConnectionState(ConnectionState::kDisabled); - state_.Clear(); - command_defs_.Clear(); - command_owners_.clear(); - NotifyOnDeviceInfoChanged(); - NotifyOnCommandDefsChanged(); - NotifyOnStateChanged(); - } - void RetryRegister(const std::string& ticket_id, int retries, chromeos::Error* error) { @@ -381,101 +317,51 @@ } void CallManagerRegisterDevice(const std::string& ticket_id, int retries) { - auto manager_proxy = object_manager_.GetManagerProxy(); - if (!manager_proxy) { - LOG(ERROR) << "Couldn't register because Buffet was offline."; - RetryRegister(ticket_id, retries, nullptr); - return; - } - manager_proxy->RegisterDeviceAsync( - ticket_id, base::Bind(&CloudDelegateImpl::OnRegisterSuccess, - setup_weak_factory_.GetWeakPtr()), - base::Bind(&CloudDelegateImpl::RetryRegister, - setup_weak_factory_.GetWeakPtr(), ticket_id, retries)); + chromeos::ErrorPtr error; + if (device_->RegisterDevice(ticket_id, &error).empty()) + RetryRegister(ticket_id, retries, error.get()); } - void OnAddCommandSucceeded(const SuccessCallback& success_callback, - const ErrorCallback& error_callback, - const std::string& id) { - GetCommandInternal(id, success_callback, error_callback); - } - - void OnGetCommandSucceeded(const SuccessCallback& success_callback, - const ErrorCallback& error_callback, - const std::string& json_command) { - std::unique_ptr<base::Value> value{base::JSONReader::Read(json_command)}; - base::DictionaryValue* command{nullptr}; - if (!value || !value->GetAsDictionary(&command)) { - chromeos::ErrorPtr error; - chromeos::Error::AddTo(&error, FROM_HERE, errors::kDomain, - errors::kInvalidFormat, - "Buffet returned invalid JSON"); - return error_callback.Run(error.get()); - } - success_callback.Run(*command); - } - - void GetNextCommandSkipError( - const std::shared_ptr<std::vector<std::string>>& ids, - const std::shared_ptr<base::ListValue>& commands, - const SuccessCallback& success_callback, - const ErrorCallback& error_callback, - chromeos::Error*) { - // Ignore if we can't get some commands. Maybe they were removed. - GetNextCommand(ids, commands, success_callback, error_callback, - base::DictionaryValue{}); - } - - void GetNextCommand(const std::shared_ptr<std::vector<std::string>>& ids, - const std::shared_ptr<base::ListValue>& commands, - const SuccessCallback& success_callback, - const ErrorCallback& error_callback, - const base::DictionaryValue& json) { - if (!json.empty()) - commands->Append(json.DeepCopy()); - - if (ids->empty()) { - base::DictionaryValue commands_json; - commands_json.Set("commands", commands->DeepCopy()); - return success_callback.Run(commands_json); + buffet::CommandInstance* GetCommandInternal(const std::string& command_id, + const UserInfo& user_info, + chromeos::ErrorPtr* error) const { + if (user_info.scope() != AuthScope::kOwner) { + auto it = command_owners_.find(command_id); + if (it == command_owners_.end()) + return ReturnNotFound(command_id, error); + if (CanAccessCommand(it->second, user_info, error)) + return nullptr; } - std::string next_id = ids->back(); - ids->pop_back(); + auto command = command_manager_->FindCommand(command_id); + if (!command) + return ReturnNotFound(command_id, error); - auto on_success = base::Bind(&CloudDelegateImpl::GetNextCommand, - weak_factory_.GetWeakPtr(), ids, commands, - success_callback, error_callback); - - auto on_error = base::Bind(&CloudDelegateImpl::GetNextCommandSkipError, - weak_factory_.GetWeakPtr(), ids, commands, - success_callback, error_callback); - - GetCommandInternal(next_id, on_success, on_error); + return command; } - bool IsManagerReady(chromeos::ErrorPtr* error) const { - if (!manager_) { - chromeos::Error::AddTo(error, FROM_HERE, errors::kDomain, - errors::kDeviceBusy, "Buffet is not ready"); - return false; - } - return true; - } + bool CanAccessCommand(uint64_t owner_id, + const UserInfo& user_info, + chromeos::ErrorPtr* error) const { + CHECK(user_info.scope() != AuthScope::kNone); + CHECK_NE(user_info.user_id(), 0u); - bool CanAccessCommand(const std::string& command_id, - const UserInfo& user_info) const { - if (user_info.scope() == AuthScope::kOwner) + if (user_info.scope() == AuthScope::kOwner || + owner_id == user_info.user_id()) { return true; - auto it = command_owners_.find(command_id); - return it != command_owners_.end() && it->second == user_info.user_id(); - } + } - ObjectManagerProxy object_manager_; + chromeos::Error::AddTo(error, FROM_HERE, errors::kDomain, + errors::kAccessDenied, + "Need to be owner of the command."); + return false; + } bool is_gcd_setup_enabled_{false}; - ManagerProxy* manager_{nullptr}; + buffet::DeviceRegistrationInfo* device_{nullptr}; + buffet::CommandManager* command_manager_{nullptr}; + buffet::StateManager* state_manager_{nullptr}; // Primary state of GCD. ConnectionState connection_state_{ConnectionState::kDisabled}; @@ -509,12 +395,12 @@ // static std::unique_ptr<CloudDelegate> CloudDelegate::CreateDefault( - bool is_gcd_setup_enabled) { - dbus::Bus::Options options; - options.bus_type = dbus::Bus::SYSTEM; - scoped_refptr<dbus::Bus> bus{new dbus::Bus{options}}; - return std::unique_ptr<CloudDelegateImpl>{ - new CloudDelegateImpl{bus, is_gcd_setup_enabled}}; + bool is_gcd_setup_enabled, + buffet::DeviceRegistrationInfo* device, + buffet::CommandManager* command_manager, + buffet::StateManager* state_manager) { + return std::unique_ptr<CloudDelegateImpl>{new CloudDelegateImpl{ + is_gcd_setup_enabled, device, command_manager, state_manager}}; } void CloudDelegate::NotifyOnDeviceInfoChanged() {
diff --git a/buffet/privet/cloud_delegate.h b/buffet/privet/cloud_delegate.h index 75d0a63..39f3722 100644 --- a/buffet/privet/cloud_delegate.h +++ b/buffet/privet/cloud_delegate.h
@@ -20,9 +20,11 @@ class DictionaryValue; } // namespace base -namespace dbus { -class Bus; -} // namespace dbus +namespace buffet { +class CommandManager; +class DeviceRegistrationInfo; +class StateManager; +} namespace privetd { @@ -131,7 +133,10 @@ // Create default instance. static std::unique_ptr<CloudDelegate> CreateDefault( - bool is_gcd_setup_enabled); + bool is_gcd_setup_enabled, + buffet::DeviceRegistrationInfo* device, + buffet::CommandManager* command_manager, + buffet::StateManager* state_manager); private: ObserverList<Observer> observer_list_;
diff --git a/buffet/privet/privet_manager.cc b/buffet/privet/privet_manager.cc index 1471404..28971ae 100644 --- a/buffet/privet/privet_manager.cc +++ b/buffet/privet/privet_manager.cc
@@ -27,6 +27,7 @@ #include <libwebserv/response.h> #include <libwebserv/server.h> +#include "buffet/dbus_constants.h" #include "buffet/privet/ap_manager_client.h" #include "buffet/privet/cloud_delegate.h" #include "buffet/privet/constants.h" @@ -38,7 +39,6 @@ #include "buffet/privet/security_manager.h" #include "buffet/privet/shill_client.h" #include "buffet/privet/wifi_bootstrap_manager.h" -#include "buffet/dbus_constants.h" namespace privetd { @@ -67,6 +67,9 @@ void Manager::Start(const Options& options, const scoped_refptr<dbus::Bus>& bus, + buffet::DeviceRegistrationInfo* device, + buffet::CommandManager* command_manager, + buffet::StateManager* state_manager, AsyncEventSequencer* sequencer) { disable_security_ = options.disable_security; @@ -99,8 +102,9 @@ device_whitelist.insert(interfaces.begin(), interfaces.end()); } device_ = DeviceDelegate::CreateDefault(); - cloud_ = CloudDelegate::CreateDefault(parser_->gcd_bootstrap_mode() != - GcdBootstrapMode::kDisabled); + cloud_ = CloudDelegate::CreateDefault( + parser_->gcd_bootstrap_mode() != GcdBootstrapMode::kDisabled, device, + command_manager, state_manager); cloud_observer_.Add(cloud_.get()); security_.reset(new SecurityManager(parser_->pairing_modes(), parser_->embedded_code_path(), @@ -162,7 +166,7 @@ void Manager::OnDeviceInfoChanged() { OnChanged(); -}; +} void Manager::PrivetRequestHandler(std::unique_ptr<Request> request, std::unique_ptr<Response> response) {
diff --git a/buffet/privet/privet_manager.h b/buffet/privet/privet_manager.h index 8130b9d..25ff43b 100644 --- a/buffet/privet/privet_manager.h +++ b/buffet/privet/privet_manager.h
@@ -18,6 +18,7 @@ namespace buffet { class CommandManager; class DeviceRegistrationInfo; +class StateManager; } namespace chromeos { @@ -60,6 +61,9 @@ void Start(const Options& options, const scoped_refptr<dbus::Bus>& bus, + buffet::DeviceRegistrationInfo* device, + buffet::CommandManager* command_manager, + buffet::StateManager* state_manager, chromeos::dbus_utils::AsyncEventSequencer* sequencer); void OnShutdown();