Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(113)

Side by Side Diff: components/search_engines/template_url_parser.cc

Issue 426653002: Import keywords for search engines imported from Firefox (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Review comments Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/search_engines/template_url_parser.h" 5 #include "components/search_engines/template_url_parser.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 16 matching lines...) Expand all
27 // having to convert to wide, then do comparisons. 27 // having to convert to wide, then do comparisons.
28 28
29 // Defines for element names of the OSD document: 29 // Defines for element names of the OSD document:
30 const char kURLElement[] = "Url"; 30 const char kURLElement[] = "Url";
31 const char kParamElement[] = "Param"; 31 const char kParamElement[] = "Param";
32 const char kShortNameElement[] = "ShortName"; 32 const char kShortNameElement[] = "ShortName";
33 const char kImageElement[] = "Image"; 33 const char kImageElement[] = "Image";
34 const char kOpenSearchDescriptionElement[] = "OpenSearchDescription"; 34 const char kOpenSearchDescriptionElement[] = "OpenSearchDescription";
35 const char kFirefoxSearchDescriptionElement[] = "SearchPlugin"; 35 const char kFirefoxSearchDescriptionElement[] = "SearchPlugin";
36 const char kInputEncodingElement[] = "InputEncoding"; 36 const char kInputEncodingElement[] = "InputEncoding";
37 const char kAliasElement[] = "Alias";
37 38
38 // Various XML attributes used. 39 // Various XML attributes used.
39 const char kURLTypeAttribute[] = "type"; 40 const char kURLTypeAttribute[] = "type";
40 const char kURLTemplateAttribute[] = "template"; 41 const char kURLTemplateAttribute[] = "template";
41 const char kImageTypeAttribute[] = "type"; 42 const char kImageTypeAttribute[] = "type";
42 const char kImageWidthAttribute[] = "width"; 43 const char kImageWidthAttribute[] = "width";
43 const char kImageHeightAttribute[] = "height"; 44 const char kImageHeightAttribute[] = "height";
44 const char kParamNameAttribute[] = "name"; 45 const char kParamNameAttribute[] = "name";
45 const char kParamValueAttribute[] = "value"; 46 const char kParamValueAttribute[] = "value";
46 const char kParamMethodAttribute[] = "method"; 47 const char kParamMethodAttribute[] = "method";
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
108 public: 109 public:
109 // Enum of the known element types. 110 // Enum of the known element types.
110 enum ElementType { 111 enum ElementType {
111 UNKNOWN, 112 UNKNOWN,
112 OPEN_SEARCH_DESCRIPTION, 113 OPEN_SEARCH_DESCRIPTION,
113 URL, 114 URL,
114 PARAM, 115 PARAM,
115 SHORT_NAME, 116 SHORT_NAME,
116 IMAGE, 117 IMAGE,
117 INPUT_ENCODING, 118 INPUT_ENCODING,
119 ALIAS,
118 }; 120 };
119 121
120 enum Method { 122 enum Method {
121 GET, 123 GET,
122 POST 124 POST
123 }; 125 };
124 126
125 // Key/value of a Param node. 127 // Key/value of a Param node.
126 typedef std::pair<std::string, std::string> Param; 128 typedef std::pair<std::string, std::string> Param;
127 129
(...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after
233 break; 235 break;
234 } 236 }
235 context->string_.clear(); 237 context->string_.clear();
236 } 238 }
237 239
238 // static 240 // static
239 void TemplateURLParsingContext::EndElementImpl(void* ctx, const xmlChar* name) { 241 void TemplateURLParsingContext::EndElementImpl(void* ctx, const xmlChar* name) {
240 TemplateURLParsingContext* context = 242 TemplateURLParsingContext* context =
241 reinterpret_cast<TemplateURLParsingContext*>(ctx); 243 reinterpret_cast<TemplateURLParsingContext*>(ctx);
242 switch (context->GetKnownType()) { 244 switch (context->GetKnownType()) {
245 case TemplateURLParsingContext::URL:
246 context->ProcessURLParams();
247 break;
243 case TemplateURLParsingContext::SHORT_NAME: 248 case TemplateURLParsingContext::SHORT_NAME:
244 context->data_.short_name = context->string_; 249 context->data_.short_name = context->string_;
245 break; 250 break;
246 case TemplateURLParsingContext::IMAGE: { 251 case TemplateURLParsingContext::IMAGE: {
247 GURL image_url(base::UTF16ToUTF8(context->string_)); 252 GURL image_url(base::UTF16ToUTF8(context->string_));
248 if (image_url.SchemeIs(url::kDataScheme)) { 253 if (image_url.SchemeIs(url::kDataScheme)) {
249 // TODO (jcampan): bug 1169256: when dealing with data URL, we need to 254 // TODO (jcampan): bug 1169256: when dealing with data URL, we need to
250 // decode the data URL in the renderer. For now, we'll just point to the 255 // decode the data URL in the renderer. For now, we'll just point to the
251 // favicon from the URL. 256 // favicon from the URL.
252 context->derive_image_from_url_ = true; 257 context->derive_image_from_url_ = true;
253 } else if (context->image_is_valid_for_favicon_ && image_url.is_valid() && 258 } else if (context->image_is_valid_for_favicon_ && image_url.is_valid() &&
254 (image_url.SchemeIs(url::kHttpScheme) || 259 (image_url.SchemeIs(url::kHttpScheme) ||
255 image_url.SchemeIs(url::kHttpsScheme))) { 260 image_url.SchemeIs(url::kHttpsScheme))) {
256 context->data_.favicon_url = image_url; 261 context->data_.favicon_url = image_url;
257 } 262 }
258 context->image_is_valid_for_favicon_ = false; 263 context->image_is_valid_for_favicon_ = false;
259 break; 264 break;
260 } 265 }
261 case TemplateURLParsingContext::INPUT_ENCODING: { 266 case TemplateURLParsingContext::INPUT_ENCODING: {
262 std::string input_encoding = base::UTF16ToASCII(context->string_); 267 std::string input_encoding = base::UTF16ToASCII(context->string_);
263 if (IsValidEncodingString(input_encoding)) 268 if (IsValidEncodingString(input_encoding))
264 context->data_.input_encodings.push_back(input_encoding); 269 context->data_.input_encodings.push_back(input_encoding);
265 break; 270 break;
266 } 271 }
267 case TemplateURLParsingContext::URL: 272 case TemplateURLParsingContext::ALIAS: {
268 context->ProcessURLParams(); 273 context->data_.SetKeyword(context->string_);
274 context->data_.has_custom_keyword = true;
269 break; 275 break;
276 }
270 default: 277 default:
271 break; 278 break;
272 } 279 }
273 context->string_.clear(); 280 context->string_.clear();
274 context->elements_.pop_back(); 281 context->elements_.pop_back();
275 } 282 }
276 283
277 // static 284 // static
278 void TemplateURLParsingContext::CharactersImpl(void* ctx, 285 void TemplateURLParsingContext::CharactersImpl(void* ctx,
279 const xmlChar* ch, 286 const xmlChar* ch,
(...skipping 11 matching lines...) Expand all
291 return NULL; 298 return NULL;
292 if (suggestion_method_ == TemplateURLParsingContext::POST) 299 if (suggestion_method_ == TemplateURLParsingContext::POST)
293 data_.suggestions_url.clear(); 300 data_.suggestions_url.clear();
294 301
295 // If the image was a data URL, use the favicon from the search URL instead. 302 // If the image was a data URL, use the favicon from the search URL instead.
296 // (see the TODO in EndElementImpl()). 303 // (see the TODO in EndElementImpl()).
297 GURL search_url(data_.url()); 304 GURL search_url(data_.url());
298 if (derive_image_from_url_ && data_.favicon_url.is_empty()) 305 if (derive_image_from_url_ && data_.favicon_url.is_empty())
299 data_.favicon_url = TemplateURL::GenerateFaviconURL(search_url); 306 data_.favicon_url = TemplateURL::GenerateFaviconURL(search_url);
300 307
301 data_.SetKeyword(TemplateURL::GenerateKeyword(search_url)); 308 // Generate a keyword for this search engine if a custom one was not present
309 // in the imported data.
310 if (!data_.has_custom_keyword)
311 data_.SetKeyword(TemplateURL::GenerateKeyword(search_url));
312
302 data_.show_in_default_list = show_in_default_list; 313 data_.show_in_default_list = show_in_default_list;
303 314
304 // Bail if the search URL is empty or if either TemplateURLRef is invalid. 315 // Bail if the search URL is empty or if either TemplateURLRef is invalid.
305 scoped_ptr<TemplateURL> template_url(new TemplateURL(data_)); 316 scoped_ptr<TemplateURL> template_url(new TemplateURL(data_));
306 if (template_url->url().empty() || 317 if (template_url->url().empty() ||
307 !template_url->url_ref().IsValid(search_terms_data) || 318 !template_url->url_ref().IsValid(search_terms_data) ||
308 (!template_url->suggestions_url().empty() && 319 (!template_url->suggestions_url().empty() &&
309 !template_url->suggestions_url_ref().IsValid(search_terms_data))) { 320 !template_url->suggestions_url_ref().IsValid(search_terms_data))) {
310 return NULL; 321 return NULL;
311 } 322 }
312 323
313 return template_url.release(); 324 return template_url.release();
314 } 325 }
315 326
316 // static 327 // static
317 void TemplateURLParsingContext::InitMapping() { 328 void TemplateURLParsingContext::InitMapping() {
318 kElementNameToElementTypeMap = new std::map<std::string, ElementType>; 329 kElementNameToElementTypeMap = new std::map<std::string, ElementType>;
319 (*kElementNameToElementTypeMap)[kURLElement] = URL; 330 (*kElementNameToElementTypeMap)[kURLElement] = URL;
320 (*kElementNameToElementTypeMap)[kParamElement] = PARAM; 331 (*kElementNameToElementTypeMap)[kParamElement] = PARAM;
321 (*kElementNameToElementTypeMap)[kShortNameElement] = SHORT_NAME; 332 (*kElementNameToElementTypeMap)[kShortNameElement] = SHORT_NAME;
322 (*kElementNameToElementTypeMap)[kImageElement] = IMAGE; 333 (*kElementNameToElementTypeMap)[kImageElement] = IMAGE;
323 (*kElementNameToElementTypeMap)[kOpenSearchDescriptionElement] = 334 (*kElementNameToElementTypeMap)[kOpenSearchDescriptionElement] =
324 OPEN_SEARCH_DESCRIPTION; 335 OPEN_SEARCH_DESCRIPTION;
325 (*kElementNameToElementTypeMap)[kFirefoxSearchDescriptionElement] = 336 (*kElementNameToElementTypeMap)[kFirefoxSearchDescriptionElement] =
326 OPEN_SEARCH_DESCRIPTION; 337 OPEN_SEARCH_DESCRIPTION;
327 (*kElementNameToElementTypeMap)[kInputEncodingElement] = INPUT_ENCODING; 338 (*kElementNameToElementTypeMap)[kInputEncodingElement] = INPUT_ENCODING;
339 (*kElementNameToElementTypeMap)[kAliasElement] = ALIAS;
328 } 340 }
329 341
330 void TemplateURLParsingContext::ParseURL(const xmlChar** atts) { 342 void TemplateURLParsingContext::ParseURL(const xmlChar** atts) {
331 if (!atts) 343 if (!atts)
332 return; 344 return;
333 345
334 std::string template_url; 346 std::string template_url;
335 bool is_post = false; 347 bool is_post = false;
336 bool is_html_url = false; 348 bool is_html_url = false;
337 bool is_suggest_url = false; 349 bool is_suggest_url = false;
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 sax_handler.startElement = &TemplateURLParsingContext::StartElementImpl; 496 sax_handler.startElement = &TemplateURLParsingContext::StartElementImpl;
485 sax_handler.endElement = &TemplateURLParsingContext::EndElementImpl; 497 sax_handler.endElement = &TemplateURLParsingContext::EndElementImpl;
486 sax_handler.characters = &TemplateURLParsingContext::CharactersImpl; 498 sax_handler.characters = &TemplateURLParsingContext::CharactersImpl;
487 int error = xmlSAXUserParseMemory(&sax_handler, &context, data, 499 int error = xmlSAXUserParseMemory(&sax_handler, &context, data,
488 static_cast<int>(length)); 500 static_cast<int>(length));
489 xmlSubstituteEntitiesDefault(last_sub_entities_value); 501 xmlSubstituteEntitiesDefault(last_sub_entities_value);
490 502
491 return error ? 503 return error ?
492 NULL : context.GetTemplateURL(search_terms_data, show_in_default_list); 504 NULL : context.GetTemplateURL(search_terms_data, show_in_default_list);
493 } 505 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698