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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/omnibox/omnibox_edit_model.h" 5 #include "chrome/browser/ui/omnibox/omnibox_edit_model.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/format_macros.h" 10 #include "base/format_macros.h"
(...skipping 166 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 // NOTE: Be sure and set keyword-related state BEFORE invoking 177 // NOTE: Be sure and set keyword-related state BEFORE invoking
178 // DisplayTextFromUserText(), as its result depends upon this state. 178 // DisplayTextFromUserText(), as its result depends upon this state.
179 keyword_ = state.keyword; 179 keyword_ = state.keyword;
180 is_keyword_hint_ = state.is_keyword_hint; 180 is_keyword_hint_ = state.is_keyword_hint;
181 view_->SetUserText(state.user_text, 181 view_->SetUserText(state.user_text,
182 DisplayTextFromUserText(state.user_text), false); 182 DisplayTextFromUserText(state.user_text), false);
183 view_->SetInstantSuggestion(state.instant_suggestion); 183 view_->SetInstantSuggestion(state.instant_suggestion);
184 } 184 }
185 } 185 }
186 186
187 AutocompleteMatch OmniboxEditModel::CurrentMatch() { 187 AutocompleteMatch OmniboxEditModel::CurrentMatch() const {
188 // If we have a valid match use it. Otherwise get one for the current text.
189 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
190 return omnibox_controller_->current_match();
188 AutocompleteMatch match; 191 AutocompleteMatch match;
189 GetInfoForCurrentText(&match, NULL); 192 GetInfoForCurrentText(&match, NULL);
190 return match; 193 return match;
191 } 194 }
192 195
193 bool OmniboxEditModel::UpdatePermanentText(const string16& new_permanent_text) { 196 bool OmniboxEditModel::UpdatePermanentText(const string16& new_permanent_text) {
194 // When there's a new URL, and the user is not editing anything or the edit 197 // When there's a new URL, and the user is not editing anything or the edit
195 // doesn't have focus, we want to revert the edit to show the new URL. (The 198 // doesn't have focus, we want to revert the edit to show the new URL. (The
196 // common case where the edit doesn't have focus is when the user has started 199 // common case where the edit doesn't have focus is when the user has started
197 // an edit and then abandoned it and clicked a link on the page.) 200 // an edit and then abandoned it and clicked a link on the page.)
(...skipping 15 matching lines...) Expand all
213 return visibly_changed_permanent_text; 216 return visibly_changed_permanent_text;
214 } 217 }
215 218
216 GURL OmniboxEditModel::PermanentURL() { 219 GURL OmniboxEditModel::PermanentURL() {
217 return URLFixerUpper::FixupURL(UTF16ToUTF8(permanent_text_), std::string()); 220 return URLFixerUpper::FixupURL(UTF16ToUTF8(permanent_text_), std::string());
218 } 221 }
219 222
220 void OmniboxEditModel::SetUserText(const string16& text) { 223 void OmniboxEditModel::SetUserText(const string16& text) {
221 SetInputInProgress(true); 224 SetInputInProgress(true);
222 InternalSetUserText(text); 225 InternalSetUserText(text);
226 omnibox_controller_->InvalidateCurrentMatch();
223 paste_state_ = NONE; 227 paste_state_ = NONE;
224 has_temporary_text_ = false; 228 has_temporary_text_ = false;
225 is_temporary_text_set_by_instant_ = false; 229 is_temporary_text_set_by_instant_ = false;
226 selected_instant_autocomplete_match_index_ = OmniboxPopupModel::kNoMatch; 230 selected_instant_autocomplete_match_index_ = OmniboxPopupModel::kNoMatch;
227 is_instant_temporary_text_a_search_query_ = false; 231 is_instant_temporary_text_a_search_query_ = false;
228 } 232 }
229 233
230 void OmniboxEditModel::FinalizeInstantQuery(
231 const string16& input_text,
232 const InstantSuggestion& suggestion) {
233 if (!popup_model()->result().empty()) {
234 // When a IME is active and a candidate window is open, we don't show
235 // the omnibox popup, though |result()| may be available. Thus we check
236 // whether result().empty() or not instead of whether IsOpen() or not.
237 // We need the finalization of instant query when result() is available.
238 SearchProvider* search_provider =
239 autocomplete_controller()->search_provider();
240 // There may be no providers during testing; guard against that.
241 if (search_provider)
242 search_provider->FinalizeInstantQuery(input_text, suggestion);
243 }
244 }
245
246 void OmniboxEditModel::SetInstantSuggestion( 234 void OmniboxEditModel::SetInstantSuggestion(
247 const InstantSuggestion& suggestion) { 235 const InstantSuggestion& suggestion) {
248 switch (suggestion.behavior) { 236 omnibox_controller_->SetInstantSuggestion(suggestion);
249 case INSTANT_COMPLETE_NOW:
250 view_->SetInstantSuggestion(string16());
251 if (!suggestion.text.empty())
252 FinalizeInstantQuery(view_->GetText(), suggestion);
253 break;
254
255 case INSTANT_COMPLETE_NEVER: {
256 DCHECK_EQ(INSTANT_SUGGESTION_SEARCH, suggestion.type);
257 view_->SetInstantSuggestion(suggestion.text);
258 autocomplete_controller()->search_provider()->ClearInstantSuggestion();
259 break;
260 }
261
262 case INSTANT_COMPLETE_REPLACE: {
263 const bool save_original_selection = !has_temporary_text_;
264 view_->SetInstantSuggestion(string16());
265 has_temporary_text_ = true;
266 is_temporary_text_set_by_instant_ = true;
267 selected_instant_autocomplete_match_index_ =
268 suggestion.autocomplete_match_index;
269 is_instant_temporary_text_a_search_query_ =
270 suggestion.type == INSTANT_SUGGESTION_SEARCH;
271 // Instant suggestions are never a keyword.
272 keyword_ = string16();
273 is_keyword_hint_ = false;
274 view_->OnTemporaryTextMaybeChanged(suggestion.text,
275 save_original_selection, true);
276 break;
277 }
278 }
279 } 237 }
280 238
281 bool OmniboxEditModel::CommitSuggestedText() { 239 bool OmniboxEditModel::CommitSuggestedText() {
282 const string16 suggestion = view_->GetInstantSuggestion(); 240 const string16 suggestion = view_->GetInstantSuggestion();
283 if (suggestion.empty()) 241 if (suggestion.empty())
284 return false; 242 return false;
285 243
286 // Assume that the gray text we are committing is a search suggestion. 244 // Assume that the gray text we are committing is a search suggestion.
287 const string16 final_text = view_->GetText() + suggestion; 245 const string16 final_text = view_->GetText() + suggestion;
288 view_->OnBeforePossibleChange(); 246 view_->OnBeforePossibleChange();
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after
332 user_input_in_progress_, in_escape_handler_, 290 user_input_in_progress_, in_escape_handler_,
333 view_->DeleteAtEndPressed() || just_deleted_text_, 291 view_->DeleteAtEndPressed() || just_deleted_text_,
334 KeywordIsSelected()); 292 KeywordIsSelected());
335 } 293 }
336 294
337 if (!performed_instant) { 295 if (!performed_instant) {
338 // Hide any suggestions we might be showing. 296 // Hide any suggestions we might be showing.
339 view_->SetInstantSuggestion(string16()); 297 view_->SetInstantSuggestion(string16());
340 298
341 // No need to wait any longer for Instant. 299 // No need to wait any longer for Instant.
342 FinalizeInstantQuery(string16(), InstantSuggestion()); 300 omnibox_controller_->FinalizeInstantQuery(string16(), InstantSuggestion());
343 } 301 }
344 302
345 switch (recommended_action) { 303 switch (recommended_action) {
346 case AutocompleteActionPredictor::ACTION_PRERENDER: 304 case AutocompleteActionPredictor::ACTION_PRERENDER:
347 // It's possible that there is no current page, for instance if the tab 305 // It's possible that there is no current page, for instance if the tab
348 // has been closed or on return from a sleep state. 306 // has been closed or on return from a sleep state.
349 // (http://crbug.com/105689) 307 // (http://crbug.com/105689)
350 if (!delegate_->CurrentPageExists()) 308 if (!delegate_->CurrentPageExists())
351 break; 309 break;
352 // Ask for prerendering if the destination URL is different than the 310 // Ask for prerendering if the destination URL is different than the
353 // current URL. 311 // current URL.
354 if (current_match.destination_url != PermanentURL()) 312 if (current_match.destination_url != PermanentURL())
355 delegate_->DoPrerender(current_match); 313 delegate_->DoPrerender(current_match);
356 break; 314 break;
357 case AutocompleteActionPredictor::ACTION_PRECONNECT: 315 case AutocompleteActionPredictor::ACTION_PRECONNECT:
358 omnibox_controller_->DoPreconnect(current_match); 316 omnibox_controller_->DoPreconnect(current_match);
359 break; 317 break;
360 case AutocompleteActionPredictor::ACTION_NONE: 318 case AutocompleteActionPredictor::ACTION_NONE:
361 break; 319 break;
362 } 320 }
363 321
364 controller_->OnChanged(); 322 controller_->OnChanged();
365 } 323 }
366 324
367 void OmniboxEditModel::GetDataForURLExport(GURL* url, 325 void OmniboxEditModel::GetDataForURLExport(GURL* url,
368 string16* title, 326 string16* title,
369 gfx::Image* favicon) { 327 gfx::Image* favicon) {
370 AutocompleteMatch match; 328 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.
371 GetInfoForCurrentText(&match, NULL);
372 *url = match.destination_url; 329 *url = match.destination_url;
373 if (*url == URLFixerUpper::FixupURL(UTF16ToUTF8(permanent_text_), 330 if (*url == URLFixerUpper::FixupURL(UTF16ToUTF8(permanent_text_),
374 std::string())) { 331 std::string())) {
375 *title = controller_->GetTitle(); 332 *title = controller_->GetTitle();
376 *favicon = controller_->GetFavicon(); 333 *favicon = controller_->GetFavicon();
377 } 334 }
378 } 335 }
379 336
380 bool OmniboxEditModel::CurrentTextIsURL() const { 337 bool OmniboxEditModel::CurrentTextIsURL() const {
381 if (view_->toolbar_model()->GetSearchTermsType() != 338 if (view_->toolbar_model()->GetSearchTermsType() !=
382 ToolbarModel::NO_SEARCH_TERMS) 339 ToolbarModel::NO_SEARCH_TERMS)
383 return false; 340 return false;
384 341
385 // If current text is not composed of replaced search terms and 342 // If current text is not composed of replaced search terms and
386 // !user_input_in_progress_, then permanent text is showing and should be a 343 // !user_input_in_progress_, then permanent text is showing and should be a
387 // URL, so no further checking is needed. By avoiding checking in this case, 344 // URL, so no further checking is needed. By avoiding checking in this case,
388 // we avoid calling into the autocomplete providers, and thus initializing the 345 // we avoid calling into the autocomplete providers, and thus initializing the
389 // history system, as long as possible, which speeds startup. 346 // history system, as long as possible, which speeds startup.
390 if (!user_input_in_progress_) 347 if (!user_input_in_progress_)
391 return true; 348 return true;
392 349
393 AutocompleteMatch match; 350 AutocompleteMatch match = CurrentMatch();
Peter Kasting 2013/06/11 22:42:55 Nit: Here too
beaudoin 2013/06/14 21:39:38 Done.
394 GetInfoForCurrentText(&match, NULL);
395 return !AutocompleteMatch::IsSearchType(match.type); 351 return !AutocompleteMatch::IsSearchType(match.type);
396 } 352 }
397 353
398 AutocompleteMatch::Type OmniboxEditModel::CurrentTextType() const { 354 AutocompleteMatch::Type OmniboxEditModel::CurrentTextType() const {
399 AutocompleteMatch match; 355 return CurrentMatch().type;
400 GetInfoForCurrentText(&match, NULL);
401 return match.type;
402 } 356 }
403 357
404 void OmniboxEditModel::AdjustTextForCopy(int sel_min, 358 void OmniboxEditModel::AdjustTextForCopy(int sel_min,
405 bool is_all_selected, 359 bool is_all_selected,
406 string16* text, 360 string16* text,
407 GURL* url, 361 GURL* url,
408 bool* write_url) { 362 bool* write_url) {
409 *write_url = false; 363 *write_url = false;
410 364
411 // Do not adjust if selection did not start at the beginning of the field, or 365 // Do not adjust if selection did not start at the beginning of the field, or
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after
549 503
550 bool OmniboxEditModel::IsPasteAndSearch(const string16& text) const { 504 bool OmniboxEditModel::IsPasteAndSearch(const string16& text) const {
551 AutocompleteMatch match; 505 AutocompleteMatch match;
552 ClassifyStringForPasteAndGo(text, &match, NULL); 506 ClassifyStringForPasteAndGo(text, &match, NULL);
553 return AutocompleteMatch::IsSearchType(match.type); 507 return AutocompleteMatch::IsSearchType(match.type);
554 } 508 }
555 509
556 void OmniboxEditModel::AcceptInput(WindowOpenDisposition disposition, 510 void OmniboxEditModel::AcceptInput(WindowOpenDisposition disposition,
557 bool for_drop) { 511 bool for_drop) {
558 // Get the URL and transition type for the selected entry. 512 // Get the URL and transition type for the selected entry.
559 AutocompleteMatch match; 513 AutocompleteMatch match = omnibox_controller_->current_match();
560 GURL alternate_nav_url; 514 GURL alternate_nav_url;
561 GetInfoForCurrentText(&match, &alternate_nav_url); 515
516 if (!match.destination_url.is_valid()) {
517 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.
518 } else if (AutocompleteMatch::IsSearchType(match.type)) {
519 // 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
520 alternate_nav_url = URLFixerUpper::FixupURL(
521 UTF16ToUTF8(match.fill_into_edit), std::string());
522 if (alternate_nav_url == match.destination_url)
523 alternate_nav_url = GURL();
524 }
562 525
563 // If CTRL is down it means the user wants to append ".com" to the text he 526 // If CTRL is down it means the user wants to append ".com" to the text he
564 // typed. If we can successfully generate a URL_WHAT_YOU_TYPED match doing 527 // typed. If we can successfully generate a URL_WHAT_YOU_TYPED match doing
565 // that, then we use this. These matches are marked as generated by the 528 // that, then we use this. These matches are marked as generated by the
566 // HistoryURLProvider so we only generate them if this provider is present. 529 // HistoryURLProvider so we only generate them if this provider is present.
567 if (control_key_state_ == DOWN_WITHOUT_CHANGE && !KeywordIsSelected() && 530 if (control_key_state_ == DOWN_WITHOUT_CHANGE && !KeywordIsSelected() &&
568 autocomplete_controller()->history_url_provider()) { 531 autocomplete_controller()->history_url_provider()) {
569 // Generate a new AutocompleteInput, copying the latest one but using "com" 532 // Generate a new AutocompleteInput, copying the latest one but using "com"
570 // as the desired TLD. Then use this autocomplete input to generate a 533 // as the desired TLD. Then use this autocomplete input to generate a
571 // URL_WHAT_YOU_TYPED AutocompleteMatch. Note that using the most recent 534 // URL_WHAT_YOU_TYPED AutocompleteMatch. Note that using the most recent
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 GoogleURLTracker::GoogleURLSearchCommitted(profile_); 582 GoogleURLTracker::GoogleURLSearchCommitted(profile_);
620 583
621 view_->OpenMatch(match, disposition, alternate_nav_url, 584 view_->OpenMatch(match, disposition, alternate_nav_url,
622 OmniboxPopupModel::kNoMatch); 585 OmniboxPopupModel::kNoMatch);
623 } 586 }
624 587
625 void OmniboxEditModel::OpenMatch(const AutocompleteMatch& match, 588 void OmniboxEditModel::OpenMatch(const AutocompleteMatch& match,
626 WindowOpenDisposition disposition, 589 WindowOpenDisposition disposition,
627 const GURL& alternate_nav_url, 590 const GURL& alternate_nav_url,
628 size_t index) { 591 size_t index) {
592
Peter Kasting 2013/06/11 22:42:55 Nit: Extra newline
beaudoin 2013/06/14 21:39:38 Done.
629 // We only care about cases where there is a selection (i.e. the popup is 593 // We only care about cases where there is a selection (i.e. the popup is
630 // open). 594 // open).
631 if (popup_model()->IsOpen()) { 595 if (popup_model()->IsOpen()) {
632 const base::TimeTicks& now(base::TimeTicks::Now()); 596 const base::TimeTicks& now(base::TimeTicks::Now());
633 base::TimeDelta elapsed_time_since_user_first_modified_omnibox( 597 base::TimeDelta elapsed_time_since_user_first_modified_omnibox(
634 now - time_user_first_modified_omnibox_); 598 now - time_user_first_modified_omnibox_);
635 base::TimeDelta elapsed_time_since_last_change_to_default_match( 599 base::TimeDelta elapsed_time_since_last_change_to_default_match(
636 now - autocomplete_controller()->last_time_default_match_changed()); 600 now - autocomplete_controller()->last_time_default_match_changed());
637 // These elapsed times don't really make sense for ZeroSuggest matches 601 // These elapsed times don't really make sense for ZeroSuggest matches
638 // (because the user does not modify the omnibox for ZeroSuggest), so for 602 // (because the user does not modify the omnibox for ZeroSuggest), so for
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
688 content::Source<Profile>(profile_), 652 content::Source<Profile>(profile_),
689 content::Details<OmniboxLog>(&log)); 653 content::Details<OmniboxLog>(&log));
690 HISTOGRAM_ENUMERATION("Omnibox.EventCount", 1, 2); 654 HISTOGRAM_ENUMERATION("Omnibox.EventCount", 1, 2);
691 } 655 }
692 656
693 TemplateURL* template_url = match.GetTemplateURL(profile_, false); 657 TemplateURL* template_url = match.GetTemplateURL(profile_, false);
694 if (template_url) { 658 if (template_url) {
695 if (match.transition == content::PAGE_TRANSITION_KEYWORD) { 659 if (match.transition == content::PAGE_TRANSITION_KEYWORD) {
696 // The user is using a non-substituting keyword or is explicitly in 660 // The user is using a non-substituting keyword or is explicitly in
697 // keyword mode. 661 // keyword mode.
698
699 AutocompleteMatch current_match;
700 GetInfoForCurrentText(&current_match, NULL);
701 const AutocompleteMatch& match = (index == OmniboxPopupModel::kNoMatch) ? 662 const AutocompleteMatch& match = (index == OmniboxPopupModel::kNoMatch) ?
702 current_match : result().match_at(index); 663 CurrentMatch() : result().match_at(index);
703 664
704 // Don't increment usage count for extension keywords. 665 // Don't increment usage count for extension keywords.
705 if (delegate_->ProcessExtensionKeyword(template_url, match, 666 if (delegate_->ProcessExtensionKeyword(template_url, match,
706 disposition)) { 667 disposition)) {
707 if (disposition != NEW_BACKGROUND_TAB) 668 if (disposition != NEW_BACKGROUND_TAB)
708 view_->RevertAll(); 669 view_->RevertAll();
709 return; 670 return;
710 } 671 }
711 672
712 content::RecordAction(UserMetricsAction("AcceptedKeyword")); 673 content::RecordAction(UserMetricsAction("AcceptedKeyword"));
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
877 // TODO(samarth): determine if it is safe to move the call to 838 // TODO(samarth): determine if it is safe to move the call to
878 // OmniboxFocusChanged() from OnWillKillFocus() to here, which would let us 839 // OmniboxFocusChanged() from OnWillKillFocus() to here, which would let us
879 // just call SetFocusState() to handle the state change. 840 // just call SetFocusState() to handle the state change.
880 focus_state_ = OMNIBOX_FOCUS_NONE; 841 focus_state_ = OMNIBOX_FOCUS_NONE;
881 control_key_state_ = UP; 842 control_key_state_ = UP;
882 paste_state_ = NONE; 843 paste_state_ = NONE;
883 } 844 }
884 845
885 bool OmniboxEditModel::OnEscapeKeyPressed() { 846 bool OmniboxEditModel::OnEscapeKeyPressed() {
886 if (has_temporary_text_) { 847 if (has_temporary_text_) {
887 AutocompleteMatch match; 848 if (CurrentMatch().destination_url != original_url_) {
888 GetInfoForCurrentText(&match, NULL);
889 if (match.destination_url != original_url_) {
890 RevertTemporaryText(true); 849 RevertTemporaryText(true);
891 return true; 850 return true;
892 } 851 }
893 } 852 }
894 853
895 // We do not clear the pending entry from the omnibox when a load is first 854 // We do not clear the pending entry from the omnibox when a load is first
896 // stopped. If the user presses Escape while stopped, we clear it. 855 // stopped. If the user presses Escape while stopped, we clear it.
897 if (delegate_->CurrentPageExists() && !delegate_->IsLoading()) { 856 if (delegate_->CurrentPageExists() && !delegate_->IsLoading()) {
898 delegate_->GetNavigationController().DiscardNonCommittedEntries(); 857 delegate_->GetNavigationController().DiscardNonCommittedEntries();
899 view_->Update(NULL); 858 view_->Update(NULL);
(...skipping 253 matching lines...) Expand 10 before | Expand all | Expand 10 after
1153 // determine what keyword, if any, is applicable. 1112 // determine what keyword, if any, is applicable.
1154 // 1113 //
1155 // If MaybeAcceptKeywordBySpace() accepts the keyword and returns true, that 1114 // If MaybeAcceptKeywordBySpace() accepts the keyword and returns true, that
1156 // will have updated our state already, so in that case we don't also return 1115 // will have updated our state already, so in that case we don't also return
1157 // true from this function. 1116 // true from this function.
1158 return !(text_differs && allow_keyword_ui_change && !just_deleted_text && 1117 return !(text_differs && allow_keyword_ui_change && !just_deleted_text &&
1159 no_selection && (selection_start == user_text_.length()) && 1118 no_selection && (selection_start == user_text_.length()) &&
1160 MaybeAcceptKeywordBySpace(user_text_)); 1119 MaybeAcceptKeywordBySpace(user_text_));
1161 } 1120 }
1162 1121
1163 void OmniboxEditModel::OnResultChanged(bool default_match_changed) { 1122 void OmniboxEditModel::OnCurrentMatchChanged(bool is_temporary_set_by_instant) {
1123 const bool save_original_selection =
1124 is_temporary_set_by_instant && !has_temporary_text_;
1125 has_temporary_text_ = is_temporary_set_by_instant;
1126 is_temporary_text_set_by_instant_ = is_temporary_set_by_instant;
1127
1128 const AutocompleteMatch& match = omnibox_controller_->current_match();
1129 match.GetKeywordUIState(profile_, &keyword_, &is_keyword_hint_);
1130
1131 view_->SetInstantSuggestion(match.gray_suggestion);
1132 string16 inline_autocomplete_text;
1133 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.
1134 (match.inline_autocomplete_offset <
1135 match.fill_into_edit.length())) {
1136 // We have blue text, go through OnPopupDataChanged.
1137 // TODO(beaudoin): Merge OnPopupDataChanged with this method once the popup
1138 // handling has completely migrated to omnibox_controller.
1139 inline_autocomplete_text =
1140 match.fill_into_edit.substr(match.inline_autocomplete_offset);
1141 popup_model()->OnResultChanged();
1142 OnPopupDataChanged(inline_autocomplete_text, NULL, keyword_,
1143 is_keyword_hint_);
1144 } else {
1145 view_->OnTemporaryTextMaybeChanged(
Peter Kasting 2013/06/11 22:42:55 I'm trying to figure out where this used to happen
1146 DisplayTextFromUserText(match.fill_into_edit), save_original_selection,
1147 false);
1148 }
1149 }
1150
1151 string16 OmniboxEditModel::GetViewText() const {
1152 return view_->GetText();
1164 } 1153 }
1165 1154
1166 InstantController* OmniboxEditModel::GetInstantController() const { 1155 InstantController* OmniboxEditModel::GetInstantController() const {
1167 return controller_->GetInstant(); 1156 return controller_->GetInstant();
1168 } 1157 }
1169 1158
1170 bool OmniboxEditModel::query_in_progress() const { 1159 bool OmniboxEditModel::query_in_progress() const {
1171 return !autocomplete_controller()->done(); 1160 return !autocomplete_controller()->done();
1172 } 1161 }
1173 1162
(...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after
1408 instant->OmniboxFocusChanged(state, reason, NULL); 1397 instant->OmniboxFocusChanged(state, reason, NULL);
1409 1398
1410 // Update state and notify view if the omnibox has focus and the caret 1399 // Update state and notify view if the omnibox has focus and the caret
1411 // visibility changed. 1400 // visibility changed.
1412 const bool was_caret_visible = is_caret_visible(); 1401 const bool was_caret_visible = is_caret_visible();
1413 focus_state_ = state; 1402 focus_state_ = state;
1414 if (focus_state_ != OMNIBOX_FOCUS_NONE && 1403 if (focus_state_ != OMNIBOX_FOCUS_NONE &&
1415 is_caret_visible() != was_caret_visible) 1404 is_caret_visible() != was_caret_visible)
1416 view_->ApplyCaretVisibility(); 1405 view_->ApplyCaretVisibility();
1417 } 1406 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698