OLD | NEW |
---|---|
1 // Copyright (c) 2011 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 "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" |
11 #include "base/metrics/field_trial.h" | 11 #include "base/metrics/field_trial.h" |
12 #include "base/stringprintf.h" | 12 #include "base/stringprintf.h" |
13 #include "base/string_number_conversions.h" | 13 #include "base/string_number_conversions.h" |
14 #include "base/utf_string_conversions.h" | 14 #include "base/utf_string_conversions.h" |
15 #include "chrome/browser/instant/instant_field_trial.h" | |
15 #include "chrome/browser/search_engines/search_engine_type.h" | 16 #include "chrome/browser/search_engines/search_engine_type.h" |
16 #include "chrome/browser/search_engines/search_terms_data.h" | 17 #include "chrome/browser/search_engines/search_terms_data.h" |
17 #include "chrome/browser/search_engines/template_url_service.h" | 18 #include "chrome/browser/search_engines/template_url_service.h" |
18 #include "chrome/common/url_constants.h" | 19 #include "chrome/common/url_constants.h" |
19 #include "chrome/installer/util/google_update_settings.h" | 20 #include "chrome/installer/util/google_update_settings.h" |
20 #include "content/browser/user_metrics.h" | 21 #include "content/browser/user_metrics.h" |
21 #include "net/base/escape.h" | 22 #include "net/base/escape.h" |
22 #include "ui/base/l10n/l10n_util.h" | 23 #include "ui/base/l10n/l10n_util.h" |
23 #include "ui/gfx/favicon_size.h" | 24 #include "ui/gfx/favicon_size.h" |
24 // TODO(pastarmovj): Remove google_update_settings and user_metrics when the | 25 // TODO(pastarmovj): Remove google_update_settings and user_metrics when the |
(...skipping 30 matching lines...) Expand all Loading... | |
55 static const char kGoogleOriginalQueryForSuggestionParameter[] = | 56 static const char kGoogleOriginalQueryForSuggestionParameter[] = |
56 "google:originalQueryForSuggestion"; | 57 "google:originalQueryForSuggestion"; |
57 static const char kGoogleRLZParameter[] = "google:RLZ"; | 58 static const char kGoogleRLZParameter[] = "google:RLZ"; |
58 // Same as kSearchTermsParameter, with no escaping. | 59 // Same as kSearchTermsParameter, with no escaping. |
59 static const char kGoogleSearchFieldtrialParameter[] = | 60 static const char kGoogleSearchFieldtrialParameter[] = |
60 "google:searchFieldtrialParameter"; | 61 "google:searchFieldtrialParameter"; |
61 static const char kGoogleUnescapedSearchTermsParameter[] = | 62 static const char kGoogleUnescapedSearchTermsParameter[] = |
62 "google:unescapedSearchTerms"; | 63 "google:unescapedSearchTerms"; |
63 static const char kGoogleUnescapedSearchTermsParameterFull[] = | 64 static const char kGoogleUnescapedSearchTermsParameterFull[] = |
64 "{google:unescapedSearchTerms}"; | 65 "{google:unescapedSearchTerms}"; |
66 static const char kInstantFieldTrialGroupParameter[] = | |
67 "instantFieldTrialGroupParameter"; | |
sky
2011/08/08 23:37:23
Since this is google specific, use google:
sreeram
2011/08/09 16:24:01
Done. Will reflect it in the next patch.
| |
65 | 68 |
66 // Display value for kSearchTermsParameter. | 69 // Display value for kSearchTermsParameter. |
67 static const char kDisplaySearchTerms[] = "%s"; | 70 static const char kDisplaySearchTerms[] = "%s"; |
68 | 71 |
69 // Display value for kGoogleUnescapedSearchTermsParameter. | 72 // Display value for kGoogleUnescapedSearchTermsParameter. |
70 static const char kDisplayUnescapedSearchTerms[] = "%S"; | 73 static const char kDisplayUnescapedSearchTerms[] = "%S"; |
71 | 74 |
72 // Used if the count parameter is not optional. Indicates we want 10 search | 75 // Used if the count parameter is not optional. Indicates we want 10 search |
73 // results. | 76 // results. |
74 static const char kDefaultCount[] = "10"; | 77 static const char kDefaultCount[] = "10"; |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
148 replacements->push_back(Replacement(GOOGLE_BASE_SUGGEST_URL, start)); | 151 replacements->push_back(Replacement(GOOGLE_BASE_SUGGEST_URL, start)); |
149 } else if (parameter == kGoogleOriginalQueryForSuggestionParameter) { | 152 } else if (parameter == kGoogleOriginalQueryForSuggestionParameter) { |
150 replacements->push_back(Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION, | 153 replacements->push_back(Replacement(GOOGLE_ORIGINAL_QUERY_FOR_SUGGESTION, |
151 start)); | 154 start)); |
152 } else if (parameter == kGoogleRLZParameter) { | 155 } else if (parameter == kGoogleRLZParameter) { |
153 replacements->push_back(Replacement(GOOGLE_RLZ, start)); | 156 replacements->push_back(Replacement(GOOGLE_RLZ, start)); |
154 } else if (parameter == kGoogleSearchFieldtrialParameter) { | 157 } else if (parameter == kGoogleSearchFieldtrialParameter) { |
155 replacements->push_back(Replacement(GOOGLE_SEARCH_FIELDTRIAL_GROUP, start)); | 158 replacements->push_back(Replacement(GOOGLE_SEARCH_FIELDTRIAL_GROUP, start)); |
156 } else if (parameter == kGoogleUnescapedSearchTermsParameter) { | 159 } else if (parameter == kGoogleUnescapedSearchTermsParameter) { |
157 replacements->push_back(Replacement(GOOGLE_UNESCAPED_SEARCH_TERMS, start)); | 160 replacements->push_back(Replacement(GOOGLE_UNESCAPED_SEARCH_TERMS, start)); |
161 } else if (parameter == kInstantFieldTrialGroupParameter) { | |
162 replacements->push_back(Replacement(INSTANT_FIELD_TRIAL_GROUP, start)); | |
158 } else { | 163 } else { |
159 // If it's a prepopulated URL, we know that it's safe to remove unknown | 164 // If it's a prepopulated URL, we know that it's safe to remove unknown |
160 // parameters. Otherwise it could be some garbage but can also be a | 165 // parameters. Otherwise it could be some garbage but can also be a |
161 // javascript block. Put it back. | 166 // javascript block. Put it back. |
162 if (!prepopulated_) | 167 if (!prepopulated_) |
163 url->insert(start, full_parameter); | 168 url->insert(start, full_parameter); |
164 return false; | 169 return false; |
165 } | 170 } |
166 return true; | 171 return true; |
167 } | 172 } |
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
269 } | 274 } |
270 } | 275 } |
271 } | 276 } |
272 | 277 |
273 // static | 278 // static |
274 void TemplateURLRef::SetGoogleBaseURL(std::string* google_base_url) { | 279 void TemplateURLRef::SetGoogleBaseURL(std::string* google_base_url) { |
275 UIThreadSearchTermsData::SetGoogleBaseURL(google_base_url); | 280 UIThreadSearchTermsData::SetGoogleBaseURL(google_base_url); |
276 } | 281 } |
277 | 282 |
278 std::string TemplateURLRef::ReplaceSearchTerms( | 283 std::string TemplateURLRef::ReplaceSearchTerms( |
284 Profile* profile, | |
279 const TemplateURL& host, | 285 const TemplateURL& host, |
280 const string16& terms, | 286 const string16& terms, |
281 int accepted_suggestion, | 287 int accepted_suggestion, |
282 const string16& original_query_for_suggestion) const { | 288 const string16& original_query_for_suggestion) const { |
283 UIThreadSearchTermsData search_terms_data; | 289 UIThreadSearchTermsData search_terms_data; |
284 return ReplaceSearchTermsUsingTermsData(host, | 290 return ReplaceSearchTermsUsingTermsData(profile, |
291 host, | |
285 terms, | 292 terms, |
286 accepted_suggestion, | 293 accepted_suggestion, |
287 original_query_for_suggestion, | 294 original_query_for_suggestion, |
288 search_terms_data); | 295 search_terms_data); |
289 } | 296 } |
290 | 297 |
291 std::string TemplateURLRef::ReplaceSearchTermsUsingTermsData( | 298 std::string TemplateURLRef::ReplaceSearchTermsUsingTermsData( |
299 Profile* profile, | |
292 const TemplateURL& host, | 300 const TemplateURL& host, |
293 const string16& terms, | 301 const string16& terms, |
294 int accepted_suggestion, | 302 int accepted_suggestion, |
295 const string16& original_query_for_suggestion, | 303 const string16& original_query_for_suggestion, |
296 const SearchTermsData& search_terms_data) const { | 304 const SearchTermsData& search_terms_data) const { |
297 ParseIfNecessaryUsingTermsData(search_terms_data); | 305 ParseIfNecessaryUsingTermsData(search_terms_data); |
298 if (!valid_) | 306 if (!valid_) |
299 return std::string(); | 307 return std::string(); |
300 | 308 |
301 if (replacements_.empty()) | 309 if (replacements_.empty()) |
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
410 case GOOGLE_UNESCAPED_SEARCH_TERMS: { | 418 case GOOGLE_UNESCAPED_SEARCH_TERMS: { |
411 std::string unescaped_terms; | 419 std::string unescaped_terms; |
412 base::UTF16ToCodepage(terms, input_encoding.c_str(), | 420 base::UTF16ToCodepage(terms, input_encoding.c_str(), |
413 base::OnStringConversionError::SKIP, | 421 base::OnStringConversionError::SKIP, |
414 &unescaped_terms); | 422 &unescaped_terms); |
415 url.insert(i->index, std::string(unescaped_terms.begin(), | 423 url.insert(i->index, std::string(unescaped_terms.begin(), |
416 unescaped_terms.end())); | 424 unescaped_terms.end())); |
417 break; | 425 break; |
418 } | 426 } |
419 | 427 |
428 case INSTANT_FIELD_TRIAL_GROUP: | |
429 if (profile != NULL) | |
430 url.insert(i->index, InstantFieldTrial::GetGroupAsUrlParam(profile)); | |
431 break; | |
432 | |
420 case LANGUAGE: | 433 case LANGUAGE: |
421 url.insert(i->index, search_terms_data.GetApplicationLocale()); | 434 url.insert(i->index, search_terms_data.GetApplicationLocale()); |
422 break; | 435 break; |
423 | 436 |
424 case SEARCH_TERMS: | 437 case SEARCH_TERMS: |
425 url.insert(i->index, UTF16ToUTF8(encoded_terms)); | 438 url.insert(i->index, UTF16ToUTF8(encoded_terms)); |
426 break; | 439 break; |
427 | 440 |
428 default: | 441 default: |
429 NOTREACHED(); | 442 NOTREACHED(); |
(...skipping 228 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
658 | 671 |
659 string16 TemplateURL::keyword() const { | 672 string16 TemplateURL::keyword() const { |
660 EnsureKeyword(); | 673 EnsureKeyword(); |
661 return keyword_; | 674 return keyword_; |
662 } | 675 } |
663 | 676 |
664 void TemplateURL::EnsureKeyword() const { | 677 void TemplateURL::EnsureKeyword() const { |
665 if (autogenerate_keyword_ && !keyword_generated_) { | 678 if (autogenerate_keyword_ && !keyword_generated_) { |
666 // Generate a keyword and cache it. | 679 // Generate a keyword and cache it. |
667 keyword_ = TemplateURLService::GenerateKeyword( | 680 keyword_ = TemplateURLService::GenerateKeyword( |
668 TemplateURLService::GenerateSearchURL(this).GetWithEmptyPath(), true); | 681 TemplateURLService::GenerateSearchURL(NULL, this).GetWithEmptyPath(), |
682 true); | |
669 keyword_generated_ = true; | 683 keyword_generated_ = true; |
670 } | 684 } |
671 } | 685 } |
672 | 686 |
673 bool TemplateURL::ShowInDefaultList() const { | 687 bool TemplateURL::ShowInDefaultList() const { |
674 return show_in_default_list() && url() && url()->SupportsReplacement(); | 688 return show_in_default_list() && url() && url()->SupportsReplacement(); |
675 } | 689 } |
676 | 690 |
677 void TemplateURL::SetFaviconURL(const GURL& url) { | 691 void TemplateURL::SetFaviconURL(const GURL& url) { |
678 for (std::vector<ImageRef>::iterator i = image_refs_.begin(); | 692 for (std::vector<ImageRef>::iterator i = image_refs_.begin(); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
729 } | 743 } |
730 | 744 |
731 std::string TemplateURL::GetExtensionId() const { | 745 std::string TemplateURL::GetExtensionId() const { |
732 DCHECK(IsExtensionKeyword()); | 746 DCHECK(IsExtensionKeyword()); |
733 return GURL(url_.url()).host(); | 747 return GURL(url_.url()).host(); |
734 } | 748 } |
735 | 749 |
736 bool TemplateURL::IsExtensionKeyword() const { | 750 bool TemplateURL::IsExtensionKeyword() const { |
737 return GURL(url_.url()).SchemeIs(chrome::kExtensionScheme); | 751 return GURL(url_.url()).SchemeIs(chrome::kExtensionScheme); |
738 } | 752 } |
OLD | NEW |