Index: components/search_engines/template_url_parser.cc |
diff --git a/components/search_engines/template_url_parser.cc b/components/search_engines/template_url_parser.cc |
index 5c6eae5ef587141ae01d1cddb2f5123054ec9177..17d3beea948b9eed3531509e1fbc2c9184c2a26b 100644 |
--- a/components/search_engines/template_url_parser.cc |
+++ b/components/search_engines/template_url_parser.cc |
@@ -34,6 +34,7 @@ const char kImageElement[] = "Image"; |
const char kOpenSearchDescriptionElement[] = "OpenSearchDescription"; |
const char kFirefoxSearchDescriptionElement[] = "SearchPlugin"; |
const char kInputEncodingElement[] = "InputEncoding"; |
+const char kAliasElement[] = "Alias"; |
// Various XML attributes used. |
const char kURLTypeAttribute[] = "type"; |
@@ -115,6 +116,7 @@ class TemplateURLParsingContext { |
SHORT_NAME, |
IMAGE, |
INPUT_ENCODING, |
+ ALIAS, |
}; |
enum Method { |
@@ -240,6 +242,9 @@ void TemplateURLParsingContext::EndElementImpl(void* ctx, const xmlChar* name) { |
TemplateURLParsingContext* context = |
reinterpret_cast<TemplateURLParsingContext*>(ctx); |
switch (context->GetKnownType()) { |
+ case TemplateURLParsingContext::URL: |
+ context->ProcessURLParams(); |
+ break; |
case TemplateURLParsingContext::SHORT_NAME: |
context->data_.short_name = context->string_; |
break; |
@@ -264,9 +269,11 @@ void TemplateURLParsingContext::EndElementImpl(void* ctx, const xmlChar* name) { |
context->data_.input_encodings.push_back(input_encoding); |
break; |
} |
- case TemplateURLParsingContext::URL: |
- context->ProcessURLParams(); |
+ case TemplateURLParsingContext::ALIAS: { |
+ context->data_.SetKeyword(context->string_); |
+ context->data_.has_custom_keyword = true; |
break; |
+ } |
default: |
break; |
} |
@@ -298,7 +305,11 @@ TemplateURL* TemplateURLParsingContext::GetTemplateURL( |
if (derive_image_from_url_ && data_.favicon_url.is_empty()) |
data_.favicon_url = TemplateURL::GenerateFaviconURL(search_url); |
- data_.SetKeyword(TemplateURL::GenerateKeyword(search_url)); |
+ // Generate a keyword for this search engine if a custom one was not present |
+ // in the imported data. |
+ if (!data_.has_custom_keyword) |
+ data_.SetKeyword(TemplateURL::GenerateKeyword(search_url)); |
+ |
data_.show_in_default_list = show_in_default_list; |
// Bail if the search URL is empty or if either TemplateURLRef is invalid. |
@@ -325,6 +336,7 @@ void TemplateURLParsingContext::InitMapping() { |
(*kElementNameToElementTypeMap)[kFirefoxSearchDescriptionElement] = |
OPEN_SEARCH_DESCRIPTION; |
(*kElementNameToElementTypeMap)[kInputEncodingElement] = INPUT_ENCODING; |
+ (*kElementNameToElementTypeMap)[kAliasElement] = ALIAS; |
} |
void TemplateURLParsingContext::ParseURL(const xmlChar** atts) { |