| OLD | NEW |
| 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2010 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 non-keyword autocomplete entries that start with | 6 // responsible for all non-keyword autocomplete entries that start with |
| 7 // "Search <engine> for ...", including searching for the current input string, | 7 // "Search <engine> for ...", including searching for the current input string, |
| 8 // search history, and search suggestions. An instance of it gets created and | 8 // search 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 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 } | 52 } |
| 53 #endif | 53 #endif |
| 54 | 54 |
| 55 // Marks the instant query as done. If |input_text| is non-empty this changes | 55 // Marks the instant query as done. If |input_text| is non-empty this changes |
| 56 // the 'search what you typed' results text to |input_text| + |suggest_text|. | 56 // the 'search what you typed' results text to |input_text| + |suggest_text|. |
| 57 // |input_text| is the text the user input into the edit. |input_text| differs | 57 // |input_text| is the text the user input into the edit. |input_text| differs |
| 58 // from |input_.text()| if the input contained whitespace. | 58 // from |input_.text()| if the input contained whitespace. |
| 59 // | 59 // |
| 60 // This method also marks the search provider as no longer needing to wait for | 60 // This method also marks the search provider as no longer needing to wait for |
| 61 // the instant result. | 61 // the instant result. |
| 62 void FinalizeInstantQuery(const string16& input_text, | 62 void FinalizeInstantQuery(const std::wstring& input_text, |
| 63 const string16& suggest_text); | 63 const std::wstring& suggest_text); |
| 64 | 64 |
| 65 // AutocompleteProvider | 65 // AutocompleteProvider |
| 66 virtual void Start(const AutocompleteInput& input, | 66 virtual void Start(const AutocompleteInput& input, |
| 67 bool minimal_changes); | 67 bool minimal_changes); |
| 68 virtual void Stop(); | 68 virtual void Stop(); |
| 69 | 69 |
| 70 // URLFetcher::Delegate | 70 // URLFetcher::Delegate |
| 71 virtual void OnURLFetchComplete(const URLFetcher* source, | 71 virtual void OnURLFetchComplete(const URLFetcher* source, |
| 72 const GURL& url, | 72 const GURL& url, |
| 73 const net::URLRequestStatus& status, | 73 const net::URLRequestStatus& status, |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 145 // user changes their default while the query is running. | 145 // user changes their default while the query is running. |
| 146 TemplateURL cached_default_provider_; | 146 TemplateURL cached_default_provider_; |
| 147 TemplateURL cached_keyword_provider_; | 147 TemplateURL cached_keyword_provider_; |
| 148 | 148 |
| 149 // TODO(pkasting): http://b/1162970 We shouldn't need these. | 149 // TODO(pkasting): http://b/1162970 We shouldn't need these. |
| 150 const TemplateURL* default_provider_; | 150 const TemplateURL* default_provider_; |
| 151 const TemplateURL* keyword_provider_; | 151 const TemplateURL* keyword_provider_; |
| 152 }; | 152 }; |
| 153 | 153 |
| 154 struct NavigationResult { | 154 struct NavigationResult { |
| 155 NavigationResult(const GURL& url, const string16& site_name) | 155 NavigationResult(const GURL& url, const std::wstring& site_name) |
| 156 : url(url), | 156 : url(url), |
| 157 site_name(site_name) { | 157 site_name(site_name) { |
| 158 } | 158 } |
| 159 | 159 |
| 160 // The URL. | 160 // The URL. |
| 161 GURL url; | 161 GURL url; |
| 162 | 162 |
| 163 // Name for the site. | 163 // Name for the site. |
| 164 string16 site_name; | 164 std::wstring site_name; |
| 165 }; | 165 }; |
| 166 | 166 |
| 167 typedef std::vector<string16> SuggestResults; | 167 typedef std::vector<std::wstring> SuggestResults; |
| 168 typedef std::vector<NavigationResult> NavigationResults; | 168 typedef std::vector<NavigationResult> NavigationResults; |
| 169 typedef std::vector<history::KeywordSearchTermVisit> HistoryResults; | 169 typedef std::vector<history::KeywordSearchTermVisit> HistoryResults; |
| 170 typedef std::map<string16, AutocompleteMatch> MatchMap; | 170 typedef std::map<std::wstring, AutocompleteMatch> MatchMap; |
| 171 | 171 |
| 172 // Called when timer_ expires. | 172 // Called when timer_ expires. |
| 173 void Run(); | 173 void Run(); |
| 174 | 174 |
| 175 // Runs the history query, if necessary. The history query is synchronous. | 175 // Runs the history query, if necessary. The history query is synchronous. |
| 176 // This does not update |done_|. | 176 // This does not update |done_|. |
| 177 void DoHistoryQuery(bool minimal_changes); | 177 void DoHistoryQuery(bool minimal_changes); |
| 178 | 178 |
| 179 // Determines whether an asynchronous subcomponent query should run for the | 179 // Determines whether an asynchronous subcomponent query should run for the |
| 180 // current input. If so, starts it if necessary; otherwise stops it. | 180 // current input. If so, starts it if necessary; otherwise stops it. |
| 181 // NOTE: This function does not update |done_|. Callers must do so. | 181 // NOTE: This function does not update |done_|. Callers must do so. |
| 182 void StartOrStopSuggestQuery(bool minimal_changes); | 182 void StartOrStopSuggestQuery(bool minimal_changes); |
| 183 | 183 |
| 184 // Returns true when the current query can be sent to the Suggest service. | 184 // Returns true when the current query can be sent to the Suggest service. |
| 185 // This will be false e.g. when Suggest is disabled, the query contains | 185 // This will be false e.g. when Suggest is disabled, the query contains |
| 186 // potentially private data, etc. | 186 // potentially private data, etc. |
| 187 bool IsQuerySuitableForSuggest() const; | 187 bool IsQuerySuitableForSuggest() const; |
| 188 | 188 |
| 189 // Stops the suggest query. | 189 // Stops the suggest query. |
| 190 // NOTE: This does not update |done_|. Callers must do so. | 190 // NOTE: This does not update |done_|. Callers must do so. |
| 191 void StopSuggest(); | 191 void StopSuggest(); |
| 192 | 192 |
| 193 // Creates a URLFetcher requesting suggest results for the specified | 193 // Creates a URLFetcher requesting suggest results for the specified |
| 194 // TemplateURL. Ownership of the returned URLFetchet passes to the caller. | 194 // TemplateURL. Ownership of the returned URLFetchet passes to the caller. |
| 195 URLFetcher* CreateSuggestFetcher(int id, | 195 URLFetcher* CreateSuggestFetcher(int id, |
| 196 const TemplateURL& provider, | 196 const TemplateURL& provider, |
| 197 const string16& text); | 197 const std::wstring& text); |
| 198 | 198 |
| 199 // Parses the results from the Suggest server and stores up to kMaxMatches of | 199 // Parses the results from the Suggest server and stores up to kMaxMatches of |
| 200 // them in server_results_. Returns whether parsing succeeded. | 200 // them in server_results_. Returns whether parsing succeeded. |
| 201 bool ParseSuggestResults(Value* root_val, | 201 bool ParseSuggestResults(Value* root_val, |
| 202 bool is_keyword, | 202 bool is_keyword, |
| 203 const string16& input_text, | 203 const std::wstring& input_text, |
| 204 SuggestResults* suggest_results); | 204 SuggestResults* suggest_results); |
| 205 | 205 |
| 206 // Converts the parsed server results in server_results_ to a set of | 206 // Converts the parsed server results in server_results_ to a set of |
| 207 // AutocompleteMatches and adds them to |matches_|. This also sets |done_| | 207 // AutocompleteMatches and adds them to |matches_|. This also sets |done_| |
| 208 // correctly. | 208 // correctly. |
| 209 void ConvertResultsToAutocompleteMatches(); | 209 void ConvertResultsToAutocompleteMatches(); |
| 210 | 210 |
| 211 // Converts the first navigation result in |navigation_results| to an | 211 // Converts the first navigation result in |navigation_results| to an |
| 212 // AutocompleteMatch and adds it to |matches_|. | 212 // AutocompleteMatch and adds it to |matches_|. |
| 213 void AddNavigationResultsToMatches( | 213 void AddNavigationResultsToMatches( |
| (...skipping 30 matching lines...) Expand all Loading... |
| 244 bool is_keyword) const; | 244 bool is_keyword) const; |
| 245 // |result_number| is same as above. |is_keyword| is true if the navigation | 245 // |result_number| is same as above. |is_keyword| is true if the navigation |
| 246 // result was suggested by the keyword provider. | 246 // result was suggested by the keyword provider. |
| 247 int CalculateRelevanceForNavigation(size_t num_results, | 247 int CalculateRelevanceForNavigation(size_t num_results, |
| 248 size_t result_number, | 248 size_t result_number, |
| 249 bool is_keyword) const; | 249 bool is_keyword) const; |
| 250 | 250 |
| 251 // Creates an AutocompleteMatch for "Search <engine> for |query_string|" with | 251 // Creates an AutocompleteMatch for "Search <engine> for |query_string|" with |
| 252 // the supplied relevance. Adds this match to |map|; if such a match already | 252 // the supplied relevance. Adds this match to |map|; if such a match already |
| 253 // exists, whichever one has lower relevance is eliminated. | 253 // exists, whichever one has lower relevance is eliminated. |
| 254 void AddMatchToMap(const string16& query_string, | 254 void AddMatchToMap(const std::wstring& query_string, |
| 255 const string16& input_text, | 255 const std::wstring& input_text, |
| 256 int relevance, | 256 int relevance, |
| 257 AutocompleteMatch::Type type, | 257 AutocompleteMatch::Type type, |
| 258 int accepted_suggestion, | 258 int accepted_suggestion, |
| 259 bool is_keyword, | 259 bool is_keyword, |
| 260 bool prevent_inline_autocomplete, | 260 bool prevent_inline_autocomplete, |
| 261 MatchMap* map); | 261 MatchMap* map); |
| 262 | 262 |
| 263 // Returns an AutocompleteMatch for a navigational suggestion. | 263 // Returns an AutocompleteMatch for a navigational suggestion. |
| 264 AutocompleteMatch NavigationToMatch(const NavigationResult& query_string, | 264 AutocompleteMatch NavigationToMatch(const NavigationResult& query_string, |
| 265 int relevance, | 265 int relevance, |
| 266 bool is_keyword); | 266 bool is_keyword); |
| 267 | 267 |
| 268 // Updates the value of |done_| from the internal state. | 268 // Updates the value of |done_| from the internal state. |
| 269 void UpdateDone(); | 269 void UpdateDone(); |
| 270 | 270 |
| 271 // Updates the description/description_class of the first search match. | 271 // Updates the description/description_class of the first search match. |
| 272 void UpdateFirstSearchMatchDescription(); | 272 void UpdateFirstSearchMatchDescription(); |
| 273 | 273 |
| 274 // Should we query for suggest results immediately? This is normally false, | 274 // Should we query for suggest results immediately? This is normally false, |
| 275 // but may be set to true during testing. | 275 // but may be set to true during testing. |
| 276 static bool query_suggest_immediately_; | 276 static bool query_suggest_immediately_; |
| 277 | 277 |
| 278 // Maintains the TemplateURLs used. | 278 // Maintains the TemplateURLs used. |
| 279 Providers providers_; | 279 Providers providers_; |
| 280 | 280 |
| 281 // The user's input. | 281 // The user's input. |
| 282 AutocompleteInput input_; | 282 AutocompleteInput input_; |
| 283 | 283 |
| 284 // Input text when searching against the keyword provider. | 284 // Input text when searching against the keyword provider. |
| 285 string16 keyword_input_text_; | 285 std::wstring keyword_input_text_; |
| 286 | 286 |
| 287 // Searches in the user's history that begin with the input text. | 287 // Searches in the user's history that begin with the input text. |
| 288 HistoryResults keyword_history_results_; | 288 HistoryResults keyword_history_results_; |
| 289 HistoryResults default_history_results_; | 289 HistoryResults default_history_results_; |
| 290 | 290 |
| 291 // Number of suggest results that haven't yet arrived. If greater than 0 it | 291 // Number of suggest results that haven't yet arrived. If greater than 0 it |
| 292 // indicates either |timer_| or one of the URLFetchers is still running. | 292 // indicates either |timer_| or one of the URLFetchers is still running. |
| 293 int suggest_results_pending_; | 293 int suggest_results_pending_; |
| 294 | 294 |
| 295 // A timer to start a query to the suggest server after the user has stopped | 295 // A timer to start a query to the suggest server after the user has stopped |
| (...skipping 15 matching lines...) Expand all Loading... |
| 311 NavigationResults keyword_navigation_results_; | 311 NavigationResults keyword_navigation_results_; |
| 312 NavigationResults default_navigation_results_; | 312 NavigationResults default_navigation_results_; |
| 313 | 313 |
| 314 // Whether suggest_results_ is valid. | 314 // Whether suggest_results_ is valid. |
| 315 bool have_suggest_results_; | 315 bool have_suggest_results_; |
| 316 | 316 |
| 317 // Has FinalizeInstantQuery been invoked since the last |Start|? | 317 // Has FinalizeInstantQuery been invoked since the last |Start|? |
| 318 bool instant_finalized_; | 318 bool instant_finalized_; |
| 319 | 319 |
| 320 // The |suggest_text| parameter passed to FinalizeInstantQuery. | 320 // The |suggest_text| parameter passed to FinalizeInstantQuery. |
| 321 string16 default_provider_suggest_text_; | 321 std::wstring default_provider_suggest_text_; |
| 322 | 322 |
| 323 DISALLOW_COPY_AND_ASSIGN(SearchProvider); | 323 DISALLOW_COPY_AND_ASSIGN(SearchProvider); |
| 324 }; | 324 }; |
| 325 | 325 |
| 326 #endif // CHROME_BROWSER_AUTOCOMPLETE_SEARCH_PROVIDER_H_ | 326 #endif // CHROME_BROWSER_AUTOCOMPLETE_SEARCH_PROVIDER_H_ |
| OLD | NEW |