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

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

Issue 9968016: Move the URL string from TemplateURLRef onto the owning TemplateURL. This will make it easier to m… (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 8 years, 8 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) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/i18n/case_conversion.h" 7 #include "base/i18n/case_conversion.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"
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 // Used if the count parameter is not optional. Indicates we want 10 search 79 // Used if the count parameter is not optional. Indicates we want 10 search
80 // results. 80 // results.
81 static const char kDefaultCount[] = "10"; 81 static const char kDefaultCount[] = "10";
82 82
83 // Used if the parameter kOutputEncodingParameter is required. 83 // Used if the parameter kOutputEncodingParameter is required.
84 static const char kOutputEncodingType[] = "UTF-8"; 84 static const char kOutputEncodingType[] = "UTF-8";
85 85
86 86
87 // TemplateURLRef ------------------------------------------------------------- 87 // TemplateURLRef -------------------------------------------------------------
88 88
89 TemplateURLRef::TemplateURLRef(TemplateURL* owner) 89 TemplateURLRef::TemplateURLRef(TemplateURL* owner, Type type)
90 : owner_(owner), 90 : owner_(owner),
91 type_(type),
92 parsed_(false),
93 valid_(false),
94 supports_replacements_(false),
91 prepopulated_(false) { 95 prepopulated_(false) {
92 DCHECK(owner_); 96 DCHECK(owner_);
93 Set(std::string());
94 }
95
96 TemplateURLRef::TemplateURLRef(TemplateURL* owner, const std::string& url)
97 : owner_(owner),
98 prepopulated_(false) {
99 DCHECK(owner_);
100 Set(url);
101 } 97 }
102 98
103 TemplateURLRef::~TemplateURLRef() { 99 TemplateURLRef::~TemplateURLRef() {
104 } 100 }
105 101
102 std::string TemplateURLRef::GetURL() const {
103 switch (type_) {
104 case SEARCH: return owner_->url();
105 case SUGGEST: return owner_->suggestions_url();
106 case INSTANT: return owner_->instant_url();
107 default: NOTREACHED(); return std::string();
108 }
109 }
110
106 bool TemplateURLRef::SupportsReplacement() const { 111 bool TemplateURLRef::SupportsReplacement() const {
107 UIThreadSearchTermsData search_terms_data; 112 UIThreadSearchTermsData search_terms_data;
108 return SupportsReplacementUsingTermsData(search_terms_data); 113 return SupportsReplacementUsingTermsData(search_terms_data);
109 } 114 }
110 115
111 bool TemplateURLRef::SupportsReplacementUsingTermsData( 116 bool TemplateURLRef::SupportsReplacementUsingTermsData(
112 const SearchTermsData& search_terms_data) const { 117 const SearchTermsData& search_terms_data) const {
113 ParseIfNecessaryUsingTermsData(search_terms_data); 118 ParseIfNecessaryUsingTermsData(search_terms_data);
114 return valid_ && supports_replacements_; 119 return valid_ && supports_replacements_;
115 } 120 }
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
280 } 285 }
281 286
282 bool TemplateURLRef::IsValidUsingTermsData( 287 bool TemplateURLRef::IsValidUsingTermsData(
283 const SearchTermsData& search_terms_data) const { 288 const SearchTermsData& search_terms_data) const {
284 ParseIfNecessaryUsingTermsData(search_terms_data); 289 ParseIfNecessaryUsingTermsData(search_terms_data);
285 return valid_; 290 return valid_;
286 } 291 }
287 292
288 string16 TemplateURLRef::DisplayURL() const { 293 string16 TemplateURLRef::DisplayURL() const {
289 ParseIfNecessary(); 294 ParseIfNecessary();
290 if (!valid_ || replacements_.empty()) 295 string16 result(UTF8ToUTF16(GetURL()));
291 return UTF8ToUTF16(url_); 296 if (valid_ && !replacements_.empty()) {
292 297 ReplaceSubstringsAfterOffset(&result, 0,
293 string16 result = UTF8ToUTF16(url_); 298 ASCIIToUTF16(kSearchTermsParameterFull),
294 ReplaceSubstringsAfterOffset(&result, 0, 299 ASCIIToUTF16(kDisplaySearchTerms));
295 ASCIIToUTF16(kSearchTermsParameterFull), 300 ReplaceSubstringsAfterOffset(&result, 0,
296 ASCIIToUTF16(kDisplaySearchTerms)); 301 ASCIIToUTF16(kGoogleUnescapedSearchTermsParameterFull),
297 302 ASCIIToUTF16(kDisplayUnescapedSearchTerms));
298 ReplaceSubstringsAfterOffset( 303 }
299 &result, 0,
300 ASCIIToUTF16(kGoogleUnescapedSearchTermsParameterFull),
301 ASCIIToUTF16(kDisplayUnescapedSearchTerms));
302
303 return result; 304 return result;
304 } 305 }
305 306
306 // static 307 // static
307 std::string TemplateURLRef::DisplayURLToURLRef( 308 std::string TemplateURLRef::DisplayURLToURLRef(
308 const string16& display_url) { 309 const string16& display_url) {
309 string16 result = display_url; 310 string16 result = display_url;
310 ReplaceSubstringsAfterOffset(&result, 0, ASCIIToUTF16(kDisplaySearchTerms), 311 ReplaceSubstringsAfterOffset(&result, 0, ASCIIToUTF16(kDisplaySearchTerms),
311 ASCIIToUTF16(kSearchTermsParameterFull)); 312 ASCIIToUTF16(kSearchTermsParameterFull));
312 ReplaceSubstringsAfterOffset( 313 ReplaceSubstringsAfterOffset(
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
361 bool TemplateURLRef::HasGoogleBaseURLs() const { 362 bool TemplateURLRef::HasGoogleBaseURLs() const {
362 ParseIfNecessary(); 363 ParseIfNecessary();
363 for (size_t i = 0; i < replacements_.size(); ++i) { 364 for (size_t i = 0; i < replacements_.size(); ++i) {
364 if ((replacements_[i].type == GOOGLE_BASE_URL) || 365 if ((replacements_[i].type == GOOGLE_BASE_URL) ||
365 (replacements_[i].type == GOOGLE_BASE_SUGGEST_URL)) 366 (replacements_[i].type == GOOGLE_BASE_SUGGEST_URL))
366 return true; 367 return true;
367 } 368 }
368 return false; 369 return false;
369 } 370 }
370 371
371 // static
372 bool TemplateURLRef::SameUrlRefs(const TemplateURLRef* ref1,
373 const TemplateURLRef* ref2) {
374 return ref1 == ref2 || (ref1 && ref2 && ref1->url() == ref2->url());
375 }
376
377 void TemplateURLRef::CollectRLZMetrics() const { 372 void TemplateURLRef::CollectRLZMetrics() const {
378 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD) 373 #if defined(OS_WIN) && defined(GOOGLE_CHROME_BUILD)
379 ParseIfNecessary(); 374 ParseIfNecessary();
380 for (size_t i = 0; i < replacements_.size(); ++i) { 375 for (size_t i = 0; i < replacements_.size(); ++i) {
381 // We are interesed in searches that were supposed to send the RLZ token. 376 // We are interesed in searches that were supposed to send the RLZ token.
382 if (replacements_[i].type == GOOGLE_RLZ) { 377 if (replacements_[i].type == GOOGLE_RLZ) {
383 std::string brand; 378 std::string brand;
384 // We only have RLZ tocken on a branded browser version. 379 // We only have RLZ tocken on a branded browser version.
385 if (google_util::GetBrand(&brand) && !brand.empty() && 380 if (google_util::GetBrand(&brand) && !brand.empty() &&
386 !google_util::IsOrganic(brand)) { 381 !google_util::IsOrganic(brand)) {
(...skipping 10 matching lines...) Expand all
397 } 392 }
398 393
399 void TemplateURLRef::InvalidateCachedValues() const { 394 void TemplateURLRef::InvalidateCachedValues() const {
400 supports_replacements_ = valid_ = parsed_ = false; 395 supports_replacements_ = valid_ = parsed_ = false;
401 host_.clear(); 396 host_.clear();
402 path_.clear(); 397 path_.clear();
403 search_term_key_.clear(); 398 search_term_key_.clear();
404 replacements_.clear(); 399 replacements_.clear();
405 } 400 }
406 401
407 void TemplateURLRef::Set(const std::string& url) {
408 url_ = url;
409 InvalidateCachedValues();
410 }
411
412 bool TemplateURLRef::ParseParameter(size_t start, 402 bool TemplateURLRef::ParseParameter(size_t start,
413 size_t end, 403 size_t end,
414 std::string* url, 404 std::string* url,
415 Replacements* replacements) const { 405 Replacements* replacements) const {
416 DCHECK(start != std::string::npos && 406 DCHECK(start != std::string::npos &&
417 end != std::string::npos && end > start); 407 end != std::string::npos && end > start);
418 size_t length = end - start - 1; 408 size_t length = end - start - 1;
419 bool optional = false; 409 bool optional = false;
420 if ((*url)[end - 1] == kOptional) { 410 if ((*url)[end - 1] == kOptional) {
421 optional = true; 411 optional = true;
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
511 501
512 void TemplateURLRef::ParseIfNecessary() const { 502 void TemplateURLRef::ParseIfNecessary() const {
513 UIThreadSearchTermsData search_terms_data; 503 UIThreadSearchTermsData search_terms_data;
514 ParseIfNecessaryUsingTermsData(search_terms_data); 504 ParseIfNecessaryUsingTermsData(search_terms_data);
515 } 505 }
516 506
517 void TemplateURLRef::ParseIfNecessaryUsingTermsData( 507 void TemplateURLRef::ParseIfNecessaryUsingTermsData(
518 const SearchTermsData& search_terms_data) const { 508 const SearchTermsData& search_terms_data) const {
519 if (!parsed_) { 509 if (!parsed_) {
520 parsed_ = true; 510 parsed_ = true;
521 parsed_url_ = ParseURL(url_, &replacements_, &valid_); 511 parsed_url_ = ParseURL(GetURL(), &replacements_, &valid_);
522 supports_replacements_ = false; 512 supports_replacements_ = false;
523 if (valid_) { 513 if (valid_) {
524 bool has_only_one_search_term = false; 514 bool has_only_one_search_term = false;
525 for (Replacements::const_iterator i = replacements_.begin(); 515 for (Replacements::const_iterator i = replacements_.begin();
526 i != replacements_.end(); ++i) { 516 i != replacements_.end(); ++i) {
527 if ((i->type == SEARCH_TERMS) || 517 if ((i->type == SEARCH_TERMS) ||
528 (i->type == GOOGLE_UNESCAPED_SEARCH_TERMS)) { 518 (i->type == GOOGLE_UNESCAPED_SEARCH_TERMS)) {
529 if (has_only_one_search_term) { 519 if (has_only_one_search_term) {
530 has_only_one_search_term = false; 520 has_only_one_search_term = false;
531 break; 521 break;
532 } 522 }
533 has_only_one_search_term = true; 523 has_only_one_search_term = true;
534 supports_replacements_ = true; 524 supports_replacements_ = true;
535 } 525 }
536 } 526 }
537 // Only parse the host/key if there is one search term. Technically there 527 // Only parse the host/key if there is one search term. Technically there
538 // could be more than one term, but it's uncommon; so we punt. 528 // could be more than one term, but it's uncommon; so we punt.
539 if (has_only_one_search_term) 529 if (has_only_one_search_term)
540 ParseHostAndSearchTermKey(search_terms_data); 530 ParseHostAndSearchTermKey(search_terms_data);
541 } 531 }
542 } 532 }
543 } 533 }
544 534
545 void TemplateURLRef::ParseHostAndSearchTermKey( 535 void TemplateURLRef::ParseHostAndSearchTermKey(
546 const SearchTermsData& search_terms_data) const { 536 const SearchTermsData& search_terms_data) const {
547 std::string url_string = url_; 537 std::string url_string(GetURL());
548 ReplaceSubstringsAfterOffset(&url_string, 0, 538 ReplaceSubstringsAfterOffset(&url_string, 0,
549 kGoogleBaseURLParameterFull, 539 kGoogleBaseURLParameterFull,
550 search_terms_data.GoogleBaseURLValue()); 540 search_terms_data.GoogleBaseURLValue());
551 ReplaceSubstringsAfterOffset(&url_string, 0, 541 ReplaceSubstringsAfterOffset(&url_string, 0,
552 kGoogleBaseSuggestURLParameterFull, 542 kGoogleBaseSuggestURLParameterFull,
553 search_terms_data.GoogleBaseSuggestURLValue()); 543 search_terms_data.GoogleBaseSuggestURLValue());
554 544
555 GURL url(url_string); 545 GURL url(url_string);
556 if (!url.is_valid()) 546 if (!url.is_valid())
557 return; 547 return;
(...skipping 18 matching lines...) Expand all
576 break; 566 break;
577 } 567 }
578 } 568 }
579 } 569 }
580 } 570 }
581 571
582 572
583 // TemplateURL ---------------------------------------------------------------- 573 // TemplateURL ----------------------------------------------------------------
584 574
585 TemplateURL::TemplateURL() 575 TemplateURL::TemplateURL()
586 : url_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 576 : autogenerate_keyword_(false),
587 suggestions_url_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
588 instant_url_(ALLOW_THIS_IN_INITIALIZER_LIST(this)),
589 autogenerate_keyword_(false),
590 keyword_generated_(false), 577 keyword_generated_(false),
591 show_in_default_list_(false), 578 show_in_default_list_(false),
592 safe_for_autoreplace_(false), 579 safe_for_autoreplace_(false),
593 id_(0), 580 id_(0),
594 date_created_(base::Time::Now()), 581 date_created_(base::Time::Now()),
595 last_modified_(base::Time::Now()), 582 last_modified_(base::Time::Now()),
596 created_by_policy_(false), 583 created_by_policy_(false),
597 usage_count_(0), 584 usage_count_(0),
598 prepopulate_id_(0), 585 prepopulate_id_(0),
599 sync_guid_(guid::GenerateGUID()) { 586 sync_guid_(guid::GenerateGUID()),
587 url_ref_(ALLOW_THIS_IN_INITIALIZER_LIST(this), TemplateURLRef::SEARCH),
588 suggestions_url_ref_(ALLOW_THIS_IN_INITIALIZER_LIST(this),
589 TemplateURLRef::SUGGEST),
590 instant_url_ref_(ALLOW_THIS_IN_INITIALIZER_LIST(this),
591 TemplateURLRef::INSTANT) {
600 } 592 }
601 593
602 TemplateURL::TemplateURL(const TemplateURL& other) 594 TemplateURL::TemplateURL(const TemplateURL& other)
603 : short_name_(other.short_name_), 595 : short_name_(other.short_name_),
604 url_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 596 url_(other.url_),
605 suggestions_url_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 597 suggestions_url_(other.suggestions_url_),
606 instant_url_(ALLOW_THIS_IN_INITIALIZER_LIST(this)), 598 instant_url_(other.instant_url_),
607 originating_url_(other.originating_url_), 599 originating_url_(other.originating_url_),
608 keyword_(other.keyword_), 600 keyword_(other.keyword_),
609 autogenerate_keyword_(other.autogenerate_keyword_), 601 autogenerate_keyword_(other.autogenerate_keyword_),
610 keyword_generated_(other.keyword_generated_), 602 keyword_generated_(other.keyword_generated_),
611 show_in_default_list_(other.show_in_default_list_), 603 show_in_default_list_(other.show_in_default_list_),
612 safe_for_autoreplace_(other.safe_for_autoreplace_), 604 safe_for_autoreplace_(other.safe_for_autoreplace_),
613 favicon_url_(other.favicon_url_), 605 favicon_url_(other.favicon_url_),
614 input_encodings_(other.input_encodings_), 606 input_encodings_(other.input_encodings_),
615 id_(other.id_), 607 id_(other.id_),
616 date_created_(other.date_created_), 608 date_created_(other.date_created_),
617 last_modified_(other.last_modified_), 609 last_modified_(other.last_modified_),
618 created_by_policy_(other.created_by_policy_), 610 created_by_policy_(other.created_by_policy_),
619 usage_count_(other.usage_count_), 611 usage_count_(other.usage_count_),
620 sync_guid_(other.sync_guid_) { 612 sync_guid_(other.sync_guid_),
613 url_ref_(ALLOW_THIS_IN_INITIALIZER_LIST(this), TemplateURLRef::SEARCH),
614 suggestions_url_ref_(ALLOW_THIS_IN_INITIALIZER_LIST(this),
615 TemplateURLRef::SUGGEST),
616 instant_url_ref_(ALLOW_THIS_IN_INITIALIZER_LIST(this),
617 TemplateURLRef::INSTANT) {
621 CopyURLRefs(other); 618 CopyURLRefs(other);
622 } 619 }
623 620
624 TemplateURL& TemplateURL::operator=(const TemplateURL& other) { 621 TemplateURL& TemplateURL::operator=(const TemplateURL& other) {
625 if (this == &other) 622 if (this == &other)
626 return *this; 623 return *this;
627 624
628 short_name_ = other.short_name_; 625 short_name_ = other.short_name_;
629 CopyURLRefs(other); 626 url_ = other.url_;
627 suggestions_url_ = other.suggestions_url_;
628 instant_url_ = other.instant_url_;
630 originating_url_ = other.originating_url_; 629 originating_url_ = other.originating_url_;
631 keyword_ = other.keyword_; 630 keyword_ = other.keyword_;
632 autogenerate_keyword_ = other.autogenerate_keyword_; 631 autogenerate_keyword_ = other.autogenerate_keyword_;
633 keyword_generated_ = other.keyword_generated_; 632 keyword_generated_ = other.keyword_generated_;
634 show_in_default_list_ = other.show_in_default_list_; 633 show_in_default_list_ = other.show_in_default_list_;
635 safe_for_autoreplace_ = other.safe_for_autoreplace_; 634 safe_for_autoreplace_ = other.safe_for_autoreplace_;
636 favicon_url_ = other.favicon_url_; 635 favicon_url_ = other.favicon_url_;
637 input_encodings_ = other.input_encodings_; 636 input_encodings_ = other.input_encodings_;
638 id_ = other.id_; 637 id_ = other.id_;
639 date_created_ = other.date_created_; 638 date_created_ = other.date_created_;
640 last_modified_ = other.last_modified_; 639 last_modified_ = other.last_modified_;
641 created_by_policy_ = other.created_by_policy_; 640 created_by_policy_ = other.created_by_policy_;
642 usage_count_ = other.usage_count_; 641 usage_count_ = other.usage_count_;
643 sync_guid_ = other.sync_guid_; 642 sync_guid_ = other.sync_guid_;
643 CopyURLRefs(other);
644 return *this; 644 return *this;
645 } 645 }
646 646
647 TemplateURL::~TemplateURL() { 647 TemplateURL::~TemplateURL() {
648 } 648 }
649 649
650 // static 650 // static
651 GURL TemplateURL::GenerateFaviconURL(const GURL& url) { 651 GURL TemplateURL::GenerateFaviconURL(const GURL& url) {
652 DCHECK(url.is_valid()); 652 DCHECK(url.is_valid());
653 GURL::Replacements rep; 653 GURL::Replacements rep;
654 654
655 const char favicon_path[] = "/favicon.ico"; 655 const char favicon_path[] = "/favicon.ico";
656 int favicon_path_len = arraysize(favicon_path) - 1; 656 int favicon_path_len = arraysize(favicon_path) - 1;
657 657
658 rep.SetPath(favicon_path, url_parse::Component(0, favicon_path_len)); 658 rep.SetPath(favicon_path, url_parse::Component(0, favicon_path_len));
659 rep.ClearUsername(); 659 rep.ClearUsername();
660 rep.ClearPassword(); 660 rep.ClearPassword();
661 rep.ClearQuery(); 661 rep.ClearQuery();
662 rep.ClearRef(); 662 rep.ClearRef();
663 return url.ReplaceComponents(rep); 663 return url.ReplaceComponents(rep);
664 } 664 }
665 665
666 string16 TemplateURL::AdjustedShortNameForLocaleDirection() const { 666 string16 TemplateURL::AdjustedShortNameForLocaleDirection() const {
667 string16 bidi_safe_short_name = short_name_; 667 string16 bidi_safe_short_name = short_name_;
668 base::i18n::AdjustStringForLocaleDirection(&bidi_safe_short_name); 668 base::i18n::AdjustStringForLocaleDirection(&bidi_safe_short_name);
669 return bidi_safe_short_name; 669 return bidi_safe_short_name;
670 } 670 }
671 671
672 void TemplateURL::SetURL(const std::string& url) { 672 void TemplateURL::SetURL(const std::string& url) {
673 url_.Set(url); 673 url_ = url;
674 url_ref_.InvalidateCachedValues();
674 } 675 }
675 676
676 void TemplateURL::SetSuggestionsURL(const std::string& url) { 677 void TemplateURL::SetSuggestionsURL(const std::string& url) {
677 suggestions_url_.Set(url); 678 suggestions_url_ = url;
679 suggestions_url_ref_.InvalidateCachedValues();
678 } 680 }
679 681
680 void TemplateURL::SetInstantURL(const std::string& url) { 682 void TemplateURL::SetInstantURL(const std::string& url) {
681 instant_url_.Set(url); 683 instant_url_ = url;
684 instant_url_ref_.InvalidateCachedValues();
682 } 685 }
683 686
684 void TemplateURL::set_keyword(const string16& keyword) { 687 void TemplateURL::set_keyword(const string16& keyword) {
685 // Case sensitive keyword matching is confusing. As such, we force all 688 // Case sensitive keyword matching is confusing. As such, we force all
686 // keywords to be lower case. 689 // keywords to be lower case.
687 keyword_ = base::i18n::ToLower(keyword); 690 keyword_ = base::i18n::ToLower(keyword);
688 autogenerate_keyword_ = false; 691 autogenerate_keyword_ = false;
689 } 692 }
690 693
691 const string16& TemplateURL::keyword() const { 694 const string16& TemplateURL::keyword() const {
692 EnsureKeyword(); 695 EnsureKeyword();
693 return keyword_; 696 return keyword_;
694 } 697 }
695 698
696 void TemplateURL::EnsureKeyword() const { 699 void TemplateURL::EnsureKeyword() const {
697 if (autogenerate_keyword_ && !keyword_generated_) { 700 if (autogenerate_keyword_ && !keyword_generated_) {
698 // Generate a keyword and cache it. 701 // Generate a keyword and cache it.
699 keyword_ = TemplateURLService::GenerateKeyword( 702 keyword_ = TemplateURLService::GenerateKeyword(
700 TemplateURLService::GenerateSearchURL(this).GetWithEmptyPath(), true); 703 TemplateURLService::GenerateSearchURL(this).GetWithEmptyPath(), true);
701 keyword_generated_ = true; 704 keyword_generated_ = true;
702 } 705 }
703 } 706 }
704 707
705 bool TemplateURL::ShowInDefaultList() const { 708 bool TemplateURL::ShowInDefaultList() const {
706 return show_in_default_list() && url() && url()->SupportsReplacement(); 709 return show_in_default_list() && url_ref_.SupportsReplacement();
707 } 710 }
708 711
709 void TemplateURL::CopyURLRefs(const TemplateURL& other) { 712 void TemplateURL::CopyURLRefs(const TemplateURL& other) {
710 suggestions_url_.Set(other.suggestions_url_.url_); 713 url_ref_.InvalidateCachedValues();
711 url_.Set(other.url_.url_); 714 suggestions_url_ref_.InvalidateCachedValues();
712 instant_url_.Set(other.instant_url_.url_); 715 instant_url_ref_.InvalidateCachedValues();
713 SetPrepopulateId(other.prepopulate_id_); 716 SetPrepopulateId(other.prepopulate_id_);
714 } 717 }
715 718
716 void TemplateURL::SetPrepopulateId(int id) { 719 void TemplateURL::SetPrepopulateId(int id) {
717 prepopulate_id_ = id; 720 prepopulate_id_ = id;
718 const bool prepopulated = id > 0; 721 const bool prepopulated = id > 0;
719 suggestions_url_.prepopulated_ = prepopulated; 722 suggestions_url_ref_.prepopulated_ = prepopulated;
720 url_.prepopulated_ = prepopulated; 723 url_ref_.prepopulated_ = prepopulated;
721 instant_url_.prepopulated_ = prepopulated; 724 instant_url_ref_.prepopulated_ = prepopulated;
722 } 725 }
723 726
724 void TemplateURL::InvalidateCachedValues() const { 727 void TemplateURL::InvalidateCachedValues() const {
725 url_.InvalidateCachedValues(); 728 url_ref_.InvalidateCachedValues();
726 suggestions_url_.InvalidateCachedValues(); 729 suggestions_url_ref_.InvalidateCachedValues();
730 instant_url_ref_.InvalidateCachedValues();
727 if (autogenerate_keyword_) { 731 if (autogenerate_keyword_) {
728 keyword_.clear(); 732 keyword_.clear();
729 keyword_generated_ = false; 733 keyword_generated_ = false;
730 } 734 }
731 } 735 }
732 736
733 bool TemplateURL::SupportsReplacement() const { 737 bool TemplateURL::SupportsReplacement() const {
734 UIThreadSearchTermsData search_terms_data; 738 UIThreadSearchTermsData search_terms_data;
735 return SupportsReplacementUsingTermsData(search_terms_data); 739 return SupportsReplacementUsingTermsData(search_terms_data);
736 } 740 }
737 741
738 bool TemplateURL::SupportsReplacementUsingTermsData( 742 bool TemplateURL::SupportsReplacementUsingTermsData(
739 const SearchTermsData& search_terms_data) const { 743 const SearchTermsData& search_terms_data) const {
740 return url_.SupportsReplacementUsingTermsData(search_terms_data); 744 return url_ref_.SupportsReplacementUsingTermsData(search_terms_data);
741 } 745 }
742 746
743 std::string TemplateURL::GetExtensionId() const { 747 std::string TemplateURL::GetExtensionId() const {
744 DCHECK(IsExtensionKeyword()); 748 DCHECK(IsExtensionKeyword());
745 return GURL(url_.url()).host(); 749 return GURL(url_).host();
746 } 750 }
747 751
748 bool TemplateURL::IsExtensionKeyword() const { 752 bool TemplateURL::IsExtensionKeyword() const {
749 return GURL(url_.url()).SchemeIs(chrome::kExtensionScheme); 753 return GURL(url_).SchemeIs(chrome::kExtensionScheme);
750 } 754 }
OLDNEW
« no previous file with comments | « chrome/browser/search_engines/template_url.h ('k') | chrome/browser/search_engines/template_url_fetcher.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698