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_LOCAL_DISCOVERY_WIFI_WIFI_MANAGER_H_ 6 #define CHROME_BROWSER_LOCAL_DISCOVERY_WIFI_WIFI_MANAGER_H_ 7 8 #include <string> 9 #include <vector> 10 11 #include "base/callback.h" 12 #include "base/memory/scoped_ptr.h" 13 #include "components/wifi/network_properties.h" 14 15 namespace local_discovery { 16 17 namespace wifi { 18 19 // Convenience definition for users of this header, since ::wifi and 20 // local_discovery::wifi may conflict. 21 using ::wifi::NetworkProperties; 22 23 typedef std::vector<NetworkProperties> NetworkPropertiesList; 24 25 // Credentials for WiFi networks. Currently only supports PSK-based networks. 26 // TODO(noamsml): Support for 802.11X and other authentication methods. 27 struct WifiCredentials { 28 static WifiCredentials FromPSK(const std::string& psk); 29 30 std::string psk; 31 }; 32 33 class WifiManagerFactory; 34 35 // Observer for the network list. Classes may implement this interface and call 36 // |AddNetworkListObserver| to be notified of changes to the visible network 37 // list. 38 class NetworkListObserver { 39 public: ~NetworkListObserver()40 virtual ~NetworkListObserver() {} 41 42 virtual void OnNetworkListChanged(const NetworkPropertiesList& ssid) = 0; 43 }; 44 45 // A class to manage listing, connecting to, and getting the credentials of WiFi 46 // networks. 47 class WifiManager { 48 public: 49 typedef base::Callback<void(const NetworkPropertiesList& ssids)> 50 SSIDListCallback; 51 typedef base::Callback<void(bool success)> SuccessCallback; 52 typedef base::Callback< 53 void(bool success, const std::string& ssid, const std::string& password)> 54 CredentialsCallback; 55 ~WifiManager()56 virtual ~WifiManager() {} 57 58 static scoped_ptr<WifiManager> Create(); 59 60 static void SetFactory(WifiManagerFactory* factory); 61 62 // Start the wifi manager. This must be called before any other method calls. 63 virtual void Start() = 0; 64 65 // Get the list of visible SSIDs in the vicinity. This does not initiate a 66 // scan, but merely gets the list of networks from the system. 67 virtual void GetSSIDList(const SSIDListCallback& callback) = 0; 68 69 // Request a scan for networks nearby. 70 virtual void RequestScan() = 0; 71 72 // Configure and connect to a network with a given SSID and 73 // credentials. |callback| will be called once the network is connected or 74 // after it has failed to connect. 75 virtual void ConfigureAndConnectNetwork(const std::string& ssid, 76 const WifiCredentials& credentials, 77 const SuccessCallback& callback) = 0; 78 79 // Connect to a configured network with a given network ID. |callback| will be 80 // called once the network is connected or after it has failed to connect. 81 virtual void ConnectToNetworkByID(const std::string& internal_id, 82 const SuccessCallback& callback) = 0; 83 84 // Reequest the credentials for a network with a given network ID from the 85 // system. |callback| will be called with credentials if they can be 86 // retrieved. Depending on platform, this may bring up a confirmation dialog 87 // or password prompt. 88 virtual void RequestNetworkCredentials( 89 const std::string& internal_id, 90 const CredentialsCallback& callback) = 0; 91 92 // Add a network list observer. This observer will be notified every time the 93 // network list changes. 94 virtual void AddNetworkListObserver(NetworkListObserver* observer) = 0; 95 96 // Remove a network list observer. 97 virtual void RemoveNetworkListObserver(NetworkListObserver* observer) = 0; 98 99 private: 100 static scoped_ptr<WifiManager> CreateDefault(); 101 }; 102 103 class WifiManagerFactory { 104 public: ~WifiManagerFactory()105 virtual ~WifiManagerFactory() {} 106 107 virtual scoped_ptr<WifiManager> CreateWifiManager() = 0; 108 }; 109 110 } // namespace wifi 111 112 } // namespace local_discovery 113 114 #endif // CHROME_BROWSER_LOCAL_DISCOVERY_WIFI_WIFI_MANAGER_H_ 115