summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 11:33:43 +0000
committernkostylev@chromium.org <nkostylev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-04-24 11:33:43 +0000
commit2ec4e4bf8e81f90b90e861b5ca53b4de75705aa8 (patch)
tree4901a97361a2c2d240cf34d202401c05c9d0b9a6
parent960adc174bfa830e3f1fa9d46910cf4d5c539647 (diff)
downloadchromium_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.cc33
-rw-r--r--chrome/browser/chromeos/mobile_config.h30
-rw-r--r--chrome/browser/chromeos/mobile_config_unittest.cc33
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