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

Unified Diff: chrome/browser/browser_focus_uitest.cc

Issue 173030: Port more browser focus tests to linux.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: working on windows Created 11 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: chrome/browser/browser_focus_uitest.cc
===================================================================
--- chrome/browser/browser_focus_uitest.cc (revision 23643)
+++ chrome/browser/browser_focus_uitest.cc (working copy)
@@ -9,6 +9,8 @@
#include "chrome/browser/browser.h"
#include "chrome/browser/renderer_host/render_widget_host_view.h"
#include "chrome/browser/tab_contents/interstitial_page.h"
+#include "chrome/browser/tab_contents/tab_contents.h"
+#include "chrome/browser/tab_contents/tab_contents_view.h"
#include "chrome/browser/view_ids.h"
#include "chrome/browser/views/frame/browser_view.h"
#include "chrome/browser/views/location_bar_view.h"
@@ -51,8 +53,8 @@
views::FocusManager* focus_manager =
views::FocusManager::GetFocusManagerForNativeView(window);
ASSERT_TRUE(focus_manager);
- EXPECT_EQ(reinterpret_cast<views::View*>(browser_window)->GetViewByID(vid),
- focus_manager->GetFocusedView());
+ EXPECT_EQ(reinterpret_cast<BrowserView*>(browser_window)->GetViewByID(vid),
+ focus_manager->GetFocusedView()) << "For view id " << vid;
#elif defined(OS_LINUX)
GtkWidget* widget = ViewIDUtil::GetWidget(GTK_WIDGET(window), vid);
ASSERT_TRUE(widget);
@@ -62,6 +64,30 @@
#endif
}
+ static void HideNativeWindow(gfx::NativeWindow window) {
+#if defined(OS_WIN)
+ // TODO(jcampan): retrieve the WidgetWin and show/hide on it instead of
+ // using Windows API.
+ ::ShowWindow(window, SW_HIDE);
+#elif defined(OS_LINUX)
+ gtk_widget_hide(GTK_WIDGET(window));
+#else
+ NOTIMPLEMENTED();
+#endif
+ }
+
+ static void ShowNativeWindow(gfx::NativeWindow window) {
+#if defined(OS_WIN)
+ // TODO(jcampan): retrieve the WidgetWin and show/hide on it instead of
+ // using Windows API.
+ ::ShowWindow(window, SW_SHOW);
+#elif defined(OS_LINUX)
+ gtk_widget_hide(GTK_WIDGET(window));
+#else
+ NOTIMPLEMENTED();
+#endif
+ }
+
private:
#if defined(OS_LINUX)
// Check if the focused widget for |root| is |target| or a child of |target|.
@@ -142,7 +168,32 @@
} // namespace
+// TODO(estade): port.
#if defined(OS_WIN)
+IN_PROC_BROWSER_TEST_F(BrowserFocusTest, ClickingMovesFocus) {
+ browser()->AddTabWithURL(GURL("about:blank"), GURL(), PageTransition::LINK,
+ true, -1, false, NULL);
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
+
+ BrowserView* browser_view = static_cast<BrowserView*>(browser()->window());
+ ui_controls::MoveMouseToCenterAndPress(
+ browser_view->GetTabContentsContainerView(),
+ ui_controls::LEFT,
+ ui_controls::DOWN | ui_controls::UP,
+ new MessageLoop::QuitTask());
+ ui_test_utils::RunMessageLoop();
+ CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW);
+
+ ui_controls::MoveMouseToCenterAndPress(
+ browser_view->GetLocationBarView(),
+ ui_controls::LEFT,
+ ui_controls::DOWN | ui_controls::UP,
+ new MessageLoop::QuitTask());
+ ui_test_utils::RunMessageLoop();
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
+}
+#endif
+
IN_PROC_BROWSER_TEST_F(BrowserFocusTest, BrowsersRememberFocus) {
HTTPTestServer* server = StartHTTPServer();
@@ -150,40 +201,25 @@
GURL url = server->TestServerPageW(kSimplePage);
ui_test_utils::NavigateToURL(browser(), url);
+ gfx::NativeWindow window = browser()->window()->GetNativeHandle();
+
// The focus should be on the Tab contents.
- HWND hwnd = reinterpret_cast<HWND>(browser()->window()->GetNativeHandle());
- BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow(hwnd);
- ASSERT_TRUE(browser_view);
- views::FocusManager* focus_manager =
- views::FocusManager::GetFocusManagerForNativeView(hwnd);
- ASSERT_TRUE(focus_manager);
-
- EXPECT_EQ(browser_view->GetTabContentsContainerView(),
- focus_manager->GetFocusedView());
-
+ CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW);
// Now hide the window, show it again, the focus should not have changed.
- // TODO(jcampan): retrieve the WidgetWin and show/hide on it instead of
- // using Windows API.
- ::ShowWindow(hwnd, SW_HIDE);
- ::ShowWindow(hwnd, SW_SHOW);
- EXPECT_EQ(browser_view->GetTabContentsContainerView(),
- focus_manager->GetFocusedView());
+ HideNativeWindow(window);
+ ShowNativeWindow(window);
+ CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW);
- // Click on the location bar.
- LocationBarView* location_bar = browser_view->GetLocationBarView();
- ui_controls::MoveMouseToCenterAndPress(location_bar,
- ui_controls::LEFT,
- ui_controls::DOWN | ui_controls::UP,
- new MessageLoop::QuitTask());
- ui_test_utils::RunMessageLoop();
- // Location bar should have focus.
- EXPECT_EQ(location_bar, focus_manager->GetFocusedView());
-
+ browser()->FocusLocationBar();
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
// Hide the window, show it again, the focus should not have changed.
- ::ShowWindow(hwnd, SW_HIDE);
- ::ShowWindow(hwnd, SW_SHOW);
- EXPECT_EQ(location_bar, focus_manager->GetFocusedView());
+ HideNativeWindow(window);
+ ShowNativeWindow(window);
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
+ // The rest of this test does not make sense on Linux because the behavior
+ // of Activate() is not well defined and can vary by window manager.
+#if defined(OS_WIN)
// Open a new browser window.
Browser* browser2 = Browser::Create(browser()->profile());
ASSERT_TRUE(browser2);
@@ -204,17 +240,20 @@
// Switch to the 1st browser window, focus should still be on the location
// bar and the second browser should have nothing focused.
browser()->window()->Activate();
- EXPECT_EQ(location_bar, focus_manager->GetFocusedView());
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
EXPECT_EQ(NULL, focus_manager2->GetFocusedView());
// Switch back to the second browser, focus should still be on the page.
browser2->window()->Activate();
- EXPECT_EQ(NULL, focus_manager->GetFocusedView());
+ EXPECT_EQ(NULL,
+ views::FocusManager::GetFocusManagerForNativeView(
+ browser()->window()->GetNativeHandle())->GetFocusedView());
EXPECT_EQ(browser_view2->GetTabContentsContainerView(),
focus_manager2->GetFocusedView());
// Close the 2nd browser to avoid a DCHECK().
browser_view2->Close();
+#endif
}
// Tabs remember focus.
@@ -225,14 +264,6 @@
GURL url = server->TestServerPageW(kSimplePage);
ui_test_utils::NavigateToURL(browser(), url);
- HWND hwnd = reinterpret_cast<HWND>(browser()->window()->GetNativeHandle());
- BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow(hwnd);
- ASSERT_TRUE(browser_view);
-
- views::FocusManager* focus_manager =
- views::FocusManager::GetFocusManagerForNativeView(hwnd);
- ASSERT_TRUE(focus_manager);
-
// Create several tabs.
for (int i = 0; i < 4; ++i) {
browser()->AddTabWithURL(url, GURL(), PageTransition::TYPED, true, -1,
@@ -252,19 +283,11 @@
browser()->SelectTabContentsAt(j, true);
// Activate the location bar or the page.
- views::View* view_to_focus;
if (kFocusPage[i][j]) {
- view_to_focus = browser_view->GetTabContentsContainerView();
+ browser()->GetTabContentsAt(j)->view()->Focus();
} else {
- view_to_focus = browser_view->GetLocationBarView();
+ browser()->FocusLocationBar();
}
-
- ui_controls::MoveMouseToCenterAndPress(view_to_focus,
- ui_controls::LEFT,
- ui_controls::DOWN |
- ui_controls::UP,
- new MessageLoop::QuitTask());
- ui_test_utils::RunMessageLoop();
}
// Now come back to the tab and check the right view is focused.
@@ -272,14 +295,9 @@
// Activate the tab.
browser()->SelectTabContentsAt(j, true);
- // Activate the location bar or the page.
- views::View* view;
- if (kFocusPage[i][j]) {
- view = browser_view->GetTabContentsContainerView();
- } else {
- view = browser_view->GetLocationBarView();
- }
- EXPECT_EQ(view, focus_manager->GetFocusedView());
+ ViewID vid = kFocusPage[i][j] ? VIEW_ID_TAB_CONTAINER_FOCUS_VIEW :
+ VIEW_ID_LOCATION_BAR;
+ CheckViewHasFocus(vid);
}
}
}
@@ -297,26 +315,40 @@
ASSERT_TRUE(browser2);
browser2->tabstrip_model()->delegate()->AddBlankTab(true);
browser2->window()->Show();
+
+ Browser* focused_browser;
+ Browser* unfocused_browser;
+#if defined(OS_LINUX)
+ // On Linux, calling Activate() is not guaranteed to move focus, so we have
+ // to figure out which browser does have focus.
+ if (browser2->window()->IsActive()) {
+ focused_browser = browser2;
+ unfocused_browser = browser();
+ } else if (browser()->window()->IsActive()) {
+ focused_browser = browser();
+ unfocused_browser = browser2;
+ } else {
+ ASSERT_TRUE(false);
+ }
+#elif defined(OS_WIN)
+ focused_browser = browser();
+ unfocused_browser = browser2;
+#endif
+
GURL steal_focus_url = server->TestServerPageW(kStealFocusPage);
- ui_test_utils::NavigateToURL(browser2, steal_focus_url);
+ ui_test_utils::NavigateToURL(unfocused_browser, steal_focus_url);
// Activate the first browser.
- browser()->window()->Activate();
+ focused_browser->window()->Activate();
// Wait for the focus to be stolen by the other browser.
- ::Sleep(2000);
+ PlatformThread::Sleep(2000);
// Make sure the first browser is still active.
- HWND hwnd = reinterpret_cast<HWND>(browser()->window()->GetNativeHandle());
- BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow(hwnd);
- ASSERT_TRUE(browser_view);
- EXPECT_TRUE(browser_view->frame()->GetWindow()->IsActive());
+ EXPECT_TRUE(focused_browser->window()->IsActive());
// Close the 2nd browser to avoid a DCHECK().
- HWND hwnd2 = reinterpret_cast<HWND>(browser2->window()->GetNativeHandle());
- BrowserView* browser_view2 =
- BrowserView::GetBrowserViewForNativeWindow(hwnd2);
- browser_view2->Close();
+ browser2->window()->Close();
}
// Page cannot steal focus when focus is on location bar.
@@ -327,24 +359,13 @@
GURL url = server->TestServerPageW(kStealFocusPage);
ui_test_utils::NavigateToURL(browser(), url);
- HWND hwnd = reinterpret_cast<HWND>(browser()->window()->GetNativeHandle());
- BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow(hwnd);
- views::FocusManager* focus_manager =
- views::FocusManager::GetFocusManagerForNativeView(hwnd);
+ browser()->FocusLocationBar();
- // Click on the location bar.
- LocationBarView* location_bar = browser_view->GetLocationBarView();
- ui_controls::MoveMouseToCenterAndPress(location_bar,
- ui_controls::LEFT,
- ui_controls::DOWN | ui_controls::UP,
- new MessageLoop::QuitTask());
- ui_test_utils::RunMessageLoop();
-
// Wait for the page to steal focus.
- ::Sleep(2000);
+ PlatformThread::Sleep(2000);
// Make sure the location bar is still focused.
- EXPECT_EQ(location_bar, focus_manager->GetFocusedView());
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
}
// Focus traversal on a regular page.
@@ -355,19 +376,8 @@
GURL url = server->TestServerPageW(kTypicalPage);
ui_test_utils::NavigateToURL(browser(), url);
- HWND hwnd = reinterpret_cast<HWND>(browser()->window()->GetNativeHandle());
- BrowserView* browser_view = BrowserView::GetBrowserViewForNativeWindow(hwnd);
- views::FocusManager* focus_manager =
- views::FocusManager::GetFocusManagerForNativeView(hwnd);
+ browser()->FocusLocationBar();
- // Click on the location bar.
- LocationBarView* location_bar = browser_view->GetLocationBarView();
- ui_controls::MoveMouseToCenterAndPress(location_bar,
- ui_controls::LEFT,
- ui_controls::DOWN | ui_controls::UP,
- new MessageLoop::QuitTask());
- ui_test_utils::RunMessageLoop();
-
const char* kExpElementIDs[] = {
"", // Initially no element in the page should be focused
// (the location bar is focused).
@@ -375,10 +385,12 @@
"gmapLink"
};
+ gfx::NativeWindow window = browser()->window()->GetNativeHandle();
+
// Test forward focus traversal.
for (int i = 0; i < 3; ++i) {
// Location bar should be focused.
- EXPECT_EQ(location_bar, focus_manager->GetFocusedView());
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
// Now let's press tab to move the focus.
for (int j = 0; j < 7; ++j) {
@@ -391,14 +403,14 @@
&actual));
ASSERT_STREQ(kExpElementIDs[j], actual.c_str());
- ui_controls::SendKeyPressNotifyWhenDone(NULL, base::VKEY_TAB, false,
+ ui_controls::SendKeyPressNotifyWhenDone(window, base::VKEY_TAB, false,
false, false,
new MessageLoop::QuitTask());
ui_test_utils::RunMessageLoop();
// Ideally, we wouldn't sleep here and instead would use the event
// processed ack notification from the renderer. I am reluctant to create
// a new notification/callback for that purpose just for this test.
- ::Sleep(kActionDelayMs);
+ PlatformThread::Sleep(kActionDelayMs);
}
// At this point the renderer has sent us a message asking to advance the
@@ -411,15 +423,15 @@
// Now let's try reverse focus traversal.
for (int i = 0; i < 3; ++i) {
// Location bar should be focused.
- EXPECT_EQ(location_bar, focus_manager->GetFocusedView());
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
// Now let's press shift-tab to move the focus in reverse.
for (int j = 0; j < 7; ++j) {
- ui_controls::SendKeyPressNotifyWhenDone(NULL, base::VKEY_TAB, false,
+ ui_controls::SendKeyPressNotifyWhenDone(window, base::VKEY_TAB, false,
true, false,
new MessageLoop::QuitTask());
ui_test_utils::RunMessageLoop();
- ::Sleep(kActionDelayMs);
+ PlatformThread::Sleep(kActionDelayMs);
// Let's make sure the focus is on the expected element in the page.
std::string actual;
@@ -439,6 +451,7 @@
}
}
+#if defined(OS_WIN)
// Focus traversal while an interstitial is showing.
IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusTraversalOnInterstitial) {
HTTPTestServer* server = StartHTTPServer();
@@ -662,10 +675,10 @@
// Makes sure the focus is in the right location when opening the different
// types of tabs.
// TODO(estade): undisable this.
-IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_TabInitialFocus) {
+IN_PROC_BROWSER_TEST_F(BrowserFocusTest, TabInitialFocus) {
// Open the history tab, focus should be on the tab contents.
browser()->ShowHistoryTab();
- CheckViewHasFocus(VIEW_ID_TAB_CONTAINER);
+ CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW);
// Open the new tab, focus should be on the location bar.
browser()->NewTab();
@@ -673,7 +686,7 @@
// Open the download tab, focus should be on the tab contents.
browser()->ShowDownloadsTab();
- CheckViewHasFocus(VIEW_ID_TAB_CONTAINER);
+ CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW);
// Open about:blank, focus should be on the location bar.
browser()->AddTabWithURL(GURL("about:blank"), GURL(), PageTransition::LINK,

Powered by Google App Engine
This is Rietveld 408576698