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

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

Issue 14698028: Omnibox refactor. OmniboxController now holds an AutocompleteMatch. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased and cleaned-up. Created 7 years, 6 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: 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 deb105362a9cd45f974c0adc4da5215d8926a8f8..ec4e36ae91c1f45e1754e01b30b0759c0ae74cca 100644
--- a/chrome/browser/ui/omnibox/omnibox_edit_model.cc
+++ b/chrome/browser/ui/omnibox/omnibox_edit_model.cc
@@ -184,7 +184,10 @@ void OmniboxEditModel::RestoreState(const State& state) {
}
}
-AutocompleteMatch OmniboxEditModel::CurrentMatch() {
+AutocompleteMatch OmniboxEditModel::CurrentMatch() const {
+ // If we have a valid match use it. Otherwise get one for the current text.
+ if (omnibox_controller_->current_match().destination_url.is_valid())
Peter Kasting 2013/06/11 22:42:55 I think you can have a valid match without a valid
beaudoin 2013/06/14 21:39:38 Thanks for pointing this out. I don't think it has
+ return omnibox_controller_->current_match();
AutocompleteMatch match;
GetInfoForCurrentText(&match, NULL);
return match;
@@ -220,6 +223,7 @@ GURL OmniboxEditModel::PermanentURL() {
void OmniboxEditModel::SetUserText(const string16& text) {
SetInputInProgress(true);
InternalSetUserText(text);
+ omnibox_controller_->InvalidateCurrentMatch();
paste_state_ = NONE;
has_temporary_text_ = false;
is_temporary_text_set_by_instant_ = false;
@@ -227,55 +231,9 @@ void OmniboxEditModel::SetUserText(const string16& text) {
is_instant_temporary_text_a_search_query_ = false;
}
-void OmniboxEditModel::FinalizeInstantQuery(
- const string16& input_text,
- const InstantSuggestion& suggestion) {
- if (!popup_model()->result().empty()) {
- // When a IME is active and a candidate window is open, we don't show
- // the omnibox popup, though |result()| may be available. Thus we check
- // whether result().empty() or not instead of whether IsOpen() or not.
- // We need the finalization of instant query when result() is available.
- SearchProvider* search_provider =
- autocomplete_controller()->search_provider();
- // There may be no providers during testing; guard against that.
- if (search_provider)
- search_provider->FinalizeInstantQuery(input_text, suggestion);
- }
-}
-
void OmniboxEditModel::SetInstantSuggestion(
const InstantSuggestion& suggestion) {
- switch (suggestion.behavior) {
- case INSTANT_COMPLETE_NOW:
- view_->SetInstantSuggestion(string16());
- if (!suggestion.text.empty())
- FinalizeInstantQuery(view_->GetText(), suggestion);
- break;
-
- case INSTANT_COMPLETE_NEVER: {
- DCHECK_EQ(INSTANT_SUGGESTION_SEARCH, suggestion.type);
- view_->SetInstantSuggestion(suggestion.text);
- autocomplete_controller()->search_provider()->ClearInstantSuggestion();
- break;
- }
-
- case INSTANT_COMPLETE_REPLACE: {
- const bool save_original_selection = !has_temporary_text_;
- view_->SetInstantSuggestion(string16());
- has_temporary_text_ = true;
- is_temporary_text_set_by_instant_ = true;
- selected_instant_autocomplete_match_index_ =
- suggestion.autocomplete_match_index;
- is_instant_temporary_text_a_search_query_ =
- suggestion.type == INSTANT_SUGGESTION_SEARCH;
- // Instant suggestions are never a keyword.
- keyword_ = string16();
- is_keyword_hint_ = false;
- view_->OnTemporaryTextMaybeChanged(suggestion.text,
- save_original_selection, true);
- break;
- }
- }
+ omnibox_controller_->SetInstantSuggestion(suggestion);
}
bool OmniboxEditModel::CommitSuggestedText() {
@@ -339,7 +297,7 @@ void OmniboxEditModel::OnChanged() {
view_->SetInstantSuggestion(string16());
// No need to wait any longer for Instant.
- FinalizeInstantQuery(string16(), InstantSuggestion());
+ omnibox_controller_->FinalizeInstantQuery(string16(), InstantSuggestion());
}
switch (recommended_action) {
@@ -367,8 +325,7 @@ void OmniboxEditModel::OnChanged() {
void OmniboxEditModel::GetDataForURLExport(GURL* url,
string16* title,
gfx::Image* favicon) {
- AutocompleteMatch match;
- GetInfoForCurrentText(&match, NULL);
+ AutocompleteMatch match = CurrentMatch();
Peter Kasting 2013/06/11 22:42:55 Nit: Just inline into the next statement
beaudoin 2013/06/14 21:39:38 Done.
*url = match.destination_url;
if (*url == URLFixerUpper::FixupURL(UTF16ToUTF8(permanent_text_),
std::string())) {
@@ -390,15 +347,12 @@ bool OmniboxEditModel::CurrentTextIsURL() const {
if (!user_input_in_progress_)
return true;
- AutocompleteMatch match;
- GetInfoForCurrentText(&match, NULL);
+ AutocompleteMatch match = CurrentMatch();
Peter Kasting 2013/06/11 22:42:55 Nit: Here too
beaudoin 2013/06/14 21:39:38 Done.
return !AutocompleteMatch::IsSearchType(match.type);
}
AutocompleteMatch::Type OmniboxEditModel::CurrentTextType() const {
- AutocompleteMatch match;
- GetInfoForCurrentText(&match, NULL);
- return match.type;
+ return CurrentMatch().type;
}
void OmniboxEditModel::AdjustTextForCopy(int sel_min,
@@ -556,9 +510,18 @@ bool OmniboxEditModel::IsPasteAndSearch(const string16& text) const {
void OmniboxEditModel::AcceptInput(WindowOpenDisposition disposition,
bool for_drop) {
// Get the URL and transition type for the selected entry.
- AutocompleteMatch match;
+ AutocompleteMatch match = omnibox_controller_->current_match();
GURL alternate_nav_url;
- GetInfoForCurrentText(&match, &alternate_nav_url);
+
+ if (!match.destination_url.is_valid()) {
+ GetInfoForCurrentText(&match, &alternate_nav_url);
Peter Kasting 2013/06/11 22:42:55 Nit: Maybe CurrentMatch() should take an |alternat
beaudoin 2013/06/14 21:39:38 Done.
+ } else if (AutocompleteMatch::IsSearchType(match.type)) {
+ // Compute the |alternate_nav_url| if needed.
Peter Kasting 2013/06/11 22:42:55 Why do we need this new block? It worries me beca
beaudoin 2013/06/14 21:39:38 The problem is that |alternate_nav_url| is compute
Peter Kasting 2013/06/15 00:29:21 I see. I think we should factor out the last piec
beaudoin 2013/06/17 17:22:33 For the moment, the autocomplete controller is sta
+ alternate_nav_url = URLFixerUpper::FixupURL(
+ UTF16ToUTF8(match.fill_into_edit), std::string());
+ if (alternate_nav_url == match.destination_url)
+ alternate_nav_url = GURL();
+ }
// If CTRL is down it means the user wants to append ".com" to the text he
// typed. If we can successfully generate a URL_WHAT_YOU_TYPED match doing
@@ -626,6 +589,7 @@ void OmniboxEditModel::OpenMatch(const AutocompleteMatch& match,
WindowOpenDisposition disposition,
const GURL& alternate_nav_url,
size_t index) {
+
Peter Kasting 2013/06/11 22:42:55 Nit: Extra newline
beaudoin 2013/06/14 21:39:38 Done.
// We only care about cases where there is a selection (i.e. the popup is
// open).
if (popup_model()->IsOpen()) {
@@ -695,11 +659,8 @@ void OmniboxEditModel::OpenMatch(const AutocompleteMatch& match,
if (match.transition == content::PAGE_TRANSITION_KEYWORD) {
// The user is using a non-substituting keyword or is explicitly in
// keyword mode.
-
- AutocompleteMatch current_match;
- GetInfoForCurrentText(&current_match, NULL);
const AutocompleteMatch& match = (index == OmniboxPopupModel::kNoMatch) ?
- current_match : result().match_at(index);
+ CurrentMatch() : result().match_at(index);
// Don't increment usage count for extension keywords.
if (delegate_->ProcessExtensionKeyword(template_url, match,
@@ -884,9 +845,7 @@ void OmniboxEditModel::OnKillFocus() {
bool OmniboxEditModel::OnEscapeKeyPressed() {
if (has_temporary_text_) {
- AutocompleteMatch match;
- GetInfoForCurrentText(&match, NULL);
- if (match.destination_url != original_url_) {
+ if (CurrentMatch().destination_url != original_url_) {
RevertTemporaryText(true);
return true;
}
@@ -1160,7 +1119,37 @@ bool OmniboxEditModel::OnAfterPossibleChange(const string16& old_text,
MaybeAcceptKeywordBySpace(user_text_));
}
-void OmniboxEditModel::OnResultChanged(bool default_match_changed) {
+void OmniboxEditModel::OnCurrentMatchChanged(bool is_temporary_set_by_instant) {
+ const bool save_original_selection =
+ is_temporary_set_by_instant && !has_temporary_text_;
+ has_temporary_text_ = is_temporary_set_by_instant;
+ is_temporary_text_set_by_instant_ = is_temporary_set_by_instant;
+
+ const AutocompleteMatch& match = omnibox_controller_->current_match();
+ match.GetKeywordUIState(profile_, &keyword_, &is_keyword_hint_);
+
+ view_->SetInstantSuggestion(match.gray_suggestion);
+ string16 inline_autocomplete_text;
+ if ((match.inline_autocomplete_offset != string16::npos) &&
Peter Kasting 2013/06/11 22:42:55 Nit: This first condition is unnecessary; in cases
beaudoin 2013/06/14 21:39:38 Done.
+ (match.inline_autocomplete_offset <
+ match.fill_into_edit.length())) {
+ // We have blue text, go through OnPopupDataChanged.
+ // TODO(beaudoin): Merge OnPopupDataChanged with this method once the popup
+ // handling has completely migrated to omnibox_controller.
+ inline_autocomplete_text =
+ match.fill_into_edit.substr(match.inline_autocomplete_offset);
+ popup_model()->OnResultChanged();
+ OnPopupDataChanged(inline_autocomplete_text, NULL, keyword_,
+ is_keyword_hint_);
+ } else {
+ view_->OnTemporaryTextMaybeChanged(
Peter Kasting 2013/06/11 22:42:55 I'm trying to figure out where this used to happen
+ DisplayTextFromUserText(match.fill_into_edit), save_original_selection,
+ false);
+ }
+}
+
+string16 OmniboxEditModel::GetViewText() const {
+ return view_->GetText();
}
InstantController* OmniboxEditModel::GetInstantController() const {

Powered by Google App Engine
This is Rietveld 408576698