Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 1 | // Copyright 2014 The Chromium OS Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style license that can be |
| 3 | // found in the LICENSE file. |
| 4 | |
Alex Vakulenko | b3aac25 | 2014-05-07 17:35:24 -0700 | [diff] [blame] | 5 | #ifndef BUFFET_DEVICE_REGISTRATION_INFO_H_ |
| 6 | #define BUFFET_DEVICE_REGISTRATION_INFO_H_ |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 7 | |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 8 | #include <map> |
| 9 | #include <memory> |
Alex Vakulenko | 5841c30 | 2014-07-23 10:49:49 -0700 | [diff] [blame] | 10 | #include <string> |
Alex Vakulenko | b3aac25 | 2014-05-07 17:35:24 -0700 | [diff] [blame] | 11 | #include <utility> |
Vitaly Buka | ee7a3af | 2015-05-14 16:57:23 -0700 | [diff] [blame] | 12 | #include <vector> |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 13 | |
Alex Vakulenko | 132617a | 2014-09-04 08:59:43 -0700 | [diff] [blame] | 14 | #include <base/macros.h> |
Christopher Wiley | cd41966 | 2015-02-06 17:51:43 -0800 | [diff] [blame] | 15 | #include <base/memory/weak_ptr.h> |
Alex Vakulenko | a3062c5 | 2014-04-21 17:05:51 -0700 | [diff] [blame] | 16 | #include <base/time/time.h> |
Christopher Wiley | 34eae04 | 2015-03-18 10:25:08 -0700 | [diff] [blame] | 17 | #include <base/timer/timer.h> |
Alex Vakulenko | e4879a2 | 2014-08-20 15:47:36 -0700 | [diff] [blame] | 18 | #include <chromeos/data_encoding.h> |
Alex Vakulenko | a8b95bc | 2014-08-27 11:00:57 -0700 | [diff] [blame] | 19 | #include <chromeos/errors/error.h> |
| 20 | #include <chromeos/http/http_transport.h> |
Alex Vakulenko | a3062c5 | 2014-04-21 17:05:51 -0700 | [diff] [blame] | 21 | |
Christopher Wiley | 583d64b | 2015-03-24 14:30:17 -0700 | [diff] [blame] | 22 | #include "buffet/buffet_config.h" |
Alex Vakulenko | 9ea5a32 | 2015-04-17 15:35:34 -0700 | [diff] [blame] | 23 | #include "buffet/commands/command_manager.h" |
Alex Vakulenko | eedf3be | 2015-05-13 17:52:02 -0700 | [diff] [blame] | 24 | #include "buffet/notification/notification_channel.h" |
| 25 | #include "buffet/notification/notification_delegate.h" |
Alex Vakulenko | d05725f | 2015-05-27 15:48:19 -0700 | [diff] [blame] | 26 | #include "buffet/notification/pull_channel.h" |
Christopher Wiley | c900e48 | 2015-02-15 15:42:04 -0800 | [diff] [blame] | 27 | #include "buffet/registration_status.h" |
Christopher Wiley | 006e94e | 2014-05-02 13:44:48 -0700 | [diff] [blame] | 28 | #include "buffet/storage_interface.h" |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 29 | |
| 30 | namespace base { |
Vitaly Buka | 6ca3ad6 | 2015-03-11 17:03:23 -0700 | [diff] [blame] | 31 | class DictionaryValue; |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 32 | } // namespace base |
| 33 | |
Anton Muhin | 332df19 | 2014-11-22 05:59:14 +0400 | [diff] [blame] | 34 | namespace chromeos { |
| 35 | class KeyValueStore; |
| 36 | } // namespace chromeos |
| 37 | |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 38 | namespace buffet { |
| 39 | |
Alex Vakulenko | 07216fe | 2014-09-19 15:31:09 -0700 | [diff] [blame] | 40 | class StateManager; |
Alex Vakulenko | 1f30a62 | 2014-07-23 11:13:15 -0700 | [diff] [blame] | 41 | |
Alex Vakulenko | b3aac25 | 2014-05-07 17:35:24 -0700 | [diff] [blame] | 42 | extern const char kErrorDomainOAuth2[]; |
| 43 | extern const char kErrorDomainGCD[]; |
| 44 | extern const char kErrorDomainGCDServer[]; |
Alex Vakulenko | b3aac25 | 2014-05-07 17:35:24 -0700 | [diff] [blame] | 45 | |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 46 | // The DeviceRegistrationInfo class represents device registration information. |
Alex Vakulenko | eedf3be | 2015-05-13 17:52:02 -0700 | [diff] [blame] | 47 | class DeviceRegistrationInfo : public NotificationDelegate { |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 48 | public: |
Vitaly Buka | ee7a3af | 2015-05-14 16:57:23 -0700 | [diff] [blame] | 49 | using OnRegistrationChangedCallback = |
| 50 | base::Callback<void(RegistrationStatus)>; |
Christopher Wiley | e0fdeee | 2015-02-07 18:29:32 -0800 | [diff] [blame] | 51 | |
Alex Vakulenko | cca2093 | 2014-08-20 17:35:12 -0700 | [diff] [blame] | 52 | DeviceRegistrationInfo( |
| 53 | const std::shared_ptr<CommandManager>& command_manager, |
Anton Muhin | b831562 | 2014-11-20 03:17:05 +0400 | [diff] [blame] | 54 | const std::shared_ptr<StateManager>& state_manager, |
Vitaly Buka | 867b088 | 2015-04-16 10:03:26 -0700 | [diff] [blame] | 55 | std::unique_ptr<BuffetConfig> config, |
Alex Vakulenko | cca2093 | 2014-08-20 17:35:12 -0700 | [diff] [blame] | 56 | const std::shared_ptr<chromeos::http::Transport>& transport, |
Vitaly Buka | ee7a3af | 2015-05-14 16:57:23 -0700 | [diff] [blame] | 57 | bool notifications_enabled); |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 58 | |
Alex Vakulenko | 534a312 | 2015-05-22 15:48:53 -0700 | [diff] [blame] | 59 | ~DeviceRegistrationInfo() override; |
Anton Muhin | 332df19 | 2014-11-22 05:59:14 +0400 | [diff] [blame] | 60 | |
Vitaly Buka | ee7a3af | 2015-05-14 16:57:23 -0700 | [diff] [blame] | 61 | // Add callback to listen for changes in registration status. |
| 62 | void AddOnRegistrationChangedCallback( |
| 63 | const OnRegistrationChangedCallback& callback); |
Christopher Wiley | c900e48 | 2015-02-15 15:42:04 -0800 | [diff] [blame] | 64 | |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 65 | // Returns the authorization HTTP header that can be used to talk |
| 66 | // to GCD server for authenticated device communication. |
Alex Vakulenko | 8e34d39 | 2014-04-29 11:02:56 -0700 | [diff] [blame] | 67 | // Make sure ValidateAndRefreshAccessToken() is called before this call. |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 68 | std::pair<std::string, std::string> GetAuthorizationHeader() const; |
| 69 | |
| 70 | // Returns the GCD service request URL. If |subpath| is specified, it is |
| 71 | // appended to the base URL which is normally |
| 72 | // https://www.googleapis.com/clouddevices/v1/". |
| 73 | // If |params| are specified, each key-value pair is formatted using |
Alex Vakulenko | e4879a2 | 2014-08-20 15:47:36 -0700 | [diff] [blame] | 74 | // chromeos::data_encoding::WebParamsEncode() and appended to URL as a query |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 75 | // string. |
| 76 | // So, calling: |
| 77 | // GetServiceURL("ticket", {{"key","apiKey"}}) |
| 78 | // will return something like: |
| 79 | // https://www.googleapis.com/clouddevices/v1/ticket?key=apiKey |
| 80 | std::string GetServiceURL( |
| 81 | const std::string& subpath = {}, |
Alex Vakulenko | e4879a2 | 2014-08-20 15:47:36 -0700 | [diff] [blame] | 82 | const chromeos::data_encoding::WebParamList& params = {}) const; |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 83 | |
| 84 | // Returns a service URL to access the registered device on GCD server. |
| 85 | // The base URL used to construct the full URL looks like this: |
| 86 | // https://www.googleapis.com/clouddevices/v1/devices/<device_id>/ |
| 87 | std::string GetDeviceURL( |
| 88 | const std::string& subpath = {}, |
Alex Vakulenko | e4879a2 | 2014-08-20 15:47:36 -0700 | [diff] [blame] | 89 | const chromeos::data_encoding::WebParamList& params = {}) const; |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 90 | |
| 91 | // Similar to GetServiceURL, GetOAuthURL() returns a URL of OAuth 2.0 server. |
| 92 | // The base URL used is https://accounts.google.com/o/oauth2/. |
| 93 | std::string GetOAuthURL( |
| 94 | const std::string& subpath = {}, |
Alex Vakulenko | e4879a2 | 2014-08-20 15:47:36 -0700 | [diff] [blame] | 95 | const chromeos::data_encoding::WebParamList& params = {}) const; |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 96 | |
Alex Vakulenko | 6e3c30e | 2015-05-21 17:39:25 -0700 | [diff] [blame] | 97 | // Starts GCD device if credentials available. |
Vitaly Buka | ee7a3af | 2015-05-14 16:57:23 -0700 | [diff] [blame] | 98 | void Start(); |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 99 | |
Nathan Bullock | 5e022a3 | 2015-04-08 15:13:07 -0400 | [diff] [blame] | 100 | // Checks whether we have credentials generated during registration. |
| 101 | bool HaveRegistrationCredentials(chromeos::ErrorPtr* error); |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 102 | |
| 103 | // Gets the full device description JSON object, or nullptr if |
| 104 | // the device is not registered or communication failure. |
Vitaly Buka | 6ca3ad6 | 2015-03-11 17:03:23 -0700 | [diff] [blame] | 105 | std::unique_ptr<base::DictionaryValue> GetDeviceInfo( |
| 106 | chromeos::ErrorPtr* error); |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 107 | |
Anton Muhin | beb1c5b | 2014-10-16 18:59:57 +0400 | [diff] [blame] | 108 | // Registers the device. |
Anton Muhin | beb1c5b | 2014-10-16 18:59:57 +0400 | [diff] [blame] | 109 | // Returns a device ID on success. |
Vitaly Buka | cad2e33 | 2015-05-14 23:33:32 -0700 | [diff] [blame] | 110 | std::string RegisterDevice(const std::string& ticket_id, |
Vitaly Buka | ee7a3af | 2015-05-14 16:57:23 -0700 | [diff] [blame] | 111 | chromeos::ErrorPtr* error); |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 112 | |
Anton Muhin | 5975552 | 2014-11-05 21:30:12 +0400 | [diff] [blame] | 113 | // Updates a command. |
Anton Muhin | 5975552 | 2014-11-05 21:30:12 +0400 | [diff] [blame] | 114 | void UpdateCommand(const std::string& command_id, |
Alex Vakulenko | b211c10 | 2015-04-21 11:43:23 -0700 | [diff] [blame] | 115 | const base::DictionaryValue& command_patch, |
| 116 | const base::Closure& on_success, |
| 117 | const base::Closure& on_error); |
Anton Muhin | 5975552 | 2014-11-05 21:30:12 +0400 | [diff] [blame] | 118 | |
Vitaly Buka | fa94706 | 2015-04-17 00:41:31 -0700 | [diff] [blame] | 119 | // Updates basic device information. |
| 120 | bool UpdateDeviceInfo(const std::string& name, |
| 121 | const std::string& description, |
| 122 | const std::string& location, |
| 123 | chromeos::ErrorPtr* error); |
| 124 | |
Vitaly Buka | 2f7efdb | 2015-05-27 16:00:21 -0700 | [diff] [blame] | 125 | // Updates base device config. |
| 126 | bool UpdateBaseConfig(const std::string& anonymous_access_role, |
| 127 | bool local_discovery_enabled, |
| 128 | bool local_pairing_enabled, |
| 129 | chromeos::ErrorPtr* error); |
| 130 | |
Vitaly Buka | ff81db6 | 2015-05-14 21:25:45 -0700 | [diff] [blame] | 131 | // Updates GCD service configuration. Usually for testing. |
| 132 | bool UpdateServiceConfig(const std::string& client_id, |
| 133 | const std::string& client_secret, |
| 134 | const std::string& api_key, |
| 135 | const std::string& oauth_url, |
| 136 | const std::string& service_url, |
| 137 | chromeos::ErrorPtr* error); |
| 138 | |
Vitaly Buka | 72410b2 | 2015-05-13 13:48:59 -0700 | [diff] [blame] | 139 | const BuffetConfig& GetConfig() const { return *config_; } |
| 140 | |
| 141 | base::WeakPtr<DeviceRegistrationInfo> AsWeakPtr() { |
| 142 | return weak_factory_.GetWeakPtr(); |
| 143 | } |
| 144 | |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 145 | private: |
Vitaly Buka | ee7a3af | 2015-05-14 16:57:23 -0700 | [diff] [blame] | 146 | friend class DeviceRegistrationInfoTest; |
| 147 | |
Christopher Wiley | ba983c8 | 2015-03-05 16:32:23 -0800 | [diff] [blame] | 148 | // Cause DeviceRegistrationInfo to attempt to StartDevice on its own later. |
| 149 | void ScheduleStartDevice(const base::TimeDelta& later); |
| 150 | |
| 151 | // Starts device execution. |
| 152 | // Device will do required start up chores and then start to listen |
| 153 | // to new commands. |
| 154 | // TODO(antonm): Consider moving into some other class. |
| 155 | void StartDevice(chromeos::ErrorPtr* error, |
| 156 | const base::TimeDelta& retry_delay); |
| 157 | |
Nathan Bullock | 5e022a3 | 2015-04-08 15:13:07 -0400 | [diff] [blame] | 158 | // Checks for the valid device registration as well as refreshes |
| 159 | // the device access token, if available. |
| 160 | bool CheckRegistration(chromeos::ErrorPtr* error); |
Christopher Wiley | c900e48 | 2015-02-15 15:42:04 -0800 | [diff] [blame] | 161 | |
Nathan Bullock | 5e022a3 | 2015-04-08 15:13:07 -0400 | [diff] [blame] | 162 | // If we currently have an access token and it doesn't look like it |
David Zeuthen | 390d191 | 2015-03-03 14:54:48 -0500 | [diff] [blame] | 163 | // has expired yet, returns true immediately. Otherwise calls |
| 164 | // RefreshAccessToken(). |
| 165 | bool MaybeRefreshAccessToken(chromeos::ErrorPtr* error); |
| 166 | |
| 167 | // Forcibly refreshes the access token. |
| 168 | bool RefreshAccessToken(chromeos::ErrorPtr* error); |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 169 | |
Alex Vakulenko | 6b028ae | 2015-05-29 09:38:59 -0700 | [diff] [blame] | 170 | // Calls RefreshAccessToken(nullptr). Used as a closure. |
| 171 | void RunRefreshAccessToken(); |
| 172 | |
Nathan Bullock | 24d189f | 2015-02-26 13:09:18 -0500 | [diff] [blame] | 173 | // Parse the OAuth response, and sets registration status to |
| 174 | // kInvalidCredentials if our registration is no longer valid. |
| 175 | std::unique_ptr<base::DictionaryValue> ParseOAuthResponse( |
Alex Vakulenko | f71cca6 | 2015-04-09 15:17:17 -0700 | [diff] [blame] | 176 | chromeos::http::Response* response, chromeos::ErrorPtr* error); |
Nathan Bullock | 24d189f | 2015-02-26 13:09:18 -0500 | [diff] [blame] | 177 | |
Alex Vakulenko | eedf3be | 2015-05-13 17:52:02 -0700 | [diff] [blame] | 178 | // This attempts to open a notification channel. The channel needs to be |
Nathan Bullock | bea9113 | 2015-02-19 09:13:33 -0500 | [diff] [blame] | 179 | // restarted anytime the access_token is refreshed. |
Alex Vakulenko | eedf3be | 2015-05-13 17:52:02 -0700 | [diff] [blame] | 180 | void StartNotificationChannel(); |
Nathan Bullock | bea9113 | 2015-02-19 09:13:33 -0500 | [diff] [blame] | 181 | |
Anton Muhin | ac661ab | 2014-10-03 20:29:48 +0400 | [diff] [blame] | 182 | using CloudRequestCallback = |
| 183 | base::Callback<void(const base::DictionaryValue&)>; |
Alex Vakulenko | 0357c03 | 2015-01-06 16:32:31 -0800 | [diff] [blame] | 184 | using CloudRequestErrorCallback = |
| 185 | base::Callback<void(const chromeos::Error* error)>; |
Anton Muhin | ac661ab | 2014-10-03 20:29:48 +0400 | [diff] [blame] | 186 | |
| 187 | // Do a HTTPS request to cloud services. |
| 188 | // Handles many cases like reauthorization, 5xx HTTP response codes |
| 189 | // and device removal. It is a recommended way to do cloud API |
| 190 | // requests. |
| 191 | // TODO(antonm): Consider moving into some other class. |
| 192 | void DoCloudRequest( |
Anton Muhin | 233d2ee | 2014-10-22 15:16:24 +0400 | [diff] [blame] | 193 | const std::string& method, |
Anton Muhin | ac661ab | 2014-10-03 20:29:48 +0400 | [diff] [blame] | 194 | const std::string& url, |
| 195 | const base::DictionaryValue* body, |
Alex Vakulenko | 0357c03 | 2015-01-06 16:32:31 -0800 | [diff] [blame] | 196 | const CloudRequestCallback& success_callback, |
| 197 | const CloudRequestErrorCallback& error_callback); |
Anton Muhin | ac661ab | 2014-10-03 20:29:48 +0400 | [diff] [blame] | 198 | |
Christopher Wiley | ba983c8 | 2015-03-05 16:32:23 -0800 | [diff] [blame] | 199 | void UpdateDeviceResource(const base::Closure& on_success, |
| 200 | const CloudRequestErrorCallback& on_failure); |
Anton Muhin | c635c59 | 2014-10-28 21:48:08 +0400 | [diff] [blame] | 201 | |
Christopher Wiley | ba983c8 | 2015-03-05 16:32:23 -0800 | [diff] [blame] | 202 | void FetchCommands( |
| 203 | const base::Callback<void(const base::ListValue&)>& on_success, |
| 204 | const CloudRequestErrorCallback& on_failure); |
Anton Muhin | c635c59 | 2014-10-28 21:48:08 +0400 | [diff] [blame] | 205 | |
Alex Vakulenko | d05725f | 2015-05-27 15:48:19 -0700 | [diff] [blame] | 206 | // Processes the command list that is fetched from the server on connection. |
| 207 | // Aborts commands which are in transitional states and publishes queued |
| 208 | // commands which are queued. |
| 209 | void ProcessInitialCommandList(const base::ListValue& commands); |
Anton Muhin | c635c59 | 2014-10-28 21:48:08 +0400 | [diff] [blame] | 210 | |
Anton Muhin | d07e206 | 2014-10-27 10:53:29 +0400 | [diff] [blame] | 211 | void PublishCommands(const base::ListValue& commands); |
Alex Vakulenko | 6e3c30e | 2015-05-21 17:39:25 -0700 | [diff] [blame] | 212 | void PublishCommand(const base::DictionaryValue& command); |
Anton Muhin | d07e206 | 2014-10-27 10:53:29 +0400 | [diff] [blame] | 213 | |
Anton Muhin | b831562 | 2014-11-20 03:17:05 +0400 | [diff] [blame] | 214 | void PublishStateUpdates(); |
| 215 | |
Alex Vakulenko | d1978d3 | 2015-04-29 17:33:26 -0700 | [diff] [blame] | 216 | // If unrecoverable error occurred (e.g. error parsing command instance), |
| 217 | // notify the server that the command is aborted by the device. |
| 218 | void NotifyCommandAborted(const std::string& command_id, |
| 219 | chromeos::ErrorPtr error); |
| 220 | |
| 221 | // When NotifyCommandAborted() fails, RetryNotifyCommandAborted() schedules |
| 222 | // a retry attempt. |
| 223 | void RetryNotifyCommandAborted(const std::string& command_id, |
| 224 | chromeos::ErrorPtr error); |
| 225 | |
Alex Vakulenko | 9ea5a32 | 2015-04-17 15:35:34 -0700 | [diff] [blame] | 226 | // Builds Cloud API devices collection REST resource which matches |
Anton Muhin | d8d3216 | 2014-10-02 20:37:00 +0400 | [diff] [blame] | 227 | // current state of the device including command definitions |
| 228 | // for all supported commands and current device state. |
| 229 | std::unique_ptr<base::DictionaryValue> BuildDeviceResource( |
| 230 | chromeos::ErrorPtr* error); |
| 231 | |
Christopher Wiley | c900e48 | 2015-02-15 15:42:04 -0800 | [diff] [blame] | 232 | void SetRegistrationStatus(RegistrationStatus new_status); |
Vitaly Buka | 620bd7e | 2015-03-16 01:07:01 -0700 | [diff] [blame] | 233 | void SetDeviceId(const std::string& device_id); |
Christopher Wiley | c900e48 | 2015-02-15 15:42:04 -0800 | [diff] [blame] | 234 | |
Alex Vakulenko | 9ea5a32 | 2015-04-17 15:35:34 -0700 | [diff] [blame] | 235 | // Callback called when command definitions are changed to re-publish new CDD. |
| 236 | void OnCommandDefsChanged(); |
Vitaly Buka | c903d28 | 2015-05-26 17:03:08 -0700 | [diff] [blame] | 237 | void OnStateChanged(); |
Alex Vakulenko | 9ea5a32 | 2015-04-17 15:35:34 -0700 | [diff] [blame] | 238 | |
Alex Vakulenko | eedf3be | 2015-05-13 17:52:02 -0700 | [diff] [blame] | 239 | // Overrides from NotificationDelegate |
| 240 | void OnConnected(const std::string& channel_name) override; |
| 241 | void OnDisconnected() override; |
| 242 | void OnPermanentFailure() override; |
Alex Vakulenko | 6e3c30e | 2015-05-21 17:39:25 -0700 | [diff] [blame] | 243 | void OnCommandCreated(const base::DictionaryValue& command) override; |
Alex Vakulenko | eedf3be | 2015-05-13 17:52:02 -0700 | [diff] [blame] | 244 | |
Nathan Bullock | d9e0bcd | 2015-02-11 11:36:39 -0500 | [diff] [blame] | 245 | // Transient data |
| 246 | std::string access_token_; |
| 247 | base::Time access_token_expiration_; |
Nathan Bullock | d9e0bcd | 2015-02-11 11:36:39 -0500 | [diff] [blame] | 248 | |
Alex Vakulenko | a3062c5 | 2014-04-21 17:05:51 -0700 | [diff] [blame] | 249 | // HTTP transport used for communications. |
Alex Vakulenko | cca2093 | 2014-08-20 17:35:12 -0700 | [diff] [blame] | 250 | std::shared_ptr<chromeos::http::Transport> transport_; |
Alex Vakulenko | 1f30a62 | 2014-07-23 11:13:15 -0700 | [diff] [blame] | 251 | // Global command manager. |
| 252 | std::shared_ptr<CommandManager> command_manager_; |
Alex Vakulenko | 07216fe | 2014-09-19 15:31:09 -0700 | [diff] [blame] | 253 | // Device state manager. |
Anton Muhin | b831562 | 2014-11-20 03:17:05 +0400 | [diff] [blame] | 254 | std::shared_ptr<StateManager> state_manager_; |
Alex Vakulenko | a3062c5 | 2014-04-21 17:05:51 -0700 | [diff] [blame] | 255 | |
Vitaly Buka | 867b088 | 2015-04-16 10:03:26 -0700 | [diff] [blame] | 256 | std::unique_ptr<BuffetConfig> config_; |
Anton Muhin | 332df19 | 2014-11-22 05:59:14 +0400 | [diff] [blame] | 257 | |
Alex Vakulenko | eedf3be | 2015-05-13 17:52:02 -0700 | [diff] [blame] | 258 | const bool notifications_enabled_; |
| 259 | std::unique_ptr<NotificationChannel> primary_notification_channel_; |
Alex Vakulenko | d05725f | 2015-05-27 15:48:19 -0700 | [diff] [blame] | 260 | std::unique_ptr<PullChannel> pull_channel_; |
| 261 | NotificationChannel* current_notification_channel_{nullptr}; |
Alex Vakulenko | 6b028ae | 2015-05-29 09:38:59 -0700 | [diff] [blame] | 262 | bool notification_channel_starting_{false}; |
Christopher Wiley | d732bd0 | 2015-04-07 11:11:18 -0700 | [diff] [blame] | 263 | |
Christopher Wiley | c900e48 | 2015-02-15 15:42:04 -0800 | [diff] [blame] | 264 | // Tracks our current registration status. |
Vitaly Buka | b055f15 | 2015-03-12 13:41:43 -0700 | [diff] [blame] | 265 | RegistrationStatus registration_status_{RegistrationStatus::kUnconfigured}; |
Christopher Wiley | c900e48 | 2015-02-15 15:42:04 -0800 | [diff] [blame] | 266 | |
Vitaly Buka | ee7a3af | 2015-05-14 16:57:23 -0700 | [diff] [blame] | 267 | std::vector<OnRegistrationChangedCallback> on_registration_changed_; |
| 268 | |
Christopher Wiley | cd41966 | 2015-02-06 17:51:43 -0800 | [diff] [blame] | 269 | base::WeakPtrFactory<DeviceRegistrationInfo> weak_factory_{this}; |
Alex Vakulenko | 3cb466c | 2014-04-15 11:36:32 -0700 | [diff] [blame] | 270 | DISALLOW_COPY_AND_ASSIGN(DeviceRegistrationInfo); |
| 271 | }; |
| 272 | |
| 273 | } // namespace buffet |
| 274 | |
Alex Vakulenko | b3aac25 | 2014-05-07 17:35:24 -0700 | [diff] [blame] | 275 | #endif // BUFFET_DEVICE_REGISTRATION_INFO_H_ |