| Index: chromeos/network/network_state_handler.cc
|
| diff --git a/chromeos/network/network_state_handler.cc b/chromeos/network/network_state_handler.cc
|
| index 9e2e83c1466d55c1e1e9e02ce2d24f0356f3f72f..c5b77fc46bfd8645ba4c68b99825db0355b8fa86 100644
|
| --- a/chromeos/network/network_state_handler.cc
|
| +++ b/chromeos/network/network_state_handler.cc
|
| @@ -29,10 +29,12 @@ namespace chromeos {
|
| namespace {
|
|
|
| bool ConnectionStateChanged(NetworkState* network,
|
| - const std::string& prev_connection_state) {
|
| - return (network->connection_state() != prev_connection_state) &&
|
| - (network->connection_state() != shill::kStateIdle ||
|
| - !prev_connection_state.empty());
|
| + const std::string& prev_connection_state,
|
| + bool prev_is_captive_portal) {
|
| + return ((network->connection_state() != prev_connection_state) &&
|
| + !((network->connection_state() == shill::kStateIdle) &&
|
| + prev_connection_state.empty())) ||
|
| + (network->is_captive_portal() != prev_is_captive_portal);
|
| }
|
|
|
| std::string GetManagedStateLogType(const ManagedState* state) {
|
| @@ -519,6 +521,7 @@ void NetworkStateHandler::UpdateNetworkStateProperties(
|
| DCHECK(network);
|
| bool network_property_updated = false;
|
| std::string prev_connection_state = network->connection_state();
|
| + bool prev_is_captive_portal = network->is_captive_portal();
|
| for (base::DictionaryValue::Iterator iter(properties);
|
| !iter.IsAtEnd(); iter.Advance()) {
|
| if (network->PropertyChanged(iter.key(), iter.value()))
|
| @@ -531,8 +534,10 @@ void NetworkStateHandler::UpdateNetworkStateProperties(
|
| // Notify observers of NetworkState changes.
|
| if (network_property_updated || network->update_requested()) {
|
| // Signal connection state changed after all properties have been updated.
|
| - if (ConnectionStateChanged(network, prev_connection_state))
|
| + if (ConnectionStateChanged(network, prev_connection_state,
|
| + prev_is_captive_portal)) {
|
| OnNetworkConnectionStateChanged(network);
|
| + }
|
| NET_LOG_EVENT("NetworkPropertiesUpdated", GetLogName(network));
|
| NotifyNetworkPropertiesUpdated(network);
|
| }
|
| @@ -548,6 +553,7 @@ void NetworkStateHandler::UpdateNetworkServiceProperty(
|
| if (!network)
|
| return;
|
| std::string prev_connection_state = network->connection_state();
|
| + bool prev_is_captive_portal = network->is_captive_portal();
|
| std::string prev_profile_path = network->profile_path();
|
| changed |= network->PropertyChanged(key, value);
|
| if (!changed)
|
| @@ -555,7 +561,8 @@ void NetworkStateHandler::UpdateNetworkServiceProperty(
|
|
|
| if (key == shill::kStateProperty || key == shill::kVisibleProperty) {
|
| network_list_sorted_ = false;
|
| - if (ConnectionStateChanged(network, prev_connection_state)) {
|
| + if (ConnectionStateChanged(network, prev_connection_state,
|
| + prev_is_captive_portal)) {
|
| OnNetworkConnectionStateChanged(network);
|
| // If the connection state changes, other properties such as IPConfig
|
| // may have changed, so request a full update.
|
|
|