summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/extensions/api/settings_overrides/settings_overrides_browsertest.cc26
-rw-r--r--chrome/common/extensions/extension_l10n_util.cc63
-rw-r--r--chrome/test/data/extensions/settings_override/_locales/de/messages.json6
-rw-r--r--chrome/test/data/extensions/settings_override/manifest.json23
-rw-r--r--extensions/common/manifest_constants.cc2
-rw-r--r--extensions/common/manifest_constants.h1
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[];