Index: chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
index 088bab5048d99f63cb04e88d36f0639d81db7063..47d1e873e004e7a4244acb3b7c1af57d36770e3c 100644 |
--- a/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
+++ b/chrome/browser/ui/views/omnibox/omnibox_view_views.cc |
@@ -60,8 +60,11 @@ |
#include "chrome/browser/browser_process.h" |
#endif |
+ |
namespace { |
+// OmniboxState --------------------------------------------------------------- |
+ |
// Stores omnibox state for each tab. |
struct OmniboxState : public base::SupportsUserData::Data { |
static const char kKey[]; |
@@ -92,7 +95,11 @@ OmniboxState::OmniboxState(const OmniboxEditModel::State& model_state, |
saved_selection_for_focus_change(saved_selection_for_focus_change) { |
} |
-OmniboxState::~OmniboxState() {} |
+OmniboxState::~OmniboxState() { |
+} |
+ |
+ |
+// Helpers -------------------------------------------------------------------- |
// We'd like to set the text input type to TEXT_INPUT_TYPE_URL, because this |
// triggers URL-specific layout in software keyboards, e.g. adding top-level "/" |
@@ -117,6 +124,9 @@ ui::TextInputType DetermineTextInputType() { |
} // namespace |
+ |
+// OmniboxViewViews ----------------------------------------------------------- |
+ |
// static |
const char OmniboxViewViews::kViewClassName[] = "OmniboxViewViews"; |
@@ -152,9 +162,6 @@ OmniboxViewViews::~OmniboxViewViews() { |
popup_view_.reset(); |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// OmniboxViewViews public: |
- |
void OmniboxViewViews::Init() { |
set_controller(this); |
SetTextInputType(DetermineTextInputType()); |
@@ -180,9 +187,6 @@ void OmniboxViewViews::FadeIn() { |
fade_in_animation_->Show(); |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// OmniboxViewViews, public OmniboxView implementation: |
- |
void OmniboxViewViews::SaveStateToTab(content::WebContents* tab) { |
DCHECK(tab); |
@@ -315,6 +319,20 @@ bool OmniboxViewViews::IsImeComposing() const { |
return IsIMEComposing(); |
} |
+gfx::Size OmniboxViewViews::GetMinimumSize() { |
+ const int kMinCharacters = 10; |
+ return gfx::Size( |
+ GetFontList().GetExpectedTextWidth(kMinCharacters) + GetInsets().width(), |
+ GetPreferredSize().height()); |
+} |
+ |
+void OmniboxViewViews::OnNativeThemeChanged(const ui::NativeTheme* theme) { |
+ views::Textfield::OnNativeThemeChanged(theme); |
+ SetBackgroundColor(location_bar_view_->GetColor( |
+ ToolbarModel::NONE, LocationBarView::BACKGROUND)); |
+ EmphasizeURLComponents(); |
+} |
+ |
void OmniboxViewViews::ExecuteCommand(int command_id, int event_flags) { |
switch (command_id) { |
// These commands don't invoke the popup via OnBefore/AfterPossibleChange(). |
@@ -345,53 +363,6 @@ void OmniboxViewViews::ExecuteCommand(int command_id, int event_flags) { |
} |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// OmniboxViewViews, private: |
- |
-int OmniboxViewViews::GetOmniboxTextLength() const { |
- // TODO(oshima): Support IME. |
- return static_cast<int>(text().length()); |
-} |
- |
-void OmniboxViewViews::EmphasizeURLComponents() { |
- // See whether the contents are a URL with a non-empty host portion, which we |
- // should emphasize. To check for a URL, rather than using the type returned |
- // by Parse(), ask the model, which will check the desired page transition for |
- // this input. This can tell us whether an UNKNOWN input string is going to |
- // be treated as a search or a navigation, and is the same method the Paste |
- // And Go system uses. |
- url::Component scheme, host; |
- AutocompleteInput::ParseForEmphasizeComponents(text(), &scheme, &host); |
- bool grey_out_url = text().substr(scheme.begin, scheme.len) == |
- base::UTF8ToUTF16(extensions::kExtensionScheme); |
- bool grey_base = model()->CurrentTextIsURL() && |
- (host.is_nonempty() || grey_out_url); |
- SetColor(location_bar_view_->GetColor( |
- security_level_, |
- grey_base ? LocationBarView::DEEMPHASIZED_TEXT : LocationBarView::TEXT)); |
- if (grey_base && !grey_out_url) { |
- ApplyColor( |
- location_bar_view_->GetColor(security_level_, LocationBarView::TEXT), |
- gfx::Range(host.begin, host.end())); |
- } |
- |
- // Emphasize the scheme for security UI display purposes (if necessary). |
- // Note that we check CurrentTextIsURL() because if we're replacing search |
- // URLs with search terms, we may have a non-URL even when the user is not |
- // editing; and in some cases, e.g. for "site:foo.com" searches, the parser |
- // may have incorrectly identified a qualifier as a scheme. |
- SetStyle(gfx::DIAGONAL_STRIKE, false); |
- if (!model()->user_input_in_progress() && model()->CurrentTextIsURL() && |
- scheme.is_nonempty() && (security_level_ != ToolbarModel::NONE)) { |
- SkColor security_color = location_bar_view_->GetColor( |
- security_level_, LocationBarView::SECURITY_TEXT); |
- const bool strike = (security_level_ == ToolbarModel::SECURITY_ERROR); |
- const gfx::Range scheme_range(scheme.begin, scheme.end()); |
- ApplyColor(security_color, scheme_range); |
- ApplyStyle(gfx::DIAGONAL_STRIKE, strike, scheme_range); |
- } |
-} |
- |
void OmniboxViewViews::SetTextAndSelectedRange(const base::string16& text, |
const gfx::Range& range) { |
SetText(text); |
@@ -438,19 +409,6 @@ bool OmniboxViewViews::HandleEarlyTabActions(const ui::KeyEvent& event) { |
return false; |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// OmniboxViewViews, private View implementation: |
- |
-void OmniboxViewViews::OnNativeThemeChanged(const ui::NativeTheme* theme) { |
- views::Textfield::OnNativeThemeChanged(theme); |
- SetBackgroundColor(location_bar_view_->GetColor( |
- ToolbarModel::NONE, LocationBarView::BACKGROUND)); |
- EmphasizeURLComponents(); |
-} |
- |
-//////////////////////////////////////////////////////////////////////////////// |
-// OmniboxViewViews, private OmniboxView implementation: |
- |
void OmniboxViewViews::SetWindowTextAndCaretPos(const base::string16& text, |
size_t caret_pos, |
bool update_popup, |
@@ -613,16 +571,55 @@ void OmniboxViewViews::OnMatchOpened(const AutocompleteMatch& match, |
profile, web_contents, match); |
} |
-bool OmniboxViewViews::IsCommandIdEnabled(int command_id) const { |
- if (command_id == IDS_APP_PASTE) |
- return !read_only() && !GetClipboardText().empty(); |
- if (command_id == IDS_PASTE_AND_GO) |
- return !read_only() && model()->CanPasteAndGo(GetClipboardText()); |
- if (command_id == IDS_SHOW_URL) |
- return controller()->GetToolbarModel()->WouldReplaceURL(); |
- return command_id == IDS_MOVE_DOWN || command_id == IDS_MOVE_UP || |
- Textfield::IsCommandIdEnabled(command_id) || |
- command_updater()->IsCommandEnabled(command_id); |
+int OmniboxViewViews::GetOmniboxTextLength() const { |
+ // TODO(oshima): Support IME. |
+ return static_cast<int>(text().length()); |
+} |
+ |
+void OmniboxViewViews::EmphasizeURLComponents() { |
+ // See whether the contents are a URL with a non-empty host portion, which we |
+ // should emphasize. To check for a URL, rather than using the type returned |
+ // by Parse(), ask the model, which will check the desired page transition for |
+ // this input. This can tell us whether an UNKNOWN input string is going to |
+ // be treated as a search or a navigation, and is the same method the Paste |
+ // And Go system uses. |
+ url::Component scheme, host; |
+ AutocompleteInput::ParseForEmphasizeComponents(text(), &scheme, &host); |
+ bool grey_out_url = text().substr(scheme.begin, scheme.len) == |
+ base::UTF8ToUTF16(extensions::kExtensionScheme); |
+ bool grey_base = model()->CurrentTextIsURL() && |
+ (host.is_nonempty() || grey_out_url); |
+ SetColor(location_bar_view_->GetColor( |
+ security_level_, |
+ grey_base ? LocationBarView::DEEMPHASIZED_TEXT : LocationBarView::TEXT)); |
+ if (grey_base && !grey_out_url) { |
+ ApplyColor( |
+ location_bar_view_->GetColor(security_level_, LocationBarView::TEXT), |
+ gfx::Range(host.begin, host.end())); |
+ } |
+ |
+ // Emphasize the scheme for security UI display purposes (if necessary). |
+ // Note that we check CurrentTextIsURL() because if we're replacing search |
+ // URLs with search terms, we may have a non-URL even when the user is not |
+ // editing; and in some cases, e.g. for "site:foo.com" searches, the parser |
+ // may have incorrectly identified a qualifier as a scheme. |
+ SetStyle(gfx::DIAGONAL_STRIKE, false); |
+ if (!model()->user_input_in_progress() && model()->CurrentTextIsURL() && |
+ scheme.is_nonempty() && (security_level_ != ToolbarModel::NONE)) { |
+ SkColor security_color = location_bar_view_->GetColor( |
+ security_level_, LocationBarView::SECURITY_TEXT); |
+ const bool strike = (security_level_ == ToolbarModel::SECURITY_ERROR); |
+ const gfx::Range scheme_range(scheme.begin, scheme.end()); |
+ ApplyColor(security_color, scheme_range); |
+ ApplyStyle(gfx::DIAGONAL_STRIKE, strike, scheme_range); |
+ } |
+} |
+ |
+bool OmniboxViewViews::OnKeyReleased(const ui::KeyEvent& event) { |
+ // The omnibox contents may change while the control key is pressed. |
+ if (event.key_code() == ui::VKEY_CONTROL) |
+ model()->OnControlKeyChanged(false); |
+ return views::Textfield::OnKeyReleased(event); |
} |
bool OmniboxViewViews::IsItemForCommandIdDynamic(int command_id) const { |
@@ -636,24 +633,10 @@ base::string16 OmniboxViewViews::GetLabelForCommandId(int command_id) const { |
IDS_PASTE_AND_SEARCH : IDS_PASTE_AND_GO); |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// OmniboxViewViews, private views::Textfield implementation: |
- |
const char* OmniboxViewViews::GetClassName() const { |
return kViewClassName; |
} |
-void OmniboxViewViews::OnPaint(gfx::Canvas* canvas) { |
- if (fade_in_animation_->is_animating()) { |
- canvas->SaveLayerAlpha(static_cast<uint8>( |
- fade_in_animation_->CurrentValueBetween(0, 255))); |
- views::Textfield::OnPaint(canvas); |
- canvas->Restore(); |
- } else { |
- views::Textfield::OnPaint(canvas); |
- } |
-} |
- |
bool OmniboxViewViews::OnMousePressed(const ui::MouseEvent& event) { |
select_all_on_mouse_release_ = |
(event.IsOnlyLeftMouseButton() || event.IsOnlyRightMouseButton()) && |
@@ -766,13 +749,6 @@ bool OmniboxViewViews::OnKeyPressed(const ui::KeyEvent& event) { |
return views::Textfield::OnKeyPressed(event) || HandleEarlyTabActions(event); |
} |
-bool OmniboxViewViews::OnKeyReleased(const ui::KeyEvent& event) { |
- // The omnibox contents may change while the control key is pressed. |
- if (event.key_code() == ui::VKEY_CONTROL) |
- model()->OnControlKeyChanged(false); |
- return views::Textfield::OnKeyReleased(event); |
-} |
- |
void OmniboxViewViews::OnGestureEvent(ui::GestureEvent* event) { |
if (!HasFocus() && event->type() == ui::ET_GESTURE_TAP_DOWN) { |
select_all_on_gesture_tap_ = true; |
@@ -820,6 +796,17 @@ void OmniboxViewViews::GetAccessibleState(ui::AXViewState* state) { |
state->role = ui::AX_ROLE_TEXT_FIELD; |
} |
+void OmniboxViewViews::OnPaint(gfx::Canvas* canvas) { |
+ if (fade_in_animation_->is_animating()) { |
+ canvas->SaveLayerAlpha(static_cast<uint8>( |
+ fade_in_animation_->CurrentValueBetween(0, 255))); |
+ views::Textfield::OnPaint(canvas); |
+ canvas->Restore(); |
+ } else { |
+ views::Textfield::OnPaint(canvas); |
+ } |
+} |
+ |
void OmniboxViewViews::OnFocus() { |
views::Textfield::OnFocus(); |
// TODO(oshima): Get control key state. |
@@ -862,13 +849,22 @@ void OmniboxViewViews::OnBlur() { |
SelectRange(gfx::Range(0)); |
} |
+bool OmniboxViewViews::IsCommandIdEnabled(int command_id) const { |
+ if (command_id == IDS_APP_PASTE) |
+ return !read_only() && !GetClipboardText().empty(); |
+ if (command_id == IDS_PASTE_AND_GO) |
+ return !read_only() && model()->CanPasteAndGo(GetClipboardText()); |
+ if (command_id == IDS_SHOW_URL) |
+ return controller()->GetToolbarModel()->WouldReplaceURL(); |
+ return command_id == IDS_MOVE_DOWN || command_id == IDS_MOVE_UP || |
+ Textfield::IsCommandIdEnabled(command_id) || |
+ command_updater()->IsCommandEnabled(command_id); |
+} |
+ |
base::string16 OmniboxViewViews::GetSelectionClipboardText() const { |
return SanitizeTextForPaste(Textfield::GetSelectionClipboardText()); |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// OmniboxViewViews, private gfx::AnimationDelegate implementation: |
- |
void OmniboxViewViews::AnimationProgressed(const gfx::Animation* animation) { |
SchedulePaint(); |
} |
@@ -877,11 +873,6 @@ void OmniboxViewViews::AnimationEnded(const gfx::Animation* animation) { |
fade_in_animation_->Reset(); |
} |
-//////////////////////////////////////////////////////////////////////////////// |
-// OmniboxViewViews, |
-// chromeos::input_method::InputMethodManager::CandidateWindowObserver |
-// private implementation: |
- |
#if defined(OS_CHROMEOS) |
void OmniboxViewViews::CandidateWindowOpened( |
chromeos::input_method::InputMethodManager* manager) { |
@@ -894,9 +885,6 @@ void OmniboxViewViews::CandidateWindowClosed( |
} |
#endif |
-//////////////////////////////////////////////////////////////////////////////// |
-// OmniboxViewViews, private views::TextfieldController implementation: |
- |
void OmniboxViewViews::ContentsChanged(views::Textfield* sender, |
const base::string16& new_contents) { |
} |