| OLD | NEW |
| 1 // Copyright 2012 The Chromium Authors. All rights reserved. | 1 // Copyright 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 #ifndef CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_EDIT_MODEL_H_ | 5 #ifndef CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_EDIT_MODEL_H_ |
| 6 #define CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_EDIT_MODEL_H_ | 6 #define CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_EDIT_MODEL_H_ |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/compiler_specific.h" | 9 #include "base/compiler_specific.h" |
| 10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
| (...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 83 virtual ~OmniboxEditModel(); | 83 virtual ~OmniboxEditModel(); |
| 84 | 84 |
| 85 // TODO(beaudoin): Remove this accessor when the AutocompleteController has | 85 // TODO(beaudoin): Remove this accessor when the AutocompleteController has |
| 86 // completely moved to OmniboxController. | 86 // completely moved to OmniboxController. |
| 87 AutocompleteController* autocomplete_controller() const { | 87 AutocompleteController* autocomplete_controller() const { |
| 88 return omnibox_controller_->autocomplete_controller(); | 88 return omnibox_controller_->autocomplete_controller(); |
| 89 } | 89 } |
| 90 | 90 |
| 91 void set_popup_model(OmniboxPopupModel* popup_model) { | 91 void set_popup_model(OmniboxPopupModel* popup_model) { |
| 92 omnibox_controller_->set_popup_model(popup_model); | 92 omnibox_controller_->set_popup_model(popup_model); |
| 93 } | 93 } |
| 94 | 94 |
| 95 // TODO: The edit and popup should be siblings owned by the LocationBarView, | 95 // TODO: The edit and popup should be siblings owned by the LocationBarView, |
| 96 // making this accessor unnecessary. | 96 // making this accessor unnecessary. |
| 97 OmniboxPopupModel* popup_model() const { | 97 OmniboxPopupModel* popup_model() const { |
| 98 return omnibox_controller_->popup_model(); | 98 return omnibox_controller_->popup_model(); |
| 99 } | 99 } |
| 100 | 100 |
| 101 OmniboxEditController* controller() const { return controller_; } | 101 OmniboxEditController* controller() const { return controller_; } |
| 102 | 102 |
| 103 Profile* profile() const { return profile_; } | 103 Profile* profile() const { return profile_; } |
| 104 | 104 |
| 105 // Returns the current state. This assumes we are switching tabs, and changes | 105 // Returns the current state. This assumes we are switching tabs, and changes |
| 106 // the internal state appropriately. | 106 // the internal state appropriately. |
| 107 const State GetStateForTabSwitch(); | 107 const State GetStateForTabSwitch(); |
| 108 | 108 |
| 109 // Restores local state from the saved |state|. | 109 // Restores local state from the saved |state|. |
| 110 void RestoreState(const State& state); | 110 void RestoreState(const State& state); |
| 111 | 111 |
| 112 // Returns the match for the current text. If the user has not edited the text | 112 // Returns the match for the current text. If the user has not edited the text |
| 113 // this is the match corresponding to the permanent text. | 113 // this is the match corresponding to the permanent text. |
| 114 AutocompleteMatch CurrentMatch(); | 114 AutocompleteMatch CurrentMatch(); |
| 115 | 115 |
| 116 // Called when the user wants to export the entire current text as a URL. | 116 // Called when the user wants to export the entire current text as a URL. |
| 117 // Sets the url, and if known, the title and favicon. | 117 // Sets the url, and if known, the title and favicon. |
| 118 void GetDataForURLExport(GURL* url, string16* title, gfx::Image* favicon); | 118 void GetDataForURLExport(GURL* url, string16* title, gfx::Image* favicon); |
| 119 | 119 |
| 120 // Returns true if a verbatim query should be used for Instant. A verbatim | |
| 121 // query is forced in certain situations, such as pressing delete at the end | |
| 122 // of the edit. | |
| 123 bool UseVerbatimInstant(); | |
| 124 | |
| 125 // Returns true if the current edit contents will be treated as a | 120 // Returns true if the current edit contents will be treated as a |
| 126 // URL/navigation, as opposed to a search. | 121 // URL/navigation, as opposed to a search. |
| 127 bool CurrentTextIsURL() const; | 122 bool CurrentTextIsURL() const; |
| 128 | 123 |
| 129 // Returns the match type for the current edit contents. | 124 // Returns the match type for the current edit contents. |
| 130 AutocompleteMatch::Type CurrentTextType() const; | 125 AutocompleteMatch::Type CurrentTextType() const; |
| 131 | 126 |
| 132 // Invoked to adjust the text before writting to the clipboard for a copy | 127 // Invoked to adjust the text before writting to the clipboard for a copy |
| 133 // (e.g. by adding 'http' to the front). |sel_min| gives the minimum position | 128 // (e.g. by adding 'http' to the front). |sel_min| gives the minimum position |
| 134 // of the selection e.g. min(selection_start, selection_end). |text| is the | 129 // of the selection e.g. min(selection_start, selection_end). |text| is the |
| (...skipping 17 matching lines...) Expand all Loading... |
| 152 // editing or the edit does not have focus. | 147 // editing or the edit does not have focus. |
| 153 bool UpdatePermanentText(const string16& new_permanent_text); | 148 bool UpdatePermanentText(const string16& new_permanent_text); |
| 154 | 149 |
| 155 // Returns the URL corresponding to the permanent text. | 150 // Returns the URL corresponding to the permanent text. |
| 156 GURL PermanentURL(); | 151 GURL PermanentURL(); |
| 157 | 152 |
| 158 // Sets the user_text_ to |text|. Only the View should call this. | 153 // Sets the user_text_ to |text|. Only the View should call this. |
| 159 void SetUserText(const string16& text); | 154 void SetUserText(const string16& text); |
| 160 | 155 |
| 161 // Calls through to SearchProvider::FinalizeInstantQuery. | 156 // Calls through to SearchProvider::FinalizeInstantQuery. |
| 162 // If |skip_inline_autocomplete| is true then the |suggestion| text will be | |
| 163 // turned into final text instead of inline autocomplete suggest. | |
| 164 void FinalizeInstantQuery(const string16& input_text, | 157 void FinalizeInstantQuery(const string16& input_text, |
| 165 const InstantSuggestion& suggestion, | 158 const InstantSuggestion& suggestion); |
| 166 bool skip_inline_autocomplete); | |
| 167 | 159 |
| 168 // Sets the suggestion text. | 160 // Sets the suggestion text. |
| 169 void SetInstantSuggestion(const InstantSuggestion& suggestion); | 161 void SetInstantSuggestion(const InstantSuggestion& suggestion); |
| 170 | 162 |
| 171 // Commits the suggested text. If |skip_inline_autocomplete| is true then the | 163 // Commits the gray suggested text as if it's been input by the user. |
| 172 // suggested text will be committed as final text as if it's inputted by the | |
| 173 // user, rather than as inline autocomplete suggest. | |
| 174 // Returns true if the text was committed. | 164 // Returns true if the text was committed. |
| 175 // TODO: can the return type be void? | 165 // TODO: can the return type be void? |
| 176 bool CommitSuggestedText(bool skip_inline_autocomplete); | 166 bool CommitSuggestedText(); |
| 177 | 167 |
| 178 // Invoked any time the text may have changed in the edit. Updates Instant and | 168 // Invoked any time the text may have changed in the edit. Updates Instant and |
| 179 // notifies the controller. | 169 // notifies the controller. |
| 180 void OnChanged(); | 170 void OnChanged(); |
| 181 | 171 |
| 182 // Reverts the edit model back to its unedited state (permanent text showing, | 172 // Reverts the edit model back to its unedited state (permanent text showing, |
| 183 // no user input in progress). | 173 // no user input in progress). |
| 184 void Revert(); | 174 void Revert(); |
| 185 | 175 |
| 186 // Directs the popup to start autocomplete. | 176 // Directs the popup to start autocomplete. |
| (...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 328 // this. | 318 // this. |
| 329 // Invoked when the popup has changed its bounds to |bounds|. |bounds| here | 319 // Invoked when the popup has changed its bounds to |bounds|. |bounds| here |
| 330 // is in screen coordinates. | 320 // is in screen coordinates. |
| 331 void OnPopupBoundsChanged(const gfx::Rect& bounds) { | 321 void OnPopupBoundsChanged(const gfx::Rect& bounds) { |
| 332 omnibox_controller_->OnPopupBoundsChanged(bounds); | 322 omnibox_controller_->OnPopupBoundsChanged(bounds); |
| 333 } | 323 } |
| 334 | 324 |
| 335 // Called when the results have changed in the OmniboxController. | 325 // Called when the results have changed in the OmniboxController. |
| 336 void OnResultChanged(bool default_match_changed); | 326 void OnResultChanged(bool default_match_changed); |
| 337 | 327 |
| 328 // TODO(beaudoin): We need this to allow OmniboxController access the |
| 329 // InstantController via OmniboxEditController, because the only valid pointer |
| 330 // to InstantController is kept in Browser. We should try to get rid of this, |
| 331 // maybe by ensuring InstantController lives as long as Browser. |
| 332 InstantController* GetInstantController() const; |
| 333 |
| 338 private: | 334 private: |
| 339 friend class InstantTestBase; | 335 friend class InstantTestBase; |
| 340 friend class OmniboxControllerTest; | 336 friend class OmniboxControllerTest; |
| 341 | 337 |
| 342 enum PasteState { | 338 enum PasteState { |
| 343 NONE, // Most recent edit was not a paste. | 339 NONE, // Most recent edit was not a paste. |
| 344 PASTING, // In the middle of doing a paste. We need this intermediate | 340 PASTING, // In the middle of doing a paste. We need this intermediate |
| 345 // state because OnPaste() does the actual detection of | 341 // state because OnPaste() does the actual detection of |
| 346 // paste, but OnAfterPossibleChange() has to update the | 342 // paste, but OnAfterPossibleChange() has to update the |
| 347 // paste state for every edit. If OnPaste() set the state | 343 // paste state for every edit. If OnPaste() set the state |
| (...skipping 21 matching lines...) Expand all Loading... |
| 369 // AutocompleteController but resides here for now. This method is used by | 365 // AutocompleteController but resides here for now. This method is used by |
| 370 // AutomationProvider::AutocompleteEditIsQueryInProgress. | 366 // AutomationProvider::AutocompleteEditIsQueryInProgress. |
| 371 bool query_in_progress() const; | 367 bool query_in_progress() const; |
| 372 | 368 |
| 373 // Called whenever user_text_ should change. | 369 // Called whenever user_text_ should change. |
| 374 void InternalSetUserText(const string16& text); | 370 void InternalSetUserText(const string16& text); |
| 375 | 371 |
| 376 // Returns true if a keyword is selected. | 372 // Returns true if a keyword is selected. |
| 377 bool KeywordIsSelected() const; | 373 bool KeywordIsSelected() const; |
| 378 | 374 |
| 375 // Turns off keyword mode for the current match. |
| 376 void ClearPopupKeywordMode() const; |
| 377 |
| 379 // Conversion between user text and display text. User text is the text the | 378 // Conversion between user text and display text. User text is the text the |
| 380 // user has input. Display text is the text being shown in the edit. The | 379 // user has input. Display text is the text being shown in the edit. The |
| 381 // two are different if a keyword is selected. | 380 // two are different if a keyword is selected. |
| 382 string16 DisplayTextFromUserText(const string16& text) const; | 381 string16 DisplayTextFromUserText(const string16& text) const; |
| 383 string16 UserTextFromDisplayText(const string16& text) const; | 382 string16 UserTextFromDisplayText(const string16& text) const; |
| 384 | 383 |
| 385 // If there's a selected match, copies it into |match|. Else, returns the | 384 // If there's a selected match, copies it into |match|. Else, returns the |
| 386 // default match for the current text, as well as the alternate nav URL, if | 385 // default match for the current text, as well as the alternate nav URL, if |
| 387 // |alternate_nav_url| is non-NULL and there is such a URL. | 386 // |alternate_nav_url| is non-NULL and there is such a URL. |
| 388 void GetInfoForCurrentText(AutocompleteMatch* match, | 387 void GetInfoForCurrentText(AutocompleteMatch* match, |
| (...skipping 11 matching lines...) Expand all Loading... |
| 400 // Returns true if the current keyword is accepted. | 399 // Returns true if the current keyword is accepted. |
| 401 bool MaybeAcceptKeywordBySpace(const string16& new_text); | 400 bool MaybeAcceptKeywordBySpace(const string16& new_text); |
| 402 | 401 |
| 403 // Checks whether the user inserted a space into |old_text| and by doing so | 402 // Checks whether the user inserted a space into |old_text| and by doing so |
| 404 // created a |new_text| that looks like "<keyword> <search phrase>". | 403 // created a |new_text| that looks like "<keyword> <search phrase>". |
| 405 bool CreatedKeywordSearchByInsertingSpaceInMiddle( | 404 bool CreatedKeywordSearchByInsertingSpaceInMiddle( |
| 406 const string16& old_text, | 405 const string16& old_text, |
| 407 const string16& new_text, | 406 const string16& new_text, |
| 408 size_t caret_position) const; | 407 size_t caret_position) const; |
| 409 | 408 |
| 410 // Tries to start an Instant preview for |match|. Returns true if Instant | |
| 411 // processed the match. | |
| 412 bool DoInstant(const AutocompleteMatch& match); | |
| 413 | |
| 414 // Starts a DNS prefetch for the given |match|. | |
| 415 void DoPreconnect(const AutocompleteMatch& match); | |
| 416 | |
| 417 // Checks if a given character is a valid space character for accepting | 409 // Checks if a given character is a valid space character for accepting |
| 418 // keyword. | 410 // keyword. |
| 419 static bool IsSpaceCharForAcceptingKeyword(wchar_t c); | 411 static bool IsSpaceCharForAcceptingKeyword(wchar_t c); |
| 420 | 412 |
| 421 // Classify the current page being viewed as, for example, the new tab | 413 // Classify the current page being viewed as, for example, the new tab |
| 422 // page or a normal web page. Used for logging omnibox events for | 414 // page or a normal web page. Used for logging omnibox events for |
| 423 // UMA opted-in users. Examines the user's profile to determine if the | 415 // UMA opted-in users. Examines the user's profile to determine if the |
| 424 // current page is the user's home page. | 416 // current page is the user's home page. |
| 425 metrics::OmniboxEventProto::PageClassification ClassifyPage( | 417 metrics::OmniboxEventProto::PageClassification ClassifyPage( |
| 426 const GURL& gurl) const; | 418 const GURL& gurl) const; |
| (...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 // an exact keyword match. If this is true then keyword mode will be | 558 // an exact keyword match. If this is true then keyword mode will be |
| 567 // triggered automatically if the input is "<keyword> <search string>". We | 559 // triggered automatically if the input is "<keyword> <search string>". We |
| 568 // allow this when CreatedKeywordSearchByInsertingSpaceInMiddle() is true. | 560 // allow this when CreatedKeywordSearchByInsertingSpaceInMiddle() is true. |
| 569 // This has no effect if we're already in keyword mode. | 561 // This has no effect if we're already in keyword mode. |
| 570 bool allow_exact_keyword_match_; | 562 bool allow_exact_keyword_match_; |
| 571 | 563 |
| 572 DISALLOW_COPY_AND_ASSIGN(OmniboxEditModel); | 564 DISALLOW_COPY_AND_ASSIGN(OmniboxEditModel); |
| 573 }; | 565 }; |
| 574 | 566 |
| 575 #endif // CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_EDIT_MODEL_H_ | 567 #endif // CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_EDIT_MODEL_H_ |
| OLD | NEW |