Index: chrome/browser/ui/omnibox/omnibox_view_browsertest.cc |
diff --git a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc |
index 956490d00cf6f30cece7dc7c1c29b54f9f8bead1..9ef082d314df309ab76891599fab708c142c0785 100644 |
--- a/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc |
+++ b/chrome/browser/ui/omnibox/omnibox_view_browsertest.cc |
@@ -36,16 +36,15 @@ |
#include "net/base/mock_host_resolver.h" |
#include "ui/base/events.h" |
#include "ui/base/keycodes/keyboard_codes.h" |
+#include "ui/gfx/point.h" |
#if defined(TOOLKIT_GTK) |
#include <gdk/gdk.h> |
#include <gtk/gtk.h> |
#endif |
-#if defined(TOOLKIT_VIEWS) |
-#include "ui/views/controls/textfield/native_textfield_views.h" |
-#include "ui/views/events/event.h" |
-#include "ui/views/widget/widget.h" |
+#if defined(USE_AURA) |
+#include "chrome/browser/ui/views/frame/browser_view.h" |
#endif |
using base::Time; |
@@ -1270,6 +1269,45 @@ class OmniboxViewTest : public InProcessBrowserTest, |
EXPECT_EQ(old_text, omnibox_view->GetText()); |
} |
+#if defined(USE_AURA) |
+ const BrowserView* GetBrowserView() const { |
+ return static_cast<BrowserView*>(browser()->window()); |
+ } |
+ |
+ const views::View* GetFocusView() const { |
+ return GetBrowserView()->GetViewByID(location_bar_focus_view_id_); |
+ } |
+ |
+ // Move the mouse to the center of the browser window and left-click. |
+ void ClickBrowserWindowCenter() { |
+ ASSERT_TRUE(ui_test_utils::SendMouseMoveSync( |
+ GetBrowserView()->GetScreenBounds().CenterPoint())); |
+ ASSERT_TRUE(ui_test_utils::SendMouseEventsSync( |
+ ui_controls::LEFT, ui_controls::DOWN)); |
+ ASSERT_TRUE(ui_test_utils::SendMouseEventsSync( |
+ ui_controls::LEFT, ui_controls::UP)); |
+ } |
+ |
+ // Press and release the mouse in the focus view at an offset from its origin. |
+ // If |release_offset| differs from |press_offset|, the mouse will be moved |
+ // between the press and release. |
+ void ClickFocusViewOrigin(ui_controls::MouseButton button, |
+ const gfx::Point& press_offset, |
+ const gfx::Point& release_offset) { |
+ gfx::Point focus_view_origin = GetFocusView()->GetScreenBounds().origin(); |
+ gfx::Point press_point = focus_view_origin; |
+ press_point.Offset(press_offset.x(), press_offset.y()); |
+ ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(press_point)); |
+ ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(button, ui_controls::DOWN)); |
+ |
+ gfx::Point release_point = focus_view_origin; |
+ release_point.Offset(release_offset.x(), release_offset.y()); |
+ if (release_point != press_point) |
+ ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(release_point)); |
+ ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(button, ui_controls::UP)); |
+ } |
+#endif // defined(USE_AURA) |
+ |
private: |
ViewID location_bar_focus_view_id_; |
}; |
@@ -1481,4 +1519,67 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewTest, PasteReplacingAll) { |
// Inline autocomplete shouldn't be triggered. |
ASSERT_EQ(ASCIIToUTF16("abc"), omnibox_view->GetText()); |
} |
-#endif |
+#endif // defined(TOOLKIT_GTK) |
+ |
+// TODO(derat): Enable on Windows: http://crbug.com/128556 |
+#if defined(USE_AURA) |
+IN_PROC_BROWSER_TEST_F(OmniboxViewTest, SelectAllOnClick) { |
+ OmniboxView* omnibox_view = NULL; |
+ ASSERT_NO_FATAL_FAILURE(GetOmniboxView(&omnibox_view)); |
+ omnibox_view->SetUserText(ASCIIToUTF16("http://www.google.com/")); |
+ const gfx::Point kClickOffset(2, 2); |
+ |
+ // Take the focus away from the omnibox. |
+ ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter()); |
+ EXPECT_FALSE(omnibox_view->IsSelectAll()); |
+ EXPECT_FALSE(GetFocusView()->HasFocus()); |
+ |
+ // Click in the omnibox. All of its text should be selected. |
+ ASSERT_NO_FATAL_FAILURE( |
+ ClickFocusViewOrigin(ui_controls::LEFT, kClickOffset, kClickOffset)); |
+ EXPECT_TRUE(omnibox_view->IsSelectAll()); |
+ EXPECT_TRUE(GetFocusView()->HasFocus()); |
+ |
+ // Ensure that all of the text is selected and then take the focus away. The |
+ // selection should persist. |
+ omnibox_view->SelectAll(false); |
+ EXPECT_TRUE(omnibox_view->IsSelectAll()); |
+ ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter()); |
+ EXPECT_TRUE(omnibox_view->IsSelectAll()); |
+ EXPECT_FALSE(GetFocusView()->HasFocus()); |
+ |
+ // Clicking in the omnibox while some of its text is already selected should |
+ // have the effect of re-selecting the text. |
+ ASSERT_NO_FATAL_FAILURE( |
+ ClickFocusViewOrigin(ui_controls::LEFT, kClickOffset, kClickOffset)); |
+ EXPECT_TRUE(omnibox_view->IsSelectAll()); |
+ EXPECT_TRUE(GetFocusView()->HasFocus()); |
+ |
+ // Click in a different spot in the omnibox. It should keep the focus but |
+ // lose the selection. |
+ omnibox_view->SelectAll(false); |
+ const gfx::Point kSecondClickOffset(kClickOffset.x() + 10, kClickOffset.y()); |
+ ASSERT_NO_FATAL_FAILURE( |
+ ClickFocusViewOrigin( |
+ ui_controls::LEFT, kSecondClickOffset, kSecondClickOffset)); |
+ EXPECT_FALSE(omnibox_view->IsSelectAll()); |
+ EXPECT_TRUE(GetFocusView()->HasFocus()); |
+ |
+ // Take the focus away and click in the omnibox again, but drag a bit before |
+ // releasing. We should focus the omnibox but not select all of its text. |
+ ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter()); |
+ const gfx::Point kReleaseOffset(kClickOffset.x() + 10, kClickOffset.y()); |
+ ASSERT_NO_FATAL_FAILURE( |
+ ClickFocusViewOrigin(ui_controls::LEFT, kClickOffset, kReleaseOffset)); |
+ EXPECT_FALSE(omnibox_view->IsSelectAll()); |
+ EXPECT_TRUE(GetFocusView()->HasFocus()); |
+ |
+ // Middle-clicking shouldn't select all the text either. |
+ ASSERT_NO_FATAL_FAILURE( |
+ ClickFocusViewOrigin(ui_controls::LEFT, kClickOffset, kClickOffset)); |
+ ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter()); |
+ ASSERT_NO_FATAL_FAILURE( |
+ ClickFocusViewOrigin(ui_controls::MIDDLE, kClickOffset, kClickOffset)); |
+ EXPECT_FALSE(omnibox_view->IsSelectAll()); |
+} |
+#endif // defined(USE_AURA) |