Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(38)

Unified Diff: net/base/address_tracker_linux.h

Issue 899573002: Add WiFi SSID getter to NetworkChangeNotifier. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix build Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/android/network_change_notifier_android.cc ('k') | net/base/address_tracker_linux.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/base/address_tracker_linux.h
diff --git a/net/base/address_tracker_linux.h b/net/base/address_tracker_linux.h
index 29cb8c0437d20c841c0c51b630570e97d14fdcd0..cf430a92dd684c4df8006f2fa0f987d77274fc7c 100644
--- a/net/base/address_tracker_linux.h
+++ b/net/base/address_tracker_linux.h
@@ -12,6 +12,7 @@
#undef net
#include <map>
+#include <string>
#include "base/basictypes.h"
#include "base/callback.h"
@@ -34,6 +35,9 @@ class NET_EXPORT_PRIVATE AddressTrackerLinux :
public:
typedef std::map<IPAddressNumber, struct ifaddrmsg> AddressMap;
+ // A function that returns the SSID of an interface given the interface name.
+ typedef std::string (*GetInterfaceSSIDFunction)(const std::string& ifname);
+
// Non-tracking version constructor: it takes a snapshot of the
// current system configuration. Once Init() returns, the
// configuration is available through GetOnlineLinks() and
@@ -65,6 +69,11 @@ class NET_EXPORT_PRIVATE AddressTrackerLinux :
// Safe to call from any thread, but will block until Init() has completed.
NetworkChangeNotifier::ConnectionType GetCurrentConnectionType();
+ // Implementation of NetworkChangeNotifierLinux::GetCurrentWiFiSSID().
+ // Safe to call from any thread. Doesn't wait for initialization to complete,
+ // so may return empty string.
+ std::string GetCurrentWiFiSSID();
+
// Returns the name for the interface with interface index |interface_index|.
// |buf| should be a pointer to an array of size IFNAMSIZ. The returned
// pointer will point to |buf|. This function acts like if_indextoname which
@@ -72,6 +81,15 @@ class NET_EXPORT_PRIVATE AddressTrackerLinux :
// with exclusively talking to the kernel and not the C library.
static char* GetInterfaceName(int interface_index, char* buf);
+ // Gets the current Wi-Fi SSID based on |interfaces|. Returns
+ // empty string if there are no interfaces or if two interfaces have different
+ // connection types. Otherwise returns the SSID of all interfaces if they have
+ // the same SSID. This is adapted from
+ // NetworkChangeNotifier::ConnectionTypeFromInterfaceList.
+ static std::string ConnectionSSIDFromInterfaceList(
+ const NetworkInterfaceList& interfaces,
+ GetInterfaceSSIDFunction get_interface_ssid);
+
private:
friend class AddressTrackerLinuxTest;
@@ -125,8 +143,9 @@ class NET_EXPORT_PRIVATE AddressTrackerLinux :
// Does |interface_index| refer to a tunnel interface?
bool IsTunnelInterface(int interface_index) const;
- // Updates current_connection_type_ based on the network list.
- void UpdateCurrentConnectionType();
+ // Updates current_connection_type_ and current_wifi_ssid_ based on the
+ // network list.
+ void UpdateCurrentConnectionTypeAndSSID();
// Gets the name of an interface given the interface index |interface_index|.
// May return empty string if it fails but should not return NULL. This is
@@ -151,6 +170,10 @@ class NET_EXPORT_PRIVATE AddressTrackerLinux :
bool connection_type_initialized_;
base::ConditionVariable connection_type_initialized_cv_;
NetworkChangeNotifier::ConnectionType current_connection_type_;
+
+ base::Lock wifi_ssid_lock_;
+ std::string current_wifi_ssid_;
+
bool tracking_;
// Used to verify single-threaded access in non-tracking mode.
« no previous file with comments | « net/android/network_change_notifier_android.cc ('k') | net/base/address_tracker_linux.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698