Index: chromeos/network/network_util.cc |
diff --git a/chromeos/network/network_util.cc b/chromeos/network/network_util.cc |
index ea6e3e25de155c382ddf4364cab815e96fb13993..b5d50b3219ec14904f9e0eb70fedf4e92e348ded 100644 |
--- a/chromeos/network/network_util.cc |
+++ b/chromeos/network/network_util.cc |
@@ -8,6 +8,7 @@ |
#include "base/strings/string_util.h" |
#include "base/strings/stringprintf.h" |
#include "chromeos/login/login_state.h" |
+#include "chromeos/network/device_state.h" |
#include "chromeos/network/managed_network_configuration_handler.h" |
#include "chromeos/network/network_state.h" |
#include "chromeos/network/network_state_handler.h" |
@@ -146,8 +147,25 @@ bool ParseCellularScanResults(const base::ListValue& list, |
scoped_ptr<base::DictionaryValue> TranslateNetworkStateToONC( |
const NetworkState* network) { |
// Get the properties from the NetworkState. |
- base::DictionaryValue shill_dictionary; |
- network->GetStateProperties(&shill_dictionary); |
+ scoped_ptr<base::DictionaryValue> shill_dictionary(new base::DictionaryValue); |
+ network->GetStateProperties(shill_dictionary.get()); |
+ |
+ // Get any Device properties required to translate state. |
+ if (NetworkTypePattern::Cellular().MatchesType(network->type())) { |
+ // We need to set Device[Cellular.ProviderRequiresRoaming] so that |
+ // Cellular[RoamingState] can be set correctly for badging network icons. |
+ const DeviceState* device = |
+ NetworkHandler::Get()->network_state_handler()->GetDeviceState( |
+ network->device_path()); |
+ if (device) { |
+ scoped_ptr<base::DictionaryValue> device_dict(new base::DictionaryValue); |
+ device_dict->SetBooleanWithoutPathExpansion( |
+ shill::kProviderRequiresRoamingProperty, |
+ device->provider_requires_roaming()); |
+ shill_dictionary->SetWithoutPathExpansion(shill::kDeviceProperty, |
+ device_dict.release()); |
+ } |
+ } |
// NetworkState is always associated with the primary user profile, regardless |
// of what profile is associated with the page that calls this method. We do |
@@ -160,7 +178,7 @@ scoped_ptr<base::DictionaryValue> TranslateNetworkStateToONC( |
->FindPolicyByGUID(user_id_hash, network->guid(), &onc_source); |
scoped_ptr<base::DictionaryValue> onc_dictionary = |
- TranslateShillServiceToONCPart(shill_dictionary, onc_source, |
+ TranslateShillServiceToONCPart(*shill_dictionary, onc_source, |
&onc::kNetworkWithStateSignature); |
return onc_dictionary.Pass(); |
} |