Chromium Code Reviews| Index: chromeos/network/network_connection_handler.cc |
| diff --git a/chromeos/network/network_connection_handler.cc b/chromeos/network/network_connection_handler.cc |
| index e8c49396ba43b295dd1b3b19259b8d0cb5c92a66..fca3b76383765f57d8c360c6ad49b90c16adbb89 100644 |
| --- a/chromeos/network/network_connection_handler.cc |
| +++ b/chromeos/network/network_connection_handler.cc |
| @@ -115,6 +115,8 @@ const char NetworkConnectionHandler::kErrorConnectCanceled[] = |
| "connect-canceled"; |
| const char NetworkConnectionHandler::kErrorCertLoadTimeout[] = |
| "cert-load-timeout"; |
| +const char NetworkConnectionHandler::kErrorUnmanagedNetwork[] = |
| + "unmanaged-network"; |
| struct NetworkConnectionHandler::ConnectRequest { |
| ConnectRequest(const std::string& service_path, |
| @@ -285,6 +287,11 @@ void NetworkConnectionHandler::ConnectToNetwork( |
| // Connect immediately to 'connectable' networks. |
| // TODO(stevenjb): Shill needs to properly set Connectable for VPN. |
| if (network && network->connectable() && network->type() != shill::kTypeVPN) { |
| + if (IsNetworkProhibitedByPolicy(network->guid(), network->profile_path())) { |
| + ErrorCallbackForPendingRequest(service_path, kErrorUnmanagedNetwork); |
| + return; |
| + } |
| + |
| CallShillConnect(service_path); |
| return; |
| } |
| @@ -416,6 +423,11 @@ void NetworkConnectionHandler::VerifyConfiguredAndConnect( |
| const base::DictionaryValue* user_policy = |
| managed_configuration_handler_->FindPolicyByGuidAndProfile(guid, profile); |
| + if (IsNetworkProhibitedByPolicy(guid, profile)) { |
| + ErrorCallbackForPendingRequest(service_path, kErrorUnmanagedNetwork); |
| + return; |
| + } |
| + |
| client_cert::ClientCertConfig cert_config_from_policy; |
| if (user_policy) |
| client_cert::OncToClientCertConfig(*user_policy, &cert_config_from_policy); |
| @@ -523,6 +535,30 @@ void NetworkConnectionHandler::VerifyConfiguredAndConnect( |
| CallShillConnect(service_path); |
| } |
| +bool NetworkConnectionHandler::IsNetworkProhibitedByPolicy( |
| + const std::string& guid, |
| + const std::string& profile_path) { |
| + if (!logged_in_) |
| + return false; |
| + const base::DictionaryValue* global_network_config = |
| + managed_configuration_handler_->GetGlobalConfigFromPolicy(std::string()); |
|
stevenjb
2015/11/18 23:46:47
Add comment for empty arg:
std::string() /* no use
fqj
2015/11/18 23:55:48
Done.
|
| + if (!global_network_config) |
| + return false; |
| + bool policy_prohibites = false; |
| + if (!global_network_config->GetBooleanWithoutPathExpansion( |
| + ::onc::global_network_config::kAllowOnlyPolicyNetworksToConnect, |
| + &policy_prohibites)) |
| + return false; |
| + if (!policy_prohibites) |
| + return false; |
|
stevenjb
2015/11/18 23:46:47
nit: Combine these two ifs, use {}
fqj
2015/11/18 23:55:48
Done.
|
| + const base::DictionaryValue* user_policy = |
| + managed_configuration_handler_->FindPolicyByGuidAndProfile(guid, |
| + profile_path); |
| + if (user_policy) |
| + return false; |
| + return true; |
|
stevenjb
2015/11/18 23:46:47
return !managed_configuration_handler_->FindPolicy
fqj
2015/11/18 23:55:48
Done.
|
| +} |
| + |
| void NetworkConnectionHandler::QueueConnectRequest( |
| const std::string& service_path) { |
| ConnectRequest* request = GetPendingRequest(service_path); |