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

Unified Diff: chrome/browser/ui/omnibox/omnibox_edit_model.cc

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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/ui/omnibox/omnibox_edit_model.cc
diff --git a/chrome/browser/ui/omnibox/omnibox_edit_model.cc b/chrome/browser/ui/omnibox/omnibox_edit_model.cc
index 7850c5c213948e0cfce113dc0d5800ae9b77a71a..362422dd1f8a0752c0380558f6db5a05bd577642 100644
--- a/chrome/browser/ui/omnibox/omnibox_edit_model.cc
+++ b/chrome/browser/ui/omnibox/omnibox_edit_model.cc
@@ -71,12 +71,12 @@ OmniboxEditModel::State::State(bool user_input_in_progress,
const string16& user_text,
const string16& keyword,
bool is_keyword_hint,
- bool is_caret_visible)
+ OmniboxFocusState focus_state)
: user_input_in_progress(user_input_in_progress),
user_text(user_text),
keyword(keyword),
is_keyword_hint(is_keyword_hint),
- is_caret_visible(is_caret_visible) {
+ focus_state(focus_state) {
}
OmniboxEditModel::State::~State() {
@@ -91,8 +91,7 @@ OmniboxEditModel::OmniboxEditModel(OmniboxView* view,
: view_(view),
popup_(NULL),
controller_(controller),
- has_focus_(false),
- is_caret_visible_(true),
+ focus_state_(OMNIBOX_FOCUS_NONE),
user_input_in_progress_(false),
just_deleted_text_(false),
has_temporary_text_(false),
@@ -132,11 +131,11 @@ const OmniboxEditModel::State OmniboxEditModel::GetStateForTabSwitch() {
}
return State(user_input_in_progress_, user_text_, keyword_, is_keyword_hint_,
- is_caret_visible_);
+ focus_state_);
}
void OmniboxEditModel::RestoreState(const State& state) {
- SetCaretVisibility(state.is_caret_visible);
+ SetFocusState(state.focus_state, OMNIBOX_FOCUS_CHANGE_TAB_SWITCH);
// Restore any user editing.
if (state.user_input_in_progress) {
// NOTE: Be sure and set keyword-related state BEFORE invoking
@@ -161,7 +160,7 @@ bool OmniboxEditModel::UpdatePermanentText(const string16& new_permanent_text) {
// an edit and then abandoned it and clicked a link on the page.)
const bool visibly_changed_permanent_text =
(permanent_text_ != new_permanent_text) &&
- (!user_input_in_progress_ || !has_focus_);
+ (!user_input_in_progress_ || !has_focus());
permanent_text_ = new_permanent_text;
return visibly_changed_permanent_text;
@@ -437,7 +436,7 @@ void OmniboxEditModel::Revert() {
has_temporary_text_ = false;
is_temporary_text_set_by_instant_ = false;
view_->SetWindowTextAndCaretPos(permanent_text_,
- has_focus_ ? permanent_text_.length() : 0,
+ has_focus() ? permanent_text_.length() : 0,
false, true);
AutocompleteActionPredictor* action_predictor =
AutocompleteActionPredictorFactory::GetForProfile(profile_);
@@ -713,13 +712,12 @@ const AutocompleteResult& OmniboxEditModel::result() const {
}
void OmniboxEditModel::OnSetFocus(bool control_down) {
- has_focus_ = true;
+ // If the omnibox lost focus while the caret was hidden and then regained
+ // focus, OnSetFocus() is called and should restore visibility. Note that
+ // focus can be regained without an accompanying call to
+ // OmniboxView::SetFocus(), e.g. by tabbing in.
+ SetFocusState(OMNIBOX_FOCUS_VISIBLE, OMNIBOX_FOCUS_CHANGE_EXPLICIT);
control_key_state_ = control_down ? DOWN_WITHOUT_CHANGE : UP;
- // Restore caret visibility whenever the user focuses back into the omnibox.
- SetCaretVisibility(true);
-
- if (InstantController* instant = controller_->GetInstant())
- instant->OmniboxGotFocus();
content::WebContents* web_contents = controller_->GetWebContents();
if (web_contents) {
@@ -736,17 +734,22 @@ void OmniboxEditModel::OnSetFocus(bool control_down) {
}
void OmniboxEditModel::SetCaretVisibility(bool visible) {
- if (has_focus_ && visible != is_caret_visible_) {
- is_caret_visible_ = visible;
- view_->ApplyCaretVisibility();
+ // Caret visibility only matters if the omnibox has focus.
+ if (focus_state_ != OMNIBOX_FOCUS_NONE) {
+ SetFocusState(visible ? OMNIBOX_FOCUS_VISIBLE : OMNIBOX_FOCUS_INVISIBLE,
+ OMNIBOX_FOCUS_CHANGE_EXPLICIT);
}
}
void OmniboxEditModel::OnWillKillFocus(gfx::NativeView view_gaining_focus) {
SetInstantSuggestion(InstantSuggestion());
- if (InstantController* instant = controller_->GetInstant())
- instant->OmniboxLostFocus(view_gaining_focus);
+ InstantController* instant = controller_->GetInstant();
+ if (instant) {
+ instant->OmniboxFocusChanged(OMNIBOX_FOCUS_NONE,
+ OMNIBOX_FOCUS_CHANGE_EXPLICIT,
+ view_gaining_focus);
+ }
// TODO(jered): Rip this out along with StartZeroSuggest.
autocomplete_controller_->StopZeroSuggest();
@@ -754,7 +757,10 @@ void OmniboxEditModel::OnWillKillFocus(gfx::NativeView view_gaining_focus) {
}
void OmniboxEditModel::OnKillFocus() {
- has_focus_ = false;
+ // TODO(samarth): determine if it is safe to move the call to
+ // OmniboxFocusChanged() from OnWillKillFocus() to here, which would let us
+ // just call SetFocusState() to handle the state change.
+ focus_state_ = OMNIBOX_FOCUS_NONE;
control_key_state_ = UP;
paste_state_ = NONE;
}
@@ -952,7 +958,7 @@ bool OmniboxEditModel::OnAfterPossibleChange(const string16& old_text,
// Restore caret visibility whenever the user changes text or selection in the
// omnibox.
if (text_differs || selection_differs)
- SetCaretVisibility(true);
+ SetFocusState(OMNIBOX_FOCUS_VISIBLE, OMNIBOX_FOCUS_CHANGE_TYPING);
// Modifying the selection counts as accepting the autocompleted text.
const bool user_text_changed =
@@ -1014,7 +1020,8 @@ bool OmniboxEditModel::OnAfterPossibleChange(const string16& old_text,
}
void OmniboxEditModel::PopupBoundsChangedTo(const gfx::Rect& bounds) {
- if (InstantController* instant = controller_->GetInstant())
+ InstantController* instant = controller_->GetInstant();
+ if (instant)
instant->SetOmniboxBounds(bounds);
}
@@ -1063,7 +1070,8 @@ void OmniboxEditModel::OnResultChanged(bool default_match_changed) {
NotifySearchTabHelper();
}
- if (InstantController* instant = controller_->GetInstant())
+ InstantController* instant = controller_->GetInstant();
+ if (instant)
instant->HandleAutocompleteResults(*autocomplete_controller_->providers());
}
@@ -1288,3 +1296,21 @@ void OmniboxEditModel::ClassifyStringForPasteAndGo(
AutocompleteClassifierFactory::GetForProfile(profile_)->Classify(text,
string16(), false, false, match, alternate_nav_url);
}
+
+void OmniboxEditModel::SetFocusState(OmniboxFocusState state,
+ OmniboxFocusChangeReason reason) {
+ if (state == focus_state_)
+ return;
+
+ InstantController* instant = controller_->GetInstant();
+ if (instant)
+ instant->OmniboxFocusChanged(state, reason, NULL);
+
+ // Update state and notify view if the omnibox has focus and the caret
+ // visibility changed.
+ const bool was_caret_visible = is_caret_visible();
+ focus_state_ = state;
+ if (focus_state_ != OMNIBOX_FOCUS_NONE &&
+ is_caret_visible() != was_caret_visible)
+ view_->ApplyCaretVisibility();
+}
« no previous file with comments | « chrome/browser/ui/omnibox/omnibox_edit_model.h ('k') | chrome/browser/ui/views/omnibox/omnibox_view_views.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698