Chromium Code Reviews| Index: chrome/browser/autocomplete/autocomplete.cc |
| =================================================================== |
| --- chrome/browser/autocomplete/autocomplete.cc (revision 94623) |
| +++ chrome/browser/autocomplete/autocomplete.cc (working copy) |
| @@ -5,6 +5,7 @@ |
| #include "chrome/browser/autocomplete/autocomplete.h" |
| #include <algorithm> |
| +#include <set> |
| #include "base/basictypes.h" |
| #include "base/command_line.h" |
| @@ -24,12 +25,16 @@ |
| #include "chrome/browser/autocomplete/search_provider.h" |
| #include "chrome/browser/autocomplete/shortcuts_provider.h" |
| #include "chrome/browser/bookmarks/bookmark_model.h" |
| +#include "chrome/browser/extensions/extension_service.h" |
| #include "chrome/browser/external_protocol/external_protocol_handler.h" |
| #include "chrome/browser/instant/instant_field_trial.h" |
| #include "chrome/browser/net/url_fixer_upper.h" |
| #include "chrome/browser/prefs/pref_service.h" |
| #include "chrome/browser/profiles/profile.h" |
| #include "chrome/browser/profiles/profile_io_data.h" |
| +#include "chrome/browser/search_engines/template_url.h" |
| +#include "chrome/browser/search_engines/template_url_service.h" |
| +#include "chrome/browser/search_engines/template_url_service_factory.h" |
| #include "chrome/browser/ui/webui/history_ui.h" |
| #include "chrome/common/chrome_notification_types.h" |
| #include "chrome/common/chrome_switches.h" |
| @@ -651,6 +656,9 @@ |
| } |
| void AutocompleteResult::SortAndCull(const AutocompleteInput& input) { |
| + for (ACMatches::iterator i = matches_.begin(); i != matches_.end(); ++i) |
| + i->ComputeStrippedDestinationURL(); |
| + |
| // Remove duplicates. |
| std::sort(matches_.begin(), matches_.end(), |
| &AutocompleteMatch::DestinationSortFunc); |
| @@ -953,6 +961,26 @@ |
| // Sort the matches and trim to a small number of "best" matches. |
| result_.SortAndCull(input_); |
| + std::set<string16> keywords; |
|
sky
2011/08/01 16:02:15
What this loop is doing doesn't depend upon state
|
| + for (ACMatches::iterator match(result_.begin()); match != result_.end(); |
| + ++match) { |
| + if (!match->keyword.empty()) { |
| + keywords.insert(match->keyword); |
| + } else { |
| + string16 keyword = keyword_provider_->GetKeywordForText( |
|
Peter Kasting
2011/07/29 21:08:44
Nit: Slightly more readable if you linebreak after
|
| + match->fill_into_edit); |
| + |
| + // Only add the keyword if the match does not have a duplicate keyword |
|
sky
2011/08/01 16:02:15
This comment doesn't seem to match the if (it does
aaron.randolph
2011/08/02 21:54:58
It doesn't check relevance because it expects the
|
| + // with a more relevant match. |
| + if (!keyword.empty() && !keywords.count(keyword)) { |
| + match->associated_keyword.reset(new AutocompleteMatch( |
| + keyword_provider_->CreateAutocompleteMatch(keyword, input_))); |
| + |
| + keywords.insert(keyword); |
| + } |
| + } |
| + } |
| + |
| // Need to validate before invoking CopyOldMatches as the old matches are not |
| // valid against the current input. |
| #ifndef NDEBUG |
| @@ -1040,3 +1068,4 @@ |
| expire_timer_.Start(base::TimeDelta::FromMilliseconds(kExpireTimeMS), |
| this, &AutocompleteController::ExpireCopiedEntries); |
| } |
| + |