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 2552d8acd88ff7f863604645ec8cdcdb48c167d3..2ecb253d1f4301d6ea1b60d72014400f2592b913 100644 |
--- a/chrome/browser/ui/omnibox/omnibox_edit_model.cc |
+++ b/chrome/browser/ui/omnibox/omnibox_edit_model.cc |
@@ -220,7 +220,7 @@ void OmniboxEditModel::SetInstantSuggestion( |
keyword_ = string16(); |
is_keyword_hint_ = false; |
view_->OnTemporaryTextMaybeChanged(suggestion.text, |
- save_original_selection); |
+ save_original_selection, true); |
break; |
} |
} |
@@ -707,7 +707,7 @@ bool OmniboxEditModel::AcceptKeyword() { |
is_temporary_text_set_by_instant_ = false; |
view_->OnTemporaryTextMaybeChanged( |
DisplayTextFromUserText(CurrentMatch().fill_into_edit), |
- save_original_selection); |
+ save_original_selection, true); |
content::RecordAction(UserMetricsAction("AcceptedKeywordHint")); |
return true; |
@@ -797,7 +797,7 @@ void OmniboxEditModel::OnKillFocus() { |
} |
bool OmniboxEditModel::OnEscapeKeyPressed() { |
- if (has_temporary_text_ && !is_temporary_text_set_by_instant_) { |
+ if (has_temporary_text_) { |
AutocompleteMatch match; |
InfoForCurrentSelection(&match, NULL); |
if (match.destination_url != original_url_) { |
@@ -922,7 +922,7 @@ void OmniboxEditModel::OnPopupDataChanged( |
// right answer here :( |
} |
view_->OnTemporaryTextMaybeChanged(DisplayTextFromUserText(text), |
- save_original_selection); |
+ save_original_selection, true); |
return; |
} |
@@ -1178,9 +1178,28 @@ void OmniboxEditModel::RevertTemporaryText(bool revert_popup) { |
// The user typed something, then selected a different item. Restore the |
// text they typed and change back to the default item. |
// NOTE: This purposefully does not reset paste_state_. |
+ bool notify_instant = is_temporary_text_set_by_instant_; |
just_deleted_text_ = false; |
has_temporary_text_ = false; |
is_temporary_text_set_by_instant_ = false; |
+ |
+ InstantController* instant = controller_->GetInstant(); |
+ if (instant && notify_instant) { |
+ // Normally, popup_->ResetToDefaultMatch() will cause the view text to be |
+ // updated. In Instant Extended mode however, the popup_ is not used, so it |
+ // won't do anything. So, update the view ourselves. Even if Instant is not |
+ // in extended mode (i.e., it's enabled in non-extended mode, or disabled |
+ // altogether), this is okay to do, since the call to |
+ // popup_->ResetToDefaultMatch() will just override whatever we do here. |
+ // |
+ // The two "false" arguments make sure that our shenanigans don't cause any |
+ // previously saved selection to be erased nor OnChanged() to be called. |
+ view_->OnTemporaryTextMaybeChanged(user_text_ + inline_autocomplete_text_, |
+ false, false); |
+ AutocompleteResult::const_iterator match(result().default_match()); |
+ instant->OnCancel(match != result().end() ? *match : AutocompleteMatch(), |
+ user_text_ + inline_autocomplete_text_); |
+ } |
if (revert_popup) |
popup_->ResetToDefaultMatch(); |
view_->OnRevertTemporaryText(); |