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

Unified Diff: components/omnibox/browser/omnibox_edit_model.cc

Issue 1855423003: Interpret '?' and Ctrl-K or Ctrl-E as putting omnibox in keyword search mode for Default Search Pro… (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Reverted autocomplete_text_field* Created 4 years, 8 months 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: components/omnibox/browser/omnibox_edit_model.cc
diff --git a/components/omnibox/browser/omnibox_edit_model.cc b/components/omnibox/browser/omnibox_edit_model.cc
index 87302727e29dab8cfd900d491954909f218c6b3c..d9a9a83fe090238667cf963373305dbc4c450612 100644
--- a/components/omnibox/browser/omnibox_edit_model.cc
+++ b/components/omnibox/browser/omnibox_edit_model.cc
@@ -45,6 +45,7 @@ using bookmarks::BookmarkModel;
using metrics::OmniboxEventProto;
+
Peter Kasting 2016/04/08 00:39:56 Nit: Don't add this
Tom (Use chromium acct) 2016/04/12 20:03:05 Done.
// Helpers --------------------------------------------------------------------
namespace {
@@ -149,6 +150,7 @@ OmniboxEditModel::State::State(bool user_input_in_progress,
const base::string16& gray_text,
const base::string16& keyword,
bool is_keyword_hint,
+ EnteredKeywordModeMethod keyword_entered_method,
bool url_replacement_enabled,
OmniboxFocusState focus_state,
FocusSource focus_source,
@@ -158,6 +160,7 @@ OmniboxEditModel::State::State(bool user_input_in_progress,
gray_text(gray_text),
keyword(keyword),
is_keyword_hint(is_keyword_hint),
+ keyword_entered_method(keyword_entered_method),
url_replacement_enabled(url_replacement_enabled),
focus_state(focus_state),
focus_source(focus_source),
@@ -183,6 +186,7 @@ OmniboxEditModel::OmniboxEditModel(OmniboxView* view,
user_input_in_progress_(false),
user_input_since_focus_(true),
just_deleted_text_(false),
+ just_cleared_keyword_(false),
has_temporary_text_(false),
paste_state_(NONE),
control_key_state_(UP),
@@ -217,7 +221,7 @@ const OmniboxEditModel::State OmniboxEditModel::GetStateForTabSwitch() {
user_input_in_progress_);
return State(
user_input_in_progress_, user_text_, view_->GetGrayTextAutocompletion(),
- keyword_, is_keyword_hint_,
+ keyword_, is_keyword_hint_, keyword_entered_method_,
controller_->GetToolbarModel()->url_replacement_enabled(),
focus_state_, focus_source_, input_);
}
@@ -246,6 +250,7 @@ void OmniboxEditModel::RestoreState(const State* state) {
// DisplayTextFromUserText(), as its result depends upon this state.
keyword_ = state->keyword;
is_keyword_hint_ = state->is_keyword_hint;
+ keyword_entered_method_ = state->keyword_entered_method;
view_->SetUserText(state->user_text,
DisplayTextFromUserText(state->user_text), false);
view_->SetGrayTextAutocompletion(state->gray_text);
@@ -328,6 +333,15 @@ bool OmniboxEditModel::CommitSuggestedText() {
}
void OmniboxEditModel::OnChanged() {
+ // If the user input a "?", put them into keyword mode.
+ if (!just_cleared_keyword_ && !just_deleted_text_) {
+ if (user_text_ == base::ASCIIToUTF16("?")) {
Peter Kasting 2016/04/08 00:39:56 Nit: Combine these ifs
Tom (Use chromium acct) 2016/04/12 20:03:05 Done.
+ user_text_ = base::string16();
+ SetKeywordWithDefaultSearchProvider(
+ ENTERED_KEYWORD_MODE_VIA_QUESTION_MARK);
+ }
+ }
+
// Hide any suggestions we might be showing.
view_->SetGrayTextAutocompletion(base::string16());
@@ -625,6 +639,23 @@ void OmniboxEditModel::AcceptInput(WindowOpenDisposition disposition,
popup_model()->selected_line());
}
+void OmniboxEditModel::SetKeywordWithDefaultSearchProvider(
+ EnteredKeywordModeMethod keyword_entered_method) {
+ autocomplete_controller()->Stop(false);
+
+ keyword_ = client_->GetTemplateURLService()->
+ GetDefaultSearchProvider()->keyword();
+
Peter Kasting 2016/04/08 00:39:56 Nit: I'd remove this blank line
Tom (Use chromium acct) 2016/04/12 20:03:05 Done.
+ is_keyword_hint_ = false;
+ keyword_entered_method_ = keyword_entered_method;
+
+ view_->OnTemporaryTextMaybeChanged(user_text_, false, true);
+
+ UMA_HISTOGRAM_ENUMERATION(kEnteredKeywordModeHistogram,
+ keyword_entered_method,
+ ENTERED_KEYWORD_MODE_NUM_ITEMS);
+}
+
void OmniboxEditModel::OpenMatch(AutocompleteMatch match,
WindowOpenDisposition disposition,
const GURL& alternate_nav_url,
@@ -788,6 +819,7 @@ bool OmniboxEditModel::AcceptKeyword(EnteredKeywordModeMethod entered_method) {
autocomplete_controller()->Stop(false);
is_keyword_hint_ = false;
+ keyword_entered_method_ = entered_method;
if (popup_model() && popup_model()->IsOpen())
popup_model()->SetSelectedLineState(OmniboxPopupModel::KEYWORD);
@@ -844,6 +876,8 @@ void OmniboxEditModel::AcceptTemporaryTextAsUserText() {
void OmniboxEditModel::ClearKeyword() {
autocomplete_controller()->Stop(false);
+ view_->OnBeforePossibleChange();
Peter Kasting 2016/04/08 00:39:56 This will result in calling this in the "state 4"
Tom (Use chromium acct) 2016/04/12 20:03:05 Done. I also moved view_->OnAfterPossibleChange(fa
+ just_cleared_keyword_ = true;
// While we're always in keyword mode upon reaching here, sometimes we've just
// toggled in via space or tab, and sometimes we're on a non-toggled line
@@ -854,6 +888,30 @@ void OmniboxEditModel::ClearKeyword() {
omnibox_controller_->ClearPopupKeywordMode();
+ // If we entered keyword mode in a special way like using a keyboard shortcut
+ // or typing a question mark in a blank omnibox, don't restore the keyword.
+ const char* clear_text = nullptr;
Peter Kasting 2016/04/08 00:39:56 Use a std::string in preference to char*. Or bett
Tom (Use chromium acct) 2016/04/12 20:03:05 Done.
+ switch (keyword_entered_method_) {
+ case ENTERED_KEYWORD_MODE_VIA_KEYBOARD_SHORTCUT:
+ clear_text = "";
+ break;
+ case ENTERED_KEYWORD_MODE_VIA_QUESTION_MARK:
+ clear_text = "?";
+ break;
+ default:
+ break;
+ }
+ if (clear_text) {
+ view_->SetWindowTextAndCaretPos(
+ base::ASCIIToUTF16(clear_text) + view_->GetText(), strlen(clear_text),
+ false, false);
+ keyword_.clear();
+ is_keyword_hint_ = false;
+ view_->OnAfterPossibleChange(false);
+ just_cleared_keyword_ = false;
+ return;
+ }
+
// There are several possible states we could have been in before the user hit
// backspace or shift-tab to enter this function:
// (1) was_toggled_into_keyword_mode == false, has_temporary_text_ == false
@@ -919,8 +977,9 @@ void OmniboxEditModel::ClearKeyword() {
false, false);
keyword_.clear();
is_keyword_hint_ = false;
- view_->OnAfterPossibleChange(false);
}
+ view_->OnAfterPossibleChange(false);
+ just_cleared_keyword_ = false;
}
void OmniboxEditModel::OnSetFocus(bool control_down) {
@@ -1155,6 +1214,7 @@ bool OmniboxEditModel::OnAfterPossibleChange(const base::string16& old_text,
size_t selection_end,
bool selection_differs,
bool text_differs,
+ bool keyword_differs,
bool just_deleted_text,
bool allow_keyword_ui_change) {
// Update the paste state as appropriate: if we're just finishing a paste
@@ -1194,7 +1254,7 @@ bool OmniboxEditModel::OnAfterPossibleChange(const base::string16& old_text,
control_key_state_ = DOWN_WITH_CHANGE;
if (!user_text_changed)
- return false;
+ return keyword_differs;
// If the user text has not changed, we do not want to change the model's
// state associated with the text. Otherwise, we can get surprising behavior

Powered by Google App Engine
This is Rietveld 408576698