Commit 4770e8a5 authored by meacer's avatar meacer Committed by Commit bot

Add SSID getter to WiFiService.

The SSID is going to be displayed in the captive portal interstitial as such: "The network you are using (Google Guest)..."

BUG=451272

Review URL: https://codereview.chromium.org/880143003

Cr-Commit-Position: refs/heads/master@{#313995}
parent 983206f1
...@@ -189,6 +189,12 @@ void FakeWiFiService::SetEventObservers( ...@@ -189,6 +189,12 @@ void FakeWiFiService::SetEventObservers(
void FakeWiFiService::RequestConnectedNetworkUpdate() { void FakeWiFiService::RequestConnectedNetworkUpdate() {
} }
void FakeWiFiService::GetConnectedNetworkSSID(std::string* ssid,
std::string* error) {
*ssid = "";
*error = "";
}
NetworkList::iterator FakeWiFiService::FindNetwork( NetworkList::iterator FakeWiFiService::FindNetwork(
const std::string& network_guid) { const std::string& network_guid) {
for (NetworkList::iterator it = networks_.begin(); it != networks_.end(); for (NetworkList::iterator it = networks_.begin(); it != networks_.end();
......
...@@ -5,6 +5,8 @@ ...@@ -5,6 +5,8 @@
#ifndef COMPONENTS_WIFI_FAKE_WIFI_SERVICE_H_ #ifndef COMPONENTS_WIFI_FAKE_WIFI_SERVICE_H_
#define COMPONENTS_WIFI_FAKE_WIFI_SERVICE_H_ #define COMPONENTS_WIFI_FAKE_WIFI_SERVICE_H_
#include <string>
#include "base/compiler_specific.h" #include "base/compiler_specific.h"
#include "base/macros.h" #include "base/macros.h"
#include "components/wifi/network_properties.h" #include "components/wifi/network_properties.h"
...@@ -54,6 +56,8 @@ class FakeWiFiService : public WiFiService { ...@@ -54,6 +56,8 @@ class FakeWiFiService : public WiFiService {
const NetworkGuidListCallback& networks_changed_observer, const NetworkGuidListCallback& networks_changed_observer,
const NetworkGuidListCallback& network_list_changed_observer) override; const NetworkGuidListCallback& network_list_changed_observer) override;
void RequestConnectedNetworkUpdate() override; void RequestConnectedNetworkUpdate() override;
void GetConnectedNetworkSSID(std::string* ssid,
std::string* error) override;
private: private:
NetworkList::iterator FindNetwork(const std::string& network_guid); NetworkList::iterator FindNetwork(const std::string& network_guid);
......
...@@ -118,6 +118,10 @@ class WIFI_EXPORT WiFiService { ...@@ -118,6 +118,10 @@ class WIFI_EXPORT WiFiService {
// event on completion. // event on completion.
virtual void RequestConnectedNetworkUpdate() = 0; virtual void RequestConnectedNetworkUpdate() = 0;
// Get the SSID of the currently connected network, if any.
virtual void GetConnectedNetworkSSID(std::string* ssid,
std::string* error) = 0;
protected: protected:
WiFiService() {} WiFiService() {}
......
...@@ -76,6 +76,8 @@ class WiFiServiceMac : public WiFiService { ...@@ -76,6 +76,8 @@ class WiFiServiceMac : public WiFiService {
void RequestConnectedNetworkUpdate() override; void RequestConnectedNetworkUpdate() override;
void GetConnectedNetworkSSID(std::string* ssid, std::string* error) override;
private: private:
// Checks |ns_error| and if is not |nil|, then stores |error_name| // Checks |ns_error| and if is not |nil|, then stores |error_name|
// into |error|. // into |error|.
...@@ -416,6 +418,12 @@ void WiFiServiceMac::RequestConnectedNetworkUpdate() { ...@@ -416,6 +418,12 @@ void WiFiServiceMac::RequestConnectedNetworkUpdate() {
OnWlanObserverNotification(); OnWlanObserverNotification();
} }
void WiFiServiceMac::GetConnectedNetworkSSID(std::string* ssid,
std::string* error) {
*ssid = base::SysNSStringToUTF8([interface_ ssid]);
*error = "";
}
std::string WiFiServiceMac::GetNetworkConnectionState( std::string WiFiServiceMac::GetNetworkConnectionState(
const std::string& network_guid) const { const std::string& network_guid) const {
if (network_guid != GUIDFromSSID([interface_ ssid])) if (network_guid != GUIDFromSSID([interface_ ssid]))
......
...@@ -226,6 +226,9 @@ class WiFiServiceImpl : public WiFiService { ...@@ -226,6 +226,9 @@ class WiFiServiceImpl : public WiFiService {
virtual void RequestConnectedNetworkUpdate() override {} virtual void RequestConnectedNetworkUpdate() override {}
virtual void GetConnectedNetworkSSID(std::string* ssid,
std::string* error) override;
private: private:
typedef int32 EncryptionType; typedef int32 EncryptionType;
enum EncryptionTypeEnum { enum EncryptionTypeEnum {
...@@ -357,6 +360,11 @@ class WiFiServiceImpl : public WiFiService { ...@@ -357,6 +360,11 @@ class WiFiServiceImpl : public WiFiService {
// by interface. Populate |current_properties| on success. // by interface. Populate |current_properties| on success.
DWORD GetCurrentProperties(NetworkProperties* current_properties); DWORD GetCurrentProperties(NetworkProperties* current_properties);
// Get the SSID of the network currently used (connected or in transition)
// by interface. Populate |ssid| on success. This is a stripped down version
// of GetCurrentProperties that doesn't use the BSS list;
DWORD GetCurrentSSID(std::string* ssid);
// Connect to network |network_guid| using previosly stored profile if exists, // Connect to network |network_guid| using previosly stored profile if exists,
// or just network sid. If |frequency| is not |kFrequencyUnknown| then // or just network sid. If |frequency| is not |kFrequencyUnknown| then
// connects only to BSS which uses that frequency and returns // connects only to BSS which uses that frequency and returns
...@@ -806,6 +814,18 @@ void WiFiServiceImpl::SetEventObservers( ...@@ -806,6 +814,18 @@ void WiFiServiceImpl::SetEventObservers(
} }
} }
void WiFiServiceImpl::GetConnectedNetworkSSID(std::string* ssid,
std::string* error) {
DWORD error_code = EnsureInitialized();
if (CheckError(error_code, kErrorWiFiService, error))
return;
std::string current_ssid;
error_code = GetCurrentSSID(&current_ssid);
if (CheckError(error_code, kErrorWiFiService, error))
return;
*ssid = current_ssid;
}
void WiFiServiceImpl::OnWlanNotificationCallback( void WiFiServiceImpl::OnWlanNotificationCallback(
PWLAN_NOTIFICATION_DATA wlan_notification_data, PWLAN_NOTIFICATION_DATA wlan_notification_data,
PVOID context) { PVOID context) {
...@@ -1462,6 +1482,37 @@ DWORD WiFiServiceImpl::GetCurrentProperties(NetworkProperties* properties) { ...@@ -1462,6 +1482,37 @@ DWORD WiFiServiceImpl::GetCurrentProperties(NetworkProperties* properties) {
return error; return error;
} }
DWORD WiFiServiceImpl::GetCurrentSSID(std::string* ssid) {
if (client_ == NULL) {
NOTREACHED();
return ERROR_NOINTERFACE;
}
DWORD error = ERROR_SUCCESS;
DWORD data_size = 0;
PWLAN_CONNECTION_ATTRIBUTES wlan_connection_attributes = NULL;
error = WlanQueryInterface_function_(
client_,
&interface_guid_,
wlan_intf_opcode_current_connection,
NULL,
&data_size,
reinterpret_cast<PVOID*>(&wlan_connection_attributes),
NULL);
if (error == ERROR_SUCCESS &&
wlan_connection_attributes != NULL) {
WLAN_ASSOCIATION_ATTRIBUTES& connected_wlan =
wlan_connection_attributes->wlanAssociationAttributes;
*ssid = GUIDFromSSID(connected_wlan.dot11Ssid);
}
// Clean up.
if (wlan_connection_attributes != NULL)
WlanFreeMemory_function_(wlan_connection_attributes);
return error;
}
Frequency WiFiServiceImpl::GetFrequencyToConnect( Frequency WiFiServiceImpl::GetFrequencyToConnect(
const std::string& network_guid) const { const std::string& network_guid) const {
// Check whether desired frequency is set in |connect_properties_|. // Check whether desired frequency is set in |connect_properties_|.
......
...@@ -82,19 +82,20 @@ class WiFiTest { ...@@ -82,19 +82,20 @@ class WiFiTest {
WiFiTest::Result WiFiTest::Main(int argc, const char* argv[]) { WiFiTest::Result WiFiTest::Main(int argc, const char* argv[]) {
if (!ParseCommandLine(argc, argv)) { if (!ParseCommandLine(argc, argv)) {
VLOG(0) << "Usage: " << argv[0] << VLOG(0) << "Usage: " << argv[0]
" [--list]" << " [--list]"
" [--get_key]" " [--get_connected_ssid]"
" [--get_properties]" " [--get_key]"
" [--create]" " [--get_properties]"
" [--connect]" " [--create]"
" [--disconnect]" " [--connect]"
" [--scan]" " [--disconnect]"
" [--network_guid=<network_guid>]" " [--scan]"
" [--frequency=0|2400|5000]" " [--network_guid=<network_guid>]"
" [--security=none|WEP-PSK|WPA-PSK|WPA2-PSK]" " [--frequency=0|2400|5000]"
" [--password=<wifi_password>]" " [--security=none|WEP-PSK|WPA-PSK|WPA2-PSK]"
" [<network_guid>]\n"; " [--password=<wifi_password>]"
" [<network_guid>]\n";
return RESULT_WRONG_USAGE; return RESULT_WRONG_USAGE;
} }
...@@ -232,6 +233,17 @@ bool WiFiTest::ParseCommandLine(int argc, const char* argv[]) { ...@@ -232,6 +233,17 @@ bool WiFiTest::ParseCommandLine(int argc, const char* argv[]) {
return true; return true;
} }
if (parsed_command_line.HasSwitch("get_connected_ssid")) {
std::string ssid;
std::string error;
wifi_service_->GetConnectedNetworkSSID(&ssid, &error);
if (error.length() > 0)
VLOG(0) << error;
else
VLOG(0) << "Network SSID: " << ssid;
return true;
}
return false; return false;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment