OLD | NEW |
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ | 5 #ifndef CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ |
6 #define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ | 6 #define CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ |
7 | 7 |
8 #include <string> | 8 #include <string> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
119 | 119 |
120 std::string device_path; | 120 std::string device_path; |
121 IPConfigType type; | 121 IPConfigType type; |
122 std::string address; | 122 std::string address; |
123 std::string netmask; | 123 std::string netmask; |
124 std::string gateway; | 124 std::string gateway; |
125 std::string name_servers; | 125 std::string name_servers; |
126 }; | 126 }; |
127 typedef std::vector<NetworkIPConfig> NetworkIPConfigVector; | 127 typedef std::vector<NetworkIPConfig> NetworkIPConfigVector; |
128 | 128 |
129 // This class handles the interaction with the ChromeOS network library APIs. | 129 class NetworkLibrary { |
130 // Classes can add themselves as observers. Users can get an instance of this | |
131 // library class like this: NetworkLibrary::Get() | |
132 class NetworkLibrary : public URLRequestJobTracker::JobObserver { | |
133 public: | 130 public: |
134 class Observer { | 131 class Observer { |
135 public: | 132 public: |
136 // A bitfield mask for traffic types. | 133 // A bitfield mask for traffic types. |
137 enum TrafficTypes { | 134 enum TrafficTypes { |
138 TRAFFIC_DOWNLOAD = 0x1, | 135 TRAFFIC_DOWNLOAD = 0x1, |
139 TRAFFIC_UPLOAD = 0x2, | 136 TRAFFIC_UPLOAD = 0x2, |
140 } TrafficTypeMasks; | 137 } TrafficTypeMasks; |
141 | 138 |
142 // Called when the network has changed. (wifi networks, and ethernet) | 139 // Called when the network has changed. (wifi networks, and ethernet) |
143 virtual void NetworkChanged(NetworkLibrary* obj) = 0; | 140 virtual void NetworkChanged(NetworkLibrary* obj) = 0; |
144 | 141 |
145 // Called when network traffic has been detected. | 142 // Called when network traffic has been detected. |
146 // Takes a bitfield of TrafficTypeMasks. | 143 // Takes a bitfield of TrafficTypeMasks. |
147 virtual void NetworkTraffic(NetworkLibrary* obj, int traffic_type) = 0; | 144 virtual void NetworkTraffic(NetworkLibrary* obj, int traffic_type) = 0; |
148 }; | 145 }; |
149 | 146 |
150 // This gets the singleton NetworkLibrary | 147 virtual ~NetworkLibrary() {} |
151 static NetworkLibrary* Get(); | 148 virtual void AddObserver(Observer* observer) = 0; |
| 149 virtual void RemoveObserver(Observer* observer) = 0; |
| 150 |
| 151 virtual const EthernetNetwork& ethernet_network() const = 0; |
| 152 virtual bool ethernet_connecting() const = 0; |
| 153 virtual bool ethernet_connected() const = 0; |
| 154 |
| 155 virtual const std::string& wifi_ssid() const = 0; |
| 156 virtual bool wifi_connecting() const = 0; |
| 157 virtual bool wifi_connected() const = 0; |
| 158 virtual int wifi_strength() const = 0; |
| 159 |
| 160 virtual const std::string& cellular_name() const = 0; |
| 161 virtual bool cellular_connecting() const = 0; |
| 162 virtual bool cellular_connected() const = 0; |
| 163 virtual int cellular_strength() const = 0; |
| 164 |
| 165 // Return true if any network is currently connected. |
| 166 virtual bool Connected() const = 0; |
| 167 |
| 168 // Return true if any network is currently connecting. |
| 169 virtual bool Connecting() const = 0; |
| 170 |
| 171 // Returns the current IP address if connected. If not, returns empty string. |
| 172 virtual const std::string& IPAddress() const = 0; |
| 173 |
| 174 // Returns the current list of wifi networks. |
| 175 virtual const WifiNetworkVector& wifi_networks() const = 0; |
| 176 |
| 177 // Returns the current list of cellular networks. |
| 178 virtual const CellularNetworkVector& cellular_networks() const = 0; |
| 179 |
| 180 // Request a scan for new wifi networks. |
| 181 virtual void RequestWifiScan() = 0; |
| 182 |
| 183 // Connect to the specified wireless network with password. |
| 184 virtual void ConnectToWifiNetwork(WifiNetwork network, |
| 185 const string16& password) = 0; |
| 186 |
| 187 // Connect to the specified wifi ssid with password. |
| 188 virtual void ConnectToWifiNetwork(const string16& ssid, |
| 189 const string16& password) = 0; |
| 190 |
| 191 // Connect to the specified cellular network. |
| 192 virtual void ConnectToCellularNetwork(CellularNetwork network) = 0; |
| 193 |
| 194 virtual bool ethernet_available() const = 0; |
| 195 virtual bool wifi_available() const = 0; |
| 196 virtual bool cellular_available() const = 0; |
| 197 |
| 198 virtual bool ethernet_enabled() const = 0; |
| 199 virtual bool wifi_enabled() const = 0; |
| 200 virtual bool cellular_enabled() const = 0; |
| 201 |
| 202 virtual bool offline_mode() const = 0; |
| 203 |
| 204 // Enables/disables the ethernet network device. |
| 205 virtual void EnableEthernetNetworkDevice(bool enable) = 0; |
| 206 |
| 207 // Enables/disables the wifi network device. |
| 208 virtual void EnableWifiNetworkDevice(bool enable) = 0; |
| 209 |
| 210 // Enables/disables the cellular network device. |
| 211 virtual void EnableCellularNetworkDevice(bool enable) = 0; |
| 212 |
| 213 // Enables/disables offline mode. |
| 214 virtual void EnableOfflineMode(bool enable) = 0; |
| 215 |
| 216 // Fetches IP configs for a given device_path |
| 217 virtual NetworkIPConfigVector GetIPConfigs( |
| 218 const std::string& device_path) = 0; |
| 219 }; |
| 220 |
| 221 // This class handles the interaction with the ChromeOS network library APIs. |
| 222 // Classes can add themselves as observers. Users can get an instance of this |
| 223 // library class like this: NetworkLibrary::Get() |
| 224 class NetworkLibraryImpl : public NetworkLibrary, |
| 225 public URLRequestJobTracker::JobObserver { |
| 226 public: |
| 227 NetworkLibraryImpl(); |
| 228 virtual ~NetworkLibraryImpl(); |
152 | 229 |
153 // URLRequestJobTracker::JobObserver methods (called on the IO thread): | 230 // URLRequestJobTracker::JobObserver methods (called on the IO thread): |
154 virtual void OnJobAdded(URLRequestJob* job); | 231 virtual void OnJobAdded(URLRequestJob* job); |
155 virtual void OnJobRemoved(URLRequestJob* job); | 232 virtual void OnJobRemoved(URLRequestJob* job); |
156 virtual void OnJobDone(URLRequestJob* job, const URLRequestStatus& status); | 233 virtual void OnJobDone(URLRequestJob* job, const URLRequestStatus& status); |
157 virtual void OnJobRedirect(URLRequestJob* job, const GURL& location, | 234 virtual void OnJobRedirect(URLRequestJob* job, const GURL& location, |
158 int status_code); | 235 int status_code); |
159 virtual void OnBytesRead(URLRequestJob* job, int byte_count); | 236 virtual void OnBytesRead(URLRequestJob* job, int byte_count); |
160 | 237 |
161 void AddObserver(Observer* observer); | 238 // NetworkLibrary overrides. |
162 void RemoveObserver(Observer* observer); | 239 virtual void AddObserver(Observer* observer); |
| 240 virtual void RemoveObserver(Observer* observer); |
163 | 241 |
164 const EthernetNetwork& ethernet_network() const { return ethernet_; } | 242 virtual const EthernetNetwork& ethernet_network() const { return ethernet_; } |
165 bool ethernet_connecting() const { return ethernet_.connecting; } | 243 virtual bool ethernet_connecting() const { return ethernet_.connecting; } |
166 bool ethernet_connected() const { return ethernet_.connected; } | 244 virtual bool ethernet_connected() const { return ethernet_.connected; } |
167 | 245 |
168 const std::string& wifi_ssid() const { return wifi_.ssid; } | 246 virtual const std::string& wifi_ssid() const { return wifi_.ssid; } |
169 bool wifi_connecting() const { return wifi_.connecting; } | 247 virtual bool wifi_connecting() const { return wifi_.connecting; } |
170 bool wifi_connected() const { return wifi_.connected; } | 248 virtual bool wifi_connected() const { return wifi_.connected; } |
171 int wifi_strength() const { return wifi_.strength; } | 249 virtual int wifi_strength() const { return wifi_.strength; } |
172 | 250 |
173 const std::string& cellular_name() const { return cellular_.name; } | 251 virtual const std::string& cellular_name() const { return cellular_.name; } |
174 bool cellular_connecting() const { return cellular_.connecting; } | 252 virtual bool cellular_connecting() const { return cellular_.connecting; } |
175 bool cellular_connected() const { return cellular_.connected; } | 253 virtual bool cellular_connected() const { return cellular_.connected; } |
176 int cellular_strength() const { return cellular_.strength; } | 254 virtual int cellular_strength() const { return cellular_.strength; } |
177 | 255 |
178 // Return true if any network is currently connected. | 256 // Return true if any network is currently connected. |
179 bool Connected() const; | 257 virtual bool Connected() const; |
180 | 258 |
181 // Return true if any network is currently connecting. | 259 // Return true if any network is currently connecting. |
182 bool Connecting() const; | 260 virtual bool Connecting() const; |
183 | 261 |
184 // Returns the current IP address if connected. If not, returns empty string. | 262 // Returns the current IP address if connected. If not, returns empty string. |
185 const std::string& IPAddress() const; | 263 virtual const std::string& IPAddress() const; |
186 | 264 |
187 // Returns the current list of wifi networks. | 265 // Returns the current list of wifi networks. |
188 const WifiNetworkVector& wifi_networks() const { return wifi_networks_; } | 266 virtual const WifiNetworkVector& wifi_networks() const { |
| 267 return wifi_networks_; |
| 268 } |
189 | 269 |
190 // Returns the current list of cellular networks. | 270 // Returns the current list of cellular networks. |
191 const CellularNetworkVector& cellular_networks() const { | 271 virtual const CellularNetworkVector& cellular_networks() const { |
192 return cellular_networks_; | 272 return cellular_networks_; |
193 } | 273 } |
194 | 274 |
195 // Request a scan for new wifi networks. | 275 // Request a scan for new wifi networks. |
196 void RequestWifiScan(); | 276 virtual void RequestWifiScan(); |
197 | 277 |
198 // Connect to the specified wireless network with password. | 278 // Connect to the specified wireless network with password. |
199 void ConnectToWifiNetwork(WifiNetwork network, const string16& password); | 279 virtual void ConnectToWifiNetwork(WifiNetwork network, |
| 280 const string16& password); |
200 | 281 |
201 // Connect to the specified wifi ssid with password. | 282 // Connect to the specified wifi ssid with password. |
202 void ConnectToWifiNetwork(const string16& ssid, const string16& password); | 283 virtual void ConnectToWifiNetwork(const string16& ssid, |
| 284 const string16& password); |
203 | 285 |
204 // Connect to the specified cellular network. | 286 // Connect to the specified cellular network. |
205 void ConnectToCellularNetwork(CellularNetwork network); | 287 virtual void ConnectToCellularNetwork(CellularNetwork network); |
206 | 288 |
207 bool ethernet_available() const { | 289 virtual bool ethernet_available() const { |
208 return available_devices_ & (1 << TYPE_ETHERNET); } | 290 return available_devices_ & (1 << TYPE_ETHERNET); } |
209 bool wifi_available() const { | 291 virtual bool wifi_available() const { |
210 return available_devices_ & (1 << TYPE_WIFI); } | 292 return available_devices_ & (1 << TYPE_WIFI); } |
211 bool cellular_available() const { | 293 virtual bool cellular_available() const { |
212 return available_devices_ & (1 << TYPE_CELLULAR); } | 294 return available_devices_ & (1 << TYPE_CELLULAR); } |
213 | 295 |
214 bool ethernet_enabled() const { | 296 virtual bool ethernet_enabled() const { |
215 return enabled_devices_ & (1 << TYPE_ETHERNET); } | 297 return enabled_devices_ & (1 << TYPE_ETHERNET); } |
216 bool wifi_enabled() const { | 298 virtual bool wifi_enabled() const { |
217 return enabled_devices_ & (1 << TYPE_WIFI); } | 299 return enabled_devices_ & (1 << TYPE_WIFI); } |
218 bool cellular_enabled() const { | 300 virtual bool cellular_enabled() const { |
219 return enabled_devices_ & (1 << TYPE_CELLULAR); } | 301 return enabled_devices_ & (1 << TYPE_CELLULAR); } |
220 | 302 |
221 bool offline_mode() const { return offline_mode_; } | 303 virtual bool offline_mode() const { return offline_mode_; } |
222 | 304 |
223 // Enables/disables the ethernet network device. | 305 // Enables/disables the ethernet network device. |
224 void EnableEthernetNetworkDevice(bool enable); | 306 virtual void EnableEthernetNetworkDevice(bool enable); |
225 | 307 |
226 // Enables/disables the wifi network device. | 308 // Enables/disables the wifi network device. |
227 void EnableWifiNetworkDevice(bool enable); | 309 virtual void EnableWifiNetworkDevice(bool enable); |
228 | 310 |
229 // Enables/disables the cellular network device. | 311 // Enables/disables the cellular network device. |
230 void EnableCellularNetworkDevice(bool enable); | 312 virtual void EnableCellularNetworkDevice(bool enable); |
231 | 313 |
232 // Enables/disables offline mode. | 314 // Enables/disables offline mode. |
233 void EnableOfflineMode(bool enable); | 315 virtual void EnableOfflineMode(bool enable); |
234 | 316 |
235 // Fetches IP configs for a given device_path | 317 // Fetches IP configs for a given device_path |
236 NetworkIPConfigVector GetIPConfigs(const std::string& device_path); | 318 virtual NetworkIPConfigVector GetIPConfigs(const std::string& device_path); |
237 | 319 |
238 private: | 320 private: |
239 friend struct DefaultSingletonTraits<NetworkLibrary>; | |
240 | |
241 NetworkLibrary(); | |
242 ~NetworkLibrary(); | |
243 | 321 |
244 // This method is called when there's a change in network status. | 322 // This method is called when there's a change in network status. |
245 // This method is called on a background thread. | 323 // This method is called on a background thread. |
246 static void NetworkStatusChangedHandler(void* object); | 324 static void NetworkStatusChangedHandler(void* object); |
247 | 325 |
248 // This parses SystemInfo and creates a WifiNetworkVector of wifi networks | 326 // This parses SystemInfo and creates a WifiNetworkVector of wifi networks |
249 // and a CellularNetworkVector of cellular networks. | 327 // and a CellularNetworkVector of cellular networks. |
250 // It also sets the ethernet connecting/connected status. | 328 // It also sets the ethernet connecting/connected status. |
251 static void ParseSystem(SystemInfo* system, | 329 static void ParseSystem(SystemInfo* system, |
252 EthernetNetwork* ethernet, | 330 EthernetNetwork* ethernet, |
(...skipping 27 matching lines...) Expand all Loading... |
280 // This will notify all obeservers on the UI thread. | 358 // This will notify all obeservers on the UI thread. |
281 void NotifyObservers(); | 359 void NotifyObservers(); |
282 | 360 |
283 ObserverList<Observer> observers_; | 361 ObserverList<Observer> observers_; |
284 | 362 |
285 // The amount of time to wait between each NetworkTraffic notifications. | 363 // The amount of time to wait between each NetworkTraffic notifications. |
286 static const int kNetworkTrafficeTimerSecs; | 364 static const int kNetworkTrafficeTimerSecs; |
287 | 365 |
288 // Timer for sending NetworkTraffic notification every | 366 // Timer for sending NetworkTraffic notification every |
289 // kNetworkTrafficeTimerSecs seconds. | 367 // kNetworkTrafficeTimerSecs seconds. |
290 base::OneShotTimer<NetworkLibrary> timer_; | 368 base::OneShotTimer<NetworkLibraryImpl> timer_; |
291 | 369 |
292 // The current traffic type that will be sent out for the next NetworkTraffic | 370 // The current traffic type that will be sent out for the next NetworkTraffic |
293 // notification. This is a bitfield of TrafficTypeMasks. | 371 // notification. This is a bitfield of TrafficTypeMasks. |
294 int traffic_type_; | 372 int traffic_type_; |
295 | 373 |
296 // The network status connection for monitoring network status changes. | 374 // The network status connection for monitoring network status changes. |
297 MonitorNetworkConnection network_status_connection_; | 375 MonitorNetworkConnection network_status_connection_; |
298 | 376 |
299 // The ethernet network. | 377 // The ethernet network. |
300 EthernetNetwork ethernet_; | 378 EthernetNetwork ethernet_; |
(...skipping 14 matching lines...) Expand all Loading... |
315 int available_devices_; | 393 int available_devices_; |
316 | 394 |
317 // The current enabled network devices. Bitwise flag of ConnectionTypes. | 395 // The current enabled network devices. Bitwise flag of ConnectionTypes. |
318 int enabled_devices_; | 396 int enabled_devices_; |
319 | 397 |
320 // The current connected network devices. Bitwise flag of ConnectionTypes. | 398 // The current connected network devices. Bitwise flag of ConnectionTypes. |
321 int connected_devices_; | 399 int connected_devices_; |
322 | 400 |
323 bool offline_mode_; | 401 bool offline_mode_; |
324 | 402 |
325 DISALLOW_COPY_AND_ASSIGN(NetworkLibrary); | 403 DISALLOW_COPY_AND_ASSIGN(NetworkLibraryImpl); |
326 }; | 404 }; |
327 | 405 |
328 } // namespace chromeos | 406 } // namespace chromeos |
329 | 407 |
330 #endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ | 408 #endif // CHROME_BROWSER_CHROMEOS_CROS_NETWORK_LIBRARY_H_ |
OLD | NEW |