| Index: chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
|
| diff --git a/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc b/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
|
| index 3ae833379671bfd6a86083e916a4d4174ae72df2..bc7f068ea38ea98c7be9188730aee6fbfd75b9c5 100644
|
| --- a/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
|
| +++ b/chrome/browser/ui/views/omnibox/omnibox_view_views_browsertest.cc
|
| @@ -20,6 +20,12 @@
|
| #include "ui/base/test/ui_controls.h"
|
| #include "ui/views/controls/textfield/native_textfield_wrapper.h"
|
|
|
| +#if defined(USE_AURA)
|
| +#include "ui/aura/root_window.h"
|
| +#include "ui/aura/root_window_host_delegate.h"
|
| +#include "ui/aura/window.h"
|
| +#endif // defined(USE_AURA)
|
| +
|
| class OmniboxViewViewsTest : public InProcessBrowserTest {
|
| protected:
|
| OmniboxViewViewsTest() {}
|
| @@ -45,25 +51,55 @@ class OmniboxViewViewsTest : public InProcessBrowserTest {
|
| ui_test_utils::SendMouseEventsSync(ui_controls::LEFT, ui_controls::UP));
|
| }
|
|
|
| - // Press and release the mouse in the omnibox at an offset from its origin.
|
| - // If |release_offset| differs from |press_offset|, the mouse will be moved
|
| + // Press and release the mouse at the specified locations. If
|
| + // |release_offset| differs from |press_offset|, the mouse will be moved
|
| // between the press and release.
|
| - void ClickOmnibox(ui_controls::MouseButton button,
|
| - const gfx::Vector2d& press_offset,
|
| - const gfx::Vector2d& release_offset) {
|
| - const views::View* omnibox = BrowserView::GetBrowserViewForBrowser(
|
| - browser())->GetViewByID(VIEW_ID_OMNIBOX);
|
| - gfx::Point omnibox_origin = omnibox->GetBoundsInScreen().origin();
|
| - gfx::Point press_point = omnibox_origin + press_offset;
|
| - ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(press_point));
|
| + void Click(ui_controls::MouseButton button,
|
| + const gfx::Point& press_location,
|
| + const gfx::Point& release_location) {
|
| + ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(press_location));
|
| ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(button, ui_controls::DOWN));
|
|
|
| - gfx::Point release_point = omnibox_origin + release_offset;
|
| - if (release_point != press_point)
|
| - ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(release_point));
|
| + if (press_location != release_location)
|
| + ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(release_location));
|
| ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(button, ui_controls::UP));
|
| }
|
|
|
| +#if defined(USE_AURA)
|
| + // Tap the center of the browser window.
|
| + void TapBrowserWindowCenter() {
|
| + aura::RootWindowHostDelegate* rwhd =
|
| + browser()->window()->GetNativeWindow()->GetRootWindow()->
|
| + GetDispatcher()->AsRootWindowHostDelegate();
|
| +
|
| + gfx::Point center = BrowserView::GetBrowserViewForBrowser(
|
| + browser())->GetBoundsInScreen().CenterPoint();
|
| + ui::TouchEvent press(ui::ET_TOUCH_PRESSED, center,
|
| + 5, base::TimeDelta::FromMilliseconds(0));
|
| + rwhd->OnHostTouchEvent(&press);
|
| +
|
| + ui::TouchEvent release(ui::ET_TOUCH_RELEASED, center,
|
| + 5, base::TimeDelta::FromMilliseconds(50));
|
| + rwhd->OnHostTouchEvent(&release);
|
| + }
|
| +
|
| + // Touch down and release at the specified locations.
|
| + void Tap(const gfx::Point& press_location,
|
| + const gfx::Point& release_location) {
|
| + aura::RootWindowHostDelegate* rwhd =
|
| + browser()->window()->GetNativeWindow()->GetRootWindow()->
|
| + GetDispatcher()->AsRootWindowHostDelegate();
|
| +
|
| + ui::TouchEvent press(ui::ET_TOUCH_PRESSED, press_location,
|
| + 5, base::TimeDelta::FromMilliseconds(0));
|
| + rwhd->OnHostTouchEvent(&press);
|
| +
|
| + ui::TouchEvent release(ui::ET_TOUCH_RELEASED, release_location,
|
| + 5, base::TimeDelta::FromMilliseconds(50));
|
| + rwhd->OnHostTouchEvent(&release);
|
| + }
|
| +#endif // defined(USE_AURA)
|
| +
|
| private:
|
| // InProcessBrowserTest:
|
| virtual void SetUpOnMainThread() OVERRIDE {
|
| @@ -106,7 +142,6 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, SelectAllOnClick) {
|
| OmniboxView* omnibox_view = NULL;
|
| ASSERT_NO_FATAL_FAILURE(GetOmniboxViewForBrowser(browser(), &omnibox_view));
|
| omnibox_view->SetUserText(ASCIIToUTF16("http://www.google.com/"));
|
| - const gfx::Vector2d click(40, 10);
|
|
|
| // Take the focus away from the omnibox.
|
| ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter());
|
| @@ -114,7 +149,11 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, SelectAllOnClick) {
|
| EXPECT_FALSE(omnibox_view->IsSelectAll());
|
|
|
| // Clicking in the omnibox should take focus and select all text.
|
| - ASSERT_NO_FATAL_FAILURE(ClickOmnibox(ui_controls::LEFT, click, click));
|
| + const gfx::Rect omnibox_bounds = BrowserView::GetBrowserViewForBrowser(
|
| + browser())->GetViewByID(VIEW_ID_OMNIBOX)->GetBoundsInScreen();
|
| + const gfx::Point click_location = omnibox_bounds.CenterPoint();
|
| + ASSERT_NO_FATAL_FAILURE(Click(ui_controls::LEFT,
|
| + click_location, click_location));
|
| EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| EXPECT_TRUE(omnibox_view->IsSelectAll());
|
|
|
| @@ -124,28 +163,79 @@ IN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, SelectAllOnClick) {
|
| EXPECT_FALSE(omnibox_view->IsSelectAll());
|
|
|
| // Clicking in the omnibox again should take focus and select all text again.
|
| - ASSERT_NO_FATAL_FAILURE(ClickOmnibox(ui_controls::LEFT, click, click));
|
| + ASSERT_NO_FATAL_FAILURE(Click(ui_controls::LEFT,
|
| + click_location, click_location));
|
| EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| EXPECT_TRUE(omnibox_view->IsSelectAll());
|
|
|
| // Clicking another omnibox spot should keep focus but clear the selection.
|
| omnibox_view->SelectAll(false);
|
| - const gfx::Vector2d click_2(click.x() + 10, click.y());
|
| - ASSERT_NO_FATAL_FAILURE(ClickOmnibox(ui_controls::LEFT, click_2, click_2));
|
| + const gfx::Point click2_location = omnibox_bounds.origin() +
|
| + gfx::Vector2d(omnibox_bounds.width() / 4, omnibox_bounds.height() / 4);
|
| + ASSERT_NO_FATAL_FAILURE(Click(ui_controls::LEFT,
|
| + click2_location, click2_location));
|
| EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| EXPECT_FALSE(omnibox_view->IsSelectAll());
|
|
|
| // 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::Vector2d release(click.x() + 10, click.y());
|
| - ASSERT_NO_FATAL_FAILURE(ClickOmnibox(ui_controls::LEFT, click, release));
|
| + ASSERT_NO_FATAL_FAILURE(Click(ui_controls::LEFT,
|
| + click_location, click2_location));
|
| EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| EXPECT_FALSE(omnibox_view->IsSelectAll());
|
|
|
| // Middle-clicking should not be handled by the omnibox.
|
| ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter());
|
| - ASSERT_NO_FATAL_FAILURE(ClickOmnibox(ui_controls::MIDDLE, click, click));
|
| + ASSERT_NO_FATAL_FAILURE(Click(ui_controls::MIDDLE,
|
| + click_location, click_location));
|
| + EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| + EXPECT_FALSE(omnibox_view->IsSelectAll());
|
| +}
|
| +
|
| +#if defined(USE_AURA)
|
| +IN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, SelectAllOnTap) {
|
| + OmniboxView* omnibox_view = NULL;
|
| + ASSERT_NO_FATAL_FAILURE(GetOmniboxViewForBrowser(browser(), &omnibox_view));
|
| + omnibox_view->SetUserText(ASCIIToUTF16("http://www.google.com/"));
|
| +
|
| + // Take the focus away from the omnibox.
|
| + ASSERT_NO_FATAL_FAILURE(TapBrowserWindowCenter());
|
| EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| EXPECT_FALSE(omnibox_view->IsSelectAll());
|
| +
|
| + // Tapping in the omnibox should take focus and select all text.
|
| + const gfx::Rect omnibox_bounds = BrowserView::GetBrowserViewForBrowser(
|
| + browser())->GetViewByID(VIEW_ID_OMNIBOX)->GetBoundsInScreen();
|
| + const gfx::Point tap_location = omnibox_bounds.CenterPoint();
|
| + ASSERT_NO_FATAL_FAILURE(Tap(tap_location, tap_location));
|
| + EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| + EXPECT_TRUE(omnibox_view->IsSelectAll());
|
| +
|
| + // Tapping in another view should clear focus and the selection.
|
| + ASSERT_NO_FATAL_FAILURE(TapBrowserWindowCenter());
|
| + EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| + EXPECT_FALSE(omnibox_view->IsSelectAll());
|
| +
|
| + // Tapping in the omnibox again should take focus and select all text again.
|
| + ASSERT_NO_FATAL_FAILURE(Tap(tap_location, tap_location));
|
| + EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| + EXPECT_TRUE(omnibox_view->IsSelectAll());
|
| +
|
| + // Tapping another omnibox spot should keep focus and selection.
|
| + omnibox_view->SelectAll(false);
|
| + const gfx::Point tap2_location = omnibox_bounds.origin() +
|
| + gfx::Vector2d(omnibox_bounds.width() / 4, omnibox_bounds.height() / 4);
|
| + ASSERT_NO_FATAL_FAILURE(Tap(tap2_location, tap2_location));
|
| + EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| + // We don't test if the all text is selected because it depends on whether or
|
| + // not there was text under the tap, which appears to be flaky.
|
| +
|
| + // Take the focus away and tap 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(TapBrowserWindowCenter());
|
| + ASSERT_NO_FATAL_FAILURE(Tap(tap_location, tap2_location));
|
| + EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX));
|
| + EXPECT_FALSE(omnibox_view->IsSelectAll());
|
| }
|
| +#endif // defined(USE_AURA)
|
|
|