This source file includes following definitions.
- ConvertVerificationProperties
- GetUserIdHash
- NetworkingPrivateGetPropertiesFunction
- RunImpl
- GetPropertiesSuccess
- GetPropertiesFailed
- NetworkingPrivateGetManagedPropertiesFunction
- RunImpl
- Success
- Failure
- NetworkingPrivateGetStateFunction
- RunImpl
- NetworkingPrivateSetPropertiesFunction
- RunImpl
- ErrorCallback
- ResultCallback
- NetworkingPrivateCreateNetworkFunction
- RunImpl
- ErrorCallback
- ResultCallback
- NetworkingPrivateGetVisibleNetworksFunction
- RunImpl
- NetworkingPrivateGetEnabledNetworkTypesFunction
- RunImpl
- NetworkingPrivateEnableNetworkTypeFunction
- RunImpl
- NetworkingPrivateDisableNetworkTypeFunction
- RunImpl
- NetworkingPrivateRequestNetworkScanFunction
- RunImpl
- NetworkingPrivateStartConnectFunction
- ConnectionStartSuccess
- ConnectionStartFailed
- RunImpl
- NetworkingPrivateStartDisconnectFunction
- DisconnectionStartSuccess
- DisconnectionStartFailed
- RunImpl
- NetworkingPrivateVerifyDestinationFunction
- RunImpl
- ResultCallback
- ErrorCallback
- NetworkingPrivateVerifyAndEncryptCredentialsFunction
- RunImpl
- ResultCallback
- ErrorCallback
- NetworkingPrivateVerifyAndEncryptDataFunction
- RunImpl
- ResultCallback
- ErrorCallback
- NetworkingPrivateSetWifiTDLSEnabledStateFunction
- RunImpl
- Success
- Failure
- NetworkingPrivateGetWifiTDLSStatusFunction
- RunImpl
- Success
- Failure
- NetworkingPrivateGetCaptivePortalStatusFunction
- RunImpl
#include "chrome/browser/extensions/api/networking_private/networking_private_api.h"
#include "base/bind.h"
#include "base/bind_helpers.h"
#include "base/callback.h"
#include "base/command_line.h"
#include "chrome/browser/browser_process.h"
#include "chrome/browser/browser_process_platform_part_chromeos.h"
#include "chrome/browser/chromeos/net/network_portal_detector.h"
#include "chrome/browser/chromeos/profiles/profile_helper.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/extensions/api/networking_private.h"
#include "chromeos/dbus/dbus_thread_manager.h"
#include "chromeos/dbus/shill_manager_client.h"
#include "chromeos/network/managed_network_configuration_handler.h"
#include "chromeos/network/network_connection_handler.h"
#include "chromeos/network/network_device_handler.h"
#include "chromeos/network/network_state.h"
#include "chromeos/network/network_state_handler.h"
#include "chromeos/network/onc/onc_signature.h"
#include "chromeos/network/onc/onc_translator.h"
#include "chromeos/network/shill_property_util.h"
#include "components/onc/onc_constants.h"
#include "extensions/browser/extension_function_registry.h"
namespace api = extensions::api::networking_private;
using chromeos::DBusThreadManager;
using chromeos::ManagedNetworkConfigurationHandler;
using chromeos::NetworkHandler;
using chromeos::NetworkPortalDetector;
using chromeos::NetworkState;
using chromeos::NetworkStateHandler;
using chromeos::NetworkTypePattern;
using chromeos::ShillManagerClient;
namespace {
ShillManagerClient::VerificationProperties ConvertVerificationProperties(
const api::VerificationProperties& input) {
ShillManagerClient::VerificationProperties output;
COMPILE_ASSERT(sizeof(api::VerificationProperties) ==
sizeof(ShillManagerClient::VerificationProperties),
verification_properties_no_longer_match);
output.certificate = input.certificate;
output.public_key = input.public_key;
output.nonce = input.nonce;
output.signed_data = input.signed_data;
output.device_serial = input.device_serial;
output.device_ssid = input.device_ssid;
output.device_bssid = input.device_bssid;
return output;
}
std::string GetUserIdHash(Profile* profile) {
if (CommandLine::ForCurrentProcess()->HasSwitch(switches::kMultiProfiles)) {
return g_browser_process->platform_part()->
profile_helper()->GetUserIdHashFromProfile(profile);
} else {
return g_browser_process->platform_part()->
profile_helper()->active_user_id_hash();
}
}
}
NetworkingPrivateGetPropertiesFunction::
~NetworkingPrivateGetPropertiesFunction() {
}
bool NetworkingPrivateGetPropertiesFunction::RunImpl() {
scoped_ptr<api::GetProperties::Params> params =
api::GetProperties::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
NetworkHandler::Get()->managed_network_configuration_handler()->GetProperties(
params->network_guid,
base::Bind(&NetworkingPrivateGetPropertiesFunction::GetPropertiesSuccess,
this),
base::Bind(&NetworkingPrivateGetPropertiesFunction::GetPropertiesFailed,
this));
return true;
}
void NetworkingPrivateGetPropertiesFunction::GetPropertiesSuccess(
const std::string& service_path,
const base::DictionaryValue& dictionary) {
base::DictionaryValue* network_properties = dictionary.DeepCopy();
network_properties->SetStringWithoutPathExpansion(onc::network_config::kGUID,
service_path);
SetResult(network_properties);
SendResponse(true);
}
void NetworkingPrivateGetPropertiesFunction::GetPropertiesFailed(
const std::string& error_name,
scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
NetworkingPrivateGetManagedPropertiesFunction::
~NetworkingPrivateGetManagedPropertiesFunction() {
}
bool NetworkingPrivateGetManagedPropertiesFunction::RunImpl() {
scoped_ptr<api::GetManagedProperties::Params> params =
api::GetManagedProperties::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
std::string user_id_hash;
GetUserIdHash(GetProfile());
NetworkHandler::Get()->managed_network_configuration_handler()->
GetManagedProperties(
user_id_hash,
params->network_guid,
base::Bind(&NetworkingPrivateGetManagedPropertiesFunction::Success,
this),
base::Bind(&NetworkingPrivateGetManagedPropertiesFunction::Failure,
this));
return true;
}
void NetworkingPrivateGetManagedPropertiesFunction::Success(
const std::string& service_path,
const base::DictionaryValue& dictionary) {
base::DictionaryValue* network_properties = dictionary.DeepCopy();
network_properties->SetStringWithoutPathExpansion(onc::network_config::kGUID,
service_path);
SetResult(network_properties);
SendResponse(true);
}
void NetworkingPrivateGetManagedPropertiesFunction::Failure(
const std::string& error_name,
scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
NetworkingPrivateGetStateFunction::
~NetworkingPrivateGetStateFunction() {
}
bool NetworkingPrivateGetStateFunction::RunImpl() {
scoped_ptr<api::GetState::Params> params =
api::GetState::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
std::string service_path = params->network_guid;
const NetworkState* state = NetworkHandler::Get()->network_state_handler()->
GetNetworkState(service_path);
if (!state) {
error_ = "Error.InvalidParameter";
return false;
}
scoped_ptr<base::DictionaryValue> result_dict(new base::DictionaryValue);
state->GetProperties(result_dict.get());
scoped_ptr<base::DictionaryValue> onc_network_part =
chromeos::onc::TranslateShillServiceToONCPart(*result_dict,
&chromeos::onc::kNetworkWithStateSignature);
SetResult(onc_network_part.release());
SendResponse(true);
return true;
}
NetworkingPrivateSetPropertiesFunction::
~NetworkingPrivateSetPropertiesFunction() {
}
bool NetworkingPrivateSetPropertiesFunction::RunImpl() {
scoped_ptr<api::SetProperties::Params> params =
api::SetProperties::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
scoped_ptr<base::DictionaryValue> properties_dict(
params->properties.ToValue());
NetworkHandler::Get()->managed_network_configuration_handler()->SetProperties(
params->network_guid,
*properties_dict,
base::Bind(&NetworkingPrivateSetPropertiesFunction::ResultCallback,
this),
base::Bind(&NetworkingPrivateSetPropertiesFunction::ErrorCallback,
this));
return true;
}
void NetworkingPrivateSetPropertiesFunction::ErrorCallback(
const std::string& error_name,
const scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
void NetworkingPrivateSetPropertiesFunction::ResultCallback() {
SendResponse(true);
}
NetworkingPrivateCreateNetworkFunction::
~NetworkingPrivateCreateNetworkFunction() {
}
bool NetworkingPrivateCreateNetworkFunction::RunImpl() {
scoped_ptr<api::CreateNetwork::Params> params =
api::CreateNetwork::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
std::string user_id_hash;
if (!params->shared)
user_id_hash = GetUserIdHash(GetProfile());
scoped_ptr<base::DictionaryValue> properties_dict(
params->properties.ToValue());
NetworkHandler::Get()->managed_network_configuration_handler()->
CreateConfiguration(
user_id_hash,
*properties_dict,
base::Bind(&NetworkingPrivateCreateNetworkFunction::ResultCallback,
this),
base::Bind(&NetworkingPrivateCreateNetworkFunction::ErrorCallback,
this));
return true;
}
void NetworkingPrivateCreateNetworkFunction::ErrorCallback(
const std::string& error_name,
const scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
void NetworkingPrivateCreateNetworkFunction::ResultCallback(
const std::string& guid) {
results_ = api::CreateNetwork::Results::Create(guid);
SendResponse(true);
}
NetworkingPrivateGetVisibleNetworksFunction::
~NetworkingPrivateGetVisibleNetworksFunction() {
}
bool NetworkingPrivateGetVisibleNetworksFunction::RunImpl() {
scoped_ptr<api::GetVisibleNetworks::Params> params =
api::GetVisibleNetworks::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
std::string type_filter =
api::GetVisibleNetworks::Params::ToString(params->type);
NetworkStateHandler::NetworkStateList network_states;
NetworkHandler::Get()->network_state_handler()->GetNetworkList(
&network_states);
base::ListValue* network_properties_list = new base::ListValue;
for (NetworkStateHandler::NetworkStateList::iterator it =
network_states.begin();
it != network_states.end(); ++it) {
const std::string& service_path = (*it)->path();
base::DictionaryValue shill_dictionary;
(*it)->GetProperties(&shill_dictionary);
scoped_ptr<base::DictionaryValue> onc_network_part =
chromeos::onc::TranslateShillServiceToONCPart(shill_dictionary,
&chromeos::onc::kNetworkWithStateSignature);
std::string onc_type;
onc_network_part->GetStringWithoutPathExpansion(onc::network_config::kType,
&onc_type);
if (type_filter == onc::network_type::kAllTypes ||
onc_type == type_filter) {
onc_network_part->SetStringWithoutPathExpansion(
onc::network_config::kGUID,
service_path);
network_properties_list->Append(onc_network_part.release());
}
}
SetResult(network_properties_list);
SendResponse(true);
return true;
}
NetworkingPrivateGetEnabledNetworkTypesFunction::
~NetworkingPrivateGetEnabledNetworkTypesFunction() {
}
bool NetworkingPrivateGetEnabledNetworkTypesFunction::RunImpl() {
NetworkStateHandler* state_handler =
NetworkHandler::Get()->network_state_handler();
base::ListValue* network_list = new base::ListValue;
if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Ethernet()))
network_list->AppendString("Ethernet");
if (state_handler->IsTechnologyEnabled(NetworkTypePattern::WiFi()))
network_list->AppendString("WiFi");
if (state_handler->IsTechnologyEnabled(NetworkTypePattern::Cellular()))
network_list->AppendString("Cellular");
SetResult(network_list);
return true;
}
NetworkingPrivateEnableNetworkTypeFunction::
~NetworkingPrivateEnableNetworkTypeFunction() {
}
bool NetworkingPrivateEnableNetworkTypeFunction::RunImpl() {
scoped_ptr<api::EnableNetworkType::Params> params =
api::EnableNetworkType::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
NetworkStateHandler* state_handler =
NetworkHandler::Get()->network_state_handler();
switch (params->network_type) {
case api::NETWORK_TYPE_ETHERNET:
state_handler->SetTechnologyEnabled(
NetworkTypePattern::Ethernet(), true,
chromeos::network_handler::ErrorCallback());
break;
case api::NETWORK_TYPE_WIFI:
state_handler->SetTechnologyEnabled(
NetworkTypePattern::WiFi(), true,
chromeos::network_handler::ErrorCallback());
break;
case api::NETWORK_TYPE_CELLULAR:
state_handler->SetTechnologyEnabled(
NetworkTypePattern::Cellular(), true,
chromeos::network_handler::ErrorCallback());
break;
default:
break;
}
return true;
}
NetworkingPrivateDisableNetworkTypeFunction::
~NetworkingPrivateDisableNetworkTypeFunction() {
}
bool NetworkingPrivateDisableNetworkTypeFunction::RunImpl() {
scoped_ptr<api::DisableNetworkType::Params> params =
api::DisableNetworkType::Params::Create(*args_);
NetworkStateHandler* state_handler =
NetworkHandler::Get()->network_state_handler();
switch (params->network_type) {
case api::NETWORK_TYPE_ETHERNET:
state_handler->SetTechnologyEnabled(
NetworkTypePattern::Ethernet(), false,
chromeos::network_handler::ErrorCallback());
break;
case api::NETWORK_TYPE_WIFI:
state_handler->SetTechnologyEnabled(
NetworkTypePattern::WiFi(), false,
chromeos::network_handler::ErrorCallback());
break;
case api::NETWORK_TYPE_CELLULAR:
state_handler->SetTechnologyEnabled(
NetworkTypePattern::Cellular(), false,
chromeos::network_handler::ErrorCallback());
break;
default:
break;
}
return true;
}
NetworkingPrivateRequestNetworkScanFunction::
~NetworkingPrivateRequestNetworkScanFunction() {
}
bool NetworkingPrivateRequestNetworkScanFunction::RunImpl() {
NetworkHandler::Get()->network_state_handler()->RequestScan();
return true;
}
NetworkingPrivateStartConnectFunction::
~NetworkingPrivateStartConnectFunction() {
}
void NetworkingPrivateStartConnectFunction::ConnectionStartSuccess() {
SendResponse(true);
}
void NetworkingPrivateStartConnectFunction::ConnectionStartFailed(
const std::string& error_name,
const scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
bool NetworkingPrivateStartConnectFunction::RunImpl() {
scoped_ptr<api::StartConnect::Params> params =
api::StartConnect::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
const bool check_error_state = false;
NetworkHandler::Get()->network_connection_handler()->ConnectToNetwork(
params->network_guid,
base::Bind(
&NetworkingPrivateStartConnectFunction::ConnectionStartSuccess,
this),
base::Bind(
&NetworkingPrivateStartConnectFunction::ConnectionStartFailed,
this),
check_error_state);
return true;
}
NetworkingPrivateStartDisconnectFunction::
~NetworkingPrivateStartDisconnectFunction() {
}
void NetworkingPrivateStartDisconnectFunction::DisconnectionStartSuccess() {
SendResponse(true);
}
void NetworkingPrivateStartDisconnectFunction::DisconnectionStartFailed(
const std::string& error_name,
const scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
bool NetworkingPrivateStartDisconnectFunction::RunImpl() {
scoped_ptr<api::StartDisconnect::Params> params =
api::StartDisconnect::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
NetworkHandler::Get()->network_connection_handler()->DisconnectNetwork(
params->network_guid,
base::Bind(
&NetworkingPrivateStartDisconnectFunction::DisconnectionStartSuccess,
this),
base::Bind(
&NetworkingPrivateStartDisconnectFunction::DisconnectionStartFailed,
this));
return true;
}
NetworkingPrivateVerifyDestinationFunction::
~NetworkingPrivateVerifyDestinationFunction() {
}
bool NetworkingPrivateVerifyDestinationFunction::RunImpl() {
scoped_ptr<api::VerifyDestination::Params> params =
api::VerifyDestination::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
ShillManagerClient::VerificationProperties verification_properties =
ConvertVerificationProperties(params->properties);
DBusThreadManager::Get()->GetShillManagerClient()->VerifyDestination(
verification_properties,
base::Bind(
&NetworkingPrivateVerifyDestinationFunction::ResultCallback,
this),
base::Bind(
&NetworkingPrivateVerifyDestinationFunction::ErrorCallback,
this));
return true;
}
void NetworkingPrivateVerifyDestinationFunction::ResultCallback(
bool result) {
results_ = api::VerifyDestination::Results::Create(result);
SendResponse(true);
}
void NetworkingPrivateVerifyDestinationFunction::ErrorCallback(
const std::string& error_name, const std::string& error) {
error_ = error_name;
SendResponse(false);
}
NetworkingPrivateVerifyAndEncryptCredentialsFunction::
~NetworkingPrivateVerifyAndEncryptCredentialsFunction() {
}
bool NetworkingPrivateVerifyAndEncryptCredentialsFunction::RunImpl() {
scoped_ptr<api::VerifyAndEncryptCredentials::Params> params =
api::VerifyAndEncryptCredentials::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
ShillManagerClient* shill_manager_client =
DBusThreadManager::Get()->GetShillManagerClient();
ShillManagerClient::VerificationProperties verification_properties =
ConvertVerificationProperties(params->properties);
shill_manager_client->VerifyAndEncryptCredentials(
verification_properties,
params->guid,
base::Bind(
&NetworkingPrivateVerifyAndEncryptCredentialsFunction::ResultCallback,
this),
base::Bind(
&NetworkingPrivateVerifyAndEncryptCredentialsFunction::ErrorCallback,
this));
return true;
}
void NetworkingPrivateVerifyAndEncryptCredentialsFunction::ResultCallback(
const std::string& result) {
results_ = api::VerifyAndEncryptCredentials::Results::Create(result);
SendResponse(true);
}
void NetworkingPrivateVerifyAndEncryptCredentialsFunction::ErrorCallback(
const std::string& error_name, const std::string& error) {
error_ = error_name;
SendResponse(false);
}
NetworkingPrivateVerifyAndEncryptDataFunction::
~NetworkingPrivateVerifyAndEncryptDataFunction() {
}
bool NetworkingPrivateVerifyAndEncryptDataFunction::RunImpl() {
scoped_ptr<api::VerifyAndEncryptData::Params> params =
api::VerifyAndEncryptData::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
ShillManagerClient::VerificationProperties verification_properties =
ConvertVerificationProperties(params->properties);
DBusThreadManager::Get()->GetShillManagerClient()->VerifyAndEncryptData(
verification_properties,
params->data,
base::Bind(
&NetworkingPrivateVerifyAndEncryptDataFunction::ResultCallback,
this),
base::Bind(
&NetworkingPrivateVerifyAndEncryptDataFunction::ErrorCallback,
this));
return true;
}
void NetworkingPrivateVerifyAndEncryptDataFunction::ResultCallback(
const std::string& result) {
results_ = api::VerifyAndEncryptData::Results::Create(result);
SendResponse(true);
}
void NetworkingPrivateVerifyAndEncryptDataFunction::ErrorCallback(
const std::string& error_name,
const std::string& error) {
error_ = error_name;
SendResponse(false);
}
NetworkingPrivateSetWifiTDLSEnabledStateFunction::
~NetworkingPrivateSetWifiTDLSEnabledStateFunction() {
}
bool NetworkingPrivateSetWifiTDLSEnabledStateFunction::RunImpl() {
scoped_ptr<api::SetWifiTDLSEnabledState::Params> params =
api::SetWifiTDLSEnabledState::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
std::string ip_or_mac_address = params->ip_or_mac_address;
bool enable = params->enabled;
NetworkHandler::Get()->network_device_handler()->
SetWifiTDLSEnabled(
ip_or_mac_address,
enable,
base::Bind(&NetworkingPrivateSetWifiTDLSEnabledStateFunction::Success,
this),
base::Bind(&NetworkingPrivateSetWifiTDLSEnabledStateFunction::Failure,
this));
return true;
}
void NetworkingPrivateSetWifiTDLSEnabledStateFunction::Success(
const std::string& result) {
results_ = api::SetWifiTDLSEnabledState::Results::Create(result);
SendResponse(true);
}
void NetworkingPrivateSetWifiTDLSEnabledStateFunction::Failure(
const std::string& error_name,
scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
NetworkingPrivateGetWifiTDLSStatusFunction::
~NetworkingPrivateGetWifiTDLSStatusFunction() {
}
bool NetworkingPrivateGetWifiTDLSStatusFunction::RunImpl() {
scoped_ptr<api::GetWifiTDLSStatus::Params> params =
api::GetWifiTDLSStatus::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
std::string ip_or_mac_address = params->ip_or_mac_address;
NetworkHandler::Get()->network_device_handler()->
GetWifiTDLSStatus(
ip_or_mac_address,
base::Bind(&NetworkingPrivateGetWifiTDLSStatusFunction::Success,
this),
base::Bind(&NetworkingPrivateGetWifiTDLSStatusFunction::Failure,
this));
return true;
}
void NetworkingPrivateGetWifiTDLSStatusFunction::Success(
const std::string& result) {
results_ = api::GetWifiTDLSStatus::Results::Create(result);
SendResponse(true);
}
void NetworkingPrivateGetWifiTDLSStatusFunction::Failure(
const std::string& error_name,
scoped_ptr<base::DictionaryValue> error_data) {
error_ = error_name;
SendResponse(false);
}
NetworkingPrivateGetCaptivePortalStatusFunction::
~NetworkingPrivateGetCaptivePortalStatusFunction() {}
bool NetworkingPrivateGetCaptivePortalStatusFunction::RunImpl() {
scoped_ptr<api::GetCaptivePortalStatus::Params> params =
api::GetCaptivePortalStatus::Params::Create(*args_);
EXTENSION_FUNCTION_VALIDATE(params);
const std::string& service_path = params->network_guid;
NetworkPortalDetector* detector = NetworkPortalDetector::Get();
if (!detector) {
error_ = "Error.NotReady";
return false;
}
NetworkPortalDetector::CaptivePortalState state =
detector->GetCaptivePortalState(service_path);
SetResult(new base::StringValue(
NetworkPortalDetector::CaptivePortalStatusString(state.status)));
SendResponse(true);
return true;
}