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 25e03defdc509e9f05915969de7b70d1cc8b2c24..4f58d96f168e53c1b4d415dca39abe273bc7be08 100644 |
| --- a/chromeos/network/network_connection_handler.cc |
| +++ b/chromeos/network/network_connection_handler.cc |
| @@ -233,24 +233,29 @@ void NetworkConnectionHandler::ConnectToNetwork( |
| // networks. These states will not be affected by a recent configuration. |
| const NetworkState* network = |
|
pneubeck (no reviews)
2013/08/10 19:44:11
add a comment somewhere what it means if network==
stevenjb
2013/08/12 17:48:29
This should only happen if we call ConnectToNetwor
pneubeck (no reviews)
2013/08/12 18:35:01
Sounds reasonable. In particular c) is IMO very im
|
| network_state_handler_->GetNetworkState(service_path); |
| - if (!network) { |
| - InvokeErrorCallback(service_path, error_callback, kErrorNotFound); |
| - return; |
| - } |
| - if (network->IsConnectedState()) { |
| - InvokeErrorCallback(service_path, error_callback, kErrorConnected); |
| - return; |
| - } |
| - if (network->IsConnectingState()) { |
| - InvokeErrorCallback(service_path, error_callback, kErrorConnecting); |
| - return; |
| - } |
| - if (NetworkRequiresActivation(network)) { |
| - InvokeErrorCallback(service_path, error_callback, kErrorActivationRequired); |
| - return; |
| + |
| + if (network) { |
| + // For existing networks, perform some immediate consistency checks. |
| + if (network->IsConnectedState()) { |
| + InvokeErrorCallback(service_path, error_callback, kErrorConnected); |
| + return; |
| + } |
| + if (network->IsConnectingState()) { |
| + InvokeErrorCallback(service_path, error_callback, kErrorConnecting); |
| + return; |
| + } |
| + if (NetworkRequiresActivation(network)) { |
| + InvokeErrorCallback(service_path, error_callback, |
| + kErrorActivationRequired); |
| + return; |
| + } |
| } |
| if (check_error_state) { |
| + if (!network) { |
|
pneubeck (no reviews)
2013/08/10 19:44:11
this looks a bit contradicting to the handling if
stevenjb
2013/08/12 17:48:29
Yeah, this just ends up being confusing, and reall
|
| + InvokeErrorCallback(service_path, error_callback, kErrorNotFound); |
| + return; |
| + } |
| const std::string& error = network->error(); |
| if (error == flimflam::kErrorConnectFailed) { |
| InvokeErrorCallback( |
| @@ -262,7 +267,6 @@ void NetworkConnectionHandler::ConnectToNetwork( |
| service_path, error_callback, kErrorPassphraseRequired); |
| return; |
| } |
| - |
| if (IsAuthenticationError(error)) { |
| InvokeErrorCallback( |
| service_path, error_callback, kErrorAuthenticationRequired); |
| @@ -275,27 +279,31 @@ void NetworkConnectionHandler::ConnectToNetwork( |
| service_path, |
| ConnectRequest(service_path, success_callback, error_callback))); |
| - // Connect immediately to 'connectable' networks. |
| - // TODO(stevenjb): Shill needs to properly set Connectable for VPN. |
| - if (network->connectable() && network->type() != flimflam::kTypeVPN) { |
| - CallShillConnect(service_path); |
| - return; |
| - } |
| + if (network) { |
| + // Connect immediately to 'connectable' networks. |
| + // TODO(stevenjb): Shill needs to properly set Connectable for VPN. |
| + if (network->connectable() && network->type() != flimflam::kTypeVPN) { |
|
pneubeck (no reviews)
2013/08/10 19:44:11
For network==NULL, the connectable property will n
stevenjb
2013/08/12 17:48:29
Yes, I should add that there.
Done.
|
| + CallShillConnect(service_path); |
| + return; |
| + } |
| - if (network->type() == flimflam::kTypeCellular || |
| - (network->type() == flimflam::kTypeWifi && |
| - network->security() == flimflam::kSecurityNone)) { |
| - NET_LOG_ERROR("Network has no security but is not 'Connectable'", |
| - service_path); |
| - CallShillConnect(service_path); |
| - return; |
| + if (network->type() == flimflam::kTypeCellular || |
| + (network->type() == flimflam::kTypeWifi && |
| + network->security() == flimflam::kSecurityNone)) { |
| + NET_LOG_ERROR("Network has no security but is not 'Connectable'", |
| + service_path); |
| + // Try to connect anyway. Failure may succeed anyway, or provide a |
|
pneubeck (no reviews)
2013/08/10 19:44:11
"Failure may succeed"
sounds wrong to me.
stevenjb
2013/08/12 17:48:29
Oops, bad edit.
Looking at the code, I actually r
|
| + // helpful error from Shill. |
| + CallShillConnect(service_path); |
| + return; |
| + } |
| } |
| // Request additional properties to check. VerifyConfiguredAndConnect will |
| // use only these properties, not cached properties, to ensure that they |
| // are up to date after any recent configuration. |
| network_configuration_handler_->GetProperties( |
| - network->path(), |
| + service_path, |
| base::Bind(&NetworkConnectionHandler::VerifyConfiguredAndConnect, |
| AsWeakPtr(), check_error_state), |
| base::Bind(&NetworkConnectionHandler::HandleConfigurationFailure, |
| @@ -583,10 +591,9 @@ void NetworkConnectionHandler::CheckPendingRequest( |
| return; // Request has not started, ignore update |
| const NetworkState* network = |
| network_state_handler_->GetNetworkState(service_path); |
| - if (!network) { |
| - ErrorCallbackForPendingRequest(service_path, kErrorNotFound); |
| - return; |
| - } |
| + if (!network) |
| + return; // NetworkState may not be be updated yet. |
| + |
| if (network->IsConnectingState()) { |
| request->connect_state = ConnectRequest::CONNECT_CONNECTING; |
| return; |