Chromium Code Reviews| 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 bdc292c8f8a68c89f27e61b0512d755ff3eca873..af053ced56886d47aea60494ab9d195165487e63 100644 |
| --- a/chrome/browser/ui/omnibox/omnibox_edit_model.cc |
| +++ b/chrome/browser/ui/omnibox/omnibox_edit_model.cc |
| @@ -142,13 +142,15 @@ OmniboxEditModel::State::State(bool user_input_in_progress, |
| const string16& gray_text, |
| const string16& keyword, |
| bool is_keyword_hint, |
| - OmniboxFocusState focus_state) |
| + OmniboxFocusState focus_state, |
| + OmniboxFocusState focus_state_for_input) |
| : user_input_in_progress(user_input_in_progress), |
| user_text(user_text), |
| gray_text(gray_text), |
| keyword(keyword), |
| is_keyword_hint(is_keyword_hint), |
| - focus_state(focus_state) { |
| + focus_state(focus_state), |
| + focus_state_for_input(focus_state_for_input) { |
| } |
| OmniboxEditModel::State::~State() { |
| @@ -163,6 +165,7 @@ OmniboxEditModel::OmniboxEditModel(OmniboxView* view, |
| : view_(view), |
| controller_(controller), |
| focus_state_(OMNIBOX_FOCUS_NONE), |
| + focus_state_for_input_(OMNIBOX_FOCUS_NONE), |
| user_input_in_progress_(false), |
| just_deleted_text_(false), |
| has_temporary_text_(false), |
| @@ -202,11 +205,13 @@ const OmniboxEditModel::State OmniboxEditModel::GetStateForTabSwitch() { |
| view_->GetGrayTextAutocompletion(), |
| keyword_, |
| is_keyword_hint_, |
| - focus_state_); |
| + focus_state_, |
| + focus_state_for_input_); |
| } |
| void OmniboxEditModel::RestoreState(const State& state) { |
| SetFocusState(state.focus_state, OMNIBOX_FOCUS_CHANGE_TAB_SWITCH); |
| + focus_state_for_input_ = state.focus_state_for_input; |
| // Restore any user editing. |
| if (state.user_input_in_progress) { |
| // NOTE: Be sure and set keyword-related state BEFORE invoking |
| @@ -445,6 +450,7 @@ void OmniboxEditModel::Revert() { |
| keyword_.clear(); |
| is_keyword_hint_ = false; |
| has_temporary_text_ = false; |
| + focus_state_for_input_ = OMNIBOX_FOCUS_NONE; |
|
Peter Kasting
2013/07/26 22:58:09
Is this right? What if the user reverts everythin
samarth
2013/07/26 23:00:55
That works today because PageClassifcation is only
samarth
2013/07/26 23:19:01
Ok, Peter convinced me that not keeping this here
Peter Kasting
2013/07/26 23:22:34
Turns out you mean OpenMatch(), which is called, b
Mark P
2013/07/26 23:36:35
Okay. That sounds fine.
|
| view_->SetWindowTextAndCaretPos(permanent_text_, |
| has_focus() ? permanent_text_.length() : 0, |
| false, true); |
| @@ -841,6 +847,7 @@ void OmniboxEditModel::OnKillFocus() { |
| // OmniboxFocusChanged() from OnWillKillFocus() to here, which would let us |
| // just call SetFocusState() to handle the state change. |
| focus_state_ = OMNIBOX_FOCUS_NONE; |
| + focus_state_for_input_ = OMNIBOX_FOCUS_NONE; |
| control_key_state_ = UP; |
| paste_state_ = NONE; |
| } |
| @@ -1014,10 +1021,16 @@ bool OmniboxEditModel::OnAfterPossibleChange(const string16& old_text, |
| else if (text_differs) |
| paste_state_ = NONE; |
| - // Restore caret visibility whenever the user changes text or selection in the |
| - // omnibox. |
| - if (text_differs || selection_differs) |
| + if (text_differs || selection_differs) { |
| + // Record current focus state for this input if we haven't already. |
| + DCHECK_NE(OMNIBOX_FOCUS_NONE, focus_state_); |
| + if (focus_state_for_input_ == OMNIBOX_FOCUS_NONE) |
| + focus_state_for_input_ = focus_state_; |
| + |
| + // Restore caret visibility whenever the user changes text or selection in |
| + // the omnibox. |
| SetFocusState(OMNIBOX_FOCUS_VISIBLE, OMNIBOX_FOCUS_CHANGE_TYPING); |
| + } |
| // Modifying the selection counts as accepting the autocompleted text. |
| const bool user_text_changed = |
| @@ -1258,8 +1271,18 @@ metrics::OmniboxEventProto::PageClassification |
| OmniboxEditModel::ClassifyPage() const { |
| if (!delegate_->CurrentPageExists()) |
| return metrics::OmniboxEventProto::OTHER; |
| - if (delegate_->IsInstantNTP()) |
| - return metrics::OmniboxEventProto::INSTANT_NEW_TAB_PAGE; |
| + if (delegate_->IsInstantNTP()) { |
| + DCHECK_NE(OMNIBOX_FOCUS_NONE, focus_state_for_input_); |
| + if (focus_state_for_input_ == OMNIBOX_FOCUS_VISIBLE) { |
| + return metrics::OmniboxEventProto:: |
| + INSTANT_NEW_TAB_PAGE_WITH_OMNIBOX_AS_STARTING_FOCUS; |
| + } else if (focus_state_for_input_ == OMNIBOX_FOCUS_INVISIBLE) { |
|
Peter Kasting
2013/07/26 23:22:34
Nit: No else after return; also, per Chromium styl
samarth
2013/07/29 18:55:35
Done.
|
| + return metrics::OmniboxEventProto:: |
| + INSTANT_NEW_TAB_PAGE_WITH_FAKEBOX_AS_STARTING_FOCUS; |
| + } |
| + NOTREACHED(); |
| + return metrics::OmniboxEventProto::OBSOLETE_INSTANT_NEW_TAB_PAGE; |
| + } |
| const GURL& gurl = delegate_->GetURL(); |
| if (!gurl.is_valid()) |
| return metrics::OmniboxEventProto::INVALID_SPEC; |