summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorarmansito@chromium.org <armansito@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-17 00:16:21 +0000
committerarmansito@chromium.org <armansito@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-08-17 00:16:21 +0000
commitd75386c7f9a18276ef670fa96e099c3687c598f5 (patch)
treeba6a27882e0b02b0b6de6ee2679a66e2a55384d5
parent62cf8a1f8683d5788f6f4fb07e89512ee9f8f527 (diff)
downloadchromium_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.cc6
-rw-r--r--chromeos/network/onc/onc_constants.h8
-rw-r--r--chromeos/network/onc/onc_signature.cc16
-rw-r--r--chromeos/network/onc/onc_signature.h1
-rw-r--r--chromeos/network/onc/onc_translation_tables.cc10
-rw-r--r--chromeos/network/onc/onc_translator_shill_to_onc.cc48
-rw-r--r--chromeos/network/onc/onc_translator_unittest.cc4
-rw-r--r--chromeos/test/data/network/shill_cellular_with_state.json11
-rw-r--r--chromeos/test/data/network/translation_of_shill_cellular_with_state.onc13
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"
+ }
+ }
+}