| 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/autocomplete/search_provider.h" | 5 #include "chrome/browser/autocomplete/search_provider.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <cmath> | 8 #include <cmath> |
| 9 | 9 |
| 10 #include "app/l10n_util.h" | 10 #include "app/l10n_util.h" |
| (...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 have_suggest_results_ = false; | 410 have_suggest_results_ = false; |
| 411 } | 411 } |
| 412 | 412 |
| 413 URLFetcher* SearchProvider::CreateSuggestFetcher(int id, | 413 URLFetcher* SearchProvider::CreateSuggestFetcher(int id, |
| 414 const TemplateURL& provider, | 414 const TemplateURL& provider, |
| 415 const std::wstring& text) { | 415 const std::wstring& text) { |
| 416 const TemplateURLRef* const suggestions_url = provider.suggestions_url(); | 416 const TemplateURLRef* const suggestions_url = provider.suggestions_url(); |
| 417 DCHECK(suggestions_url->SupportsReplacement()); | 417 DCHECK(suggestions_url->SupportsReplacement()); |
| 418 URLFetcher* fetcher = URLFetcher::Create(id, | 418 URLFetcher* fetcher = URLFetcher::Create(id, |
| 419 GURL(suggestions_url->ReplaceSearchTerms( | 419 GURL(suggestions_url->ReplaceSearchTerms( |
| 420 provider, WideToUTF16Hack(text), | 420 provider, text, TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, |
| 421 TemplateURLRef::NO_SUGGESTIONS_AVAILABLE, string16())), | 421 std::wstring())), |
| 422 URLFetcher::GET, this); | 422 URLFetcher::GET, this); |
| 423 fetcher->set_request_context(profile_->GetRequestContext()); | 423 fetcher->set_request_context(profile_->GetRequestContext()); |
| 424 fetcher->Start(); | 424 fetcher->Start(); |
| 425 return fetcher; | 425 return fetcher; |
| 426 } | 426 } |
| 427 | 427 |
| 428 bool SearchProvider::ParseSuggestResults(Value* root_val, | 428 bool SearchProvider::ParseSuggestResults(Value* root_val, |
| 429 bool is_keyword, | 429 bool is_keyword, |
| 430 const std::wstring& input_text, | 430 const std::wstring& input_text, |
| 431 SuggestResults* suggest_results) { | 431 SuggestResults* suggest_results) { |
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 771 | 771 |
| 772 // When the user forced a query, we need to make sure all the fill_into_edit | 772 // When the user forced a query, we need to make sure all the fill_into_edit |
| 773 // values preserve that property. Otherwise, if the user starts editing a | 773 // values preserve that property. Otherwise, if the user starts editing a |
| 774 // suggestion, non-Search results will suddenly appear. | 774 // suggestion, non-Search results will suddenly appear. |
| 775 size_t search_start = 0; | 775 size_t search_start = 0; |
| 776 if (input_.type() == AutocompleteInput::FORCED_QUERY) { | 776 if (input_.type() == AutocompleteInput::FORCED_QUERY) { |
| 777 match.fill_into_edit.assign(L"?"); | 777 match.fill_into_edit.assign(L"?"); |
| 778 ++search_start; | 778 ++search_start; |
| 779 } | 779 } |
| 780 if (is_keyword) { | 780 if (is_keyword) { |
| 781 match.fill_into_edit.append(UTF16ToWideHack( | 781 match.fill_into_edit.append(providers_.keyword_provider().keyword() + L" "); |
| 782 providers_.keyword_provider().keyword() + char16(' '))); | |
| 783 match.template_url = &providers_.keyword_provider(); | 782 match.template_url = &providers_.keyword_provider(); |
| 784 } | 783 } |
| 785 match.fill_into_edit.append(query_string); | 784 match.fill_into_edit.append(query_string); |
| 786 // Not all suggestions start with the original input. | 785 // Not all suggestions start with the original input. |
| 787 if (!prevent_inline_autocomplete && | 786 if (!prevent_inline_autocomplete && |
| 788 !match.fill_into_edit.compare(search_start, input_text.length(), | 787 !match.fill_into_edit.compare(search_start, input_text.length(), |
| 789 input_text)) | 788 input_text)) |
| 790 match.inline_autocomplete_offset = search_start + input_text.length(); | 789 match.inline_autocomplete_offset = search_start + input_text.length(); |
| 791 | 790 |
| 792 const TemplateURLRef* const search_url = provider.url(); | 791 const TemplateURLRef* const search_url = provider.url(); |
| 793 DCHECK(search_url->SupportsReplacement()); | 792 DCHECK(search_url->SupportsReplacement()); |
| 794 match.destination_url = | 793 match.destination_url = |
| 795 GURL(search_url->ReplaceSearchTerms(provider, | 794 GURL(search_url->ReplaceSearchTerms(provider, |
| 796 WideToUTF16Hack(query_string), | 795 query_string, |
| 797 accepted_suggestion, | 796 accepted_suggestion, |
| 798 WideToUTF16Hack(input_text))); | 797 input_text)); |
| 799 | 798 |
| 800 // Search results don't look like URLs. | 799 // Search results don't look like URLs. |
| 801 match.transition = | 800 match.transition = |
| 802 is_keyword ? PageTransition::KEYWORD : PageTransition::GENERATED; | 801 is_keyword ? PageTransition::KEYWORD : PageTransition::GENERATED; |
| 803 | 802 |
| 804 // Try to add |match| to |map|. If a match for |query_string| is already in | 803 // Try to add |match| to |map|. If a match for |query_string| is already in |
| 805 // |map|, replace it if |match| is more relevant. | 804 // |map|, replace it if |match| is more relevant. |
| 806 // NOTE: Keep this ToLower() call in sync with url_database.cc. | 805 // NOTE: Keep this ToLower() call in sync with url_database.cc. |
| 807 const std::pair<MatchMap::iterator, bool> i = map->insert( | 806 const std::pair<MatchMap::iterator, bool> i = map->insert( |
| 808 std::pair<std::wstring, AutocompleteMatch>( | 807 std::pair<std::wstring, AutocompleteMatch>( |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 866 | 865 |
| 867 for (ACMatches::iterator i = matches_.begin(); i != matches_.end(); ++i) { | 866 for (ACMatches::iterator i = matches_.begin(); i != matches_.end(); ++i) { |
| 868 AutocompleteMatch& match = *i; | 867 AutocompleteMatch& match = *i; |
| 869 switch (match.type) { | 868 switch (match.type) { |
| 870 case AutocompleteMatch::SEARCH_WHAT_YOU_TYPED: | 869 case AutocompleteMatch::SEARCH_WHAT_YOU_TYPED: |
| 871 case AutocompleteMatch::SEARCH_HISTORY: | 870 case AutocompleteMatch::SEARCH_HISTORY: |
| 872 case AutocompleteMatch::SEARCH_SUGGEST: | 871 case AutocompleteMatch::SEARCH_SUGGEST: |
| 873 match.description.assign( | 872 match.description.assign( |
| 874 UTF16ToWideHack(l10n_util::GetStringFUTF16( | 873 UTF16ToWideHack(l10n_util::GetStringFUTF16( |
| 875 IDS_AUTOCOMPLETE_SEARCH_DESCRIPTION, | 874 IDS_AUTOCOMPLETE_SEARCH_DESCRIPTION, |
| 876 providers_.default_provider(). | 875 WideToUTF16Hack(providers_.default_provider(). |
| 877 AdjustedShortNameForLocaleDirection()))); | 876 AdjustedShortNameForLocaleDirection())))); |
| 878 match.description_class.push_back( | 877 match.description_class.push_back( |
| 879 ACMatchClassification(0, ACMatchClassification::DIM)); | 878 ACMatchClassification(0, ACMatchClassification::DIM)); |
| 880 // Only the first search match gets a description. | 879 // Only the first search match gets a description. |
| 881 return; | 880 return; |
| 882 | 881 |
| 883 default: | 882 default: |
| 884 break; | 883 break; |
| 885 } | 884 } |
| 886 } | 885 } |
| 887 } | 886 } |
| OLD | NEW |