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

Side by Side Diff: chrome/browser/ui/views/omnibox/omnibox_view_views.cc

Issue 10810062: Moving common code into OmniboxView from OmniboxView* (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: More win fixes Created 8 years, 5 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 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/views/omnibox/omnibox_view_views.h" 5 #include "chrome/browser/ui/views/omnibox/omnibox_view_views.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/property_bag.h" 8 #include "base/property_bag.h"
9 #include "base/string_util.h" 9 #include "base/string_util.h"
10 #include "base/utf_string_conversions.h" 10 #include "base/utf_string_conversions.h"
(...skipping 206 matching lines...) Expand 10 before | Expand all | Expand 10 after
217 217
218 // static 218 // static
219 const char OmniboxViewViews::kViewClassName[] = "BrowserOmniboxViewViews"; 219 const char OmniboxViewViews::kViewClassName[] = "BrowserOmniboxViewViews";
220 220
221 OmniboxViewViews::OmniboxViewViews(OmniboxEditController* controller, 221 OmniboxViewViews::OmniboxViewViews(OmniboxEditController* controller,
222 ToolbarModel* toolbar_model, 222 ToolbarModel* toolbar_model,
223 Profile* profile, 223 Profile* profile,
224 CommandUpdater* command_updater, 224 CommandUpdater* command_updater,
225 bool popup_window_mode, 225 bool popup_window_mode,
226 LocationBarView* location_bar) 226 LocationBarView* location_bar)
227 : textfield_(NULL), 227 : OmniboxView(profile, controller, toolbar_model, command_updater),
228 textfield_(NULL),
228 popup_window_mode_(popup_window_mode), 229 popup_window_mode_(popup_window_mode),
229 model_(new OmniboxEditModel(this, controller, profile)),
230 controller_(controller),
231 toolbar_model_(toolbar_model),
232 command_updater_(command_updater),
233 security_level_(ToolbarModel::NONE), 230 security_level_(ToolbarModel::NONE),
234 ime_composing_before_change_(false), 231 ime_composing_before_change_(false),
235 delete_at_end_pressed_(false), 232 delete_at_end_pressed_(false),
236 location_bar_view_(location_bar), 233 location_bar_view_(location_bar),
237 ime_candidate_window_open_(false), 234 ime_candidate_window_open_(false),
238 select_all_on_mouse_release_(false) { 235 select_all_on_mouse_release_(false) {
239 if (chrome::search::IsInstantExtendedAPIEnabled( 236 if (chrome::search::IsInstantExtendedAPIEnabled(
240 location_bar_view_->profile())) { 237 location_bar_view_->profile())) {
241 set_background(views::Background::CreateSolidBackground( 238 set_background(views::Background::CreateSolidBackground(
242 chrome::search::kOmniboxBackgroundColor)); 239 chrome::search::kOmniboxBackgroundColor));
243 } 240 }
244 } 241 }
245 242
246 OmniboxViewViews::~OmniboxViewViews() { 243 OmniboxViewViews::~OmniboxViewViews() {
247 #if defined(OS_CHROMEOS) 244 #if defined(OS_CHROMEOS)
248 chromeos::input_method::InputMethodManager::GetInstance()-> 245 chromeos::input_method::InputMethodManager::GetInstance()->
249 RemoveCandidateWindowObserver(this); 246 RemoveCandidateWindowObserver(this);
250 #endif 247 #endif
251 248
252 // Explicitly teardown members which have a reference to us. Just to be safe 249 // Explicitly teardown members which have a reference to us. Just to be safe
253 // we want them to be destroyed before destroying any other internal state. 250 // we want them to be destroyed before destroying any other internal state.
254 popup_view_.reset(); 251 popup_view_.reset();
255 model_.reset(); 252 model_.reset();
Peter Kasting 2012/07/26 23:03:24 Sort of worries me that we had this code in the fi
dominich 2012/07/30 16:42:59 What are we no longer doing? The model_.reset() ca
Peter Kasting 2012/07/30 17:06:03 What I mean is that the bit about "reset these bef
256 } 253 }
257 254
258 //////////////////////////////////////////////////////////////////////////////// 255 ////////////////////////////////////////////////////////////////////////////////
259 // OmniboxViewViews public: 256 // OmniboxViewViews public:
260 257
261 void OmniboxViewViews::Init(views::View* popup_parent_view) { 258 void OmniboxViewViews::Init(views::View* popup_parent_view) {
262 // The height of the text view is going to change based on the font used. We 259 // The height of the text view is going to change based on the font used. We
263 // don't want to stretch the height, and we want it vertically centered. 260 // don't want to stretch the height, and we want it vertically centered.
264 // TODO(oshima): make sure the above happens with views. 261 // TODO(oshima): make sure the above happens with views.
265 textfield_ = new AutocompleteTextfield(this, location_bar_view_); 262 textfield_ = new AutocompleteTextfield(this, location_bar_view_);
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after
461 } 458 }
462 459
463 void OmniboxViewViews::OnBoundsChanged(const gfx::Rect& previous_bounds) { 460 void OmniboxViewViews::OnBoundsChanged(const gfx::Rect& previous_bounds) {
464 if (popup_view_->IsOpen()) 461 if (popup_view_->IsOpen())
465 popup_view_->UpdatePopupAppearance(); 462 popup_view_->UpdatePopupAppearance();
466 } 463 }
467 464
468 //////////////////////////////////////////////////////////////////////////////// 465 ////////////////////////////////////////////////////////////////////////////////
469 // OmniboxViewViews, AutocopmleteEditView implementation: 466 // OmniboxViewViews, AutocopmleteEditView implementation:
470 467
471 OmniboxEditModel* OmniboxViewViews::model() {
472 return model_.get();
473 }
474
475 const OmniboxEditModel* OmniboxViewViews::model() const {
476 return model_.get();
477 }
478
479 void OmniboxViewViews::SaveStateToTab(WebContents* tab) { 468 void OmniboxViewViews::SaveStateToTab(WebContents* tab) {
480 DCHECK(tab); 469 DCHECK(tab);
481 470
482 // We don't want to keep the IME status, so force quit the current 471 // We don't want to keep the IME status, so force quit the current
483 // session here. It may affect the selection status, so order is 472 // session here. It may affect the selection status, so order is
484 // also important. 473 // also important.
485 if (textfield_->IsIMEComposing()) { 474 if (textfield_->IsIMEComposing()) {
486 textfield_->GetTextInputClient()->ConfirmCompositionText(); 475 textfield_->GetTextInputClient()->ConfirmCompositionText();
487 textfield_->GetInputMethod()->CancelComposition(textfield_); 476 textfield_->GetInputMethod()->CancelComposition(textfield_);
488 } 477 }
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
522 // TODO(oshima): consider saving/restoring edit history. 511 // TODO(oshima): consider saving/restoring edit history.
523 textfield_->ClearEditHistory(); 512 textfield_->ClearEditHistory();
524 } 513 }
525 } else if (visibly_changed_permanent_text) { 514 } else if (visibly_changed_permanent_text) {
526 RevertAll(); 515 RevertAll();
527 } else if (changed_security_level) { 516 } else if (changed_security_level) {
528 EmphasizeURLComponents(); 517 EmphasizeURLComponents();
529 } 518 }
530 } 519 }
531 520
532 void OmniboxViewViews::OpenMatch(const AutocompleteMatch& match,
533 WindowOpenDisposition disposition,
534 const GURL& alternate_nav_url,
535 size_t selected_line) {
536 if (!match.destination_url.is_valid())
537 return;
538
539 model_->OpenMatch(match, disposition, alternate_nav_url, selected_line);
540 }
541
542 string16 OmniboxViewViews::GetText() const { 521 string16 OmniboxViewViews::GetText() const {
543 // TODO(oshima): IME support 522 // TODO(oshima): IME support
544 return textfield_->text(); 523 return textfield_->text();
545 } 524 }
546 525
547 bool OmniboxViewViews::IsEditingOrEmpty() const {
548 return model_->user_input_in_progress() || (GetTextLength() == 0);
549 }
550
551 int OmniboxViewViews::GetIcon() const {
552 return IsEditingOrEmpty() ?
553 AutocompleteMatch::TypeToIcon(model_->CurrentTextType()) :
554 toolbar_model_->GetIcon();
555 }
556
557 void OmniboxViewViews::SetUserText(const string16& text) {
558 SetUserText(text, text, true);
559 }
560
561 void OmniboxViewViews::SetUserText(const string16& text,
562 const string16& display_text,
563 bool update_popup) {
564 model_->SetUserText(text);
565 SetWindowTextAndCaretPos(display_text, display_text.length(), update_popup,
566 true);
567 }
568
569 void OmniboxViewViews::SetWindowTextAndCaretPos(const string16& text, 526 void OmniboxViewViews::SetWindowTextAndCaretPos(const string16& text,
570 size_t caret_pos, 527 size_t caret_pos,
571 bool update_popup, 528 bool update_popup,
572 bool notify_text_changed) { 529 bool notify_text_changed) {
573 const ui::Range range(caret_pos, caret_pos); 530 const ui::Range range(caret_pos, caret_pos);
574 SetTextAndSelectedRange(text, range); 531 SetTextAndSelectedRange(text, range);
575 532
576 if (update_popup) 533 if (update_popup)
577 UpdatePopup(); 534 UpdatePopup();
578 535
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
610 } else { 567 } else {
611 *start = static_cast<size_t>(range.end()); 568 *start = static_cast<size_t>(range.end());
612 *end = static_cast<size_t>(range.start()); 569 *end = static_cast<size_t>(range.start());
613 } 570 }
614 } 571 }
615 572
616 void OmniboxViewViews::SelectAll(bool reversed) { 573 void OmniboxViewViews::SelectAll(bool reversed) {
617 textfield_->SelectAll(reversed); 574 textfield_->SelectAll(reversed);
618 } 575 }
619 576
620 void OmniboxViewViews::RevertAll() {
621 ClosePopup();
622 model_->Revert();
623 TextChanged();
624 }
625
626 void OmniboxViewViews::UpdatePopup() { 577 void OmniboxViewViews::UpdatePopup() {
627 model_->SetInputInProgress(true); 578 model_->SetInputInProgress(true);
628 if (ime_candidate_window_open_) 579 if (ime_candidate_window_open_)
629 return; 580 return;
630 if (!model_->has_focus()) 581 if (!model_->has_focus())
631 return; 582 return;
632 583
633 // Don't inline autocomplete when the caret/selection isn't at the end of 584 // Don't inline autocomplete when the caret/selection isn't at the end of
634 // the text, or in the middle of composition. 585 // the text, or in the middle of composition.
635 ui::Range sel; 586 ui::Range sel;
636 textfield_->GetSelectedRange(&sel); 587 textfield_->GetSelectedRange(&sel);
637 bool no_inline_autocomplete = 588 bool no_inline_autocomplete =
638 sel.GetMax() < GetTextLength() || textfield_->IsIMEComposing(); 589 sel.GetMax() < GetTextLength() || textfield_->IsIMEComposing();
639 590
640 model_->StartAutocomplete(!sel.is_empty(), no_inline_autocomplete); 591 model_->StartAutocomplete(!sel.is_empty(), no_inline_autocomplete);
641 } 592 }
642 593
643 void OmniboxViewViews::ClosePopup() {
644 model_->StopAutocomplete();
645 }
646
647 void OmniboxViewViews::SetFocus() { 594 void OmniboxViewViews::SetFocus() {
648 // In views-implementation, the focus is on textfield rather than OmniboxView. 595 // In views-implementation, the focus is on textfield rather than OmniboxView.
649 textfield_->RequestFocus(); 596 textfield_->RequestFocus();
650 } 597 }
651 598
652 void OmniboxViewViews::OnTemporaryTextMaybeChanged( 599 void OmniboxViewViews::OnTemporaryTextMaybeChanged(
653 const string16& display_text, 600 const string16& display_text,
654 bool save_original_selection) { 601 bool save_original_selection) {
655 if (save_original_selection) 602 if (save_original_selection)
656 textfield_->GetSelectedRange(&saved_temporary_selection_); 603 textfield_->GetSelectedRange(&saved_temporary_selection_);
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after
722 } 669 }
723 670
724 gfx::NativeView OmniboxViewViews::GetNativeView() const { 671 gfx::NativeView OmniboxViewViews::GetNativeView() const {
725 return GetWidget()->GetNativeView(); 672 return GetWidget()->GetNativeView();
726 } 673 }
727 674
728 gfx::NativeView OmniboxViewViews::GetRelativeWindowForPopup() const { 675 gfx::NativeView OmniboxViewViews::GetRelativeWindowForPopup() const {
729 return GetWidget()->GetTopLevelWidget()->GetNativeView(); 676 return GetWidget()->GetTopLevelWidget()->GetNativeView();
730 } 677 }
731 678
732 CommandUpdater* OmniboxViewViews::GetCommandUpdater() {
733 return command_updater_;
734 }
735
736 void OmniboxViewViews::SetInstantSuggestion(const string16& input, 679 void OmniboxViewViews::SetInstantSuggestion(const string16& input,
737 bool animate_to_complete) { 680 bool animate_to_complete) {
738 #if defined(OS_WIN) || defined(USE_AURA) 681 #if defined(OS_WIN) || defined(USE_AURA)
739 location_bar_view_->SetInstantSuggestion(input, animate_to_complete); 682 location_bar_view_->SetInstantSuggestion(input, animate_to_complete);
740 #endif 683 #endif
741 } 684 }
742 685
743 string16 OmniboxViewViews::GetInstantSuggestion() const { 686 string16 OmniboxViewViews::GetInstantSuggestion() const {
744 #if defined(OS_WIN) || defined(USE_AURA) 687 #if defined(OS_WIN) || defined(USE_AURA)
745 return location_bar_view_->GetInstantSuggestion(); 688 return location_bar_view_->GetInstantSuggestion();
(...skipping 159 matching lines...) Expand 10 before | Expand all | Expand 10 after
905 #endif 848 #endif
906 849
907 //////////////////////////////////////////////////////////////////////////////// 850 ////////////////////////////////////////////////////////////////////////////////
908 // OmniboxViewViews, private: 851 // OmniboxViewViews, private:
909 852
910 size_t OmniboxViewViews::GetTextLength() const { 853 size_t OmniboxViewViews::GetTextLength() const {
911 // TODO(oshima): Support instant, IME. 854 // TODO(oshima): Support instant, IME.
912 return textfield_->text().length(); 855 return textfield_->text().length();
913 } 856 }
914 857
858 int OmniboxViewViews::GetOmniboxTextLength() const {
859 return static_cast<int>(GetTextLength());
860 }
861
915 void OmniboxViewViews::EmphasizeURLComponents() { 862 void OmniboxViewViews::EmphasizeURLComponents() {
916 // See whether the contents are a URL with a non-empty host portion, which we 863 // See whether the contents are a URL with a non-empty host portion, which we
917 // should emphasize. To check for a URL, rather than using the type returned 864 // should emphasize. To check for a URL, rather than using the type returned
918 // by Parse(), ask the model, which will check the desired page transition for 865 // by Parse(), ask the model, which will check the desired page transition for
919 // this input. This can tell us whether an UNKNOWN input string is going to 866 // this input. This can tell us whether an UNKNOWN input string is going to
920 // be treated as a search or a navigation, and is the same method the Paste 867 // be treated as a search or a navigation, and is the same method the Paste
921 // And Go system uses. 868 // And Go system uses.
922 string16 text = GetText(); 869 string16 text = GetText();
923 url_parse::Component scheme, host; 870 url_parse::Component scheme, host;
924 AutocompleteInput::ParseForEmphasizeComponents(text, model_->GetDesiredTLD(), 871 AutocompleteInput::ParseForEmphasizeComponents(text, model_->GetDesiredTLD(),
(...skipping 15 matching lines...) Expand all
940 if (!model_->user_input_in_progress() && scheme.is_nonempty() && 887 if (!model_->user_input_in_progress() && scheme.is_nonempty() &&
941 (security_level_ != ToolbarModel::NONE)) { 888 (security_level_ != ToolbarModel::NONE)) {
942 SkColor security_color = LocationBarView::GetColor( 889 SkColor security_color = LocationBarView::GetColor(
943 security_level_, LocationBarView::SECURITY_TEXT); 890 security_level_, LocationBarView::SECURITY_TEXT);
944 bool use_strikethrough = (security_level_ == ToolbarModel::SECURITY_ERROR); 891 bool use_strikethrough = (security_level_ == ToolbarModel::SECURITY_ERROR);
945 ApplyURLStyle(textfield_, scheme.begin, scheme.end(), 892 ApplyURLStyle(textfield_, scheme.begin, scheme.end(),
946 security_color, use_strikethrough); 893 security_color, use_strikethrough);
947 } 894 }
948 } 895 }
949 896
950 void OmniboxViewViews::TextChanged() {
951 EmphasizeURLComponents();
952 model_->OnChanged();
953 }
954
955 void OmniboxViewViews::SetTextAndSelectedRange(const string16& text, 897 void OmniboxViewViews::SetTextAndSelectedRange(const string16& text,
956 const ui::Range& range) { 898 const ui::Range& range) {
957 if (text != GetText()) 899 if (text != GetText())
958 textfield_->SetText(text); 900 textfield_->SetText(text);
959 textfield_->SelectRange(range); 901 textfield_->SelectRange(range);
960 } 902 }
961 903
962 string16 OmniboxViewViews::GetSelectedText() const { 904 string16 OmniboxViewViews::GetSelectedText() const {
963 // TODO(oshima): Support instant, IME. 905 // TODO(oshima): Support instant, IME.
964 return textfield_->GetSelectedText(); 906 return textfield_->GetSelectedText();
965 } 907 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698