omnibox_view_views_browsertest.cc revision 0de6073388f4e2780db8536178b129cd8f6ab386
1ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Copyright (c) 2013 The Chromium Authors. All rights reserved. 2ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// Use of this source code is governed by a BSD-style license that can be 3ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com// found in the LICENSE file. 4ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 5ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "chrome/browser/ui/views/omnibox/omnibox_view_views.h" 6ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com 7ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "chrome/browser/ui/browser.h" 8ec3ed6a5ebf6f2c406d7bcf94b6bc34fcaeb976eepoger@google.com#include "chrome/browser/ui/browser_commands.h" 98a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chrome/browser/ui/browser_window.h" 10d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org#include "chrome/browser/ui/omnibox/location_bar.h" 118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chrome/browser/ui/omnibox/omnibox_popup_model.h" 12c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com#include "chrome/browser/ui/view_ids.h" 138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chrome/browser/ui/views/frame/browser_view.h" 14f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com#include "chrome/browser/ui/views/location_bar/location_bar_view.h" 158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "chrome/test/base/in_process_browser_test.h" 160456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com#include "chrome/test/base/interactive_test_utils.h" 170456e0b7b85060e9b9597ce414c4c2b19aff4f58robertphillips@google.com#include "grit/generated_resources.h" 188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/aura/test/event_generator.h" 198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/aura/window.h" 208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/aura/window_tree_host.h" 218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/base/clipboard/clipboard.h" 228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/base/clipboard/scoped_clipboard_writer.h" 238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/base/test/ui_controls.h" 248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com#include "ui/events/event_processor.h" 258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 262b2ede3e713065e1bac461787b0aafb03eaf871fdjsollen@google.comclass OmniboxViewViewsTest : public InProcessBrowserTest { 278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com protected: 288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com OmniboxViewViewsTest() {} 298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static void GetOmniboxViewForBrowser(const Browser* browser, 318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com OmniboxView** omnibox_view) { 328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com BrowserWindow* window = browser->window(); 338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(window); 348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com LocationBar* location_bar = window->GetLocationBar(); 358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(location_bar); 368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com *omnibox_view = location_bar->GetOmniboxView(); 378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(*omnibox_view); 388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Move the mouse to the center of the browser window and left-click. 418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void ClickBrowserWindowCenter() { 428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(ui_test_utils::SendMouseMoveSync( 438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com BrowserView::GetBrowserViewForBrowser( 448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com browser())->GetBoundsInScreen().CenterPoint())); 458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(ui_controls::LEFT, 468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui_controls::DOWN)); 4754924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com ASSERT_TRUE( 488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui_test_utils::SendMouseEventsSync(ui_controls::LEFT, ui_controls::UP)); 498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 512b2ede3e713065e1bac461787b0aafb03eaf871fdjsollen@google.com // Press and release the mouse at the specified locations. If 528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // |release_offset| differs from |press_offset|, the mouse will be moved 538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // between the press and release. 548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void Click(ui_controls::MouseButton button, 558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const gfx::Point& press_location, 568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const gfx::Point& release_location) { 578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(press_location)); 588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(button, ui_controls::DOWN)); 598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com if (press_location != release_location) 618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(ui_test_utils::SendMouseMoveSync(release_location)); 628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(ui_test_utils::SendMouseEventsSync(button, ui_controls::UP)); 638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Tap the center of the browser window. 668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void TapBrowserWindowCenter() { 678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gfx::Point center = BrowserView::GetBrowserViewForBrowser( 688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com browser())->GetBoundsInScreen().CenterPoint(); 698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com aura::test::EventGenerator generator(browser()->window()-> 708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com GetNativeWindow()->GetRootWindow()); 718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com generator.GestureTapAt(center); 728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Touch down and release at the specified locations. 758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com void Tap(const gfx::Point& press_location, 768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const gfx::Point& release_location) { 778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui::EventProcessor* dispatcher = 788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com browser()->window()->GetNativeWindow()->GetHost()->event_processor(); 798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui::TouchEvent press(ui::ET_TOUCH_PRESSED, press_location, 818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5, base::TimeDelta::FromMilliseconds(0)); 828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui::EventDispatchDetails details = dispatcher->OnEventFromSource(&press); 838a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_FALSE(details.dispatcher_destroyed); 848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui::TouchEvent release(ui::ET_TOUCH_RELEASED, release_location, 868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 5, base::TimeDelta::FromMilliseconds(50)); 878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com details = dispatcher->OnEventFromSource(&release); 888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_FALSE(details.dispatcher_destroyed); 898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com private: 928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // InProcessBrowserTest: 938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com virtual void SetUpOnMainThread() OVERRIDE { 948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 958a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com chrome::FocusLocationBar(browser()); 968a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 978a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com DISALLOW_COPY_AND_ASSIGN(OmniboxViewViewsTest); 1008a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com}; 1018a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1028a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comIN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, PasteAndGoDoesNotLeavePopupOpen) { 1038a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com OmniboxView* view = NULL; 1048a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(GetOmniboxViewForBrowser(browser(), &view)); 1058a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com OmniboxViewViews* omnibox_view_views = static_cast<OmniboxViewViews*>(view); 1068a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1078a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Put an URL on the clipboard. 1088a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com { 1098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui::ScopedClipboardWriter clipboard_writer( 1108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui::Clipboard::GetForCurrentThread(), ui::CLIPBOARD_TYPE_COPY_PASTE); 1118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com clipboard_writer.WriteURL(base::ASCIIToUTF16("http://www.example.com/")); 1128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com } 1138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1140c00f21fee3f5cfa3aa7e5d46ff94cb8cf340451tomhudson@google.com // Paste and go. 1158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com omnibox_view_views->ExecuteCommand(IDS_PASTE_AND_GO, ui::EF_NONE); 1168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // The popup should not be open. 1187c2f27d788fff9dbf66a6d52753e47f786a313c0reed@google.com EXPECT_FALSE(view->model()->popup_model()->IsOpen()); 1198a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1208a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1218a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comIN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, SelectAllOnClick) { 1228a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com OmniboxView* omnibox_view = NULL; 1238a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(GetOmniboxViewForBrowser(browser(), &omnibox_view)); 1248a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com omnibox_view->SetUserText(base::ASCIIToUTF16("http://www.google.com/")); 1258a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1268a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Take the focus away from the omnibox. 1278a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter()); 1288a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1298a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(omnibox_view->IsSelectAll()); 1308a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1318a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Clicking in the omnibox should take focus and select all text. 1328a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const gfx::Rect omnibox_bounds = BrowserView::GetBrowserViewForBrowser( 1338a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com browser())->GetViewByID(VIEW_ID_OMNIBOX)->GetBoundsInScreen(); 1348a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const gfx::Point click_location = omnibox_bounds.CenterPoint(); 1358a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(Click(ui_controls::LEFT, 1368a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com click_location, click_location)); 1378a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1388a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(omnibox_view->IsSelectAll()); 1398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1408a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Clicking in another view should clear focus and the selection. 1418a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter()); 1428a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(omnibox_view->IsSelectAll()); 1448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Clicking in the omnibox again should take focus and select all text again. 1468a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(Click(ui_controls::LEFT, 1478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com click_location, click_location)); 1488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1498a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(omnibox_view->IsSelectAll()); 1508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1518a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Clicking another omnibox spot should keep focus but clear the selection. 1528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com omnibox_view->SelectAll(false); 1538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const gfx::Point click2_location = omnibox_bounds.origin() + 1548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gfx::Vector2d(omnibox_bounds.width() / 4, omnibox_bounds.height() / 4); 1558a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(Click(ui_controls::LEFT, 1568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com click2_location, click2_location)); 1578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1588a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(omnibox_view->IsSelectAll()); 1598a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1608a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Take the focus away and click in the omnibox again, but drag a bit before 1618a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // releasing. We should focus the omnibox but not select all of its text. 1628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter()); 1638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(Click(ui_controls::LEFT, 1648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com click_location, click2_location)); 1658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(omnibox_view->IsSelectAll()); 1678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Middle-clicking should not be handled by the omnibox. 1698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(ClickBrowserWindowCenter()); 1708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(Click(ui_controls::MIDDLE, 1718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com click_location, click_location)); 1728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1738a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(omnibox_view->IsSelectAll()); 1748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com} 1758a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1768a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comIN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, SelectAllOnTap) { 1778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com OmniboxView* omnibox_view = NULL; 1788a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(GetOmniboxViewForBrowser(browser(), &omnibox_view)); 1798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com omnibox_view->SetUserText(base::ASCIIToUTF16("http://www.google.com/")); 1808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1818a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Take the focus away from the omnibox. 1828a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(TapBrowserWindowCenter()); 1838d430185e08d2067584837a76b7193b803fee7a0tomhudson@google.com EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(omnibox_view->IsSelectAll()); 1858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Tapping in the omnibox should take focus and select all text. 1878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const gfx::Rect omnibox_bounds = BrowserView::GetBrowserViewForBrowser( 1888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com browser())->GetViewByID(VIEW_ID_OMNIBOX)->GetBoundsInScreen(); 1898a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com const gfx::Point tap_location = omnibox_bounds.CenterPoint(); 1908a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(Tap(tap_location, tap_location)); 1918a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 1928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(omnibox_view->IsSelectAll()); 1938a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1948a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Tapping in another view should clear focus and the selection. 195d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org ASSERT_NO_FATAL_FAILURE(TapBrowserWindowCenter()); 19691f319c5dc4493384f0a52aaeef3dcc311ef6ed0rileya@google.com EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 197f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com EXPECT_FALSE(omnibox_view->IsSelectAll()); 1988a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 1998a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Tapping in the omnibox again should take focus and select all text again. 200d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org ASSERT_NO_FATAL_FAILURE(Tap(tap_location, tap_location)); 201d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 202d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org EXPECT_TRUE(omnibox_view->IsSelectAll()); 203d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org 20403c1c359b336ad20d23ab07004cdafafd14c90a5rileya@google.com // Tapping another omnibox spot should keep focus and selection. 20503c1c359b336ad20d23ab07004cdafafd14c90a5rileya@google.com omnibox_view->SelectAll(false); 20603c1c359b336ad20d23ab07004cdafafd14c90a5rileya@google.com const gfx::Point tap2_location = omnibox_bounds.origin() + 20703c1c359b336ad20d23ab07004cdafafd14c90a5rileya@google.com gfx::Vector2d(omnibox_bounds.width() / 4, omnibox_bounds.height() / 4); 20803c1c359b336ad20d23ab07004cdafafd14c90a5rileya@google.com ASSERT_NO_FATAL_FAILURE(Tap(tap2_location, tap2_location)); 2098a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 2108a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // We don't test if the all text is selected because it depends on whether or 2118a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // not there was text under the tap, which appears to be flaky. 2128a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2138a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Take the focus away and tap in the omnibox again, but drag a bit before 2148a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // releasing. We should focus the omnibox but not select all of its text. 2158a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(TapBrowserWindowCenter()); 2168a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_NO_FATAL_FAILURE(Tap(tap_location, tap2_location)); 2178a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 2188a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(omnibox_view->IsSelectAll()); 219f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com} 220f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 221f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.comIN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, SelectAllOnTabToFocus) { 222f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com OmniboxView* omnibox_view = NULL; 223f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com ASSERT_NO_FATAL_FAILURE(GetOmniboxViewForBrowser(browser(), &omnibox_view)); 224f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com ui_test_utils::NavigateToURL(browser(), GURL("http://www.google.com/")); 225f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com // RevertAll after navigation to invalidate the selection range saved on blur. 226f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com omnibox_view->RevertAll(); 227f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com EXPECT_FALSE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 228f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com EXPECT_FALSE(omnibox_view->IsSelectAll()); 229f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com 2302be9e8b407624fa696854b78b407b97a01dbb703reed@google.com // Pressing tab to focus the omnibox should select all text. 231f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com while (!ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)) { 232b6e161937bc890f0aa12ac5e27415d4d260ea6e0junov@chromium.org ASSERT_TRUE(ui_test_utils::SendKeyPressSync(browser(), ui::VKEY_TAB, 233b6e161937bc890f0aa12ac5e27415d4d260ea6e0junov@chromium.org false, false, false, false)); 234b6e161937bc890f0aa12ac5e27415d4d260ea6e0junov@chromium.org } 235b6e161937bc890f0aa12ac5e27415d4d260ea6e0junov@chromium.org EXPECT_TRUE(ui_test_utils::IsViewFocused(browser(), VIEW_ID_OMNIBOX)); 236b6e161937bc890f0aa12ac5e27415d4d260ea6e0junov@chromium.org EXPECT_TRUE(omnibox_view->IsSelectAll()); 237b6e161937bc890f0aa12ac5e27415d4d260ea6e0junov@chromium.org} 238b6e161937bc890f0aa12ac5e27415d4d260ea6e0junov@chromium.org 2398a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.comIN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, CloseOmniboxPopupOnTextDrag) { 2405119bdb952025a30f115b9c6a187173956e55097reed@android.com OmniboxView* omnibox_view = NULL; 241f2b98d67dcb6fcb3120feede9c72016fc7b3ead8reed@android.com ASSERT_NO_FATAL_FAILURE(GetOmniboxViewForBrowser(browser(), &omnibox_view)); 242c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com OmniboxViewViews* omnibox_view_views = 2438a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com static_cast<OmniboxViewViews*>(omnibox_view); 2448a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2458a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Populate suggestions for the omnibox popup. 246c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com AutocompleteController* autocomplete_controller = 2478a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com omnibox_view->model()->popup_model()->autocomplete_controller(); 2488a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com AutocompleteResult& results = autocomplete_controller->result_; 24954924243c1b65b3ee6d8fa064b50a9b1bb2a19a5djsollen@google.com ACMatches matches; 2508a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com AutocompleteMatch match; 251c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com match.destination_url = GURL("http://autocomplete-result/"); 2528a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com match.allowed_to_be_default_match = true; 2538a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com match.type = AutocompleteMatchType::HISTORY_TITLE; 2548a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com match.relevance = 500; 255c73dd5c6880739f26216f198c757028fd28df1a4djsollen@google.com matches.push_back(match); 2568a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com match.destination_url = GURL("http://autocomplete-result2/"); 2578a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com matches.push_back(match); 25859ccef695cef28a74ab2ea13d5a6c9017af45402reed@google.com results.AppendMatches(matches); 25959ccef695cef28a74ab2ea13d5a6c9017af45402reed@google.com results.SortAndCull(AutocompleteInput(), browser()->profile()); 26059ccef695cef28a74ab2ea13d5a6c9017af45402reed@google.com 26159ccef695cef28a74ab2ea13d5a6c9017af45402reed@google.com // The omnibox popup should open with suggestions displayed. 2628a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com omnibox_view->model()->popup_model()->OnResultChanged(); 2638a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(omnibox_view->model()->popup_model()->IsOpen()); 2648a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2658a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // The omnibox text should be selected. 2668a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_TRUE(omnibox_view->IsSelectAll()); 2678a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2688a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // Simulate a mouse click before dragging the mouse. 2698a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com gfx::Point point(omnibox_view_views->x(), omnibox_view_views->y()); 2708a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui::MouseEvent pressed(ui::ET_MOUSE_PRESSED, point, point, 2718a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui::EF_LEFT_MOUSE_BUTTON, ui::EF_LEFT_MOUSE_BUTTON); 2728a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com omnibox_view_views->OnMousePressed(pressed); 273d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org EXPECT_TRUE(omnibox_view->model()->popup_model()->IsOpen()); 2748a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 275d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org // Simulate a mouse drag of the omnibox text, and the omnibox should close. 276d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org ui::MouseEvent dragged(ui::ET_MOUSE_DRAGGED, point, point, 2778a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ui::EF_LEFT_MOUSE_BUTTON, 0); 278d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org omnibox_view_views->OnMouseDragged(dragged); 2798a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com 2808a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com EXPECT_FALSE(omnibox_view->model()->popup_model()->IsOpen()); 281d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org} 282d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.org 283d3ae77965e94e0efda496f5461cbec4533cb5b16vandebo@chromium.orgIN_PROC_BROWSER_TEST_F(OmniboxViewViewsTest, BackgroundIsOpaque) { 2848a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // The omnibox text should be rendered on an opaque background. Otherwise, we 2858a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com // can't use subpixel rendering. 2868a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com BrowserWindowTesting* window = browser()->window()->GetBrowserWindowTesting(); 2878a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com ASSERT_TRUE(window); 2888a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com OmniboxViewViews* view = window->GetLocationBarView()->omnibox_view(); 2898f073382bb6a9b3998a74e6b58654476b77b4c86reed@android.com ASSERT_TRUE(view); 2908f073382bb6a9b3998a74e6b58654476b77b4c86reed@android.com EXPECT_FALSE(view->GetRenderText()->background_is_transparent()); 2918f073382bb6a9b3998a74e6b58654476b77b4c86reed@android.com} 2928a1c16ff38322f0210116fa7293eb8817c7e477ereed@android.com