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

Side by Side Diff: chrome/browser/ui/omnibox/omnibox_edit_model.h

Issue 11413217: Instant API: tell page whether the browser is capturing key strokes. (Closed) Base URL: http://git.chromium.org/chromium/src.git@focus
Patch Set: Fix tests. Created 8 years 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
OLDNEW
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 13 matching lines...) Expand all
24 class OmniboxEditController; 24 class OmniboxEditController;
25 class OmniboxPopupModel; 25 class OmniboxPopupModel;
26 class OmniboxView; 26 class OmniboxView;
27 class Profile; 27 class Profile;
28 28
29 namespace gfx { 29 namespace gfx {
30 class Image; 30 class Image;
31 class Rect; 31 class Rect;
32 } 32 }
33 33
34 // Omnibox focus state.
35 enum OmniboxFocusState {
36 // Not focused.
37 OMNIBOX_FOCUS_NONE,
38
39 // Visibly focused.
40 OMNIBOX_FOCUS_VISIBLE,
41
42 // Invisibly focused, i.e. focused with a hidden caret.
43 OMNIBOX_FOCUS_INVISIBLE,
44 };
45
46 // Reasons why the Omnibox focus state could change.
47 enum OmniboxFocusChangeReason {
48 // Includes any explicit changes to focus. (e.g. user clicking to change
49 // focus, user tabbing to change focus, any explicit calls to SetFocus,
50 // etc.)
51 OMNIBOX_FOCUS_CHANGE_EXPLICIT,
52
53 // Focus changed to restore state from a tab the user switched to.
54 OMNIBOX_FOCUS_CHANGE_TAB_SWITCH,
55
56 // Focus changed because user started typing. This only happens when focus
57 // state is INVISIBLE (and this results in a change to VISIBLE).
58 OMNIBOX_FOCUS_CHANGE_TYPING,
59 };
60
34 class OmniboxEditModel : public AutocompleteControllerDelegate { 61 class OmniboxEditModel : public AutocompleteControllerDelegate {
35 public: 62 public:
36 struct State { 63 struct State {
37 State(bool user_input_in_progress, 64 State(bool user_input_in_progress,
38 const string16& user_text, 65 const string16& user_text,
39 const string16& keyword, 66 const string16& keyword,
40 bool is_keyword_hint, 67 bool is_keyword_hint,
41 bool is_caret_visible); 68 OmniboxFocusState focus_state);
42 ~State(); 69 ~State();
43 70
44 bool user_input_in_progress; 71 bool user_input_in_progress;
45 const string16 user_text; 72 const string16 user_text;
46 const string16 keyword; 73 const string16 keyword;
47 const bool is_keyword_hint; 74 const bool is_keyword_hint;
48 const bool is_caret_visible; 75 OmniboxFocusState focus_state;
49 }; 76 };
50 77
51 OmniboxEditModel(OmniboxView* view, 78 OmniboxEditModel(OmniboxView* view,
52 OmniboxEditController* controller, 79 OmniboxEditController* controller,
53 Profile* profile); 80 Profile* profile);
54 virtual ~OmniboxEditModel(); 81 virtual ~OmniboxEditModel();
55 82
56 AutocompleteController* autocomplete_controller() const { 83 AutocompleteController* autocomplete_controller() const {
57 return autocomplete_controller_.get(); 84 return autocomplete_controller_.get();
58 } 85 }
(...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after
184 // URL to be autocompleted). 211 // URL to be autocompleted).
185 void AcceptInput(WindowOpenDisposition disposition, 212 void AcceptInput(WindowOpenDisposition disposition,
186 bool for_drop); 213 bool for_drop);
187 214
188 // Asks the browser to load the item at |index|, with the given properties. 215 // Asks the browser to load the item at |index|, with the given properties.
189 void OpenMatch(const AutocompleteMatch& match, 216 void OpenMatch(const AutocompleteMatch& match,
190 WindowOpenDisposition disposition, 217 WindowOpenDisposition disposition,
191 const GURL& alternate_nav_url, 218 const GURL& alternate_nav_url,
192 size_t index); 219 size_t index);
193 220
194 bool has_focus() const { return has_focus_; } 221 OmniboxFocusState focus_state() const { return focus_state_; }
195 bool is_caret_visible() const { return is_caret_visible_; } 222 bool has_focus() const { return focus_state_ != OMNIBOX_FOCUS_NONE; }
223 bool is_caret_visible() const {
224 return focus_state_ == OMNIBOX_FOCUS_VISIBLE;
225 }
196 226
197 // Accessors for keyword-related state (see comments on keyword_ and 227 // Accessors for keyword-related state (see comments on keyword_ and
198 // is_keyword_hint_). 228 // is_keyword_hint_).
199 const string16& keyword() const { return keyword_; } 229 const string16& keyword() const { return keyword_; }
200 bool is_keyword_hint() const { return is_keyword_hint_; } 230 bool is_keyword_hint() const { return is_keyword_hint_; }
201 231
202 // Accepts the current keyword hint as a keyword. It always returns true for 232 // Accepts the current keyword hint as a keyword. It always returns true for
203 // caller convenience. 233 // caller convenience.
204 bool AcceptKeyword(); 234 bool AcceptKeyword();
205 235
206 // Clears the current keyword. |visible_text| is the (non-keyword) text 236 // Clears the current keyword. |visible_text| is the (non-keyword) text
207 // currently visible in the edit. 237 // currently visible in the edit.
208 void ClearKeyword(const string16& visible_text); 238 void ClearKeyword(const string16& visible_text);
209 239
210 // Returns the current autocomplete result. This logic should in the future 240 // Returns the current autocomplete result. This logic should in the future
211 // live in AutocompleteController but resides here for now. This method is 241 // live in AutocompleteController but resides here for now. This method is
212 // used by AutomationProvider::AutocompleteEditGetMatches. 242 // used by AutomationProvider::AutocompleteEditGetMatches.
213 const AutocompleteResult& result() const; 243 const AutocompleteResult& result() const;
214 244
215 // Called when the view is gaining focus. |control_down| is whether the 245 // Called when the view is gaining focus. |control_down| is whether the
216 // control key is down (at the time we're gaining focus). 246 // control key is down (at the time we're gaining focus).
217 void OnSetFocus(bool control_down); 247 void OnSetFocus(bool control_down);
218 248
219 // Sets the visibility of the caret in the omnibox, if it has focus. The 249 // Sets the visibility of the caret in the omnibox, if it has focus. The
220 // visibility of the caret is reset to visible if any of the following 250 // visibility of the caret is reset to visible if either
221 // happens: 251 // - The user starts typing, or
222 // - User starts typing in the omnibox 252 // - We explicitly focus the omnibox again.
223 // - User clicks in the omnibox 253 // The latter case must be handled in three separate places--OnSetFocus(),
224 // - Omnibox loses and then regains focus 254 // OmniboxView::SetFocus(), and the mouse handlers in OmniboxView. See
225 // - SetFocus() is explicitly called again 255 // accompanying comments for why each of these is necessary.
256 //
226 // Caret visibility is tracked per-tab and updates automatically upon 257 // Caret visibility is tracked per-tab and updates automatically upon
227 // switching tabs. 258 // switching tabs.
228 void SetCaretVisibility(bool visible); 259 void SetCaretVisibility(bool visible);
229 260
230 // Sent before |OnKillFocus| and before the popup is closed. 261 // Sent before |OnKillFocus| and before the popup is closed.
231 void OnWillKillFocus(gfx::NativeView view_gaining_focus); 262 void OnWillKillFocus(gfx::NativeView view_gaining_focus);
232 263
233 // Called when the view is losing focus. Resets some state. 264 // Called when the view is losing focus. Resets some state.
234 void OnKillFocus(); 265 void OnKillFocus();
235 266
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
400 // current page is the user's home page. 431 // current page is the user's home page.
401 metrics::OmniboxEventProto::PageClassification ClassifyPage( 432 metrics::OmniboxEventProto::PageClassification ClassifyPage(
402 const GURL& gurl) const; 433 const GURL& gurl) const;
403 434
404 // Sets |match| and |alternate_nav_url| based on classifying |text|. 435 // Sets |match| and |alternate_nav_url| based on classifying |text|.
405 // |alternate_nav_url| may be NULL. 436 // |alternate_nav_url| may be NULL.
406 void ClassifyStringForPasteAndGo(const string16& text, 437 void ClassifyStringForPasteAndGo(const string16& text,
407 AutocompleteMatch* match, 438 AutocompleteMatch* match,
408 GURL* alternate_nav_url) const; 439 GURL* alternate_nav_url) const;
409 440
441 // If focus_state_ does not match |state|, we update it and notify the
442 // InstantController about the change (passing along the |reason| for the
443 // change). If the caret visibility changes, we call ApplyCaretVisibility() on
444 // the view.
445 void SetFocusState(OmniboxFocusState state, OmniboxFocusChangeReason reason);
446
410 scoped_ptr<AutocompleteController> autocomplete_controller_; 447 scoped_ptr<AutocompleteController> autocomplete_controller_;
411 448
412 OmniboxView* view_; 449 OmniboxView* view_;
413 450
414 OmniboxPopupModel* popup_; 451 OmniboxPopupModel* popup_;
415 452
416 OmniboxEditController* controller_; 453 OmniboxEditController* controller_;
417 454
418 // Whether the edit has focus. 455 OmniboxFocusState focus_state_;
419 bool has_focus_;
420
421 // Is the caret visible? Only meaningful if has_focus_ is true.
422 bool is_caret_visible_;
423 456
424 // The URL of the currently displayed page. 457 // The URL of the currently displayed page.
425 string16 permanent_text_; 458 string16 permanent_text_;
426 459
427 // This flag is true when the user has modified the contents of the edit, but 460 // This flag is true when the user has modified the contents of the edit, but
428 // not yet accepted them. We use this to determine when we need to save 461 // not yet accepted them. We use this to determine when we need to save
429 // state (on switching tabs) and whether changes to the page URL should be 462 // state (on switching tabs) and whether changes to the page URL should be
430 // immediately displayed. 463 // immediately displayed.
431 // This flag will be true in a superset of the cases where the popup is open. 464 // This flag will be true in a superset of the cases where the popup is open.
432 bool user_input_in_progress_; 465 bool user_input_in_progress_;
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
521 // an exact keyword match. If this is true then keyword mode will be 554 // an exact keyword match. If this is true then keyword mode will be
522 // triggered automatically if the input is "<keyword> <search string>". We 555 // triggered automatically if the input is "<keyword> <search string>". We
523 // allow this when CreatedKeywordSearchByInsertingSpaceInMiddle() is true. 556 // allow this when CreatedKeywordSearchByInsertingSpaceInMiddle() is true.
524 // This has no effect if we're already in keyword mode. 557 // This has no effect if we're already in keyword mode.
525 bool allow_exact_keyword_match_; 558 bool allow_exact_keyword_match_;
526 559
527 DISALLOW_COPY_AND_ASSIGN(OmniboxEditModel); 560 DISALLOW_COPY_AND_ASSIGN(OmniboxEditModel);
528 }; 561 };
529 562
530 #endif // CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_EDIT_MODEL_H_ 563 #endif // CHROME_BROWSER_UI_OMNIBOX_OMNIBOX_EDIT_MODEL_H_
OLDNEW
« no previous file with comments | « chrome/browser/instant/instant_loader.cc ('k') | chrome/browser/ui/omnibox/omnibox_edit_model.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698