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

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

Issue 312423003: Cleanup AutocompleteInput and AutocompleteProvider Functions (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Return a std::pair Created 6 years, 6 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/history_url_provider.cc
diff --git a/chrome/browser/autocomplete/history_url_provider.cc b/chrome/browser/autocomplete/history_url_provider.cc
index 0729386d724b9f42586c7fcaed9c9445b97afc9f..1ca36b83f8f22083fa431fbaf1d042212f9f1b9d 100644
--- a/chrome/browser/autocomplete/history_url_provider.cc
+++ b/chrome/browser/autocomplete/history_url_provider.cc
@@ -408,7 +408,91 @@ void HistoryURLProvider::Start(const AutocompleteInput& input,
// Cancel any in-progress query.
Stop(false);
- RunAutocompletePasses(input, true);
+ matches_.clear();
+
+ if ((input.type() == AutocompleteInput::INVALID) ||
+ (input.type() == AutocompleteInput::FORCED_QUERY))
+ return;
+
+ // Create a match for exactly what the user typed. This will only be used as
+ // a fallback in case we can't get the history service or URL DB; otherwise,
+ // we'll run this again in DoAutocomplete() and use that result instead.
+ const bool trim_http = !AutocompleteInput::HasHTTPScheme(input.text());
+ // Don't do this for queries -- while we can sometimes mark up a match for
+ // this, it's not what the user wants, and just adds noise.
+ if (input.type() != AutocompleteInput::QUERY) {
+ AutocompleteMatch what_you_typed(SuggestExactInput(
+ input.text(), input.canonicalized_url(), trim_http));
+ what_you_typed.relevance = CalculateRelevance(WHAT_YOU_TYPED, 0);
+ matches_.push_back(what_you_typed);
+ }
+
+ // We'll need the history service to run both passes, so try to obtain it.
+ if (!profile_)
+ return;
+ HistoryService* const history_service =
+ HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
+ if (!history_service)
+ return;
+
+ // Get the default search provider and search terms data now since we have to
+ // retrieve these on the UI thread, and the second pass runs on the history
+ // thread. |template_url_service| can be NULL when testing.
+ TemplateURLService* template_url_service =
+ TemplateURLServiceFactory::GetForProfile(profile_);
+ TemplateURL* default_search_provider = template_url_service ?
+ template_url_service->GetDefaultSearchProvider() : NULL;
+ UIThreadSearchTermsData data(profile_);
+
+ // Do some fixup on the user input before matching against it, so we provide
+ // good results for local file paths, input with spaces, etc.
+ const FixupReturn fixup_return(FixupUserInput(input));
+ if (!fixup_return.first)
+ return;
+ url::Parsed parts;
+ URLFixerUpper::SegmentURL(fixup_return.second, &parts);
+ AutocompleteInput fixed_up_input(input);
+ fixed_up_input.UpdateText(fixup_return.second, base::string16::npos, parts);
+
+ // Create the data structure for the autocomplete passes. We'll save this off
+ // onto the |params_| member for later deletion below if we need to run pass
+ // 2.
+ scoped_ptr<HistoryURLProviderParams> params(
+ new HistoryURLProviderParams(
+ fixed_up_input, trim_http,
+ profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
+ default_search_provider, data));
+ // Note that we use the non-fixed-up input here, since fixup may strip
+ // trailing whitespace.
+ params->prevent_inline_autocomplete = PreventInlineAutocomplete(input);
+
+ // Pass 1: Get the in-memory URL database, and use it to find and promote
+ // the inline autocomplete match, if any.
+ history::URLDatabase* url_db = history_service->InMemoryDatabase();
+ // url_db can be NULL if it hasn't finished initializing (or failed to
+ // initialize). In this case all we can do is fall back on the second
+ // pass.
+ //
+ // TODO(pkasting): We should just block here until this loads. Any time
+ // someone unloads the history backend, we'll get inconsistent inline
+ // autocomplete behavior here.
+ if (url_db) {
+ DoAutocomplete(NULL, url_db, params.get());
+ // params->matches now has the matches we should expose to the provider.
+ // Pass 2 expects a "clean slate" set of matches.
+ matches_.clear();
+ matches_.swap(params->matches);
+ UpdateStarredStateOfMatches();
+ }
+
+ // Pass 2: Ask the history service to call us back on the history thread,
+ // where we can read the full on-disk DB.
+ if (search_url_database_ && input.want_asynchronous_matches()) {
+ done_ = false;
+ params_ = params.release(); // This object will be destroyed in
+ // QueryComplete() once we're done with it.
+ history_service->ScheduleAutocomplete(this, params_);
+ }
}
void HistoryURLProvider::Stop(bool clear_cached_results) {
@@ -688,93 +772,6 @@ int HistoryURLProvider::CalculateRelevance(MatchType match_type,
}
}
-void HistoryURLProvider::RunAutocompletePasses(
- const AutocompleteInput& input,
- bool fixup_input_and_run_pass_1) {
- matches_.clear();
-
- if ((input.type() == AutocompleteInput::INVALID) ||
- (input.type() == AutocompleteInput::FORCED_QUERY))
- return;
-
- // Create a match for exactly what the user typed. This will only be used as
- // a fallback in case we can't get the history service or URL DB; otherwise,
- // we'll run this again in DoAutocomplete() and use that result instead.
- const bool trim_http = !AutocompleteInput::HasHTTPScheme(input.text());
- // Don't do this for queries -- while we can sometimes mark up a match for
- // this, it's not what the user wants, and just adds noise.
- if (input.type() != AutocompleteInput::QUERY) {
- AutocompleteMatch what_you_typed(SuggestExactInput(
- input.text(), input.canonicalized_url(), trim_http));
- what_you_typed.relevance = CalculateRelevance(WHAT_YOU_TYPED, 0);
- matches_.push_back(what_you_typed);
- }
-
- // We'll need the history service to run both passes, so try to obtain it.
- if (!profile_)
- return;
- HistoryService* const history_service =
- HistoryServiceFactory::GetForProfile(profile_, Profile::EXPLICIT_ACCESS);
- if (!history_service)
- return;
-
- // Get the default search provider and search terms data now since we have to
- // retrieve these on the UI thread, and the second pass runs on the history
- // thread. |template_url_service| can be NULL when testing.
- TemplateURLService* template_url_service =
- TemplateURLServiceFactory::GetForProfile(profile_);
- TemplateURL* default_search_provider = template_url_service ?
- template_url_service->GetDefaultSearchProvider() : NULL;
- UIThreadSearchTermsData data(profile_);
-
- // Create the data structure for the autocomplete passes. We'll save this off
- // onto the |params_| member for later deletion below if we need to run pass
- // 2.
- scoped_ptr<HistoryURLProviderParams> params(
- new HistoryURLProviderParams(
- input, trim_http,
- profile_->GetPrefs()->GetString(prefs::kAcceptLanguages),
- default_search_provider, data));
-
- params->prevent_inline_autocomplete =
- PreventInlineAutocomplete(input);
-
- if (fixup_input_and_run_pass_1) {
- // Do some fixup on the user input before matching against it, so we provide
- // good results for local file paths, input with spaces, etc.
- if (!FixupUserInput(&params->input))
- return;
-
- // Pass 1: Get the in-memory URL database, and use it to find and promote
- // the inline autocomplete match, if any.
- history::URLDatabase* url_db = history_service->InMemoryDatabase();
- // url_db can be NULL if it hasn't finished initializing (or failed to
- // initialize). In this case all we can do is fall back on the second
- // pass.
- //
- // TODO(pkasting): We should just block here until this loads. Any time
- // someone unloads the history backend, we'll get inconsistent inline
- // autocomplete behavior here.
- if (url_db) {
- DoAutocomplete(NULL, url_db, params.get());
- // params->matches now has the matches we should expose to the provider.
- // Pass 2 expects a "clean slate" set of matches.
- matches_.clear();
- matches_.swap(params->matches);
- UpdateStarredStateOfMatches();
- }
- }
-
- // Pass 2: Ask the history service to call us back on the history thread,
- // where we can read the full on-disk DB.
- if (search_url_database_ && input.want_asynchronous_matches()) {
- done_ = false;
- params_ = params.release(); // This object will be destroyed in
- // QueryComplete() once we're done with it.
- history_service->ScheduleAutocomplete(this, params_);
- }
-}
-
bool HistoryURLProvider::FixupExactSuggestion(
history::URLDatabase* db,
const AutocompleteInput& input,
« no previous file with comments | « chrome/browser/autocomplete/history_url_provider.h ('k') | chrome/browser/autocomplete/shortcuts_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698