[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
parent 960adc17
......@@ -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;
}
......
......@@ -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_;
......
......@@ -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
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment