summaryrefslogtreecommitdiffstats
path: root/chrome/browser
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-17 22:25:17 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2009-08-17 22:25:17 +0000
commitb982188ff9d8efc4e9ed40cc00c440e7b622a6be (patch)
treee9af1636139e36edbe68f9c05c5dc3efbe97b577 /chrome/browser
parent57c4b8582403c0afe4cdae1996cf9111e824c40d (diff)
downloadchromium_src-b982188ff9d8efc4e9ed40cc00c440e7b622a6be.zip
chromium_src-b982188ff9d8efc4e9ed40cc00c440e7b622a6be.tar.gz
chromium_src-b982188ff9d8efc4e9ed40cc00c440e7b622a6be.tar.bz2
Begin to port browser focus tests to linux.
TEST=interactive ui tests builds and runs and BrowserFocusTest.TabInitialFocus passes Review URL: http://codereview.chromium.org/172059 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@23585 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser')
-rw-r--r--chrome/browser/browser_focus_uitest.cc68
1 files changed, 53 insertions, 15 deletions
diff --git a/chrome/browser/browser_focus_uitest.cc b/chrome/browser/browser_focus_uitest.cc
index 853f424..39d5e18 100644
--- a/chrome/browser/browser_focus_uitest.cc
+++ b/chrome/browser/browser_focus_uitest.cc
@@ -19,6 +19,10 @@
#include "views/view.h"
#include "views/window/window.h"
+#if defined(OS_LINUX)
+#include "chrome/browser/gtk/view_id_util.h"
+#endif
+
namespace {
// The delay waited in some cases where we don't have a notifications for an
@@ -36,6 +40,46 @@ class BrowserFocusTest : public InProcessBrowserTest {
set_show_window(true);
EnableDOMAutomation();
}
+
+ void CheckViewHasFocus(ViewID vid) {
+ BrowserWindow* browser_window = browser()->window();
+ ASSERT_TRUE(browser_window);
+ gfx::NativeWindow window = browser_window->GetNativeHandle();
+ ASSERT_TRUE(window);
+#if defined(OS_WIN)
+ 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());
+#elif defined(OS_LINUX)
+ GtkWidget* widget = ViewIDUtil::GetWidget(GTK_WIDGET(window), vid);
+ ASSERT_TRUE(widget);
+ EXPECT_TRUE(WidgetInFocusChain(GTK_WIDGET(window), widget));
+#else
+ NOTIMPLEMENTED();
+#endif
+ }
+
+ private:
+#if defined(OS_LINUX)
+ // Check if the focused widget for |root| is |target| or a child of |target|.
+ static bool WidgetInFocusChain(GtkWidget* root, GtkWidget* target) {
+ GtkWidget* iter = root;
+
+ while (iter) {
+ if (iter == target)
+ return true;
+
+ if (!GTK_IS_CONTAINER(iter))
+ return false;
+
+ iter = GTK_CONTAINER(iter)->focus_child;
+ }
+
+ return false;
+ }
+#endif
};
class TestInterstitialPage : public InterstitialPage {
@@ -94,8 +138,10 @@ class TestInterstitialPage : public InterstitialPage {
std::string dom_response_;
};
+
} // namespace
+#if defined(OS_WIN)
IN_PROC_BROWSER_TEST_F(BrowserFocusTest, BrowsersRememberFocus) {
HTTPTestServer* server = StartHTTPServer();
@@ -605,39 +651,30 @@ IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FindFocusTest) {
ASSERT_TRUE(focused_view != NULL);
EXPECT_EQ(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD, focused_view->GetID());
}
+#endif // defined(OS_WIN)
// Makes sure the focus is in the right location when opening the different
// types of tabs.
IN_PROC_BROWSER_TEST_F(BrowserFocusTest, TabInitialFocus) {
- 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);
-
// Open the history tab, focus should be on the tab contents.
browser()->ShowHistoryTab();
- EXPECT_EQ(browser_view->GetTabContentsContainerView(),
- focus_manager->GetFocusedView());
+ CheckViewHasFocus(VIEW_ID_TAB_CONTAINER);
// Open the new tab, focus should be on the location bar.
browser()->NewTab();
- EXPECT_EQ(browser_view->GetLocationBarView(),
- focus_manager->GetFocusedView());
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
// Open the download tab, focus should be on the tab contents.
browser()->ShowDownloadsTab();
- EXPECT_EQ(browser_view->GetTabContentsContainerView(),
- focus_manager->GetFocusedView());
+ CheckViewHasFocus(VIEW_ID_TAB_CONTAINER);
// Open about:blank, focus should be on the location bar.
browser()->AddTabWithURL(GURL("about:blank"), GURL(), PageTransition::LINK,
true, -1, false, NULL);
- EXPECT_EQ(browser_view->GetLocationBarView(),
- focus_manager->GetFocusedView());
+ CheckViewHasFocus(VIEW_ID_LOCATION_BAR);
}
+#if defined(OS_WIN)
// Tests that focus goes where expected when using reload.
IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusOnReload) {
HTTPTestServer* server = StartHTTPServer();
@@ -689,3 +726,4 @@ IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusOnReloadCrashedTab) {
EXPECT_EQ(browser_view->GetTabContentsContainerView(),
focus_manager->GetFocusedView());
}
+#endif // defined(OS_WIN)