146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// found in the LICENSE file. 446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#ifndef CHROME_BROWSER_LOCAL_DISCOVERY_WIFI_WIFI_MANAGER_H_ 646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#define CHROME_BROWSER_LOCAL_DISCOVERY_WIFI_WIFI_MANAGER_H_ 746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <string> 946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include <vector> 1046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/callback.h" 1246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "base/memory/scoped_ptr.h" 1346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#include "components/wifi/network_properties.h" 1446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace local_discovery { 1646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)namespace wifi { 1846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 1946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Convenience definition for users of this header, since ::wifi and 2046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// local_discovery::wifi may conflict. 2146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)using ::wifi::NetworkProperties; 2246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)typedef std::vector<NetworkProperties> NetworkPropertiesList; 2446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 2546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Credentials for WiFi networks. Currently only supports PSK-based networks. 2646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// TODO(noamsml): Support for 802.11X and other authentication methods. 2746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)struct WifiCredentials { 2846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static WifiCredentials FromPSK(const std::string& psk); 2946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) std::string psk; 3146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 3246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class WifiManagerFactory; 3446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 3546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// Observer for the network list. Classes may implement this interface and call 3646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// |AddNetworkListObserver| to be notified of changes to the visible network 3746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// list. 3846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class NetworkListObserver { 3946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 4046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~NetworkListObserver() {} 4146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void OnNetworkListChanged(const NetworkPropertiesList& ssid) = 0; 4346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 4446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 4546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// A class to manage listing, connecting to, and getting the credentials of WiFi 4646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)// networks. 4746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class WifiManager { 4846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 4946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef base::Callback<void(const NetworkPropertiesList& ssids)> 5046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) SSIDListCallback; 5146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef base::Callback<void(bool success)> SuccessCallback; 5246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) typedef base::Callback< 5346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) void(bool success, const std::string& ssid, const std::string& password)> 5446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) CredentialsCallback; 5546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~WifiManager() {} 5746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 5846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static scoped_ptr<WifiManager> Create(); 5946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static void SetFactory(WifiManagerFactory* factory); 6146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Start the wifi manager. This must be called before any other method calls. 6346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void Start() = 0; 6446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Get the list of visible SSIDs in the vicinity. This does not initiate a 6646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // scan, but merely gets the list of networks from the system. 6746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void GetSSIDList(const SSIDListCallback& callback) = 0; 6846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 6946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Request a scan for networks nearby. 7046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void RequestScan() = 0; 7146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Configure and connect to a network with a given SSID and 7346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // credentials. |callback| will be called once the network is connected or 7446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // after it has failed to connect. 7546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void ConfigureAndConnectNetwork(const std::string& ssid, 7646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const WifiCredentials& credentials, 7746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const SuccessCallback& callback) = 0; 7846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 7946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Connect to a configured network with a given network ID. |callback| will be 8046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // called once the network is connected or after it has failed to connect. 815f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual void ConnectToNetworkByID(const std::string& ssid, 8246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const SuccessCallback& callback) = 0; 8346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 8446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Reequest the credentials for a network with a given network ID from the 8546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // system. |callback| will be called with credentials if they can be 8646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // retrieved. Depending on platform, this may bring up a confirmation dialog 8746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // or password prompt. 8846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void RequestNetworkCredentials( 8946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const std::string& internal_id, 9046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) const CredentialsCallback& callback) = 0; 9146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Add a network list observer. This observer will be notified every time the 9346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // network list changes. 9446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void AddNetworkListObserver(NetworkListObserver* observer) = 0; 9546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) // Remove a network list observer. 9746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual void RemoveNetworkListObserver(NetworkListObserver* observer) = 0; 9846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 9946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) private: 10046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) static scoped_ptr<WifiManager> CreateDefault(); 10146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 10246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)class WifiManagerFactory { 10446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) public: 10546d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual ~WifiManagerFactory() {} 10646d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 10746d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) virtual scoped_ptr<WifiManager> CreateWifiManager() = 0; 10846d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)}; 10946d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11046d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace wifi 11146d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11246d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)} // namespace local_discovery 11346d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles) 11446d4c2bc3267f3f028f39e7e311b0f89aba2e4fdTorne (Richard Coles)#endif // CHROME_BROWSER_LOCAL_DISCOVERY_WIFI_WIFI_MANAGER_H_ 115