diff options
6 files changed, 91 insertions, 30 deletions
diff --git a/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc b/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc index 240bdd6..4c478ed 100644 --- a/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc +++ b/chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc @@ -79,13 +79,29 @@ IN_PROC_BROWSER_TEST_F(ExtensionBrowserTest, OverrideSettings) { TemplateURL* extension_provider = url_service->GetDefaultSearchProvider(); EXPECT_EQ(TemplateURL::NORMAL_CONTROLLED_BY_EXTENSION, extension_provider->GetType()); - EXPECT_EQ(ASCIIToUTF16("first"), extension_provider->short_name()); - EXPECT_EQ(ASCIIToUTF16("firstkey"), extension_provider->keyword()); - EXPECT_EQ("http://www.foo.com/s?q={searchTerms}", extension_provider->url()); - EXPECT_EQ(GURL("http://www.foo.com/favicon.ico"), + EXPECT_EQ(ASCIIToUTF16("name.de"), extension_provider->short_name()); + EXPECT_EQ(ASCIIToUTF16("keyword.de"), extension_provider->keyword()); + EXPECT_EQ("http://www.foo.de/s?q={searchTerms}", extension_provider->url()); + EXPECT_EQ(GURL("http://www.foo.de/favicon.ico"), extension_provider->favicon_url()); - EXPECT_EQ("http://www.foo.com/suggest?q={searchTerms}", + EXPECT_EQ("http://www.foo.de/suggest?q={searchTerms}", extension_provider->suggestions_url()); + EXPECT_EQ("http://www.foo.de/instant?q={searchTerms}", + extension_provider->instant_url()); + EXPECT_EQ("http://www.foo.de/image?q={searchTerms}", + extension_provider->image_url()); + EXPECT_EQ("search_lang=de", extension_provider->search_url_post_params()); + EXPECT_EQ("suggest_lang=de", + extension_provider->suggestions_url_post_params()); + EXPECT_EQ("instant_lang=de", extension_provider->instant_url_post_params()); + EXPECT_EQ("image_lang=de", extension_provider->image_url_post_params()); + const std::string alternate_urls[] = { + "http://www.moo.de/s?q={searchTerms}", + "http://www.noo.de/s?q={searchTerms}" + }; + EXPECT_EQ(std::vector<std::string>( + alternate_urls, alternate_urls + arraysize(alternate_urls)), + extension_provider->alternate_urls()); EXPECT_EQ(std::vector<std::string>(1, "UTF-8"), extension_provider->input_encodings()); diff --git a/chrome/common/extensions/extension_l10n_util.cc b/chrome/common/extensions/extension_l10n_util.cc index 1fd4c32..1211add 100644 --- a/chrome/common/extensions/extension_l10n_util.cc +++ b/chrome/common/extensions/extension_l10n_util.cc @@ -58,13 +58,51 @@ base::DictionaryValue* LoadMessageFile(const base::FilePath& locale_path, return static_cast<base::DictionaryValue*>(dictionary); } -} // namespace +// Localizes manifest value of string type for a given key. +bool LocalizeManifestValue(const std::string& key, + const extensions::MessageBundle& messages, + base::DictionaryValue* manifest, + std::string* error) { + std::string result; + if (!manifest->GetString(key, &result)) + return true; + + if (!messages.ReplaceMessages(&result, error)) + return false; + + manifest->SetString(key, result); + return true; +} + +// Localizes manifest value of list type for a given key. +bool LocalizeManifestListValue(const std::string& key, + const extensions::MessageBundle& messages, + base::DictionaryValue* manifest, + std::string* error) { + ListValue* list = NULL; + if (!manifest->GetList(key, &list)) + return true; -static std::string& GetProcessLocale() { + bool ret = true; + for (size_t i = 0; i < list->GetSize(); ++i) { + std::string result; + if (list->GetString(i, &result)) { + if (messages.ReplaceMessages(&result, error)) + list->Set(i, new StringValue(result)); + else + ret = false; + } + } + return ret; +} + +std::string& GetProcessLocale() { CR_DEFINE_STATIC_LOCAL(std::string, locale, ()); return locale; } +} // namespace + namespace extension_l10n_util { void SetProcessLocale(const std::string& locale) { @@ -93,22 +131,6 @@ bool ShouldRelocalizeManifest(const base::DictionaryValue* manifest) { return manifest_current_locale != CurrentLocaleOrDefault(); } -// Localizes manifest value for a given key. -static bool LocalizeManifestValue(const std::string& key, - const extensions::MessageBundle& messages, - base::DictionaryValue* manifest, - std::string* error) { - std::string result; - if (!manifest->GetString(key, &result)) - return true; - - if (!messages.ReplaceMessages(&result, error)) - return false; - - manifest->SetString(key, result); - return true; -} - bool LocalizeManifest(const extensions::MessageBundle& messages, base::DictionaryValue* manifest, std::string* error) { @@ -222,7 +244,10 @@ bool LocalizeManifest(const extensions::MessageBundle& messages, iter.Advance()) { key.assign(base::StringPrintf("%s.%s", keys::kSearchProvider, iter.key().c_str())); - if (!LocalizeManifestValue(key, messages, manifest, error)) + bool success = (key == keys::kSettingsOverrideAlternateUrls) ? + LocalizeManifestListValue(key, messages, manifest, error) : + LocalizeManifestValue(key, messages, manifest, error); + if (!success) return false; } } diff --git a/chrome/test/data/extensions/settings_override/_locales/de/messages.json b/chrome/test/data/extensions/settings_override/_locales/de/messages.json new file mode 100644 index 0000000..b1c3b53 --- /dev/null +++ b/chrome/test/data/extensions/settings_override/_locales/de/messages.json @@ -0,0 +1,6 @@ +{ + "url_domain": { + "message": "de", + "description": "Top level domain des Suchanbieters." + } +} diff --git a/chrome/test/data/extensions/settings_override/manifest.json b/chrome/test/data/extensions/settings_override/manifest.json index 7891124..fbe38aa 100644 --- a/chrome/test/data/extensions/settings_override/manifest.json +++ b/chrome/test/data/extensions/settings_override/manifest.json @@ -6,14 +6,25 @@ "chrome_settings_overrides": { "homepage": "http://www.homepage.com", "search_provider": { - "name": "first", - "keyword": "firstkey", - "search_url": "http://www.foo.com/s?q={searchTerms}", - "favicon_url": "http://www.foo.com/favicon.ico", - "suggest_url": "http://www.foo.com/suggest?q={searchTerms}", + "name": "name.__MSG_url_domain__", + "keyword": "keyword.__MSG_url_domain__", + "search_url": "http://www.foo.__MSG_url_domain__/s?q={searchTerms}", + "favicon_url": "http://www.foo.__MSG_url_domain__/favicon.ico", + "suggest_url": "http://www.foo.__MSG_url_domain__/suggest?q={searchTerms}", + "instant_url": "http://www.foo.__MSG_url_domain__/instant?q={searchTerms}", + "image_url": "http://www.foo.__MSG_url_domain__/image?q={searchTerms}", + "search_url_post_params": "search_lang=__MSG_url_domain__", + "suggest_url_post_params": "suggest_lang=__MSG_url_domain__", + "instant_url_post_params": "instant_lang=__MSG_url_domain__", + "image_url_post_params": "image_lang=__MSG_url_domain__", + "alternate_urls": [ + "http://www.moo.__MSG_url_domain__/s?q={searchTerms}", + "http://www.noo.__MSG_url_domain__/s?q={searchTerms}" + ], "encoding": "UTF-8", "is_default": true }, "startup_pages": ["http://www.startup.com"] - } + }, + "default_locale": "de" } diff --git a/extensions/common/manifest_constants.cc b/extensions/common/manifest_constants.cc index 26df7ce..962ff47 100644 --- a/extensions/common/manifest_constants.cc +++ b/extensions/common/manifest_constants.cc @@ -113,6 +113,8 @@ const char kSandboxedPagesCSP[] = "sandbox.content_security_policy"; const char kScriptBadge[] = "script_badge"; const char kSearchProvider[] = "chrome_settings_overrides.search_provider"; const char kSettingsOverride[] = "chrome_settings_overrides"; +const char kSettingsOverrideAlternateUrls[] = + "chrome_settings_overrides.search_provider.alternate_urls"; const char kShiftKey[] = "shiftKey"; const char kShortcutKey[] = "shortcutKey"; const char kShortName[] = "short_name"; diff --git a/extensions/common/manifest_constants.h b/extensions/common/manifest_constants.h index 846845e..9b3fe9b 100644 --- a/extensions/common/manifest_constants.h +++ b/extensions/common/manifest_constants.h @@ -122,6 +122,7 @@ extern const char kSandboxedPagesCSP[]; extern const char kScriptBadge[]; extern const char kSearchProvider[]; extern const char kSettingsOverride[]; +extern const char kSettingsOverrideAlternateUrls[]; extern const char kShiftKey[]; extern const char kShortcutKey[]; extern const char kShortName[]; |