• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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