cros_network_config.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224
  1. // Copyright 2019 The Chromium 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. #ifndef CHROMEOS_SERVICES_NETWORK_CONFIG_CROS_NETWORK_CONFIG_H_
  5. #define CHROMEOS_SERVICES_NETWORK_CONFIG_CROS_NETWORK_CONFIG_H_
  6. #include "base/containers/flat_map.h"
  7. #include "base/memory/weak_ptr.h"
  8. #include "chromeos/ash/components/network/cellular_inhibitor.h"
  9. // TODO(https://crbug.com/1164001): move to forward declaration
  10. #include "chromeos/ash/components/network/managed_network_configuration_handler.h"
  11. #include "chromeos/ash/components/network/network_certificate_handler.h"
  12. // TODO(https://crbug.com/1164001): move to forward declaration
  13. #include "chromeos/ash/components/network/network_connection_handler.h"
  14. // TODO(https://crbug.com/1164001): move to forward declaration
  15. #include "chromeos/ash/components/network/network_device_handler.h"
  16. #include "chromeos/ash/components/network/network_policy_observer.h"
  17. #include "chromeos/ash/components/network/network_profile_handler.h"
  18. // TODO(https://crbug.com/1164001): move to forward declaration
  19. #include "chromeos/ash/components/network/network_state_handler.h"
  20. #include "chromeos/ash/components/network/network_state_handler_observer.h"
  21. #include "chromeos/services/network_config/public/mojom/cros_network_config.mojom.h"
  22. #include "mojo/public/cpp/bindings/pending_receiver.h"
  23. #include "mojo/public/cpp/bindings/pending_remote.h"
  24. #include "mojo/public/cpp/bindings/receiver_set.h"
  25. #include "mojo/public/cpp/bindings/remote_set.h"
  26. namespace ash {
  27. class CellularESimProfileHandler;
  28. }
  29. namespace chromeos {
  30. namespace network_config {
  31. class CrosNetworkConfig : public mojom::CrosNetworkConfig,
  32. public NetworkStateHandlerObserver,
  33. public NetworkCertificateHandler::Observer,
  34. public CellularInhibitor::Observer,
  35. public NetworkPolicyObserver {
  36. public:
  37. // Constructs an instance of CrosNetworkConfig with default network subsystem
  38. // dependencies appropriate for a production environment.
  39. CrosNetworkConfig();
  40. // Constructs an instance of CrosNetworkConfig with specific network subsystem
  41. // dependencies.
  42. CrosNetworkConfig(
  43. NetworkStateHandler* network_state_handler,
  44. NetworkDeviceHandler* network_device_handler,
  45. CellularInhibitor* cellular_inhibitor,
  46. ash::CellularESimProfileHandler* cellular_esim_profile_handler,
  47. ManagedNetworkConfigurationHandler* network_configuration_handler,
  48. NetworkConnectionHandler* network_connection_handler,
  49. NetworkCertificateHandler* network_certificate_handler,
  50. NetworkProfileHandler* network_profile_handler);
  51. CrosNetworkConfig(const CrosNetworkConfig&) = delete;
  52. CrosNetworkConfig& operator=(const CrosNetworkConfig&) = delete;
  53. ~CrosNetworkConfig() override;
  54. void BindReceiver(mojo::PendingReceiver<mojom::CrosNetworkConfig> receiver);
  55. // mojom::CrosNetworkConfig
  56. void AddObserver(
  57. mojo::PendingRemote<mojom::CrosNetworkConfigObserver> observer) override;
  58. void GetNetworkState(const std::string& guid,
  59. GetNetworkStateCallback callback) override;
  60. void GetNetworkStateList(mojom::NetworkFilterPtr filter,
  61. GetNetworkStateListCallback callback) override;
  62. void GetDeviceStateList(GetDeviceStateListCallback callback) override;
  63. void GetManagedProperties(const std::string& guid,
  64. GetManagedPropertiesCallback callback) override;
  65. void SetProperties(const std::string& guid,
  66. mojom::ConfigPropertiesPtr properties,
  67. SetPropertiesCallback callback) override;
  68. void ConfigureNetwork(mojom::ConfigPropertiesPtr properties,
  69. bool shared,
  70. ConfigureNetworkCallback callback) override;
  71. void ForgetNetwork(const std::string& guid,
  72. ForgetNetworkCallback callback) override;
  73. void SetNetworkTypeEnabledState(
  74. mojom::NetworkType type,
  75. bool enabled,
  76. SetNetworkTypeEnabledStateCallback callback) override;
  77. void SetCellularSimState(mojom::CellularSimStatePtr sim_state,
  78. SetCellularSimStateCallback callback) override;
  79. void SelectCellularMobileNetwork(
  80. const std::string& guid,
  81. const std::string& network_id,
  82. SelectCellularMobileNetworkCallback callback) override;
  83. void RequestNetworkScan(mojom::NetworkType type) override;
  84. void GetGlobalPolicy(GetGlobalPolicyCallback callback) override;
  85. void StartConnect(const std::string& guid,
  86. StartConnectCallback callback) override;
  87. void StartDisconnect(const std::string& guid,
  88. StartDisconnectCallback callback) override;
  89. void SetVpnProviders(std::vector<mojom::VpnProviderPtr> providers) override;
  90. void GetVpnProviders(GetVpnProvidersCallback callback) override;
  91. void GetNetworkCertificates(GetNetworkCertificatesCallback callback) override;
  92. void GetAlwaysOnVpn(GetAlwaysOnVpnCallback callback) override;
  93. void SetAlwaysOnVpn(mojom::AlwaysOnVpnPropertiesPtr properties) override;
  94. void GetSupportedVpnTypes(GetSupportedVpnTypesCallback callback) override;
  95. void RequestTrafficCounters(const std::string& guid,
  96. RequestTrafficCountersCallback callback) override;
  97. void ResetTrafficCounters(const std::string& guid) override;
  98. void SetTrafficCountersAutoReset(
  99. const std::string& guid,
  100. bool auto_reset,
  101. mojom::UInt32ValuePtr day,
  102. SetTrafficCountersAutoResetCallback callback) override;
  103. // static
  104. static mojom::TrafficCounterSource GetTrafficCounterEnumForTesting(
  105. const std::string& source);
  106. private:
  107. void OnGetManagedProperties(GetManagedPropertiesCallback callback,
  108. std::string guid,
  109. const std::string& service_path,
  110. absl::optional<base::Value> properties,
  111. absl::optional<std::string> error);
  112. void OnGetManagedPropertiesEap(GetManagedPropertiesCallback callback,
  113. mojom::ManagedPropertiesPtr managed_properties,
  114. const std::string& service_path,
  115. absl::optional<base::Value> properties,
  116. absl::optional<std::string> error);
  117. void SetPropertiesSuccess(int callback_id);
  118. void SetPropertiesConfigureSuccess(int callback_id,
  119. const std::string& service_path,
  120. const std::string& guid);
  121. void SetPropertiesFailure(const std::string& guid,
  122. int callback_id,
  123. const std::string& error_name);
  124. void ConfigureNetworkSuccess(int callback_id,
  125. const std::string& service_path,
  126. const std::string& guid);
  127. void ConfigureNetworkFailure(int callback_id, const std::string& error_name);
  128. void ForgetNetworkSuccess(int callback_id);
  129. void ForgetNetworkFailure(const std::string& guid,
  130. int callback_id,
  131. const std::string& error_name);
  132. void SetCellularSimStateSuccess(int callback_id);
  133. void SetCellularSimStateFailure(int callback_id,
  134. const std::string& error_name);
  135. void SelectCellularMobileNetworkSuccess(int callback_id);
  136. void SelectCellularMobileNetworkFailure(int callback_id,
  137. const std::string& error_name);
  138. void UpdateCustomAPNList(const NetworkState* network,
  139. const mojom::ConfigProperties* properties);
  140. std::vector<mojom::ApnPropertiesPtr> GetCustomAPNList(
  141. const std::string& guid);
  142. void StartConnectSuccess(int callback_id);
  143. void StartConnectFailure(int callback_id, const std::string& error_name);
  144. void StartDisconnectSuccess(int callback_id);
  145. void StartDisconnectFailure(int callback_id, const std::string& error_name);
  146. void OnGetAlwaysOnVpn(GetAlwaysOnVpnCallback callback,
  147. std::string mode,
  148. std::string service_path);
  149. void OnGetSupportedVpnTypes(GetSupportedVpnTypesCallback callback,
  150. absl::optional<base::Value> manager_properties);
  151. void PopulateTrafficCounters(RequestTrafficCountersCallback callback,
  152. absl::optional<base::Value> traffic_counters);
  153. // NetworkStateHandlerObserver:
  154. void NetworkListChanged() override;
  155. void DeviceListChanged() override;
  156. void ActiveNetworksChanged(
  157. const std::vector<const NetworkState*>& active_networks) override;
  158. void NetworkPropertiesUpdated(const NetworkState* network) override;
  159. void DevicePropertiesUpdated(const DeviceState* device) override;
  160. void OnShuttingDown() override;
  161. void ScanStarted(const DeviceState* device) override;
  162. void ScanCompleted(const DeviceState* device) override;
  163. void NetworkConnectionStateChanged(const NetworkState* network) override;
  164. // NetworkCertificateHandler::Observer:
  165. void OnCertificatesChanged() override;
  166. // CellularInhibitor::Observer:
  167. void OnInhibitStateChanged() override;
  168. // NetworkPolicyObserver:
  169. void PoliciesApplied(const std::string& userhash) override;
  170. void OnManagedNetworkConfigurationHandlerShuttingDown() override;
  171. const std::string& GetServicePathFromGuid(const std::string& guid);
  172. NetworkStateHandler* network_state_handler_; // Unowned
  173. NetworkDeviceHandler* network_device_handler_; // Unowned
  174. CellularInhibitor* cellular_inhibitor_; // Unowned
  175. ash::CellularESimProfileHandler* cellular_esim_profile_handler_; // Unowned
  176. ManagedNetworkConfigurationHandler*
  177. network_configuration_handler_; // Unowned
  178. NetworkConnectionHandler* network_connection_handler_; // Unowned
  179. NetworkCertificateHandler* network_certificate_handler_; // Unowned
  180. NetworkProfileHandler* network_profile_handler_; // Unowned
  181. mojo::RemoteSet<mojom::CrosNetworkConfigObserver> observers_;
  182. mojo::ReceiverSet<mojom::CrosNetworkConfig> receivers_;
  183. int callback_id_ = 1;
  184. base::flat_map<int, SetPropertiesCallback> set_properties_callbacks_;
  185. base::flat_map<int, ConfigureNetworkCallback> configure_network_callbacks_;
  186. base::flat_map<int, ForgetNetworkCallback> forget_network_callbacks_;
  187. base::flat_map<int, SetCellularSimStateCallback>
  188. set_cellular_sim_state_callbacks_;
  189. base::flat_map<int, SelectCellularMobileNetworkCallback>
  190. select_cellular_mobile_network_callbacks_;
  191. base::flat_map<int, StartConnectCallback> start_connect_callbacks_;
  192. base::flat_map<int, StartDisconnectCallback> start_disconnect_callbacks_;
  193. std::vector<mojom::VpnProviderPtr> vpn_providers_;
  194. base::WeakPtrFactory<CrosNetworkConfig> weak_factory_{this};
  195. };
  196. } // namespace network_config
  197. } // namespace chromeos
  198. #endif // CHROMEOS_SERVICES_NETWORK_CONFIG_CROS_NETWORK_CONFIG_H_