diff options
author | armansito@chromium.org <armansito@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-17 00:16:21 +0000 |
---|---|---|
committer | armansito@chromium.org <armansito@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-08-17 00:16:21 +0000 |
commit | d75386c7f9a18276ef670fa96e099c3687c598f5 (patch) | |
tree | ba6a27882e0b02b0b6de6ee2679a66e2a55384d5 | |
parent | 62cf8a1f8683d5788f6f4fb07e89512ee9f8f527 (diff) | |
download | chromium_src-d75386c7f9a18276ef670fa96e099c3687c598f5.zip chromium_src-d75386c7f9a18276ef670fa96e099c3687c598f5.tar.gz chromium_src-d75386c7f9a18276ef670fa96e099c3687c598f5.tar.bz2 |
onc: Added code to specially handle Cellular.ServingOperator for cellular.
Modified the code such that the Cellular.ServingOperator property of a
cellular service gets translated properly into a nested dictionary.
BUG=272341
R=pneubeck@chromium.org
Review URL: https://codereview.chromium.org/23276002
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@218126 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chromeos/network/onc/onc_constants.cc | 6 | ||||
-rw-r--r-- | chromeos/network/onc/onc_constants.h | 8 | ||||
-rw-r--r-- | chromeos/network/onc/onc_signature.cc | 16 | ||||
-rw-r--r-- | chromeos/network/onc/onc_signature.h | 1 | ||||
-rw-r--r-- | chromeos/network/onc/onc_translation_tables.cc | 10 | ||||
-rw-r--r-- | chromeos/network/onc/onc_translator_shill_to_onc.cc | 48 | ||||
-rw-r--r-- | chromeos/network/onc/onc_translator_unittest.cc | 4 | ||||
-rw-r--r-- | chromeos/test/data/network/shill_cellular_with_state.json | 11 | ||||
-rw-r--r-- | chromeos/test/data/network/translation_of_shill_cellular_with_state.onc | 13 |
9 files changed, 96 insertions, 21 deletions
diff --git a/chromeos/network/onc/onc_constants.cc b/chromeos/network/onc/onc_constants.cc index 1a24cfe..16ae4ff 100644 --- a/chromeos/network/onc/onc_constants.cc +++ b/chromeos/network/onc/onc_constants.cc @@ -91,6 +91,12 @@ const char kSupportedCarriers[] = "SupportedCarriers"; const char kSupportNetworkScan[] = "SupportNetworkScan"; } // namespace cellular +namespace cellular_provider { +const char kCode[] = "Code"; +const char kCountry[] = "Country"; +const char kName[] = "Name"; +} // namespace cellular_provider + namespace connection_state { const char kConnected[] = "Connected"; const char kConnecting[] = "Connecting"; diff --git a/chromeos/network/onc/onc_constants.h b/chromeos/network/onc/onc_constants.h index c730a10..b0ab330 100644 --- a/chromeos/network/onc/onc_constants.h +++ b/chromeos/network/onc/onc_constants.h @@ -100,8 +100,6 @@ CHROMEOS_EXPORT extern const char kMEID[]; CHROMEOS_EXPORT extern const char kMIN[]; CHROMEOS_EXPORT extern const char kModelID[]; CHROMEOS_EXPORT extern const char kNetworkTechnology[]; -CHROMEOS_EXPORT extern const char kOperatorCode[]; -CHROMEOS_EXPORT extern const char kOperatorName[]; CHROMEOS_EXPORT extern const char kPRLVersion[]; CHROMEOS_EXPORT extern const char kProviderRequiresRoaming[]; CHROMEOS_EXPORT extern const char kRoamingState[]; @@ -113,6 +111,12 @@ CHROMEOS_EXPORT extern const char kSupportedCarriers[]; CHROMEOS_EXPORT extern const char kSupportNetworkScan[]; } // namespace cellular +namespace cellular_provider { +CHROMEOS_EXPORT extern const char kCode[]; +CHROMEOS_EXPORT extern const char kCountry[]; +CHROMEOS_EXPORT extern const char kName[]; +} // namespace cellular_provider + namespace connection_state { CHROMEOS_EXPORT extern const char kConnected[]; CHROMEOS_EXPORT extern const char kConnecting[]; diff --git a/chromeos/network/onc/onc_signature.cc b/chromeos/network/onc/onc_signature.cc index d4c0bd1..b70b579 100644 --- a/chromeos/network/onc/onc_signature.cc +++ b/chromeos/network/onc/onc_signature.cc @@ -203,6 +203,13 @@ const OncFieldSignature wifi_with_state_fields[] = { { NULL } }; +const OncFieldSignature cellular_provider_fields[] = { + { cellular_provider::kCode, &kStringSignature }, + { cellular_provider::kCountry, &kStringSignature }, + { cellular_provider::kName, &kStringSignature }, + { NULL } +}; + const OncFieldSignature cellular_with_state_fields[] = { { kRecommended, &kRecommendedSignature }, { cellular::kActivateOverNonCellularNetwork, &kBoolSignature }, @@ -215,7 +222,7 @@ const OncFieldSignature cellular_with_state_fields[] = { { cellular::kFirmwareRevision, &kStringSignature }, { cellular::kFoundNetworks, &kStringSignature }, { cellular::kHardwareRevision, &kStringSignature }, - { cellular::kHomeProvider, &kStringSignature }, + { cellular::kHomeProvider, &kCellularProviderSignature }, { cellular::kICCID, &kStringSignature }, { cellular::kIMEI, &kStringSignature }, { cellular::kIMSI, &kStringSignature }, @@ -225,13 +232,11 @@ const OncFieldSignature cellular_with_state_fields[] = { { cellular::kMIN, &kStringSignature }, { cellular::kModelID, &kStringSignature }, { cellular::kNetworkTechnology, &kStringSignature }, - { cellular::kOperatorCode, &kStringSignature }, - { cellular::kOperatorName, &kStringSignature }, { cellular::kPRLVersion, &kStringSignature }, { cellular::kProviderRequiresRoaming, &kStringSignature }, { cellular::kRoamingState, &kStringSignature }, { cellular::kSelectedNetwork, &kStringSignature }, - { cellular::kServingOperator, &kStringSignature }, + { cellular::kServingOperator, &kCellularProviderSignature }, { cellular::kSIMLockStatus, &kStringSignature }, { cellular::kSIMPresent, &kStringSignature }, { cellular::kSupportedCarriers, &kStringSignature }, @@ -362,6 +367,9 @@ const OncValueSignature kWiFiWithStateSignature = { const OncValueSignature kCellularWithStateSignature = { Value::TYPE_DICTIONARY, cellular_with_state_fields, NULL }; +const OncValueSignature kCellularProviderSignature = { + Value::TYPE_DICTIONARY, cellular_provider_fields, NULL +}; const OncFieldSignature* GetFieldSignature(const OncValueSignature& signature, const std::string& onc_field_name) { diff --git a/chromeos/network/onc/onc_signature.h b/chromeos/network/onc/onc_signature.h index ef0cc31..0d95641 100644 --- a/chromeos/network/onc/onc_signature.h +++ b/chromeos/network/onc/onc_signature.h @@ -60,6 +60,7 @@ CHROMEOS_EXPORT extern const OncValueSignature kToplevelConfigurationSignature; CHROMEOS_EXPORT extern const OncValueSignature kNetworkWithStateSignature; CHROMEOS_EXPORT extern const OncValueSignature kWiFiWithStateSignature; CHROMEOS_EXPORT extern const OncValueSignature kCellularWithStateSignature; +CHROMEOS_EXPORT extern const OncValueSignature kCellularProviderSignature; } // namespace onc } // namespace chromeos diff --git a/chromeos/network/onc/onc_translation_tables.cc b/chromeos/network/onc/onc_translation_tables.cc index d010752..7d31fb9 100644 --- a/chromeos/network/onc/onc_translation_tables.cc +++ b/chromeos/network/onc/onc_translation_tables.cc @@ -110,6 +110,13 @@ const FieldTranslationEntry wifi_fields[] = { { NULL } }; +const FieldTranslationEntry cellular_provider_fields[] = { + { cellular_provider::kCode, flimflam::kOperatorCodeKey }, + { cellular_provider::kCountry, flimflam::kOperatorCountryKey }, + { cellular_provider::kName, flimflam::kOperatorNameKey }, + { NULL } +}; + const FieldTranslationEntry cellular_with_state_fields[] = { { cellular::kActivateOverNonCellularNetwork, shill::kActivateOverNonCellularNetworkProperty }, @@ -132,8 +139,6 @@ const FieldTranslationEntry cellular_with_state_fields[] = { { cellular::kMIN, flimflam::kMinProperty }, { cellular::kModelID, flimflam::kModelIDProperty }, { cellular::kNetworkTechnology, flimflam::kNetworkTechnologyProperty }, - { cellular::kOperatorCode, flimflam::kOperatorCodeProperty }, - { cellular::kOperatorName, flimflam::kOperatorNameProperty }, { cellular::kPRLVersion, flimflam::kPRLVersionProperty }, { cellular::kProviderRequiresRoaming, shill::kProviderRequiresRoamingProperty }, @@ -170,6 +175,7 @@ const OncValueTranslationEntry onc_value_translation_table[] = { { &kVPNSignature, vpn_fields }, { &kWiFiSignature, wifi_fields }, { &kWiFiWithStateSignature, wifi_fields }, + { &kCellularProviderSignature, cellular_provider_fields }, { &kCellularWithStateSignature, cellular_with_state_fields }, { &kNetworkWithStateSignature, network_fields }, { &kNetworkConfigurationSignature, network_fields }, diff --git a/chromeos/network/onc/onc_translator_shill_to_onc.cc b/chromeos/network/onc/onc_translator_shill_to_onc.cc index 017c434..7782aa5 100644 --- a/chromeos/network/onc/onc_translator_shill_to_onc.cc +++ b/chromeos/network/onc/onc_translator_shill_to_onc.cc @@ -61,9 +61,16 @@ class ShillToONCTranslator { void TranslateOpenVPN(); void TranslateVPN(); void TranslateWiFiWithState(); + void TranslateCellularWithState(); void TranslateNetworkWithState(); - // Creates an ONC object from |shill_dictionary| according to the signature + // Creates an ONC object from |dictionary| according to the signature + // associated to |onc_field_name| and adds it to |onc_object_| at + // |onc_field_name|. + void TranslateAndAddNestedObject(const std::string& onc_field_name, + const base::DictionaryValue& dictionary); + + // Creates an ONC object from |shill_dictionary_| according to the signature // associated to |onc_field_name| and adds it to |onc_object_| at // |onc_field_name|. void TranslateAndAddNestedObject(const std::string& onc_field_name); @@ -108,6 +115,8 @@ ShillToONCTranslator::CreateTranslatedONCObject() { TranslateOpenVPN(); } else if (onc_signature_ == &kWiFiWithStateSignature) { TranslateWiFiWithState(); + } else if (onc_signature_ == &kCellularWithStateSignature) { + TranslateCellularWithState(); } else { CopyPropertiesAccordingToSignature(); } @@ -196,17 +205,13 @@ void ShillToONCTranslator::TranslateWiFiWithState() { CopyPropertiesAccordingToSignature(); } -void ShillToONCTranslator::TranslateAndAddNestedObject( - const std::string& onc_field_name) { - const OncFieldSignature* field_signature = - GetFieldSignature(*onc_signature_, onc_field_name); - ShillToONCTranslator nested_translator(*shill_dictionary_, - *field_signature->value_signature); - scoped_ptr<base::DictionaryValue> nested_object = - nested_translator.CreateTranslatedONCObject(); - if (nested_object->empty()) - return; - onc_object_->SetWithoutPathExpansion(onc_field_name, nested_object.release()); +void ShillToONCTranslator::TranslateCellularWithState() { + CopyPropertiesAccordingToSignature(); + const base::DictionaryValue* serving_operator = NULL; + if (shill_dictionary_->GetDictionaryWithoutPathExpansion( + flimflam::kServingOperatorProperty, &serving_operator)) { + TranslateAndAddNestedObject(cellular::kServingOperator, *serving_operator); + } } void ShillToONCTranslator::TranslateNetworkWithState() { @@ -241,6 +246,25 @@ void ShillToONCTranslator::TranslateNetworkWithState() { } } +void ShillToONCTranslator::TranslateAndAddNestedObject( + const std::string& onc_field_name) { + TranslateAndAddNestedObject(onc_field_name, *shill_dictionary_); +} + +void ShillToONCTranslator::TranslateAndAddNestedObject( + const std::string& onc_field_name, + const base::DictionaryValue& dictionary) { + const OncFieldSignature* field_signature = + GetFieldSignature(*onc_signature_, onc_field_name); + ShillToONCTranslator nested_translator(dictionary, + *field_signature->value_signature); + scoped_ptr<base::DictionaryValue> nested_object = + nested_translator.CreateTranslatedONCObject(); + if (nested_object->empty()) + return; + onc_object_->SetWithoutPathExpansion(onc_field_name, nested_object.release()); +} + void ShillToONCTranslator::CopyPropertiesAccordingToSignature() { CopyPropertiesAccordingToSignature(onc_signature_); } diff --git a/chromeos/network/onc/onc_translator_unittest.cc b/chromeos/network/onc/onc_translator_unittest.cc index ef53fff..220dbc6 100644 --- a/chromeos/network/onc/onc_translator_unittest.cc +++ b/chromeos/network/onc/onc_translator_unittest.cc @@ -94,7 +94,9 @@ INSTANTIATE_TEST_CASE_P( std::make_pair("shill_openvpn_with_errors.json", "translation_of_shill_openvpn_with_errors.onc"), std::make_pair("shill_wifi_with_state.json", - "translation_of_shill_wifi_with_state.onc"))); + "translation_of_shill_wifi_with_state.onc"), + std::make_pair("shill_cellular_with_state.json", + "translation_of_shill_cellular_with_state.onc"))); } // namespace onc } // namespace chromeos diff --git a/chromeos/test/data/network/shill_cellular_with_state.json b/chromeos/test/data/network/shill_cellular_with_state.json new file mode 100644 index 0000000..de1f21c --- /dev/null +++ b/chromeos/test/data/network/shill_cellular_with_state.json @@ -0,0 +1,11 @@ +{ + "Type": "cellular", + "Name": "Test Network", + "Cellular.ActivateOverNonCellularNetwork": false, + "Cellular.ActivationState": "activated", + "Cellular.ServingOperator": { + "code": "test-code", + "country": "test-country", + "name" : "test-name" + } +} diff --git a/chromeos/test/data/network/translation_of_shill_cellular_with_state.onc b/chromeos/test/data/network/translation_of_shill_cellular_with_state.onc new file mode 100644 index 0000000..77bd029 --- /dev/null +++ b/chromeos/test/data/network/translation_of_shill_cellular_with_state.onc @@ -0,0 +1,13 @@ +{ + "Type": "Cellular", + "Name": "Test Network", + "Cellular": { + "ActivateOverNonCellularNetwork": false, + "ActivationState": "activated", + "ServingOperator": { + "Code": "test-code", + "Country": "test-country", + "Name": "test-name" + } + } +} |