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

Side by Side Diff: chrome/browser/search_engines/template_url_parser.cc

Issue 6322001: Remove wstring from TemplateURL and friends.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 9 years, 11 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/search_engines/template_url_parser.h" 5 #include "chrome/browser/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
11 #include "base/logging.h" 11 #include "base/logging.h"
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
131 // We only expect PARAM nodes under the Url node 131 // We only expect PARAM nodes under the Url node
132 if (elements_.size() == 3 && elements_[0] == OPEN_SEARCH_DESCRIPTION && 132 if (elements_.size() == 3 && elements_[0] == OPEN_SEARCH_DESCRIPTION &&
133 elements_[1] == URL && elements_[2] == PARAM) 133 elements_[1] == URL && elements_[2] == PARAM)
134 return PARAM; 134 return PARAM;
135 135
136 return UNKNOWN; 136 return UNKNOWN;
137 } 137 }
138 138
139 TemplateURL* template_url() { return url_; } 139 TemplateURL* template_url() { return url_; }
140 140
141 void AddImageRef(const std::wstring& type, int width, int height) { 141 void AddImageRef(const std::string& type, int width, int height) {
142 if (width > 0 && height > 0) 142 if (width > 0 && height > 0)
143 current_image_.reset(new TemplateURL::ImageRef(type, width, height)); 143 current_image_.reset(new TemplateURL::ImageRef(type, width, height));
144 } 144 }
145 145
146 void EndImage() { 146 void EndImage() {
147 current_image_.reset(); 147 current_image_.reset();
148 } 148 }
149 149
150 void SetImageURL(const std::wstring& url) { 150 void SetImageURL(const GURL& url) {
151 if (current_image_.get()) { 151 if (current_image_.get()) {
152 current_image_->url = GURL(WideToUTF8(url)); 152 current_image_->url = url;
153 url_->add_image_ref(*current_image_); 153 url_->add_image_ref(*current_image_);
154 current_image_.reset(); 154 current_image_.reset();
155 } 155 }
156 } 156 }
157 157
158 void ResetString() { 158 void ResetString() {
159 string_.clear(); 159 string_.clear();
160 } 160 }
161 161
162 void AppendString(const std::wstring& string) { 162 void AppendString(const string16& string) {
163 string_ += string; 163 string_ += string;
164 } 164 }
165 165
166 const std::wstring& GetString() { 166 const string16& GetString() {
167 return string_; 167 return string_;
168 } 168 }
169 169
170 void ResetExtraParams() { 170 void ResetExtraParams() {
171 extra_params_.clear(); 171 extra_params_.clear();
172 } 172 }
173 173
174 void AddExtraParams(const std::string& key, const std::string& value) { 174 void AddExtraParams(const std::string& key, const std::string& value) {
175 if (parameter_filter_ && !parameter_filter_->KeepParameter(key, value)) 175 if (parameter_filter_ && !parameter_filter_->KeepParameter(key, value))
176 return; 176 return;
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
226 226
227 // Key is UTF8 encoded. 227 // Key is UTF8 encoded.
228 static std::map<std::string, ElementType>* kElementNameToElementTypeMap; 228 static std::map<std::string, ElementType>* kElementNameToElementTypeMap;
229 // TemplateURL supplied to Read method. It's owned by the caller, so we 229 // TemplateURL supplied to Read method. It's owned by the caller, so we
230 // don't need to free it. 230 // don't need to free it.
231 TemplateURL* url_; 231 TemplateURL* url_;
232 std::vector<ElementType> elements_; 232 std::vector<ElementType> elements_;
233 scoped_ptr<TemplateURL::ImageRef> current_image_; 233 scoped_ptr<TemplateURL::ImageRef> current_image_;
234 234
235 // Character content for the current element. 235 // Character content for the current element.
236 std::wstring string_; 236 string16 string_;
237 237
238 TemplateURLParser::ParameterFilter* parameter_filter_; 238 TemplateURLParser::ParameterFilter* parameter_filter_;
239 239
240 // The list of parameters parsed in the Param nodes of a Url node. 240 // The list of parameters parsed in the Param nodes of a Url node.
241 std::vector<Param> extra_params_; 241 std::vector<Param> extra_params_;
242 242
243 // The HTTP methods used. 243 // The HTTP methods used.
244 Method method_; 244 Method method_;
245 Method suggestion_method_; 245 Method suggestion_method_;
246 246
247 // If true, we are currently parsing a suggest URL, otherwise it is an HTML 247 // If true, we are currently parsing a suggest URL, otherwise it is an HTML
248 // search. Note that we don't need a stack as Url nodes cannot be nested. 248 // search. Note that we don't need a stack as Url nodes cannot be nested.
249 bool is_suggest_url_; 249 bool is_suggest_url_;
250 250
251 // Whether we should derive the image from the URL (when images are data 251 // Whether we should derive the image from the URL (when images are data
252 // URLs). 252 // URLs).
253 bool derive_image_from_url_; 253 bool derive_image_from_url_;
254 254
255 DISALLOW_COPY_AND_ASSIGN(ParsingContext); 255 DISALLOW_COPY_AND_ASSIGN(ParsingContext);
256 }; 256 };
257 257
258 // static 258 // static
259 std::map<std::string, ParsingContext::ElementType>* 259 std::map<std::string, ParsingContext::ElementType>*
260 ParsingContext::kElementNameToElementTypeMap = NULL; 260 ParsingContext::kElementNameToElementTypeMap = NULL;
261 261
262 std::wstring XMLCharToWide(const xmlChar* value) { 262 string16 XMLCharToUTF16(const xmlChar* value, int length) {
263 return UTF8ToWide(std::string((const char*)value)); 263 return UTF8ToUTF16(std::string((const char*)value, length));
264 }
265
266 std::wstring XMLCharToWide(const xmlChar* value, int length) {
267 return UTF8ToWide(std::string((const char*)value, length));
268 } 264 }
269 265
270 std::string XMLCharToString(const xmlChar* value) { 266 std::string XMLCharToString(const xmlChar* value) {
271 return std::string((const char*)value); 267 return std::string((const char*)value);
272 } 268 }
273 269
274 // Returns true if input_encoding contains a valid input encoding string. This 270 // Returns true if input_encoding contains a valid input encoding string. This
275 // doesn't verify that we have a valid encoding for the string, just that the 271 // doesn't verify that we have a valid encoding for the string, just that the
276 // string contains characters that constitute a valid input encoding. 272 // string contains characters that constitute a valid input encoding.
277 bool IsValidEncodingString(const std::string& input_encoding) { 273 bool IsValidEncodingString(const std::string& input_encoding) {
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
337 } 333 }
338 } 334 }
339 335
340 void ParseImage(const xmlChar** atts, ParsingContext* context) { 336 void ParseImage(const xmlChar** atts, ParsingContext* context) {
341 if (!atts) 337 if (!atts)
342 return; 338 return;
343 339
344 const xmlChar** attributes = atts; 340 const xmlChar** attributes = atts;
345 int width = 0; 341 int width = 0;
346 int height = 0; 342 int height = 0;
347 std::wstring type; 343 std::string type;
348 while (*attributes) { 344 while (*attributes) {
349 std::string name(XMLCharToString(*attributes)); 345 std::string name(XMLCharToString(*attributes));
350 const xmlChar* value = attributes[1]; 346 const xmlChar* value = attributes[1];
351 if (name == kImageTypeAttribute) { 347 if (name == kImageTypeAttribute) {
352 type = XMLCharToWide(value); 348 type = XMLCharToString(value);
353 } else if (name == kImageWidthAttribute) { 349 } else if (name == kImageWidthAttribute) {
354 base::StringToInt(XMLCharToString(value), &width); 350 base::StringToInt(XMLCharToString(value), &width);
355 } else if (name == kImageHeightAttribute) { 351 } else if (name == kImageHeightAttribute) {
356 base::StringToInt(XMLCharToString(value), &height); 352 base::StringToInt(XMLCharToString(value), &height);
357 } 353 }
358 attributes += 2; 354 attributes += 2;
359 } 355 }
360 if (width > 0 && height > 0 && !type.empty()) { 356 if (width > 0 && height > 0 && !type.empty()) {
361 // Valid Image URL. 357 // Valid Image URL.
362 context->AddImageRef(type, width, height); 358 context->AddImageRef(type, width, height);
363 } 359 }
364 } 360 }
365 361
366 void ParseParam(const xmlChar** atts, ParsingContext* context) { 362 void ParseParam(const xmlChar** atts, ParsingContext* context) {
367 if (!atts) 363 if (!atts)
368 return; 364 return;
369 365
370 const xmlChar** attributes = atts; 366 const xmlChar** attributes = atts;
371 std::wstring type;
372 std::string key, value; 367 std::string key, value;
373 while (*attributes) { 368 while (*attributes) {
374 std::string name(XMLCharToString(*attributes)); 369 std::string name(XMLCharToString(*attributes));
375 const xmlChar* val = attributes[1]; 370 const xmlChar* val = attributes[1];
376 if (name == kParamNameAttribute) { 371 if (name == kParamNameAttribute) {
377 key = XMLCharToString(val); 372 key = XMLCharToString(val);
378 } else if (name == kParamValueAttribute) { 373 } else if (name == kParamValueAttribute) {
379 value = XMLCharToString(val); 374 value = XMLCharToString(val);
380 } 375 }
381 attributes += 2; 376 attributes += 2;
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
480 void EndElementImpl(void *ctx, const xmlChar *name) { 475 void EndElementImpl(void *ctx, const xmlChar *name) {
481 ParsingContext* context = reinterpret_cast<ParsingContext*>(ctx); 476 ParsingContext* context = reinterpret_cast<ParsingContext*>(ctx);
482 switch (context->GetKnownType()) { 477 switch (context->GetKnownType()) {
483 case ParsingContext::SHORT_NAME: 478 case ParsingContext::SHORT_NAME:
484 context->template_url()->set_short_name(context->GetString()); 479 context->template_url()->set_short_name(context->GetString());
485 break; 480 break;
486 case ParsingContext::DESCRIPTION: 481 case ParsingContext::DESCRIPTION:
487 context->template_url()->set_description(context->GetString()); 482 context->template_url()->set_description(context->GetString());
488 break; 483 break;
489 case ParsingContext::IMAGE: { 484 case ParsingContext::IMAGE: {
490 GURL image_url(WideToUTF8(context->GetString())); 485 GURL image_url(UTF16ToUTF8(context->GetString()));
491 if (image_url.SchemeIs(chrome::kDataScheme)) { 486 if (image_url.SchemeIs(chrome::kDataScheme)) {
492 // TODO (jcampan): bug 1169256: when dealing with data URL, we need to 487 // TODO (jcampan): bug 1169256: when dealing with data URL, we need to
493 // decode the data URL in the renderer. For now, we'll just point to the 488 // decode the data URL in the renderer. For now, we'll just point to the
494 // fav icon from the URL. 489 // fav icon from the URL.
495 context->set_derive_image_from_url(true); 490 context->set_derive_image_from_url(true);
496 } else { 491 } else {
497 context->SetImageURL(context->GetString()); 492 context->SetImageURL(image_url);
498 } 493 }
499 context->EndImage(); 494 context->EndImage();
500 break; 495 break;
501 } 496 }
502 case ParsingContext::LANGUAGE: 497 case ParsingContext::LANGUAGE:
503 context->template_url()->add_language(context->GetString()); 498 context->template_url()->add_language(context->GetString());
504 break; 499 break;
505 case ParsingContext::INPUT_ENCODING: { 500 case ParsingContext::INPUT_ENCODING: {
506 std::string input_encoding = WideToASCII(context->GetString()); 501 std::string input_encoding = UTF16ToASCII(context->GetString());
507 if (IsValidEncodingString(input_encoding)) 502 if (IsValidEncodingString(input_encoding))
508 context->template_url()->add_input_encoding(input_encoding); 503 context->template_url()->add_input_encoding(input_encoding);
509 break; 504 break;
510 } 505 }
511 case ParsingContext::URL: 506 case ParsingContext::URL:
512 ProcessURLParams(context); 507 ProcessURLParams(context);
513 break; 508 break;
514 default: 509 default:
515 break; 510 break;
516 } 511 }
517 context->ResetString(); 512 context->ResetString();
518 context->PopElement(); 513 context->PopElement();
519 } 514 }
520 515
521 void CharactersImpl(void *ctx, const xmlChar *ch, int len) { 516 void CharactersImpl(void *ctx, const xmlChar *ch, int len) {
522 ParsingContext* context = reinterpret_cast<ParsingContext*>(ctx); 517 ParsingContext* context = reinterpret_cast<ParsingContext*>(ctx);
523 context->AppendString(XMLCharToWide(ch, len)); 518 context->AppendString(XMLCharToUTF16(ch, len));
524 } 519 }
525 520
526 // Returns true if the ref is null, or the url wrapped by ref is 521 // Returns true if the ref is null, or the url wrapped by ref is
527 // valid with a spec of http/https. 522 // valid with a spec of http/https.
528 bool IsHTTPRef(const TemplateURLRef* ref) { 523 bool IsHTTPRef(const TemplateURLRef* ref) {
529 if (ref == NULL) 524 if (ref == NULL)
530 return true; 525 return true;
531 GURL url(ref->url()); 526 GURL url(ref->url());
532 return (url.is_valid() && (url.SchemeIs(chrome::kHttpScheme) || 527 return (url.is_valid() && (url.SchemeIs(chrome::kHttpScheme) ||
533 url.SchemeIs(chrome::kHttpsScheme))); 528 url.SchemeIs(chrome::kHttpsScheme)));
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
583 return false; 578 return false;
584 if (context.suggestion_method() == ParsingContext::POST) 579 if (context.suggestion_method() == ParsingContext::POST)
585 url->SetSuggestionsURL("", 0, 0); 580 url->SetSuggestionsURL("", 0, 0);
586 581
587 if (!url->short_name().empty() && !url->description().empty()) { 582 if (!url->short_name().empty() && !url->description().empty()) {
588 // So far so good, make sure the urls are http. 583 // So far so good, make sure the urls are http.
589 return IsLegal(url); 584 return IsLegal(url);
590 } 585 }
591 return false; 586 return false;
592 } 587 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698