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

Side by Side Diff: components/omnibox/search_provider.h

Issue 481693004: Omnibox: Prevent Asynchronous Suggestions from Changing Default Match (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 6 years, 3 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
« no previous file with comments | « components/omnibox/base_search_provider.cc ('k') | components/omnibox/search_provider.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // This file contains the Search autocomplete provider. This provider is 5 // This file contains the Search autocomplete provider. This provider is
6 // responsible for all autocomplete entries that start with "Search <engine> 6 // responsible for all autocomplete entries that start with "Search <engine>
7 // for ...", including searching for the current input string, search 7 // for ...", including searching for the current input string, search
8 // history, and search suggestions. An instance of it gets created and 8 // history, and search suggestions. An instance of it gets created and
9 // managed by the autocomplete controller. 9 // managed by the autocomplete controller.
10 10
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 void set_current_page_url(const GURL& current_page_url) { 68 void set_current_page_url(const GURL& current_page_url) {
69 current_page_url_ = current_page_url; 69 current_page_url_ = current_page_url;
70 } 70 }
71 71
72 protected: 72 protected:
73 virtual ~SearchProvider(); 73 virtual ~SearchProvider();
74 74
75 private: 75 private:
76 friend class SearchProviderTest; 76 friend class SearchProviderTest;
77 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, CanSendURL); 77 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, CanSendURL);
78 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest,
79 DontInlineAutocompleteAsynchronously);
78 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, NavigationInline); 80 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, NavigationInline);
79 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, NavigationInlineDomainClassify); 81 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, NavigationInlineDomainClassify);
80 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, NavigationInlineSchemeSubstring); 82 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, NavigationInlineSchemeSubstring);
81 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, RemoveStaleResultsTest);
82 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SuggestRelevanceExperiment); 83 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SuggestRelevanceExperiment);
83 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, TestDeleteMatch); 84 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, TestDeleteMatch);
84 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SuggestQueryUsesToken); 85 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SuggestQueryUsesToken);
85 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SessionToken); 86 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, SessionToken);
86 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, AnswersCache); 87 FRIEND_TEST_ALL_PREFIXES(SearchProviderTest, AnswersCache);
87 FRIEND_TEST_ALL_PREFIXES(AutocompleteProviderTest, GetDestinationURL); 88 FRIEND_TEST_ALL_PREFIXES(AutocompleteProviderTest, GetDestinationURL);
88 FRIEND_TEST_ALL_PREFIXES(InstantExtendedPrefetchTest, ClearPrefetchedResults); 89 FRIEND_TEST_ALL_PREFIXES(InstantExtendedPrefetchTest, ClearPrefetchedResults);
89 FRIEND_TEST_ALL_PREFIXES(InstantExtendedPrefetchTest, SetPrefetchQuery); 90 FRIEND_TEST_ALL_PREFIXES(InstantExtendedPrefetchTest, SetPrefetchQuery);
90 91
91 // Manages the providers (TemplateURLs) used by SearchProvider. Two providers 92 // Manages the providers (TemplateURLs) used by SearchProvider. Two providers
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
132 base::string16 default_provider_; 133 base::string16 default_provider_;
133 base::string16 keyword_provider_; 134 base::string16 keyword_provider_;
134 135
135 DISALLOW_COPY_AND_ASSIGN(Providers); 136 DISALLOW_COPY_AND_ASSIGN(Providers);
136 }; 137 };
137 138
138 class CompareScoredResults; 139 class CompareScoredResults;
139 140
140 typedef std::vector<history::KeywordSearchTermVisit> HistoryResults; 141 typedef std::vector<history::KeywordSearchTermVisit> HistoryResults;
141 142
142 // Removes non-inlineable results until either the top result can inline
143 // autocomplete the current input or verbatim outscores the top result.
144 static void RemoveStaleResults(
145 const base::string16& input,
146 int verbatim_relevance,
147 SearchSuggestionParser::SuggestResults* suggest_results,
148 SearchSuggestionParser::NavigationResults* navigation_results);
149
150 // Calculates the relevance score for the keyword verbatim result (if the 143 // Calculates the relevance score for the keyword verbatim result (if the
151 // input matches one of the profile's keyword). 144 // input matches one of the profile's keyword).
152 static int CalculateRelevanceForKeywordVerbatim( 145 static int CalculateRelevanceForKeywordVerbatim(
153 metrics::OmniboxInputType::Type type, 146 metrics::OmniboxInputType::Type type,
154 bool prefer_keyword); 147 bool prefer_keyword);
155 148
149 // A helper function for UpdateAllOldResults().
150 static void UpdateOldResults(bool minimal_changes,
151 SearchSuggestionParser::Results* results);
152
153 // Returns the first match in |matches| which might be chosen as default.
154 static ACMatches::iterator FindTopMatch(ACMatches* matches);
155
156 // AutocompleteProvider: 156 // AutocompleteProvider:
157 virtual void Start(const AutocompleteInput& input, 157 virtual void Start(const AutocompleteInput& input,
158 bool minimal_changes) OVERRIDE; 158 bool minimal_changes) OVERRIDE;
159 virtual void Stop(bool clear_cached_results) OVERRIDE; 159 virtual void Stop(bool clear_cached_results) OVERRIDE;
160 160
161 // BaseSearchProvider: 161 // BaseSearchProvider:
162 virtual const TemplateURL* GetTemplateURL(bool is_keyword) const OVERRIDE; 162 virtual const TemplateURL* GetTemplateURL(bool is_keyword) const OVERRIDE;
163 virtual const AutocompleteInput GetInput(bool is_keyword) const OVERRIDE; 163 virtual const AutocompleteInput GetInput(bool is_keyword) const OVERRIDE;
164 virtual bool ShouldAppendExtraParams( 164 virtual bool ShouldAppendExtraParams(
165 const SearchSuggestionParser::SuggestResult& result) const OVERRIDE; 165 const SearchSuggestionParser::SuggestResult& result) const OVERRIDE;
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 // Determines whether an asynchronous subcomponent query should run for the 200 // Determines whether an asynchronous subcomponent query should run for the
201 // current input. If so, starts it if necessary; otherwise stops it. 201 // current input. If so, starts it if necessary; otherwise stops it.
202 // NOTE: This function does not update |done_|. Callers must do so. 202 // NOTE: This function does not update |done_|. Callers must do so.
203 void StartOrStopSuggestQuery(bool minimal_changes); 203 void StartOrStopSuggestQuery(bool minimal_changes);
204 204
205 // Returns true when the current query can be sent to the Suggest service. 205 // Returns true when the current query can be sent to the Suggest service.
206 // This will be false e.g. when Suggest is disabled, the query contains 206 // This will be false e.g. when Suggest is disabled, the query contains
207 // potentially private data, etc. 207 // potentially private data, etc.
208 bool IsQuerySuitableForSuggest() const; 208 bool IsQuerySuitableForSuggest() const;
209 209
210 // Removes stale results for both default and keyword providers. See comments 210 // Remove existing keyword results if the user is no longer in keyword mode,
211 // on RemoveStaleResults(). 211 // and, if |minimal_changes| is false, revise the existing results to
212 void RemoveAllStaleResults(); 212 // indicate they were received before the last keystroke.
213 void UpdateAllOldResults(bool minimal_changes);
214
215 // Given new asynchronous results, ensure that we don't clobber the current
216 // top results, which were determined synchronously on the last keystroke.
217 void PersistTopSuggestions(SearchSuggestionParser::Results* results);
213 218
214 // Apply calculated relevance scores to the current results. 219 // Apply calculated relevance scores to the current results.
215 void ApplyCalculatedRelevance();
216 void ApplyCalculatedSuggestRelevance( 220 void ApplyCalculatedSuggestRelevance(
217 SearchSuggestionParser::SuggestResults* list); 221 SearchSuggestionParser::SuggestResults* list);
218 void ApplyCalculatedNavigationRelevance( 222 void ApplyCalculatedNavigationRelevance(
219 SearchSuggestionParser::NavigationResults* list); 223 SearchSuggestionParser::NavigationResults* list);
220 224
221 // Starts a new URLFetcher requesting suggest results from |template_url|; 225 // Starts a new URLFetcher requesting suggest results from |template_url|;
222 // callers own the returned URLFetcher, which is NULL for invalid providers. 226 // callers own the returned URLFetcher, which is NULL for invalid providers.
223 net::URLFetcher* CreateSuggestFetcher(int id, 227 net::URLFetcher* CreateSuggestFetcher(int id,
224 const TemplateURL* template_url, 228 const TemplateURL* template_url,
225 const AutocompleteInput& input); 229 const AutocompleteInput& input);
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
344 base::TimeTicks time_suggest_request_sent_; 348 base::TimeTicks time_suggest_request_sent_;
345 349
346 // Fetchers used to retrieve results for the keyword and default providers. 350 // Fetchers used to retrieve results for the keyword and default providers.
347 scoped_ptr<net::URLFetcher> keyword_fetcher_; 351 scoped_ptr<net::URLFetcher> keyword_fetcher_;
348 scoped_ptr<net::URLFetcher> default_fetcher_; 352 scoped_ptr<net::URLFetcher> default_fetcher_;
349 353
350 // Results from the default and keyword search providers. 354 // Results from the default and keyword search providers.
351 SearchSuggestionParser::Results default_results_; 355 SearchSuggestionParser::Results default_results_;
352 SearchSuggestionParser::Results keyword_results_; 356 SearchSuggestionParser::Results keyword_results_;
353 357
358 // The top query suggestion, left blank if none.
359 base::string16 top_query_suggestion_match_contents_;
360 // The top navigation suggestion, left blank/invalid if none.
361 GURL top_navigation_suggestion_;
362
354 GURL current_page_url_; 363 GURL current_page_url_;
355 364
356 // Session token management. 365 // Session token management.
357 std::string current_token_; 366 std::string current_token_;
358 base::TimeTicks token_expiration_time_; 367 base::TimeTicks token_expiration_time_;
359 368
360 // Answers prefetch management. 369 // Answers prefetch management.
361 AnswersCache answers_cache_; // Cache for last answers seen. 370 AnswersCache answers_cache_; // Cache for last answers seen.
362 AnswersQueryData prefetch_data_; // Data to use for query prefetching. 371 AnswersQueryData prefetch_data_; // Data to use for query prefetching.
363 372
364 DISALLOW_COPY_AND_ASSIGN(SearchProvider); 373 DISALLOW_COPY_AND_ASSIGN(SearchProvider);
365 }; 374 };
366 375
367 #endif // COMPONENTS_OMNIBOX_SEARCH_PROVIDER_H_ 376 #endif // COMPONENTS_OMNIBOX_SEARCH_PROVIDER_H_
OLDNEW
« no previous file with comments | « components/omnibox/base_search_provider.cc ('k') | components/omnibox/search_provider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698