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

Unified Diff: chrome/browser/autocomplete/autocomplete.cc

Issue 6731036: Enabled pressing TAB to cycle through the Omnibox results. (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: '' Created 9 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/autocomplete/autocomplete.cc
===================================================================
--- chrome/browser/autocomplete/autocomplete.cc (revision 80868)
+++ chrome/browser/autocomplete/autocomplete.cc (working copy)
@@ -5,6 +5,8 @@
#include "chrome/browser/autocomplete/autocomplete.h"
#include <algorithm>
+#include <set>
+#include <utility>
#include "base/basictypes.h"
#include "base/command_line.h"
@@ -23,10 +25,13 @@
#include "chrome/browser/autocomplete/keyword_provider.h"
#include "chrome/browser/autocomplete/search_provider.h"
#include "chrome/browser/bookmarks/bookmark_model.h"
+#include "chrome/browser/extensions/extension_service.h"
#include "chrome/browser/external_protocol_handler.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/search_engines/template_url.h"
+#include "chrome/browser/search_engines/template_url_model.h"
#include "chrome/browser/ui/webui/history_ui.h"
#include "chrome/common/chrome_switches.h"
#include "chrome/common/pref_names.h"
@@ -642,6 +647,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);
@@ -785,7 +793,8 @@
AutocompleteControllerDelegate* delegate)
: delegate_(delegate),
done_(true),
- in_start_(false) {
+ in_start_(false),
+ profile_(profile) {
search_provider_ = new SearchProvider(this, profile);
providers_.push_back(search_provider_);
if (!CommandLine::ForCurrentProcess()->HasSwitch(
@@ -820,6 +829,7 @@
void AutocompleteController::SetProfile(Profile* profile) {
Stop(true);
+ profile_ = profile;
for (ACProviders::iterator i(providers_.begin()); i != providers_.end(); ++i)
(*i)->SetProfile(profile);
input_.Clear(); // Ensure we don't try to do a "minimal_changes" query on a
@@ -932,6 +942,38 @@
// Sort the matches and trim to a small number of "best" matches.
result_.SortAndCull(input_);
+ std::set<string16> keywords;
+ for (ACMatches::iterator match(result_.begin()); match != result_.end();
+ ++match) {
+ string16 keyword_text = GetKeywordForText(match->fill_into_edit);
Peter Kasting 2011/04/11 23:17:33 Nit: This should be moved inside the first "else"
+ bool is_keyword_hint = false;
+ bool is_keyword_mode = false;
+
+ // If the current match is a keyword, assign that as the selected keyword.
+ if (TemplateURL::SupportsReplacement(match->template_url)) {
+ keyword_text.assign(match->template_url->keyword());
Peter Kasting 2011/04/11 23:17:33 Nit: Indent 2, not 4
+ is_keyword_mode = true;
+ } else if (!keyword_text.empty()) {
+ is_keyword_hint = true;
+ }
+
+ if (is_keyword_hint || is_keyword_mode) {
+ std::pair<std::set<string16>::iterator, bool> result =
Peter Kasting 2011/04/11 23:17:33 Nit: Instead of getting the result pair and checki
+ keywords.insert(keyword_text);
+
+ // Only add the keyword if the match does not have a duplicate keyword
+ // with a more relevant match.
+ if (result.second) {
+ match->keyword = new AutocompleteMatch::Keyword(
Peter Kasting 2011/04/11 23:17:33 Nit: Seems like Keyword's constructor should init
+ keyword_text, is_keyword_hint, is_keyword_mode);
+
+ if (is_keyword_hint)
+ match->keyword->template_url = profile_->GetTemplateURLModel()->
+ GetTemplateURLForKeyword(keyword_text);
+ }
+ }
+ }
+
// Need to validate before invoking CopyOldMatches as the old matches are not
// valid against the current input.
#ifndef NDEBUG
@@ -990,3 +1032,34 @@
expire_timer_.Start(base::TimeDelta::FromMilliseconds(kExpireTimeMS),
this, &AutocompleteController::ExpireCopiedEntries);
}
+
+string16 AutocompleteController::GetKeywordForText(
+ const string16& text) const {
Peter Kasting 2011/04/11 23:17:33 Nit: Indent 4, not 9
+ // Creates keyword_hint first in case |keyword| is a pointer to |text|.
Peter Kasting 2011/04/11 23:17:33 Nit: This comment no longer makes sense. Also, |k
+ const string16 keyword_hint(TemplateURLModel::CleanUserInputKeyword(text));
+
+ if (keyword_hint.empty())
+ return keyword_hint;
+ if (!profile_->GetTemplateURLModel())
+ return string16();
+ profile_->GetTemplateURLModel()->Load();
+
+ // Don't provide a hint if this keyword doesn't support replacement.
+ const TemplateURL* const template_url =
+ profile_->GetTemplateURLModel()->GetTemplateURLForKeyword(keyword_hint);
+ if (!TemplateURL::SupportsReplacement(template_url))
+ return string16();
+
+ // Don't provide a hint for inactive/disabled extension keywords.
+ if (template_url->IsExtensionKeyword()) {
+ const Extension* extension = profile_->GetExtensionService()->
+ GetExtensionById(template_url->GetExtensionId(), false);
+ if (!extension ||
+ (profile_->IsOffTheRecord() &&
Peter Kasting 2011/04/11 23:17:33 Nit: Indent 4, not 3
+ !profile_->GetExtensionService()->IsIncognitoEnabled(extension->id())))
+ return string16();
+ }
Peter Kasting 2011/04/11 23:17:33 Nit: Remove unmatched }
+
+ return keyword_hint;
+}
+

Powered by Google App Engine
This is Rietveld 408576698