| OLD | NEW |
| (Empty) |
| 1 // Copyright 2014 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 | |
| 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_LINU
X_H_ | |
| 6 #define CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_LINU
X_H_ | |
| 7 | |
| 8 #include <string> | |
| 9 #include <vector> | |
| 10 | |
| 11 #include "base/memory/linked_ptr.h" | |
| 12 #include "base/message_loop/message_loop.h" | |
| 13 #include "base/threading/thread.h" | |
| 14 #include "chrome/browser/extensions/api/networking_private/networking_private_de
legate.h" | |
| 15 #include "components/keyed_service/core/keyed_service.h" | |
| 16 | |
| 17 namespace context { | |
| 18 class BrowserContext; | |
| 19 } | |
| 20 | |
| 21 namespace dbus { | |
| 22 class Bus; | |
| 23 class ObjectPath; | |
| 24 class ObjectProxy; | |
| 25 class Response; | |
| 26 }; | |
| 27 | |
| 28 namespace extensions { | |
| 29 | |
| 30 // Linux NetworkingPrivateDelegate implementation. | |
| 31 class NetworkingPrivateLinux : public NetworkingPrivateDelegate { | |
| 32 public: | |
| 33 typedef std::map<base::string16, linked_ptr<base::DictionaryValue>> | |
| 34 NetworkMap; | |
| 35 | |
| 36 typedef std::vector<std::string> GuidList; | |
| 37 | |
| 38 NetworkingPrivateLinux(content::BrowserContext* browser_context, | |
| 39 scoped_ptr<VerifyDelegate> verify_delegate); | |
| 40 | |
| 41 // NetworkingPrivateDelegate | |
| 42 void GetProperties(const std::string& guid, | |
| 43 const DictionaryCallback& success_callback, | |
| 44 const FailureCallback& failure_callback) override; | |
| 45 void GetManagedProperties(const std::string& guid, | |
| 46 const DictionaryCallback& success_callback, | |
| 47 const FailureCallback& failure_callback) override; | |
| 48 void GetState(const std::string& guid, | |
| 49 const DictionaryCallback& success_callback, | |
| 50 const FailureCallback& failure_callback) override; | |
| 51 void SetProperties(const std::string& guid, | |
| 52 scoped_ptr<base::DictionaryValue> properties, | |
| 53 const VoidCallback& success_callback, | |
| 54 const FailureCallback& failure_callback) override; | |
| 55 void CreateNetwork(bool shared, | |
| 56 scoped_ptr<base::DictionaryValue> properties, | |
| 57 const StringCallback& success_callback, | |
| 58 const FailureCallback& failure_callback) override; | |
| 59 void GetNetworks(const std::string& network_type, | |
| 60 bool configured_only, | |
| 61 bool visible_only, | |
| 62 int limit, | |
| 63 const NetworkListCallback& success_callback, | |
| 64 const FailureCallback& failure_callback) override; | |
| 65 void StartConnect(const std::string& guid, | |
| 66 const VoidCallback& success_callback, | |
| 67 const FailureCallback& failure_callback) override; | |
| 68 void StartDisconnect(const std::string& guid, | |
| 69 const VoidCallback& success_callback, | |
| 70 const FailureCallback& failure_callback) override; | |
| 71 void SetWifiTDLSEnabledState( | |
| 72 const std::string& ip_or_mac_address, | |
| 73 bool enabled, | |
| 74 const StringCallback& success_callback, | |
| 75 const FailureCallback& failure_callback) override; | |
| 76 void GetWifiTDLSStatus(const std::string& ip_or_mac_address, | |
| 77 const StringCallback& success_callback, | |
| 78 const FailureCallback& failure_callback) override; | |
| 79 void GetCaptivePortalStatus(const std::string& guid, | |
| 80 const StringCallback& success_callback, | |
| 81 const FailureCallback& failure_callback) override; | |
| 82 scoped_ptr<base::ListValue> GetEnabledNetworkTypes() override; | |
| 83 bool EnableNetworkType(const std::string& type) override; | |
| 84 bool DisableNetworkType(const std::string& type) override; | |
| 85 bool RequestScan() override; | |
| 86 void AddObserver(NetworkingPrivateDelegateObserver* observer) override; | |
| 87 void RemoveObserver(NetworkingPrivateDelegateObserver* observer) override; | |
| 88 | |
| 89 private: | |
| 90 ~NetworkingPrivateLinux() override; | |
| 91 | |
| 92 // https://developer.gnome.org/NetworkManager/unstable/spec.html#type-NM_DEVIC
E_TYPE | |
| 93 enum DeviceType { | |
| 94 NM_DEVICE_TYPE_UNKNOWN = 0, | |
| 95 NM_DEVICE_TYPE_ETHERNET = 1, | |
| 96 NM_DEVICE_TYPE_WIFI = 2 | |
| 97 }; | |
| 98 | |
| 99 // https://developer.gnome.org/NetworkManager/unstable/spec.html#type-NM_802_1
1_AP_SEC | |
| 100 enum WirelessSecurityFlags { | |
| 101 NM_802_11_AP_SEC_NONE = 0x0, | |
| 102 NM_802_11_AP_SEC_PAIR_WEP40 = 0x1, | |
| 103 NM_802_11_AP_SEC_PAIR_WEP104 = 0x2, | |
| 104 NM_802_11_AP_SEC_PAIR_TKIP = 0x4, | |
| 105 NM_802_11_AP_SEC_PAIR_CCMP = 0x8, | |
| 106 NM_802_11_AP_SEC_GROUP_WEP40 = 0x10, | |
| 107 NM_802_11_AP_SEC_GROUP_WEP104 = 0x20, | |
| 108 NM_802_11_AP_SEC_GROUP_TKIP = 0x40, | |
| 109 NM_802_11_AP_SEC_GROUP_CCMP = 0x80, | |
| 110 NM_802_11_AP_SEC_KEY_MGMT_PSK = 0x100, | |
| 111 NM_802_11_AP_SEC_KEY_MGMT_802_1X = 0x200 | |
| 112 }; | |
| 113 | |
| 114 // Initializes the DBus instance and the proxy object to the network manager. | |
| 115 // Must be called on |dbus_thread_|. | |
| 116 void Initialize(); | |
| 117 | |
| 118 // Enumerates all WiFi adapters and scans for access points on each. | |
| 119 // Results are appended into the provided |network_map|. | |
| 120 // Must be called on |dbus_thread_|. | |
| 121 void GetAllWiFiAccessPoints(bool configured_only, | |
| 122 bool visible_only, | |
| 123 int limit, | |
| 124 NetworkMap* network_map); | |
| 125 | |
| 126 // Helper function for handling a scan request. This function acts similarly | |
| 127 // to the public GetNetworks to get visible networks and fire the | |
| 128 // OnNetworkListChanged event, however no callbacks are called. | |
| 129 bool GetNetworksForScanRequest(); | |
| 130 | |
| 131 // Initiates the connection to the network. | |
| 132 // Must be called on |dbus_thread_|. | |
| 133 void ConnectToNetwork(const std::string& guid, std::string* error); | |
| 134 | |
| 135 // Initiates disconnection from the specified network. | |
| 136 // Must be called on |dbus_thread_| | |
| 137 void DisconnectFromNetwork(const std::string& guid, std::string* error); | |
| 138 | |
| 139 // Checks whether the current thread is the DBus thread. If not, DCHECK will | |
| 140 // fail. | |
| 141 void AssertOnDBusThread(); | |
| 142 | |
| 143 // Verifies that NetworkManager interfaces are initialized. | |
| 144 // Returns true if NetworkManager is initialized, otherwise returns false | |
| 145 // and the API call will fail with |kErrorNotSupported|. | |
| 146 bool CheckNetworkManagerSupported(const FailureCallback& failure_callback); | |
| 147 | |
| 148 // Gets all network devices on the system. | |
| 149 // Returns false if there is an error getting the device paths. | |
| 150 bool GetNetworkDevices(std::vector<dbus::ObjectPath>* device_paths); | |
| 151 | |
| 152 // Returns the DeviceType (eg. WiFi, ethernet). corresponding to the | |
| 153 // |device_path|. | |
| 154 DeviceType GetDeviceType(const dbus::ObjectPath& device_path); | |
| 155 | |
| 156 // Helper function to enumerate WiFi networks. Takes a path to a Wireless | |
| 157 // device, scans that device and appends networks to network_list. | |
| 158 // Returns false if there is an error getting the access points visible | |
| 159 // to the |device_path|. | |
| 160 bool AddAccessPointsFromDevice(const dbus::ObjectPath& device_path, | |
| 161 NetworkMap* network_map); | |
| 162 | |
| 163 // Reply callback accepts the map of networks and fires the | |
| 164 // OnNetworkListChanged event and user callbacks. | |
| 165 void OnAccessPointsFound(scoped_ptr<NetworkMap> network_map, | |
| 166 const NetworkListCallback& success_callback, | |
| 167 const FailureCallback& failure_callback); | |
| 168 | |
| 169 // Reply callback accepts the map of networks and fires the | |
| 170 // OnNetworkListChanged event. | |
| 171 void OnAccessPointsFoundViaScan(scoped_ptr<NetworkMap> network_map); | |
| 172 | |
| 173 // Helper function for OnAccessPointsFound and OnAccessPointsFoundViaScan to | |
| 174 // fire the OnNetworkListChangedEvent. | |
| 175 void SendNetworkListChangedEvent(const base::ListValue& network_list); | |
| 176 | |
| 177 // Gets a dictionary of information about the access point. | |
| 178 // Returns false if there is an error getting information about the | |
| 179 // supplied |access_point_path|. | |
| 180 bool GetAccessPointInfo( | |
| 181 const dbus::ObjectPath& access_point_path, | |
| 182 const scoped_ptr<base::DictionaryValue>& access_point_info); | |
| 183 | |
| 184 // Helper function to extract a property from a device. | |
| 185 // Returns the dbus::Response object from calling Get on the supplied | |
| 186 // |property_name|. | |
| 187 scoped_ptr<dbus::Response> GetAccessPointProperty( | |
| 188 dbus::ObjectProxy* access_point_proxy, | |
| 189 const std::string& property_name); | |
| 190 | |
| 191 // If the access_point is not already in the map it is added. Otherwise | |
| 192 // the access point is updated (eg. with the max of the signal | |
| 193 // strength). | |
| 194 void AddOrUpdateAccessPoint(NetworkMap* network_map, | |
| 195 const std::string& network_guid, | |
| 196 scoped_ptr<base::DictionaryValue>& access_point); | |
| 197 | |
| 198 // Maps the WPA security flags to a human readable string. | |
| 199 void MapSecurityFlagsToString(uint32 securityFlags, std::string* security); | |
| 200 | |
| 201 // Gets the connected access point path on the given device. Internally gets | |
| 202 // all active connections then checks if the device matches the requested | |
| 203 // device, then gets the access point associated with the connection. | |
| 204 // Returns false if there is an error getting the connected access point. | |
| 205 bool GetConnectedAccessPoint(dbus::ObjectPath device_path, | |
| 206 dbus::ObjectPath* access_point_path); | |
| 207 | |
| 208 // Given a path to an active connection gets the path to the device | |
| 209 // that the connection belongs to. Returns false if there is an error getting | |
| 210 // the device corresponding to the supplied |connection_path|. | |
| 211 bool GetDeviceOfConnection(dbus::ObjectPath connection_path, | |
| 212 dbus::ObjectPath* device_path); | |
| 213 | |
| 214 // Given a path to an active wireless connection gets the path to the | |
| 215 // access point associated with that connection. | |
| 216 // Returns false if there is an error getting the |access_point_path| | |
| 217 // corresponding to the supplied |connection_path|. | |
| 218 bool GetAccessPointForConnection(dbus::ObjectPath connection_path, | |
| 219 dbus::ObjectPath* access_point_path); | |
| 220 | |
| 221 // Helper method to set the connection state in the |network_map_| and post | |
| 222 // a change event. | |
| 223 bool SetConnectionStateAndPostEvent(const std::string& guid, | |
| 224 const std::string& ssid, | |
| 225 const std::string& connection_state); | |
| 226 | |
| 227 // Helper method to post an OnNetworkChanged event to the UI thread from the | |
| 228 // dbus thread. Used for connection status progress during |StartConnect|. | |
| 229 void PostOnNetworksChangedToUIThread(scoped_ptr<GuidList> guid_list); | |
| 230 | |
| 231 // Helper method to be called from the UI thread and manage ownership of the | |
| 232 // passed vector from the |dbus_thread_|. | |
| 233 void OnNetworksChangedEventTask(scoped_ptr<GuidList> guid_list); | |
| 234 | |
| 235 void GetCachedNetworkProperties(const std::string& guid, | |
| 236 base::DictionaryValue* properties, | |
| 237 std::string* error); | |
| 238 | |
| 239 void OnNetworksChangedEventOnUIThread(const GuidList& network_guids); | |
| 240 | |
| 241 void OnNetworkListChangedEventOnUIThread(const GuidList& network_guids); | |
| 242 | |
| 243 // Browser context. | |
| 244 content::BrowserContext* browser_context_; | |
| 245 // Thread used for DBus actions. | |
| 246 base::Thread dbus_thread_; | |
| 247 // DBus instance. Only access on |dbus_thread_|. | |
| 248 scoped_refptr<dbus::Bus> dbus_; | |
| 249 // Task runner used by the |dbus_| object. | |
| 250 scoped_refptr<base::SequencedTaskRunner> dbus_task_runner_; | |
| 251 // This is owned by |dbus_| object. Only access on |dbus_thread_|. | |
| 252 dbus::ObjectProxy* network_manager_proxy_; | |
| 253 // Holds the current mapping of known networks. Only access on |dbus_thread_|. | |
| 254 scoped_ptr<NetworkMap> network_map_; | |
| 255 // Observers to Network Events. | |
| 256 ObserverList<NetworkingPrivateDelegateObserver> network_events_observers_; | |
| 257 | |
| 258 DISALLOW_COPY_AND_ASSIGN(NetworkingPrivateLinux); | |
| 259 }; | |
| 260 | |
| 261 } // namespace extensions | |
| 262 | |
| 263 #endif // CHROME_BROWSER_EXTENSIONS_API_NETWORKING_PRIVATE_NETWORKING_PRIVATE_L
INUX_H_ | |
| OLD | NEW |