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

Side by Side Diff: chrome/browser/autocomplete/history_url_provider.cc

Issue 291005: Allow the history URL provider to handle input of type QUERY. This helps in ... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: Created 11 years, 2 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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/history_url_provider.h" 5 #include "chrome/browser/autocomplete/history_url_provider.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/histogram.h" 10 #include "base/histogram.h"
(...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after
119 } 119 }
120 120
121 // Used by both autocomplete passes, and therefore called on multiple different 121 // Used by both autocomplete passes, and therefore called on multiple different
122 // threads (though not simultaneously). 122 // threads (though not simultaneously).
123 void HistoryURLProvider::DoAutocomplete(history::HistoryBackend* backend, 123 void HistoryURLProvider::DoAutocomplete(history::HistoryBackend* backend,
124 history::URLDatabase* db, 124 history::URLDatabase* db,
125 HistoryURLProviderParams* params) { 125 HistoryURLProviderParams* params) {
126 // Create a What You Typed match, which we'll need below. 126 // Create a What You Typed match, which we'll need below.
127 bool have_what_you_typed_match = 127 bool have_what_you_typed_match =
128 params->input.canonicalized_url().is_valid() && 128 params->input.canonicalized_url().is_valid() &&
129 (params->input.type() != AutocompleteInput::UNKNOWN); 129 (params->input.type() != AutocompleteInput::UNKNOWN) &&
130 (params->input.type() != AutocompleteInput::QUERY);
130 AutocompleteMatch what_you_typed_match(SuggestExactInput(params->input, 131 AutocompleteMatch what_you_typed_match(SuggestExactInput(params->input,
131 params->trim_http)); 132 params->trim_http));
132 133
133 // Get the matching URLs from the DB 134 // Get the matching URLs from the DB
134 typedef std::vector<history::URLRow> URLRowVector; 135 typedef std::vector<history::URLRow> URLRowVector;
135 URLRowVector url_matches; 136 URLRowVector url_matches;
136 HistoryMatches history_matches; 137 HistoryMatches history_matches;
137 for (Prefixes::const_iterator i(prefixes_.begin()); i != prefixes_.end(); 138 for (Prefixes::const_iterator i(prefixes_.begin()); i != prefixes_.end();
138 ++i) { 139 ++i) {
139 if (params->cancel) 140 if (params->cancel)
(...skipping 25 matching lines...) Expand all
165 // Try to promote a match as an exact/inline autocomplete match. This also 166 // Try to promote a match as an exact/inline autocomplete match. This also
166 // moves it to the front of |history_matches|, so skip over it when 167 // moves it to the front of |history_matches|, so skip over it when
167 // converting the rest of the matches. 168 // converting the rest of the matches.
168 size_t first_match = 1; 169 size_t first_match = 1;
169 size_t exact_suggestion = 0; 170 size_t exact_suggestion = 0;
170 // Checking |is_history_what_you_typed_match| tells us whether 171 // Checking |is_history_what_you_typed_match| tells us whether
171 // SuggestExactInput() succeeded in constructing a valid match. 172 // SuggestExactInput() succeeded in constructing a valid match.
172 if (what_you_typed_match.is_history_what_you_typed_match && 173 if (what_you_typed_match.is_history_what_you_typed_match &&
173 FixupExactSuggestion(db, params->input, &what_you_typed_match, 174 FixupExactSuggestion(db, params->input, &what_you_typed_match,
174 &history_matches)) { 175 &history_matches)) {
175 // Got an exact match for the user's input. Treat is as the best match 176 // Got an exact match for the user's input. Treat it as the best match
176 // regardless of the input type. 177 // regardless of the input type.
177 exact_suggestion = 1; 178 exact_suggestion = 1;
178 params->matches.push_back(what_you_typed_match); 179 params->matches.push_back(what_you_typed_match);
179 } else if (params->input.prevent_inline_autocomplete() || 180 } else if (params->input.prevent_inline_autocomplete() ||
180 history_matches.empty() || 181 history_matches.empty() ||
181 !PromoteMatchForInlineAutocomplete(params, history_matches.front())) { 182 !PromoteMatchForInlineAutocomplete(params, history_matches.front())) {
182 // Failed to promote any URLs for inline autocompletion. Use the What You 183 // Failed to promote any URLs for inline autocompletion. Use the What You
183 // Typed match, if we have it and the input wasn't UNKNOWN. 184 // Typed match, if we have it and the input looked like a URL.
184 first_match = 0; 185 first_match = 0;
185 if (have_what_you_typed_match) 186 if (have_what_you_typed_match)
186 params->matches.push_back(what_you_typed_match); 187 params->matches.push_back(what_you_typed_match);
187 } 188 }
188 189
189 // This is the end of the synchronous pass. 190 // This is the end of the synchronous pass.
190 if (!backend) 191 if (!backend)
191 return; 192 return;
192 193
193 // Remove redirects and trim list to size. We want to provide up to 194 // Remove redirects and trim list to size. We want to provide up to
(...skipping 263 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 458
458 // static 459 // static
459 int HistoryURLProvider::CalculateRelevance(AutocompleteInput::Type input_type, 460 int HistoryURLProvider::CalculateRelevance(AutocompleteInput::Type input_type,
460 MatchType match_type, 461 MatchType match_type,
461 size_t match_number) { 462 size_t match_number) {
462 switch (match_type) { 463 switch (match_type) {
463 case INLINE_AUTOCOMPLETE: 464 case INLINE_AUTOCOMPLETE:
464 return 1400; 465 return 1400;
465 466
466 case WHAT_YOU_TYPED: 467 case WHAT_YOU_TYPED:
467 return (input_type == AutocompleteInput::REQUESTED_URL) ? 1300 : 1200; 468 return 1200;
468 469
469 default: 470 default:
470 return 900 + static_cast<int>(match_number); 471 return 900 + static_cast<int>(match_number);
471 } 472 }
472 } 473 }
473 474
474 // static 475 // static
475 GURL HistoryURLProvider::ConvertToHostOnly(const HistoryMatch& match, 476 GURL HistoryURLProvider::ConvertToHostOnly(const HistoryMatch& match,
476 const std::wstring& input) { 477 const std::wstring& input) {
477 // See if we should try to do host-only suggestions for this URL. Nonstandard 478 // See if we should try to do host-only suggestions for this URL. Nonstandard
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
585 matches->push_front(match); 586 matches->push_front(match);
586 else 587 else
587 matches->push_back(match); 588 matches->push_back(match);
588 } 589 }
589 590
590 void HistoryURLProvider::RunAutocompletePasses( 591 void HistoryURLProvider::RunAutocompletePasses(
591 const AutocompleteInput& input, 592 const AutocompleteInput& input,
592 bool fixup_input_and_run_pass_1) { 593 bool fixup_input_and_run_pass_1) {
593 matches_.clear(); 594 matches_.clear();
594 595
595 if ((input.type() != AutocompleteInput::UNKNOWN) && 596 if ((input.type() == AutocompleteInput::INVALID) ||
596 (input.type() != AutocompleteInput::REQUESTED_URL) && 597 (input.type() == AutocompleteInput::FORCED_QUERY))
597 (input.type() != AutocompleteInput::URL))
598 return; 598 return;
599 599
600 // Create a match for exactly what the user typed. This will only be used as 600 // Create a match for exactly what the user typed. This will only be used as
601 // a fallback in case we can't get the history service or URL DB; otherwise, 601 // a fallback in case we can't get the history service or URL DB; otherwise,
602 // we'll run this again in DoAutocomplete() and use that result instead. 602 // we'll run this again in DoAutocomplete() and use that result instead.
603 const bool trim_http = !url_util::FindAndCompareScheme( 603 const bool trim_http = !url_util::FindAndCompareScheme(
604 WideToUTF8(input.text()), chrome::kHttpScheme, NULL); 604 WideToUTF8(input.text()), chrome::kHttpScheme, NULL);
605 if (input.canonicalized_url().is_valid()) 605 // Don't do this for queries -- while we can sometimes mark up a match for
606 // this, it's not what the user wants, and just adds noise.
607 if ((input.type() != AutocompleteInput::QUERY) &&
608 input.canonicalized_url().is_valid())
606 matches_.push_back(SuggestExactInput(input, trim_http)); 609 matches_.push_back(SuggestExactInput(input, trim_http));
607 610
608 // We'll need the history service to run both passes, so try to obtain it. 611 // We'll need the history service to run both passes, so try to obtain it.
609 HistoryService* const history_service = profile_ ? 612 HistoryService* const history_service = profile_ ?
610 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS) : history_service_; 613 profile_->GetHistoryService(Profile::EXPLICIT_ACCESS) : history_service_;
611 if (!history_service) 614 if (!history_service)
612 return; 615 return;
613 616
614 // Create the data structure for the autocomplete passes. We'll save this off 617 // Create the data structure for the autocomplete passes. We'll save this off
615 // onto the |params_| member for later deletion below if we need to run pass 618 // onto the |params_| member for later deletion below if we need to run pass
(...skipping 210 matching lines...) Expand 10 before | Expand all | Expand 10 after
826 history_match.input_location - offset, params->input.text().length(), 829 history_match.input_location - offset, params->input.text().length(),
827 match.contents.length(), ACMatchClassification::URL, 830 match.contents.length(), ACMatchClassification::URL,
828 &match.contents_class); 831 &match.contents_class);
829 match.description = info.title(); 832 match.description = info.title();
830 AutocompleteMatch::ClassifyMatchInString(params->input.text(), info.title(), 833 AutocompleteMatch::ClassifyMatchInString(params->input.text(), info.title(),
831 ACMatchClassification::NONE, 834 ACMatchClassification::NONE,
832 &match.description_class); 835 &match.description_class);
833 836
834 return match; 837 return match;
835 } 838 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698