| OLD | NEW |
| 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.h" | 5 #include "chrome/browser/search_engines/template_url.h" |
| 6 | 6 |
| 7 #include "app/l10n_util.h" | 7 #include "app/l10n_util.h" |
| 8 #include "base/i18n/icu_string_conversions.h" | 8 #include "base/i18n/icu_string_conversions.h" |
| 9 #include "base/i18n/rtl.h" | 9 #include "base/i18n/rtl.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| 11 #include "base/string_number_conversions.h" | 11 #include "base/string_number_conversions.h" |
| (...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 255 } | 255 } |
| 256 } | 256 } |
| 257 | 257 |
| 258 // static | 258 // static |
| 259 void TemplateURLRef::SetGoogleBaseURL(std::string* google_base_url) { | 259 void TemplateURLRef::SetGoogleBaseURL(std::string* google_base_url) { |
| 260 UIThreadSearchTermsData::SetGoogleBaseURL(google_base_url); | 260 UIThreadSearchTermsData::SetGoogleBaseURL(google_base_url); |
| 261 } | 261 } |
| 262 | 262 |
| 263 std::string TemplateURLRef::ReplaceSearchTerms( | 263 std::string TemplateURLRef::ReplaceSearchTerms( |
| 264 const TemplateURL& host, | 264 const TemplateURL& host, |
| 265 const std::wstring& terms, | 265 const string16& terms, |
| 266 int accepted_suggestion, | 266 int accepted_suggestion, |
| 267 const std::wstring& original_query_for_suggestion) const { | 267 const string16& original_query_for_suggestion) const { |
| 268 UIThreadSearchTermsData search_terms_data; | 268 UIThreadSearchTermsData search_terms_data; |
| 269 return ReplaceSearchTermsUsingTermsData(host, | 269 return ReplaceSearchTermsUsingTermsData(host, |
| 270 terms, | 270 terms, |
| 271 accepted_suggestion, | 271 accepted_suggestion, |
| 272 original_query_for_suggestion, | 272 original_query_for_suggestion, |
| 273 search_terms_data); | 273 search_terms_data); |
| 274 } | 274 } |
| 275 | 275 |
| 276 std::string TemplateURLRef::ReplaceSearchTermsUsingTermsData( | 276 std::string TemplateURLRef::ReplaceSearchTermsUsingTermsData( |
| 277 const TemplateURL& host, | 277 const TemplateURL& host, |
| 278 const std::wstring& terms, | 278 const string16& terms, |
| 279 int accepted_suggestion, | 279 int accepted_suggestion, |
| 280 const std::wstring& original_query_for_suggestion, | 280 const string16& original_query_for_suggestion, |
| 281 const SearchTermsData& search_terms_data) const { | 281 const SearchTermsData& search_terms_data) const { |
| 282 ParseIfNecessaryUsingTermsData(search_terms_data); | 282 ParseIfNecessaryUsingTermsData(search_terms_data); |
| 283 if (!valid_) | 283 if (!valid_) |
| 284 return std::string(); | 284 return std::string(); |
| 285 | 285 |
| 286 if (replacements_.empty()) | 286 if (replacements_.empty()) |
| 287 return parsed_url_; | 287 return parsed_url_; |
| 288 | 288 |
| 289 // Determine if the search terms are in the query or before. We're escaping | 289 // Determine if the search terms are in the query or before. We're escaping |
| 290 // space as '+' in the former case and as '%20' in the latter case. | 290 // space as '+' in the former case and as '%20' in the latter case. |
| 291 bool is_in_query = true; | 291 bool is_in_query = true; |
| 292 for (Replacements::iterator i = replacements_.begin(); | 292 for (Replacements::iterator i = replacements_.begin(); |
| 293 i != replacements_.end(); ++i) { | 293 i != replacements_.end(); ++i) { |
| 294 if (i->type == SEARCH_TERMS) { | 294 if (i->type == SEARCH_TERMS) { |
| 295 std::wstring::size_type query_start = parsed_url_.find('?'); | 295 string16::size_type query_start = parsed_url_.find('?'); |
| 296 is_in_query = query_start != std::wstring::npos && | 296 is_in_query = query_start != string16::npos && |
| 297 (static_cast<std::wstring::size_type>(i->index) > query_start); | 297 (static_cast<string16::size_type>(i->index) > query_start); |
| 298 break; | 298 break; |
| 299 } | 299 } |
| 300 } | 300 } |
| 301 | 301 |
| 302 string16 encoded_terms; | 302 string16 encoded_terms; |
| 303 string16 encoded_original_query; | 303 string16 encoded_original_query; |
| 304 std::string input_encoding; | 304 std::string input_encoding; |
| 305 // If the search terms are in query - escape them respecting the encoding. | 305 // If the search terms are in query - escape them respecting the encoding. |
| 306 if (is_in_query) { | 306 if (is_in_query) { |
| 307 // Encode the search terms so that we know the encoding. | 307 // Encode the search terms so that we know the encoding. |
| 308 const std::vector<std::string>& encodings = host.input_encodings(); | 308 const std::vector<std::string>& encodings = host.input_encodings(); |
| 309 for (size_t i = 0; i < encodings.size(); ++i) { | 309 for (size_t i = 0; i < encodings.size(); ++i) { |
| 310 if (EscapeQueryParamValue(WideToUTF16Hack(terms), | 310 if (EscapeQueryParamValue(terms, |
| 311 encodings[i].c_str(), true, | 311 encodings[i].c_str(), true, |
| 312 &encoded_terms)) { | 312 &encoded_terms)) { |
| 313 if (!original_query_for_suggestion.empty()) { | 313 if (!original_query_for_suggestion.empty()) { |
| 314 EscapeQueryParamValue(WideToUTF16Hack(original_query_for_suggestion), | 314 EscapeQueryParamValue(original_query_for_suggestion, |
| 315 encodings[i].c_str(), | 315 encodings[i].c_str(), |
| 316 true, | 316 true, |
| 317 &encoded_original_query); | 317 &encoded_original_query); |
| 318 } | 318 } |
| 319 input_encoding = encodings[i]; | 319 input_encoding = encodings[i]; |
| 320 break; | 320 break; |
| 321 } | 321 } |
| 322 } | 322 } |
| 323 if (input_encoding.empty()) { | 323 if (input_encoding.empty()) { |
| 324 encoded_terms = WideToUTF16Hack( | 324 encoded_terms = EscapeQueryParamValueUTF8(terms, true); |
| 325 EscapeQueryParamValueUTF8(terms, true)); | |
| 326 if (!original_query_for_suggestion.empty()) { | 325 if (!original_query_for_suggestion.empty()) { |
| 327 encoded_original_query = | 326 encoded_original_query = |
| 328 WideToUTF16Hack(EscapeQueryParamValueUTF8( | 327 EscapeQueryParamValueUTF8(original_query_for_suggestion, true); |
| 329 original_query_for_suggestion, true)); | |
| 330 } | 328 } |
| 331 input_encoding = "UTF-8"; | 329 input_encoding = "UTF-8"; |
| 332 } | 330 } |
| 333 } else { | 331 } else { |
| 334 encoded_terms = WideToUTF16Hack(UTF8ToWide(EscapePath(WideToUTF8(terms)))); | 332 encoded_terms = UTF8ToUTF16(EscapePath(UTF16ToUTF8(terms))); |
| 335 input_encoding = "UTF-8"; | 333 input_encoding = "UTF-8"; |
| 336 } | 334 } |
| 337 | 335 |
| 338 std::string url = parsed_url_; | 336 std::string url = parsed_url_; |
| 339 | 337 |
| 340 // replacements_ is ordered in ascending order, as such we need to iterate | 338 // replacements_ is ordered in ascending order, as such we need to iterate |
| 341 // from the back. | 339 // from the back. |
| 342 for (Replacements::reverse_iterator i = replacements_.rbegin(); | 340 for (Replacements::reverse_iterator i = replacements_.rbegin(); |
| 343 i != replacements_.rend(); ++i) { | 341 i != replacements_.rend(); ++i) { |
| 344 switch (i->type) { | 342 switch (i->type) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 366 url.insert(i->index, "oq=" + UTF16ToUTF8(encoded_original_query) + | 364 url.insert(i->index, "oq=" + UTF16ToUTF8(encoded_original_query) + |
| 367 "&"); | 365 "&"); |
| 368 break; | 366 break; |
| 369 | 367 |
| 370 case GOOGLE_RLZ: { | 368 case GOOGLE_RLZ: { |
| 371 // On platforms that don't have RLZ, we still want this branch | 369 // On platforms that don't have RLZ, we still want this branch |
| 372 // to happen so that we replace the RLZ template with the | 370 // to happen so that we replace the RLZ template with the |
| 373 // empty string. (If we don't handle this case, we hit a | 371 // empty string. (If we don't handle this case, we hit a |
| 374 // NOTREACHED below.) | 372 // NOTREACHED below.) |
| 375 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) | 373 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) |
| 376 std::wstring rlz_string = search_terms_data.GetRlzParameterValue(); | 374 string16 rlz_string = search_terms_data.GetRlzParameterValue(); |
| 377 if (!rlz_string.empty()) { | 375 if (!rlz_string.empty()) { |
| 378 rlz_string = L"rlz=" + rlz_string + L"&"; | 376 rlz_string = L"rlz=" + rlz_string + L"&"; |
| 379 url.insert(i->index, WideToUTF8(rlz_string)); | 377 url.insert(i->index, UTF16ToUTF8(rlz_string)); |
| 380 } | 378 } |
| 381 #endif | 379 #endif |
| 382 break; | 380 break; |
| 383 } | 381 } |
| 384 | 382 |
| 385 case GOOGLE_UNESCAPED_SEARCH_TERMS: { | 383 case GOOGLE_UNESCAPED_SEARCH_TERMS: { |
| 386 std::string unescaped_terms; | 384 std::string unescaped_terms; |
| 387 base::WideToCodepage(terms, input_encoding.c_str(), | 385 base::UTF16ToCodepage(terms, input_encoding.c_str(), |
| 388 base::OnStringConversionError::SKIP, | 386 base::OnStringConversionError::SKIP, |
| 389 &unescaped_terms); | 387 &unescaped_terms); |
| 390 url.insert(i->index, std::string(unescaped_terms.begin(), | 388 url.insert(i->index, std::string(unescaped_terms.begin(), |
| 391 unescaped_terms.end())); | 389 unescaped_terms.end())); |
| 392 break; | 390 break; |
| 393 } | 391 } |
| 394 | 392 |
| 395 case LANGUAGE: | 393 case LANGUAGE: |
| 396 url.insert(i->index, search_terms_data.GetApplicationLocale()); | 394 url.insert(i->index, search_terms_data.GetApplicationLocale()); |
| 397 break; | 395 break; |
| 398 | 396 |
| 399 case SEARCH_TERMS: | 397 case SEARCH_TERMS: |
| (...skipping 24 matching lines...) Expand all Loading... |
| 424 UIThreadSearchTermsData search_terms_data; | 422 UIThreadSearchTermsData search_terms_data; |
| 425 return IsValidUsingTermsData(search_terms_data); | 423 return IsValidUsingTermsData(search_terms_data); |
| 426 } | 424 } |
| 427 | 425 |
| 428 bool TemplateURLRef::IsValidUsingTermsData( | 426 bool TemplateURLRef::IsValidUsingTermsData( |
| 429 const SearchTermsData& search_terms_data) const { | 427 const SearchTermsData& search_terms_data) const { |
| 430 ParseIfNecessaryUsingTermsData(search_terms_data); | 428 ParseIfNecessaryUsingTermsData(search_terms_data); |
| 431 return valid_; | 429 return valid_; |
| 432 } | 430 } |
| 433 | 431 |
| 434 std::wstring TemplateURLRef::DisplayURL() const { | 432 string16 TemplateURLRef::DisplayURL() const { |
| 435 ParseIfNecessary(); | 433 ParseIfNecessary(); |
| 436 if (!valid_ || replacements_.empty()) | 434 if (!valid_ || replacements_.empty()) |
| 437 return UTF8ToWide(url_); | 435 return UTF8ToUTF16(url_); |
| 438 | 436 |
| 439 string16 result = UTF8ToUTF16(url_); | 437 string16 result = UTF8ToUTF16(url_); |
| 440 ReplaceSubstringsAfterOffset(&result, 0, | 438 ReplaceSubstringsAfterOffset(&result, 0, |
| 441 ASCIIToUTF16(kSearchTermsParameterFull), | 439 ASCIIToUTF16(kSearchTermsParameterFull), |
| 442 ASCIIToUTF16(kDisplaySearchTerms)); | 440 ASCIIToUTF16(kDisplaySearchTerms)); |
| 443 | 441 |
| 444 ReplaceSubstringsAfterOffset( | 442 ReplaceSubstringsAfterOffset( |
| 445 &result, 0, | 443 &result, 0, |
| 446 ASCIIToUTF16(kGoogleUnescapedSearchTermsParameterFull), | 444 ASCIIToUTF16(kGoogleUnescapedSearchTermsParameterFull), |
| 447 ASCIIToUTF16(kDisplayUnescapedSearchTerms)); | 445 ASCIIToUTF16(kDisplayUnescapedSearchTerms)); |
| 448 | 446 |
| 449 return UTF16ToWideHack(result); | 447 return result; |
| 450 } | 448 } |
| 451 | 449 |
| 452 // static | 450 // static |
| 453 std::string TemplateURLRef::DisplayURLToURLRef( | 451 std::string TemplateURLRef::DisplayURLToURLRef( |
| 454 const std::wstring& display_url) { | 452 const string16& display_url) { |
| 455 string16 result = WideToUTF16Hack(display_url); | 453 string16 result = display_url; |
| 456 ReplaceSubstringsAfterOffset(&result, 0, ASCIIToUTF16(kDisplaySearchTerms), | 454 ReplaceSubstringsAfterOffset(&result, 0, ASCIIToUTF16(kDisplaySearchTerms), |
| 457 ASCIIToUTF16(kSearchTermsParameterFull)); | 455 ASCIIToUTF16(kSearchTermsParameterFull)); |
| 458 ReplaceSubstringsAfterOffset( | 456 ReplaceSubstringsAfterOffset( |
| 459 &result, 0, | 457 &result, 0, |
| 460 ASCIIToUTF16(kDisplayUnescapedSearchTerms), | 458 ASCIIToUTF16(kDisplayUnescapedSearchTerms), |
| 461 ASCIIToUTF16(kGoogleUnescapedSearchTermsParameterFull)); | 459 ASCIIToUTF16(kGoogleUnescapedSearchTermsParameterFull)); |
| 462 return UTF16ToUTF8(result); | 460 return UTF16ToUTF8(result); |
| 463 } | 461 } |
| 464 | 462 |
| 465 const std::string& TemplateURLRef::GetHost() const { | 463 const std::string& TemplateURLRef::GetHost() const { |
| 466 ParseIfNecessary(); | 464 ParseIfNecessary(); |
| 467 return host_; | 465 return host_; |
| 468 } | 466 } |
| 469 | 467 |
| 470 const std::string& TemplateURLRef::GetPath() const { | 468 const std::string& TemplateURLRef::GetPath() const { |
| 471 ParseIfNecessary(); | 469 ParseIfNecessary(); |
| 472 return path_; | 470 return path_; |
| 473 } | 471 } |
| 474 | 472 |
| 475 const std::string& TemplateURLRef::GetSearchTermKey() const { | 473 const std::string& TemplateURLRef::GetSearchTermKey() const { |
| 476 ParseIfNecessary(); | 474 ParseIfNecessary(); |
| 477 return search_term_key_; | 475 return search_term_key_; |
| 478 } | 476 } |
| 479 | 477 |
| 480 std::wstring TemplateURLRef::SearchTermToWide(const TemplateURL& host, | 478 string16 TemplateURLRef::SearchTermToString16(const TemplateURL& host, |
| 481 const std::string& term) const { | 479 const std::string& term) const { |
| 482 const std::vector<std::string>& encodings = host.input_encodings(); | 480 const std::vector<std::string>& encodings = host.input_encodings(); |
| 483 std::wstring result; | 481 string16 result; |
| 484 | 482 |
| 485 std::string unescaped = | 483 std::string unescaped = |
| 486 UnescapeURLComponent(term, UnescapeRule::REPLACE_PLUS_WITH_SPACE | | 484 UnescapeURLComponent(term, UnescapeRule::REPLACE_PLUS_WITH_SPACE | |
| 487 UnescapeRule::URL_SPECIAL_CHARS); | 485 UnescapeRule::URL_SPECIAL_CHARS); |
| 488 for (size_t i = 0; i < encodings.size(); ++i) { | 486 for (size_t i = 0; i < encodings.size(); ++i) { |
| 489 if (base::CodepageToWide(unescaped, encodings[i].c_str(), | 487 if (base::CodepageToUTF16(unescaped, encodings[i].c_str(), |
| 490 base::OnStringConversionError::FAIL, &result)) | 488 base::OnStringConversionError::FAIL, &result)) |
| 491 return result; | 489 return result; |
| 492 } | 490 } |
| 493 | 491 |
| 494 // Always fall back on UTF-8 if it works. | 492 // Always fall back on UTF-8 if it works. |
| 495 if (base::CodepageToWide(unescaped, base::kCodepageUTF8, | 493 if (base::CodepageToUTF16(unescaped, base::kCodepageUTF8, |
| 496 base::OnStringConversionError::FAIL, &result)) | 494 base::OnStringConversionError::FAIL, &result)) |
| 497 return result; | 495 return result; |
| 498 | 496 |
| 499 // When nothing worked, just use the escaped text. We have no idea what the | 497 // When nothing worked, just use the escaped text. We have no idea what the |
| 500 // encoding is. We need to substitute spaces for pluses ourselves since we're | 498 // encoding is. We need to substitute spaces for pluses ourselves since we're |
| 501 // not sending it through an unescaper. | 499 // not sending it through an unescaper. |
| 502 result = UTF8ToWide(term); | 500 result = UTF8ToUTF16(term); |
| 503 std::replace(result.begin(), result.end(), '+', ' '); | 501 std::replace(result.begin(), result.end(), '+', ' '); |
| 504 return result; | 502 return result; |
| 505 } | 503 } |
| 506 | 504 |
| 507 bool TemplateURLRef::HasGoogleBaseURLs() const { | 505 bool TemplateURLRef::HasGoogleBaseURLs() const { |
| 508 ParseIfNecessary(); | 506 ParseIfNecessary(); |
| 509 for (size_t i = 0; i < replacements_.size(); ++i) { | 507 for (size_t i = 0; i < replacements_.size(); ++i) { |
| 510 if ((replacements_[i].type == GOOGLE_BASE_URL) || | 508 if ((replacements_[i].type == GOOGLE_BASE_URL) || |
| 511 (replacements_[i].type == GOOGLE_BASE_SUGGEST_URL)) | 509 (replacements_[i].type == GOOGLE_BASE_SUGGEST_URL)) |
| 512 return true; | 510 return true; |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 570 created_by_policy_(false), | 568 created_by_policy_(false), |
| 571 usage_count_(0), | 569 usage_count_(0), |
| 572 search_engine_type_(SEARCH_ENGINE_OTHER), | 570 search_engine_type_(SEARCH_ENGINE_OTHER), |
| 573 logo_id_(kNoSearchEngineLogo), | 571 logo_id_(kNoSearchEngineLogo), |
| 574 prepopulate_id_(0) { | 572 prepopulate_id_(0) { |
| 575 } | 573 } |
| 576 | 574 |
| 577 TemplateURL::~TemplateURL() { | 575 TemplateURL::~TemplateURL() { |
| 578 } | 576 } |
| 579 | 577 |
| 580 std::wstring TemplateURL::AdjustedShortNameForLocaleDirection() const { | 578 string16 TemplateURL::AdjustedShortNameForLocaleDirection() const { |
| 581 std::wstring bidi_safe_short_name = short_name_; | 579 string16 bidi_safe_short_name = short_name_; |
| 582 base::i18n::AdjustStringForLocaleDirection(&bidi_safe_short_name); | 580 base::i18n::AdjustStringForLocaleDirection(&bidi_safe_short_name); |
| 583 return bidi_safe_short_name; | 581 return bidi_safe_short_name; |
| 584 } | 582 } |
| 585 | 583 |
| 586 void TemplateURL::SetSuggestionsURL(const std::string& suggestions_url, | 584 void TemplateURL::SetSuggestionsURL(const std::string& suggestions_url, |
| 587 int index_offset, | 585 int index_offset, |
| 588 int page_offset) { | 586 int page_offset) { |
| 589 suggestions_url_.Set(suggestions_url, index_offset, page_offset); | 587 suggestions_url_.Set(suggestions_url, index_offset, page_offset); |
| 590 } | 588 } |
| 591 | 589 |
| 592 void TemplateURL::SetURL(const std::string& url, | 590 void TemplateURL::SetURL(const std::string& url, |
| 593 int index_offset, | 591 int index_offset, |
| 594 int page_offset) { | 592 int page_offset) { |
| 595 url_.Set(url, index_offset, page_offset); | 593 url_.Set(url, index_offset, page_offset); |
| 596 } | 594 } |
| 597 | 595 |
| 598 void TemplateURL::SetInstantURL(const std::string& url, | 596 void TemplateURL::SetInstantURL(const std::string& url, |
| 599 int index_offset, | 597 int index_offset, |
| 600 int page_offset) { | 598 int page_offset) { |
| 601 instant_url_.Set(url, index_offset, page_offset); | 599 instant_url_.Set(url, index_offset, page_offset); |
| 602 } | 600 } |
| 603 | 601 |
| 604 void TemplateURL::set_keyword(const std::wstring& keyword) { | 602 void TemplateURL::set_keyword(const string16& keyword) { |
| 605 // Case sensitive keyword matching is confusing. As such, we force all | 603 // Case sensitive keyword matching is confusing. As such, we force all |
| 606 // keywords to be lower case. | 604 // keywords to be lower case. |
| 607 keyword_ = UTF16ToWide(l10n_util::ToLower(WideToUTF16(keyword))); | 605 keyword_ = l10n_util::ToLower(keyword); |
| 608 autogenerate_keyword_ = false; | 606 autogenerate_keyword_ = false; |
| 609 } | 607 } |
| 610 | 608 |
| 611 const std::wstring& TemplateURL::keyword() const { | 609 string16 TemplateURL::keyword() const { |
| 612 EnsureKeyword(); | 610 EnsureKeyword(); |
| 613 return keyword_; | 611 return keyword_; |
| 614 } | 612 } |
| 615 | 613 |
| 616 void TemplateURL::EnsureKeyword() const { | 614 void TemplateURL::EnsureKeyword() const { |
| 617 if (autogenerate_keyword_ && !keyword_generated_) { | 615 if (autogenerate_keyword_ && !keyword_generated_) { |
| 618 // Generate a keyword and cache it. | 616 // Generate a keyword and cache it. |
| 619 keyword_ = TemplateURLModel::GenerateKeyword( | 617 keyword_ = TemplateURLModel::GenerateKeyword( |
| 620 TemplateURLModel::GenerateSearchURL(this).GetWithEmptyPath(), true); | 618 TemplateURLModel::GenerateSearchURL(this).GetWithEmptyPath(), true); |
| 621 keyword_generated_ = true; | 619 keyword_generated_ = true; |
| 622 } | 620 } |
| 623 } | 621 } |
| 624 | 622 |
| 625 bool TemplateURL::ShowInDefaultList() const { | 623 bool TemplateURL::ShowInDefaultList() const { |
| 626 return show_in_default_list() && url() && url()->SupportsReplacement(); | 624 return show_in_default_list() && url() && url()->SupportsReplacement(); |
| 627 } | 625 } |
| 628 | 626 |
| 629 void TemplateURL::SetFavIconURL(const GURL& url) { | 627 void TemplateURL::SetFavIconURL(const GURL& url) { |
| 630 for (std::vector<ImageRef>::iterator i = image_refs_.begin(); | 628 for (std::vector<ImageRef>::iterator i = image_refs_.begin(); |
| 631 i != image_refs_.end(); ++i) { | 629 i != image_refs_.end(); ++i) { |
| 632 if (i->type == L"image/x-icon" && | 630 if (i->type == "image/x-icon" && |
| 633 i->width == kFavIconSize && i->height == kFavIconSize) { | 631 i->width == kFavIconSize && i->height == kFavIconSize) { |
| 634 if (!url.is_valid()) | 632 if (!url.is_valid()) |
| 635 image_refs_.erase(i); | 633 image_refs_.erase(i); |
| 636 else | 634 else |
| 637 i->url = url; | 635 i->url = url; |
| 638 return; | 636 return; |
| 639 } | 637 } |
| 640 } | 638 } |
| 641 // Don't have one yet, add it. | 639 // Don't have one yet, add it. |
| 642 if (url.is_valid()) { | 640 if (url.is_valid()) { |
| 643 add_image_ref( | 641 add_image_ref( |
| 644 TemplateURL::ImageRef(L"image/x-icon", kFavIconSize, kFavIconSize, | 642 TemplateURL::ImageRef("image/x-icon", kFavIconSize, |
| 645 url)); | 643 kFavIconSize, url)); |
| 646 } | 644 } |
| 647 } | 645 } |
| 648 | 646 |
| 649 GURL TemplateURL::GetFavIconURL() const { | 647 GURL TemplateURL::GetFavIconURL() const { |
| 650 for (std::vector<ImageRef>::const_iterator i = image_refs_.begin(); | 648 for (std::vector<ImageRef>::const_iterator i = image_refs_.begin(); |
| 651 i != image_refs_.end(); ++i) { | 649 i != image_refs_.end(); ++i) { |
| 652 if ((i->type == L"image/x-icon" || i->type == L"image/vnd.microsoft.icon") | 650 if ((i->type == "image/x-icon" || i->type == "image/vnd.microsoft.icon") |
| 653 && i->width == kFavIconSize && i->height == kFavIconSize) { | 651 && i->width == kFavIconSize && i->height == kFavIconSize) { |
| 654 return i->url; | 652 return i->url; |
| 655 } | 653 } |
| 656 } | 654 } |
| 657 return GURL(); | 655 return GURL(); |
| 658 } | 656 } |
| 659 | 657 |
| 660 void TemplateURL::InvalidateCachedValues() const { | 658 void TemplateURL::InvalidateCachedValues() const { |
| 661 url_.InvalidateCachedValues(); | 659 url_.InvalidateCachedValues(); |
| 662 suggestions_url_.InvalidateCachedValues(); | 660 suggestions_url_.InvalidateCachedValues(); |
| 663 if (autogenerate_keyword_) { | 661 if (autogenerate_keyword_) { |
| 664 keyword_.clear(); | 662 keyword_.clear(); |
| 665 keyword_generated_ = false; | 663 keyword_generated_ = false; |
| 666 } | 664 } |
| 667 } | 665 } |
| 668 | 666 |
| 669 std::string TemplateURL::GetExtensionId() const { | 667 std::string TemplateURL::GetExtensionId() const { |
| 670 DCHECK(IsExtensionKeyword()); | 668 DCHECK(IsExtensionKeyword()); |
| 671 return GURL(url_.url()).host(); | 669 return GURL(url_.url()).host(); |
| 672 } | 670 } |
| 673 | 671 |
| 674 bool TemplateURL::IsExtensionKeyword() const { | 672 bool TemplateURL::IsExtensionKeyword() const { |
| 675 return GURL(url_.url()).SchemeIs(chrome::kExtensionScheme); | 673 return GURL(url_.url()).SchemeIs(chrome::kExtensionScheme); |
| 676 } | 674 } |
| OLD | NEW |