diff options
author | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-24 11:33:43 +0000 |
---|---|---|
committer | nkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-04-24 11:33:43 +0000 |
commit | 2ec4e4bf8e81f90b90e861b5ca53b4de75705aa8 (patch) | |
tree | 4901a97361a2c2d240cf34d202401c05c9d0b9a6 | |
parent | 960adc174bfa830e3f1fa9d46910cf4d5c539647 (diff) | |
download | chromium_src-2ec4e4bf8e81f90b90e861b5ca53b4de75705aa8.zip chromium_src-2ec4e4bf8e81f90b90e861b5ca53b4de75705aa8.tar.gz chromium_src-2ec4e4bf8e81f90b90e861b5ca53b4de75705aa8.tar.bz2 |
[cros] Add support for locale specific configuration in mobile config.
BUG=chrome-os-partner:8092
TEST=MobileConfigTest
Review URL: http://codereview.chromium.org/10141006
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@133667 0039d316-1c4b-4281-b951-d872f2087c98
-rw-r--r-- | chrome/browser/chromeos/mobile_config.cc | 33 | ||||
-rw-r--r-- | chrome/browser/chromeos/mobile_config.h | 30 | ||||
-rw-r--r-- | chrome/browser/chromeos/mobile_config_unittest.cc | 33 |
3 files changed, 94 insertions, 2 deletions
diff --git a/chrome/browser/chromeos/mobile_config.cc b/chrome/browser/chromeos/mobile_config.cc index a655ae2..0fbb479 100644 --- a/chrome/browser/chromeos/mobile_config.cc +++ b/chrome/browser/chromeos/mobile_config.cc @@ -44,6 +44,10 @@ const char kDealExpireDateAttr[] = "expire_date"; const char kLocalizedContentAttr[] = "localized_content"; const char kNotificationTextAttr[] = "notification_text"; +// Initial locale carrier config attributes. +const char kInitialLocalesAttr[] = "initial_locales"; +const char kSetupURLAttr[] = "setup_url"; + // Local config properties. const char kExcludeDealsAttr[] = "exclude_deals"; @@ -192,6 +196,20 @@ void MobileConfig::Carrier::RemoveDeals() { STLDeleteValues(&deals_); } +// MobileConfig::LocaleConfig implementation. ---------------------------------- + +MobileConfig::LocaleConfig::LocaleConfig(DictionaryValue* locale_dict) { + InitFromDictionary(locale_dict); +} + +MobileConfig::LocaleConfig::~LocaleConfig() { +} + +void MobileConfig::LocaleConfig::InitFromDictionary( + base::DictionaryValue* locale_dict) { + locale_dict->GetString(kSetupURLAttr, &setup_url_); +} + // MobileConfig implementation, public ----------------------------------------- // static @@ -215,6 +233,10 @@ const MobileConfig::Carrier* MobileConfig::GetCarrier( return NULL; } +const MobileConfig::LocaleConfig* MobileConfig::GetLocaleConfig() const { + return locale_config_.get(); +} + // MobileConfig implementation, protected -------------------------------------- bool MobileConfig::LoadManifestFromString(const std::string& manifest) { @@ -264,6 +286,17 @@ bool MobileConfig::LoadManifestFromString(const std::string& manifest) { } } + DictionaryValue* initial_locales = NULL; + if (root_.get() && root_->GetDictionary(kInitialLocalesAttr, + &initial_locales)) { + DictionaryValue* locale_config_dict = NULL; + // Search for a config based on current initial locale. + if (initial_locales->GetDictionary(initial_locale_, + &locale_config_dict)) { + locale_config_.reset(new LocaleConfig(locale_config_dict)); + } + } + return true; } diff --git a/chrome/browser/chromeos/mobile_config.h b/chrome/browser/chromeos/mobile_config.h index 4f4f407..1a37f40 100644 --- a/chrome/browser/chromeos/mobile_config.h +++ b/chrome/browser/chromeos/mobile_config.h @@ -116,6 +116,27 @@ class MobileConfig : public CustomizationDocument { DISALLOW_COPY_AND_ASSIGN(Carrier); }; + // Carrier config for a specific initial locale. + class LocaleConfig { + public: + explicit LocaleConfig(base::DictionaryValue* locale_dict); + ~LocaleConfig(); + + const std::string& setup_url() const { return setup_url_; } + + // Initializes local config carrier from supplied dictionary. + // Multiple calls supported (i.e. second call for local config). + void InitFromDictionary(base::DictionaryValue* locale_dict); + + private: + // Carrier setup URL. Used in network menu ("Set-up Mobile Data" link). + // Displayed when SIM card is not installed on the device with a + // particular initial locale. + std::string setup_url_; + + DISALLOW_COPY_AND_ASSIGN(LocaleConfig); + }; + // External carrier ID (ex. "Verizon (us)") mapping to internal carrier ID. typedef std::map<std::string, std::string> CarrierIdMap; @@ -124,9 +145,13 @@ class MobileConfig : public CustomizationDocument { static MobileConfig* GetInstance(); - // Returns carrier by external ID. + // Returns carrier by external ID or NULL if there's no such carrier. const MobileConfig::Carrier* GetCarrier(const std::string& carrier_id) const; + // Returns locale specific config by initial locale or NULL + // if there's no such config defined. + const MobileConfig::LocaleConfig* GetLocaleConfig() const; + protected: virtual bool LoadManifestFromString(const std::string& manifest) OVERRIDE; @@ -165,6 +190,9 @@ class MobileConfig : public CustomizationDocument { // Carrier configuration (including carrier deals). Carriers carriers_; + // Initial locale specific config if defined. + scoped_ptr<LocaleConfig> locale_config_; + // Initial locale value. std::string initial_locale_; diff --git a/chrome/browser/chromeos/mobile_config_unittest.cc b/chrome/browser/chromeos/mobile_config_unittest.cc index 10c76b6..5f81513 100644 --- a/chrome/browser/chromeos/mobile_config_unittest.cc +++ b/chrome/browser/chromeos/mobile_config_unittest.cc @@ -46,6 +46,11 @@ const char kGoodMobileConfig[] = " ],\n" " }," " }," + " \"initial_locales\" : {\n" + " \"en-US\" : {\n" + " \"setup_url\" : \"accounts.carrier.com\",\n" + " }," + " }," "}"; const char kOldDealMobileConfig[] = @@ -106,7 +111,12 @@ const char kLocalMobileConfig[] = " },\n" " ],\n" " }," - " }," + " }," + " \"initial_locales\" : {\n" + " \"en-US\" : {\n" + " \"setup_url\" : \"accounts.carrier.com/localized/\",\n" + " }," + " }," "}"; } // anonymous namespace @@ -139,6 +149,17 @@ TEST(MobileConfigTest, Basic) { base::Time reference_time; base::Time::FromString("31/12/12 0:00", &reference_time); EXPECT_EQ(reference_time, deal->expire_date()); + + const MobileConfig::LocaleConfig* locale_config; + locale_config = config.GetLocaleConfig(); + EXPECT_TRUE(locale_config != NULL); + EXPECT_EQ("accounts.carrier.com", locale_config->setup_url()); + + // Check same manifest but with another initial locale. + MobileConfig config_uk(kGoodMobileConfig, "en-GB"); + EXPECT_TRUE(config_uk.IsReady()); + locale_config = config_uk.GetLocaleConfig(); + EXPECT_TRUE(locale_config == NULL); } TEST(MobileConfigTest, OldDeal) { @@ -213,6 +234,16 @@ TEST(MobileConfigTest, LocalConfig) { base::Time reference_time; base::Time::FromString("31/12/13 0:00", &reference_time); EXPECT_EQ(reference_time, deal->expire_date()); + + // Now reload same global/local config files but with proper initial locale. + MobileConfig config_us(kGoodMobileConfig, "en-US"); + EXPECT_TRUE(config_us.IsReady()); + config_us.LoadManifestFromString(kLocalMobileConfig); + EXPECT_TRUE(config_us.IsReady()); + const MobileConfig::LocaleConfig* locale_config; + locale_config = config_us.GetLocaleConfig(); + EXPECT_TRUE(locale_config != NULL); + EXPECT_EQ("accounts.carrier.com/localized/", locale_config->setup_url()); } } // namespace chromeos |