| 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 #ifndef CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_H_ | 5 #ifndef CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_H_ |
| 6 #define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_H_ | 6 #define CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_H_ |
| 7 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| 11 | 11 |
| 12 #include "base/logging.h" | 12 #include "base/logging.h" |
| 13 #include "base/ref_counted.h" | 13 #include "base/ref_counted.h" |
| 14 #include "base/string16.h" | |
| 15 #include "base/timer.h" | 14 #include "base/timer.h" |
| 16 #include "googleurl/src/gurl.h" | 15 #include "googleurl/src/gurl.h" |
| 17 #include "googleurl/src/url_parse.h" | 16 #include "googleurl/src/url_parse.h" |
| 18 | 17 |
| 19 // The AutocompleteController is the center of the autocomplete system. A | 18 // The AutocompleteController is the center of the autocomplete system. A |
| 20 // class creates an instance of the controller, which in turn creates a set of | 19 // class creates an instance of the controller, which in turn creates a set of |
| 21 // AutocompleteProviders to serve it. The owning class can ask the controller | 20 // AutocompleteProviders to serve it. The owning class can ask the controller |
| 22 // to Start() a query; the controller in turn passes this call down to the | 21 // to Start() a query; the controller in turn passes this call down to the |
| 23 // providers, each of which keeps track of its own matches and whether it has | 22 // providers, each of which keeps track of its own matches and whether it has |
| 24 // finished processing the query. When a provider gets more matches or finishes | 23 // finished processing the query. When a provider gets more matches or finishes |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 174 INVALID, // Empty input | 173 INVALID, // Empty input |
| 175 UNKNOWN, // Valid input whose type cannot be determined | 174 UNKNOWN, // Valid input whose type cannot be determined |
| 176 REQUESTED_URL, // Input autodetected as UNKNOWN, which the user wants to | 175 REQUESTED_URL, // Input autodetected as UNKNOWN, which the user wants to |
| 177 // treat as an URL by specifying a desired_tld | 176 // treat as an URL by specifying a desired_tld |
| 178 URL, // Input autodetected as a URL | 177 URL, // Input autodetected as a URL |
| 179 QUERY, // Input autodetected as a query | 178 QUERY, // Input autodetected as a query |
| 180 FORCED_QUERY, // Input forced to be a query by an initial '?' | 179 FORCED_QUERY, // Input forced to be a query by an initial '?' |
| 181 }; | 180 }; |
| 182 | 181 |
| 183 AutocompleteInput(); | 182 AutocompleteInput(); |
| 184 AutocompleteInput(const string16& text, | 183 AutocompleteInput(const std::wstring& text, |
| 185 const string16& desired_tld, | 184 const std::wstring& desired_tld, |
| 186 bool prevent_inline_autocomplete, | 185 bool prevent_inline_autocomplete, |
| 187 bool prefer_keyword, | 186 bool prefer_keyword, |
| 188 bool allow_exact_keyword_match, | 187 bool allow_exact_keyword_match, |
| 189 bool synchronous_only); | 188 bool synchronous_only); |
| 190 ~AutocompleteInput(); | 189 ~AutocompleteInput(); |
| 191 | 190 |
| 192 // If type is |FORCED_QUERY| and |text| starts with '?', it is removed. | 191 // If type is |FORCED_QUERY| and |text| starts with '?', it is removed. |
| 193 static void RemoveForcedQueryStringIfNecessary(Type type, string16* text); | 192 static void RemoveForcedQueryStringIfNecessary(Type type, std::wstring* text); |
| 194 | 193 |
| 195 // Converts |type| to a string representation. Used in logging. | 194 // Converts |type| to a string representation. Used in logging. |
| 196 static std::string TypeToString(Type type); | 195 static std::string TypeToString(Type type); |
| 197 | 196 |
| 198 // Parses |text| and returns the type of input this will be interpreted as. | 197 // Parses |text| and returns the type of input this will be interpreted as. |
| 199 // The components of the input are stored in the output parameter |parts|, if | 198 // The components of the input are stored in the output parameter |parts|, if |
| 200 // it is non-NULL. The scheme is stored in |scheme| if it is non-NULL. The | 199 // it is non-NULL. The scheme is stored in |scheme| if it is non-NULL. The |
| 201 // canonicalized URL is stored in |canonicalized_url|; however, this URL is | 200 // canonicalized URL is stored in |canonicalized_url|; however, this URL is |
| 202 // not guaranteed to be valid, especially if the parsed type is, e.g., QUERY. | 201 // not guaranteed to be valid, especially if the parsed type is, e.g., QUERY. |
| 203 static Type Parse(const string16& text, | 202 static Type Parse(const std::wstring& text, |
| 204 const string16& desired_tld, | 203 const std::wstring& desired_tld, |
| 205 url_parse::Parsed* parts, | 204 url_parse::Parsed* parts, |
| 206 string16* scheme, | 205 std::wstring* scheme, |
| 207 GURL* canonicalized_url); | 206 GURL* canonicalized_url); |
| 208 | 207 |
| 209 // Parses |text| and fill |scheme| and |host| by the positions of them. | 208 // Parses |text| and fill |scheme| and |host| by the positions of them. |
| 210 // The results are almost as same as the result of Parse(), but if the scheme | 209 // The results are almost as same as the result of Parse(), but if the scheme |
| 211 // is view-source, this function returns the positions of scheme and host | 210 // is view-source, this function returns the positions of scheme and host |
| 212 // in the URL qualified by "view-source:" prefix. | 211 // in the URL qualified by "view-source:" prefix. |
| 213 static void ParseForEmphasizeComponents(const string16& text, | 212 static void ParseForEmphasizeComponents(const std::wstring& text, |
| 214 const string16& desired_tld, | 213 const std::wstring& desired_tld, |
| 215 url_parse::Component* scheme, | 214 url_parse::Component* scheme, |
| 216 url_parse::Component* host); | 215 url_parse::Component* host); |
| 217 | 216 |
| 218 // Code that wants to format URLs with a format flag including | 217 // Code that wants to format URLs with a format flag including |
| 219 // net::kFormatUrlOmitTrailingSlashOnBareHostname risk changing the meaning if | 218 // net::kFormatUrlOmitTrailingSlashOnBareHostname risk changing the meaning if |
| 220 // the result is then parsed as AutocompleteInput. Such code can call this | 219 // the result is then parsed as AutocompleteInput. Such code can call this |
| 221 // function with the URL and its formatted string, and it will return a | 220 // function with the URL and its formatted string, and it will return a |
| 222 // formatted string with the same meaning as the original URL (i.e. it will | 221 // formatted string with the same meaning as the original URL (i.e. it will |
| 223 // re-append a slash if necessary). | 222 // re-append a slash if necessary). |
| 224 static string16 FormattedStringWithEquivalentMeaning( | 223 static std::wstring FormattedStringWithEquivalentMeaning( |
| 225 const GURL& url, | 224 const GURL& url, |
| 226 const string16& formatted_url); | 225 const std::wstring& formatted_url); |
| 227 | 226 |
| 228 // User-provided text to be completed. | 227 // User-provided text to be completed. |
| 229 const string16& text() const { return text_; } | 228 const std::wstring& text() const { return text_; } |
| 230 | 229 |
| 231 // Use of this setter is risky, since no other internal state is updated | 230 // Use of this setter is risky, since no other internal state is updated |
| 232 // besides |text_|. Only callers who know that they're not changing the | 231 // besides |text_|. Only callers who know that they're not changing the |
| 233 // type/scheme/etc. should use this. | 232 // type/scheme/etc. should use this. |
| 234 void set_text(const string16& text) { text_ = text; } | 233 void set_text(const std::wstring& text) { text_ = text; } |
| 235 | 234 |
| 236 // User's desired TLD, if one is not already present in the text to | 235 // User's desired TLD, if one is not already present in the text to |
| 237 // autocomplete. When this is non-empty, it also implies that "www." should | 236 // autocomplete. When this is non-empty, it also implies that "www." should |
| 238 // be prepended to the domain where possible. This should not have a leading | 237 // be prepended to the domain where possible. This should not have a leading |
| 239 // '.' (use "com" instead of ".com"). | 238 // '.' (use "com" instead of ".com"). |
| 240 const string16& desired_tld() const { return desired_tld_; } | 239 const std::wstring& desired_tld() const { return desired_tld_; } |
| 241 | 240 |
| 242 // The type of input supplied. | 241 // The type of input supplied. |
| 243 Type type() const { return type_; } | 242 Type type() const { return type_; } |
| 244 | 243 |
| 245 // Returns parsed URL components. | 244 // Returns parsed URL components. |
| 246 const url_parse::Parsed& parts() const { return parts_; } | 245 const url_parse::Parsed& parts() const { return parts_; } |
| 247 | 246 |
| 248 // The scheme parsed from the provided text; only meaningful when type_ is | 247 // The scheme parsed from the provided text; only meaningful when type_ is |
| 249 // URL. | 248 // URL. |
| 250 const string16& scheme() const { return scheme_; } | 249 const std::wstring& scheme() const { return scheme_; } |
| 251 | 250 |
| 252 // The input as an URL to navigate to, if possible. | 251 // The input as an URL to navigate to, if possible. |
| 253 const GURL& canonicalized_url() const { return canonicalized_url_; } | 252 const GURL& canonicalized_url() const { return canonicalized_url_; } |
| 254 | 253 |
| 255 // Returns whether inline autocompletion should be prevented. | 254 // Returns whether inline autocompletion should be prevented. |
| 256 bool prevent_inline_autocomplete() const { | 255 bool prevent_inline_autocomplete() const { |
| 257 return prevent_inline_autocomplete_; | 256 return prevent_inline_autocomplete_; |
| 258 } | 257 } |
| 259 | 258 |
| 260 // Returns the value of |prevent_inline_autocomplete| supplied to the | 259 // Returns the value of |prevent_inline_autocomplete| supplied to the |
| (...skipping 18 matching lines...) Expand all Loading... |
| 279 // asynchronous work should be canceled, so no later callbacks are fired. | 278 // asynchronous work should be canceled, so no later callbacks are fired. |
| 280 bool synchronous_only() const { return synchronous_only_; } | 279 bool synchronous_only() const { return synchronous_only_; } |
| 281 | 280 |
| 282 // operator==() by another name. | 281 // operator==() by another name. |
| 283 bool Equals(const AutocompleteInput& other) const; | 282 bool Equals(const AutocompleteInput& other) const; |
| 284 | 283 |
| 285 // Resets all internal variables to the null-constructed state. | 284 // Resets all internal variables to the null-constructed state. |
| 286 void Clear(); | 285 void Clear(); |
| 287 | 286 |
| 288 private: | 287 private: |
| 289 string16 text_; | 288 std::wstring text_; |
| 290 string16 desired_tld_; | 289 std::wstring desired_tld_; |
| 291 Type type_; | 290 Type type_; |
| 292 url_parse::Parsed parts_; | 291 url_parse::Parsed parts_; |
| 293 string16 scheme_; | 292 std::wstring scheme_; |
| 294 GURL canonicalized_url_; | 293 GURL canonicalized_url_; |
| 295 bool initial_prevent_inline_autocomplete_; | 294 bool initial_prevent_inline_autocomplete_; |
| 296 bool prevent_inline_autocomplete_; | 295 bool prevent_inline_autocomplete_; |
| 297 bool prefer_keyword_; | 296 bool prefer_keyword_; |
| 298 bool allow_exact_keyword_match_; | 297 bool allow_exact_keyword_match_; |
| 299 bool synchronous_only_; | 298 bool synchronous_only_; |
| 300 }; | 299 }; |
| 301 | 300 |
| 302 // AutocompleteProvider ------------------------------------------------------- | 301 // AutocompleteProvider ------------------------------------------------------- |
| 303 | 302 |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 383 // we have good relevance heuristics; the controller should handle all | 382 // we have good relevance heuristics; the controller should handle all |
| 384 // culling. | 383 // culling. |
| 385 static const size_t kMaxMatches; | 384 static const size_t kMaxMatches; |
| 386 | 385 |
| 387 protected: | 386 protected: |
| 388 friend class base::RefCountedThreadSafe<AutocompleteProvider>; | 387 friend class base::RefCountedThreadSafe<AutocompleteProvider>; |
| 389 | 388 |
| 390 virtual ~AutocompleteProvider(); | 389 virtual ~AutocompleteProvider(); |
| 391 | 390 |
| 392 // Returns whether |input| begins "http:" or "view-source:http:". | 391 // Returns whether |input| begins "http:" or "view-source:http:". |
| 393 static bool HasHTTPScheme(const string16& input); | 392 static bool HasHTTPScheme(const std::wstring& input); |
| 394 | 393 |
| 395 // Updates the starred state of each of the matches in matches_ from the | 394 // Updates the starred state of each of the matches in matches_ from the |
| 396 // profile's bookmark bar model. | 395 // profile's bookmark bar model. |
| 397 void UpdateStarredStateOfMatches(); | 396 void UpdateStarredStateOfMatches(); |
| 398 | 397 |
| 399 // A convenience function to call net::FormatUrl() with the current set of | 398 // A convenience function to call net::FormatUrl() with the current set of |
| 400 // "Accept Languages" when check_accept_lang is true. Otherwise, it's called | 399 // "Accept Languages" when check_accept_lang is true. Otherwise, it's called |
| 401 // with an empty list. | 400 // with an empty list. |
| 402 string16 StringForURLDisplay(const GURL& url, | 401 std::wstring StringForURLDisplay(const GURL& url, |
| 403 bool check_accept_lang, | 402 bool check_accept_lang, |
| 404 bool trim_http) const; | 403 bool trim_http) const; |
| 405 | 404 |
| 406 // The profile associated with the AutocompleteProvider. Reference is not | 405 // The profile associated with the AutocompleteProvider. Reference is not |
| 407 // owned by us. | 406 // owned by us. |
| 408 Profile* profile_; | 407 Profile* profile_; |
| 409 | 408 |
| 410 ACProviderListener* listener_; | 409 ACProviderListener* listener_; |
| 411 ACMatches matches_; | 410 ACMatches matches_; |
| 412 bool done_; | 411 bool done_; |
| 413 | 412 |
| 414 // The name of this provider. Used for logging. | 413 // The name of this provider. Used for logging. |
| (...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 579 // return matches which are synchronously available, which should mean that | 578 // return matches which are synchronously available, which should mean that |
| 580 // all providers will be done immediately. | 579 // all providers will be done immediately. |
| 581 // | 580 // |
| 582 // The controller will fire | 581 // The controller will fire |
| 583 // AUTOCOMPLETE_CONTROLLER_SYNCHRONOUS_MATCHES_AVAILABLE from inside this | 582 // AUTOCOMPLETE_CONTROLLER_SYNCHRONOUS_MATCHES_AVAILABLE from inside this |
| 584 // call, and unless the query is stopped, will fire at least one (and perhaps | 583 // call, and unless the query is stopped, will fire at least one (and perhaps |
| 585 // more) AUTOCOMPLETE_CONTROLLER_RESULT_UPDATED later as more matches come in | 584 // more) AUTOCOMPLETE_CONTROLLER_RESULT_UPDATED later as more matches come in |
| 586 // (even if the query completes synchronously). Listeners should use the | 585 // (even if the query completes synchronously). Listeners should use the |
| 587 // result set provided in the accompanying Details object to update | 586 // result set provided in the accompanying Details object to update |
| 588 // themselves. | 587 // themselves. |
| 589 void Start(const string16& text, | 588 void Start(const std::wstring& text, |
| 590 const string16& desired_tld, | 589 const std::wstring& desired_tld, |
| 591 bool prevent_inline_autocomplete, | 590 bool prevent_inline_autocomplete, |
| 592 bool prefer_keyword, | 591 bool prefer_keyword, |
| 593 bool allow_exact_keyword_match, | 592 bool allow_exact_keyword_match, |
| 594 bool synchronous_only); | 593 bool synchronous_only); |
| 595 | 594 |
| 596 // Cancels the current query, ensuring there will be no future notifications | 595 // Cancels the current query, ensuring there will be no future notifications |
| 597 // fired. If new matches have come in since the most recent notification was | 596 // fired. If new matches have come in since the most recent notification was |
| 598 // fired, they will be discarded. | 597 // fired, they will be discarded. |
| 599 // | 598 // |
| 600 // If |clear_result| is true, the controller will also erase the result set. | 599 // If |clear_result| is true, the controller will also erase the result set. |
| (...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 693 base::RepeatingTimer<AutocompleteController> update_delay_timer_; | 692 base::RepeatingTimer<AutocompleteController> update_delay_timer_; |
| 694 | 693 |
| 695 DISALLOW_COPY_AND_ASSIGN(AutocompleteController); | 694 DISALLOW_COPY_AND_ASSIGN(AutocompleteController); |
| 696 }; | 695 }; |
| 697 | 696 |
| 698 // AutocompleteLog ------------------------------------------------------------ | 697 // AutocompleteLog ------------------------------------------------------------ |
| 699 | 698 |
| 700 // The data to log (via the metrics service) when the user selects an item | 699 // The data to log (via the metrics service) when the user selects an item |
| 701 // from the omnibox popup. | 700 // from the omnibox popup. |
| 702 struct AutocompleteLog { | 701 struct AutocompleteLog { |
| 703 AutocompleteLog(string16 text, | 702 AutocompleteLog(std::wstring text, |
| 704 AutocompleteInput::Type input_type, | 703 AutocompleteInput::Type input_type, |
| 705 size_t selected_index, | 704 size_t selected_index, |
| 706 size_t inline_autocompleted_length, | 705 size_t inline_autocompleted_length, |
| 707 const AutocompleteResult& result) | 706 const AutocompleteResult& result) |
| 708 : text(text), | 707 : text(text), |
| 709 input_type(input_type), | 708 input_type(input_type), |
| 710 selected_index(selected_index), | 709 selected_index(selected_index), |
| 711 inline_autocompleted_length(inline_autocompleted_length), | 710 inline_autocompleted_length(inline_autocompleted_length), |
| 712 result(result) { | 711 result(result) { |
| 713 } | 712 } |
| 714 // The user's input text in the omnibox. | 713 // The user's input text in the omnibox. |
| 715 string16 text; | 714 std::wstring text; |
| 716 // The detected type of the user's input. | 715 // The detected type of the user's input. |
| 717 AutocompleteInput::Type input_type; | 716 AutocompleteInput::Type input_type; |
| 718 // Selected index (if selected) or -1 (AutocompletePopupModel::kNoMatch). | 717 // Selected index (if selected) or -1 (AutocompletePopupModel::kNoMatch). |
| 719 size_t selected_index; | 718 size_t selected_index; |
| 720 // Inline autocompleted length (if displayed). | 719 // Inline autocompleted length (if displayed). |
| 721 size_t inline_autocompleted_length; | 720 size_t inline_autocompleted_length; |
| 722 // Result set. | 721 // Result set. |
| 723 const AutocompleteResult& result; | 722 const AutocompleteResult& result; |
| 724 }; | 723 }; |
| 725 | 724 |
| 726 #endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_H_ | 725 #endif // CHROME_BROWSER_AUTOCOMPLETE_AUTOCOMPLETE_H_ |
| OLD | NEW |