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

Side by Side Diff: chrome/browser/browser_focus_uitest.cc

Issue 268035: Implements tests for testing browser's overall key events handling behavior.... (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 11 years, 2 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "build/build_config.h" 5 #include "build/build_config.h"
6 6
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/ref_counted.h" 8 #include "base/ref_counted.h"
9 #include "chrome/browser/automation/ui_controls.h" 9 #include "chrome/browser/automation/ui_controls.h"
10 #include "chrome/browser/browser.h" 10 #include "chrome/browser/browser.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 const wchar_t kTypicalPage[] = L"files/focus/typical_page.html"; 51 const wchar_t kTypicalPage[] = L"files/focus/typical_page.html";
52 const char kTypicalPageName[] = "typical_page.html"; 52 const char kTypicalPageName[] = "typical_page.html";
53 53
54 class BrowserFocusTest : public InProcessBrowserTest { 54 class BrowserFocusTest : public InProcessBrowserTest {
55 public: 55 public:
56 BrowserFocusTest() { 56 BrowserFocusTest() {
57 set_show_window(true); 57 set_show_window(true);
58 EnableDOMAutomation(); 58 EnableDOMAutomation();
59 } 59 }
60 60
61 void CheckViewHasFocus(ViewID vid) { 61 bool IsViewFocused(ViewID vid) {
62 BrowserWindow* browser_window = browser()->window(); 62 return ui_test_utils::IsViewFocused(browser(), vid);
63 ASSERT_TRUE(browser_window);
64 gfx::NativeWindow window = browser_window->GetNativeHandle();
65 ASSERT_TRUE(window);
66 #if defined(OS_WIN)
67 views::FocusManager* focus_manager =
68 views::FocusManager::GetFocusManagerForNativeView(window);
69 ASSERT_TRUE(focus_manager);
70 EXPECT_EQ(vid, focus_manager->GetFocusedView()->GetID()) <<
71 "For view id " << vid;
72 #elif defined(OS_LINUX)
73 GtkWidget* widget = ViewIDUtil::GetWidget(GTK_WIDGET(window), vid);
74 ASSERT_TRUE(widget);
75 EXPECT_TRUE(WidgetInFocusChain(GTK_WIDGET(window), widget)) <<
76 "For view id " << vid;
77 #else
78 NOTIMPLEMENTED();
79 #endif
80 } 63 }
81 64
82 void ClickOnView(ViewID vid) { 65 void ClickOnView(ViewID vid) {
83 BrowserWindow* browser_window = browser()->window(); 66 ui_test_utils::ClickOnView(browser(), vid);
84 ASSERT_TRUE(browser_window);
85 #if defined(TOOLKIT_VIEWS)
86 views::View* view =
87 reinterpret_cast<BrowserView*>(browser_window)->GetViewByID(vid);
88 #elif defined(OS_LINUX)
89 gfx::NativeWindow window = browser_window->GetNativeHandle();
90 ASSERT_TRUE(window);
91 GtkWidget* view = ViewIDUtil::GetWidget(GTK_WIDGET(window), vid);
92 #endif
93 ASSERT_TRUE(view);
94 ui_controls::MoveMouseToCenterAndPress(
95 view,
96 ui_controls::LEFT,
97 ui_controls::DOWN | ui_controls::UP,
98 new MessageLoop::QuitTask());
99 ui_test_utils::RunMessageLoop();
100 } 67 }
101 68
102 static void HideNativeWindow(gfx::NativeWindow window) { 69 static void HideNativeWindow(gfx::NativeWindow window) {
103 #if defined(OS_WIN) 70 #if defined(OS_WIN)
104 // TODO(jcampan): retrieve the WidgetWin and show/hide on it instead of 71 // TODO(jcampan): retrieve the WidgetWin and show/hide on it instead of
105 // using Windows API. 72 // using Windows API.
106 ::ShowWindow(window, SW_HIDE); 73 ::ShowWindow(window, SW_HIDE);
107 #elif defined(OS_LINUX) 74 #elif defined(OS_LINUX)
108 gtk_widget_hide(GTK_WIDGET(window)); 75 gtk_widget_hide(GTK_WIDGET(window));
109 #else 76 #else
110 NOTIMPLEMENTED(); 77 NOTIMPLEMENTED();
111 #endif 78 #endif
112 } 79 }
113 80
114 static void ShowNativeWindow(gfx::NativeWindow window) { 81 static void ShowNativeWindow(gfx::NativeWindow window) {
115 #if defined(OS_WIN) 82 #if defined(OS_WIN)
116 // TODO(jcampan): retrieve the WidgetWin and show/hide on it instead of 83 // TODO(jcampan): retrieve the WidgetWin and show/hide on it instead of
117 // using Windows API. 84 // using Windows API.
118 ::ShowWindow(window, SW_SHOW); 85 ::ShowWindow(window, SW_SHOW);
119 #elif defined(OS_LINUX) 86 #elif defined(OS_LINUX)
120 gtk_widget_hide(GTK_WIDGET(window)); 87 gtk_widget_hide(GTK_WIDGET(window));
121 #else 88 #else
122 NOTIMPLEMENTED(); 89 NOTIMPLEMENTED();
123 #endif 90 #endif
124 } 91 }
125
126 private:
127 #if defined(OS_LINUX)
128 // Check if the focused widget for |root| is |target| or a child of |target|.
129 static bool WidgetInFocusChain(GtkWidget* root, GtkWidget* target) {
130 GtkWidget* iter = root;
131
132 while (iter) {
133 if (iter == target)
134 return true;
135
136 if (!GTK_IS_CONTAINER(iter))
137 return false;
138
139 iter = GTK_CONTAINER(iter)->focus_child;
140 }
141
142 return false;
143 }
144 #endif
145 }; 92 };
146 93
147 class TestInterstitialPage : public InterstitialPage { 94 class TestInterstitialPage : public InterstitialPage {
148 public: 95 public:
149 TestInterstitialPage(TabContents* tab, bool new_navigation, const GURL& url) 96 TestInterstitialPage(TabContents* tab, bool new_navigation, const GURL& url)
150 : InterstitialPage(tab, new_navigation, url), 97 : InterstitialPage(tab, new_navigation, url),
151 waiting_for_dom_response_(false), 98 waiting_for_dom_response_(false),
152 waiting_for_focus_change_(false) { 99 waiting_for_focus_change_(false) {
153 FilePath file_path; 100 FilePath file_path;
154 bool r = PathService::Get(chrome::DIR_TEST_DATA, &file_path); 101 bool r = PathService::Get(chrome::DIR_TEST_DATA, &file_path);
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
221 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, ClickingMovesFocus) { 168 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, ClickingMovesFocus) {
222 #if defined(OS_LINUX) 169 #if defined(OS_LINUX)
223 // It seems we have to wait a little bit for the widgets to spin up before 170 // It seems we have to wait a little bit for the widgets to spin up before
224 // we can start clicking on them. 171 // we can start clicking on them.
225 MessageLoop::current()->PostDelayedTask(FROM_HERE, 172 MessageLoop::current()->PostDelayedTask(FROM_HERE,
226 new MessageLoop::QuitTask(), 173 new MessageLoop::QuitTask(),
227 kActionDelayMs); 174 kActionDelayMs);
228 ui_test_utils::RunMessageLoop(); 175 ui_test_utils::RunMessageLoop();
229 #endif 176 #endif
230 177
231 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 178 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
232 179
233 ClickOnView(VIEW_ID_TAB_CONTAINER); 180 ClickOnView(VIEW_ID_TAB_CONTAINER);
234 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 181 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
235 182
236 ClickOnView(VIEW_ID_LOCATION_BAR); 183 ClickOnView(VIEW_ID_LOCATION_BAR);
237 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 184 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
238 } 185 }
239 186
240 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, BrowsersRememberFocus) { 187 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, BrowsersRememberFocus) {
241 HTTPTestServer* server = StartHTTPServer(); 188 HTTPTestServer* server = StartHTTPServer();
242 189
243 // First we navigate to our test page. 190 // First we navigate to our test page.
244 GURL url = server->TestServerPageW(kSimplePage); 191 GURL url = server->TestServerPageW(kSimplePage);
245 ui_test_utils::NavigateToURL(browser(), url); 192 ui_test_utils::NavigateToURL(browser(), url);
246 193
247 gfx::NativeWindow window = browser()->window()->GetNativeHandle(); 194 gfx::NativeWindow window = browser()->window()->GetNativeHandle();
248 195
249 // The focus should be on the Tab contents. 196 // The focus should be on the Tab contents.
250 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 197 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
251 // Now hide the window, show it again, the focus should not have changed. 198 // Now hide the window, show it again, the focus should not have changed.
252 HideNativeWindow(window); 199 HideNativeWindow(window);
253 ShowNativeWindow(window); 200 ShowNativeWindow(window);
254 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 201 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
255 202
256 browser()->FocusLocationBar(); 203 browser()->FocusLocationBar();
257 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 204 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
258 // Hide the window, show it again, the focus should not have changed. 205 // Hide the window, show it again, the focus should not have changed.
259 HideNativeWindow(window); 206 HideNativeWindow(window);
260 ShowNativeWindow(window); 207 ShowNativeWindow(window);
261 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 208 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
262 209
263 // The rest of this test does not make sense on Linux because the behavior 210 // The rest of this test does not make sense on Linux because the behavior
264 // of Activate() is not well defined and can vary by window manager. 211 // of Activate() is not well defined and can vary by window manager.
265 #if defined(OS_WIN) 212 #if defined(OS_WIN)
266 // Open a new browser window. 213 // Open a new browser window.
267 Browser* browser2 = Browser::Create(browser()->profile()); 214 Browser* browser2 = Browser::Create(browser()->profile());
268 ASSERT_TRUE(browser2); 215 ASSERT_TRUE(browser2);
269 browser2->tabstrip_model()->delegate()->AddBlankTab(true); 216 browser2->tabstrip_model()->delegate()->AddBlankTab(true);
270 browser2->window()->Show(); 217 browser2->window()->Show();
271 ui_test_utils::NavigateToURL(browser2, url); 218 ui_test_utils::NavigateToURL(browser2, url);
272 219
273 HWND hwnd2 = reinterpret_cast<HWND>(browser2->window()->GetNativeHandle()); 220 HWND hwnd2 = reinterpret_cast<HWND>(browser2->window()->GetNativeHandle());
274 BrowserView* browser_view2 = 221 BrowserView* browser_view2 =
275 BrowserView::GetBrowserViewForNativeWindow(hwnd2); 222 BrowserView::GetBrowserViewForNativeWindow(hwnd2);
276 ASSERT_TRUE(browser_view2); 223 ASSERT_TRUE(browser_view2);
277 views::FocusManager* focus_manager2 = 224 views::FocusManager* focus_manager2 =
278 views::FocusManager::GetFocusManagerForNativeView(hwnd2); 225 views::FocusManager::GetFocusManagerForNativeView(hwnd2);
279 ASSERT_TRUE(focus_manager2); 226 ASSERT_TRUE(focus_manager2);
280 EXPECT_EQ(browser_view2->GetTabContentsContainerView(), 227 EXPECT_EQ(browser_view2->GetTabContentsContainerView(),
281 focus_manager2->GetFocusedView()); 228 focus_manager2->GetFocusedView());
282 229
283 // Switch to the 1st browser window, focus should still be on the location 230 // Switch to the 1st browser window, focus should still be on the location
284 // bar and the second browser should have nothing focused. 231 // bar and the second browser should have nothing focused.
285 browser()->window()->Activate(); 232 browser()->window()->Activate();
286 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 233 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
287 EXPECT_EQ(NULL, focus_manager2->GetFocusedView()); 234 EXPECT_EQ(NULL, focus_manager2->GetFocusedView());
288 235
289 // Switch back to the second browser, focus should still be on the page. 236 // Switch back to the second browser, focus should still be on the page.
290 browser2->window()->Activate(); 237 browser2->window()->Activate();
291 EXPECT_EQ(NULL, 238 EXPECT_EQ(NULL,
292 views::FocusManager::GetFocusManagerForNativeView( 239 views::FocusManager::GetFocusManagerForNativeView(
293 browser()->window()->GetNativeHandle())->GetFocusedView()); 240 browser()->window()->GetNativeHandle())->GetFocusedView());
294 EXPECT_EQ(browser_view2->GetTabContentsContainerView(), 241 EXPECT_EQ(browser_view2->GetTabContentsContainerView(),
295 focus_manager2->GetFocusedView()); 242 focus_manager2->GetFocusedView());
296 243
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
333 } 280 }
334 } 281 }
335 282
336 // Now come back to the tab and check the right view is focused. 283 // Now come back to the tab and check the right view is focused.
337 for (int j = 0; j < 5; j++) { 284 for (int j = 0; j < 5; j++) {
338 // Activate the tab. 285 // Activate the tab.
339 browser()->SelectTabContentsAt(j, true); 286 browser()->SelectTabContentsAt(j, true);
340 287
341 ViewID vid = kFocusPage[i][j] ? VIEW_ID_TAB_CONTAINER_FOCUS_VIEW : 288 ViewID vid = kFocusPage[i][j] ? VIEW_ID_TAB_CONTAINER_FOCUS_VIEW :
342 VIEW_ID_LOCATION_BAR; 289 VIEW_ID_LOCATION_BAR;
343 CheckViewHasFocus(vid); 290 ASSERT_TRUE(IsViewFocused(vid));
344 } 291 }
345 } 292 }
346 } 293 }
347 294
348 // Tabs remember focus with find-in-page box. 295 // Tabs remember focus with find-in-page box.
349 // TODO(jcampan): http://crbug.com/23683 Disabled because it fails on Linux. 296 // TODO(jcampan): http://crbug.com/23683 Disabled because it fails on Linux.
350 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_TabsRememberFocusFindInPage) { 297 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, DISABLED_TabsRememberFocusFindInPage) {
351 HTTPTestServer* server = StartHTTPServer(); 298 HTTPTestServer* server = StartHTTPServer();
352 299
353 // First we navigate to our test page. 300 // First we navigate to our test page.
354 GURL url = server->TestServerPageW(kSimplePage); 301 GURL url = server->TestServerPageW(kSimplePage);
355 ui_test_utils::NavigateToURL(browser(), url); 302 ui_test_utils::NavigateToURL(browser(), url);
356 303
357 browser()->Find(); 304 browser()->Find();
358 ui_test_utils::FindInPage(browser()->GetSelectedTabContents(), 305 ui_test_utils::FindInPage(browser()->GetSelectedTabContents(),
359 ASCIIToUTF16("a"), true, false, NULL); 306 ASCIIToUTF16("a"), true, false, NULL);
360 CheckViewHasFocus(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD); 307 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
361 308
362 // Focus the location bar. 309 // Focus the location bar.
363 browser()->FocusLocationBar(); 310 browser()->FocusLocationBar();
364 311
365 // Create a 2nd tab. 312 // Create a 2nd tab.
366 browser()->AddTabWithURL(url, GURL(), PageTransition::TYPED, true, -1, 313 browser()->AddTabWithURL(url, GURL(), PageTransition::TYPED, true, -1,
367 false, NULL); 314 false, NULL);
368 315
369 // Focus should be on the recently opened tab page. 316 // Focus should be on the recently opened tab page.
370 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 317 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
371 318
372 // Select 1st tab, focus should still be on the location-bar. 319 // Select 1st tab, focus should still be on the location-bar.
373 // (bug http://crbug.com/23296) 320 // (bug http://crbug.com/23296)
374 browser()->SelectTabContentsAt(0, true); 321 browser()->SelectTabContentsAt(0, true);
375 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 322 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
376 323
377 // Now open the find box again, switch to another tab and come back, the focus 324 // Now open the find box again, switch to another tab and come back, the focus
378 // should return to the find box. 325 // should return to the find box.
379 browser()->Find(); 326 browser()->Find();
380 CheckViewHasFocus(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD); 327 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
381 browser()->SelectTabContentsAt(1, true); 328 browser()->SelectTabContentsAt(1, true);
382 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 329 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
383 browser()->SelectTabContentsAt(0, true); 330 browser()->SelectTabContentsAt(0, true);
384 CheckViewHasFocus(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD); 331 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
385 } 332 }
386 333
387 // Background window does not steal focus. 334 // Background window does not steal focus.
388 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, BackgroundBrowserDontStealFocus) { 335 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, BackgroundBrowserDontStealFocus) {
389 HTTPTestServer* server = StartHTTPServer(); 336 HTTPTestServer* server = StartHTTPServer();
390 337
391 // First we navigate to our test page. 338 // First we navigate to our test page.
392 GURL url = server->TestServerPageW(kSimplePage); 339 GURL url = server->TestServerPageW(kSimplePage);
393 ui_test_utils::NavigateToURL(browser(), url); 340 ui_test_utils::NavigateToURL(browser(), url);
394 341
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
440 // Open the page that steals focus. 387 // Open the page that steals focus.
441 GURL url = server->TestServerPageW(kStealFocusPage); 388 GURL url = server->TestServerPageW(kStealFocusPage);
442 ui_test_utils::NavigateToURL(browser(), url); 389 ui_test_utils::NavigateToURL(browser(), url);
443 390
444 browser()->FocusLocationBar(); 391 browser()->FocusLocationBar();
445 392
446 // Wait for the page to steal focus. 393 // Wait for the page to steal focus.
447 PlatformThread::Sleep(2000); 394 PlatformThread::Sleep(2000);
448 395
449 // Make sure the location bar is still focused. 396 // Make sure the location bar is still focused.
450 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 397 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
451 } 398 }
452 399
453 // Focus traversal on a regular page. 400 // Focus traversal on a regular page.
454 // Note that this test relies on a notification from the renderer that the 401 // Note that this test relies on a notification from the renderer that the
455 // focus has changed in the page. The notification in the renderer may change 402 // focus has changed in the page. The notification in the renderer may change
456 // at which point this test would fail (see comment in 403 // at which point this test would fail (see comment in
457 // RenderWidget::didFocus()). 404 // RenderWidget::didFocus()).
458 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusTraversal) { 405 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusTraversal) {
459 HTTPTestServer* server = StartHTTPServer(); 406 HTTPTestServer* server = StartHTTPServer();
460 407
461 // First we navigate to our test page. 408 // First we navigate to our test page.
462 GURL url = server->TestServerPageW(kTypicalPage); 409 GURL url = server->TestServerPageW(kTypicalPage);
463 ui_test_utils::NavigateToURL(browser(), url); 410 ui_test_utils::NavigateToURL(browser(), url);
464 411
465 browser()->FocusLocationBar(); 412 browser()->FocusLocationBar();
466 413
467 const char* kExpElementIDs[] = { 414 const char* kExpElementIDs[] = {
468 "", // Initially no element in the page should be focused 415 "", // Initially no element in the page should be focused
469 // (the location bar is focused). 416 // (the location bar is focused).
470 "textEdit", "searchButton", "luckyButton", "googleLink", "gmailLink", 417 "textEdit", "searchButton", "luckyButton", "googleLink", "gmailLink",
471 "gmapLink" 418 "gmapLink"
472 }; 419 };
473 420
474 gfx::NativeWindow window = browser()->window()->GetNativeHandle(); 421 gfx::NativeWindow window = browser()->window()->GetNativeHandle();
475 422
476 // Test forward focus traversal. 423 // Test forward focus traversal.
477 for (int i = 0; i < 3; ++i) { 424 for (int i = 0; i < 3; ++i) {
478 // Location bar should be focused. 425 // Location bar should be focused.
479 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 426 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
480 427
481 // Now let's press tab to move the focus. 428 // Now let's press tab to move the focus.
482 for (size_t j = 0; j < arraysize(kExpElementIDs); ++j) { 429 for (size_t j = 0; j < arraysize(kExpElementIDs); ++j) {
483 // Let's make sure the focus is on the expected element in the page. 430 // Let's make sure the focus is on the expected element in the page.
484 std::string actual; 431 std::string actual;
485 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( 432 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString(
486 browser()->GetSelectedTabContents()->render_view_host(), 433 browser()->GetSelectedTabContents()->render_view_host(),
487 L"", 434 L"",
488 L"window.domAutomationController.send(getFocusedElement());", 435 L"window.domAutomationController.send(getFocusedElement());",
489 &actual)); 436 &actual));
(...skipping 13 matching lines...) Expand all
503 450
504 // At this point the renderer has sent us a message asking to advance the 451 // At this point the renderer has sent us a message asking to advance the
505 // focus (as the end of the focus loop was reached in the renderer). 452 // focus (as the end of the focus loop was reached in the renderer).
506 // We need to run the message loop to process it. 453 // We need to run the message loop to process it.
507 MessageLoop::current()->RunAllPending(); 454 MessageLoop::current()->RunAllPending();
508 } 455 }
509 456
510 // Now let's try reverse focus traversal. 457 // Now let's try reverse focus traversal.
511 for (int i = 0; i < 3; ++i) { 458 for (int i = 0; i < 3; ++i) {
512 // Location bar should be focused. 459 // Location bar should be focused.
513 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 460 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
514 461
515 // Now let's press shift-tab to move the focus in reverse. 462 // Now let's press shift-tab to move the focus in reverse.
516 for (size_t j = 0; j < 7; ++j) { 463 for (size_t j = 0; j < 7; ++j) {
517 ASSERT_TRUE(ui_controls::SendKeyPress(window, base::VKEY_TAB, 464 ASSERT_TRUE(ui_controls::SendKeyPress(window, base::VKEY_TAB,
518 false, true, false)); 465 false, true, false));
519 466
520 if (j < arraysize(kExpElementIDs) - 1) { 467 if (j < arraysize(kExpElementIDs) - 1) {
521 ui_test_utils::WaitForFocusChange(browser()->GetSelectedTabContents()-> 468 ui_test_utils::WaitForFocusChange(browser()->GetSelectedTabContents()->
522 render_view_host()); 469 render_view_host());
523 } else { 470 } else {
(...skipping 20 matching lines...) Expand all
544 491
545 // Focus traversal while an interstitial is showing. 492 // Focus traversal while an interstitial is showing.
546 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_FocusTraversalOnInterstitial) { 493 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_FocusTraversalOnInterstitial) {
547 HTTPTestServer* server = StartHTTPServer(); 494 HTTPTestServer* server = StartHTTPServer();
548 495
549 // First we navigate to our test page. 496 // First we navigate to our test page.
550 GURL url = server->TestServerPageW(kSimplePage); 497 GURL url = server->TestServerPageW(kSimplePage);
551 ui_test_utils::NavigateToURL(browser(), url); 498 ui_test_utils::NavigateToURL(browser(), url);
552 499
553 // Focus should be on the page. 500 // Focus should be on the page.
554 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 501 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
555 502
556 // Let's show an interstitial. 503 // Let's show an interstitial.
557 TestInterstitialPage* interstitial_page = 504 TestInterstitialPage* interstitial_page =
558 new TestInterstitialPage(browser()->GetSelectedTabContents(), 505 new TestInterstitialPage(browser()->GetSelectedTabContents(),
559 true, GURL("http://interstitial.com")); 506 true, GURL("http://interstitial.com"));
560 interstitial_page->Show(); 507 interstitial_page->Show();
561 // Give some time for the interstitial to show. 508 // Give some time for the interstitial to show.
562 MessageLoop::current()->PostDelayedTask(FROM_HERE, 509 MessageLoop::current()->PostDelayedTask(FROM_HERE,
563 new MessageLoop::QuitTask(), 510 new MessageLoop::QuitTask(),
564 1000); 511 1000);
565 ui_test_utils::RunMessageLoop(); 512 ui_test_utils::RunMessageLoop();
566 513
567 browser()->FocusLocationBar(); 514 browser()->FocusLocationBar();
568 515
569 const char* kExpElementIDs[] = { 516 const char* kExpElementIDs[] = {
570 "", // Initially no element in the page should be focused 517 "", // Initially no element in the page should be focused
571 // (the location bar is focused). 518 // (the location bar is focused).
572 "textEdit", "searchButton", "luckyButton", "googleLink", "gmailLink", 519 "textEdit", "searchButton", "luckyButton", "googleLink", "gmailLink",
573 "gmapLink" 520 "gmapLink"
574 }; 521 };
575 522
576 gfx::NativeWindow window = browser()->window()->GetNativeHandle(); 523 gfx::NativeWindow window = browser()->window()->GetNativeHandle();
577 524
578 // Test forward focus traversal. 525 // Test forward focus traversal.
579 for (int i = 0; i < 2; ++i) { 526 for (int i = 0; i < 2; ++i) {
580 // Location bar should be focused. 527 // Location bar should be focused.
581 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 528 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
582 529
583 // Now let's press tab to move the focus. 530 // Now let's press tab to move the focus.
584 for (size_t j = 0; j < 7; ++j) { 531 for (size_t j = 0; j < 7; ++j) {
585 // Let's make sure the focus is on the expected element in the page. 532 // Let's make sure the focus is on the expected element in the page.
586 std::string actual = interstitial_page->GetFocusedElement(); 533 std::string actual = interstitial_page->GetFocusedElement();
587 ASSERT_STREQ(kExpElementIDs[j], actual.c_str()); 534 ASSERT_STREQ(kExpElementIDs[j], actual.c_str());
588 535
589 ASSERT_TRUE(ui_controls::SendKeyPress(window, base::VKEY_TAB, 536 ASSERT_TRUE(ui_controls::SendKeyPress(window, base::VKEY_TAB,
590 false, false, false)); 537 false, false, false));
591 538
592 if (j < arraysize(kExpElementIDs) - 1) { 539 if (j < arraysize(kExpElementIDs) - 1) {
593 interstitial_page->WaitForFocusChange(); 540 interstitial_page->WaitForFocusChange();
594 } else { 541 } else {
595 // On the last tab key press, the focus returns to the browser. 542 // On the last tab key press, the focus returns to the browser.
596 ui_test_utils::WaitForFocusInBrowser(browser()); 543 ui_test_utils::WaitForFocusInBrowser(browser());
597 } 544 }
598 } 545 }
599 546
600 // At this point the renderer has sent us a message asking to advance the 547 // At this point the renderer has sent us a message asking to advance the
601 // focus (as the end of the focus loop was reached in the renderer). 548 // focus (as the end of the focus loop was reached in the renderer).
602 // We need to run the message loop to process it. 549 // We need to run the message loop to process it.
603 MessageLoop::current()->RunAllPending(); 550 MessageLoop::current()->RunAllPending();
604 } 551 }
605 552
606 // Now let's try reverse focus traversal. 553 // Now let's try reverse focus traversal.
607 for (int i = 0; i < 2; ++i) { 554 for (int i = 0; i < 2; ++i) {
608 // Location bar should be focused. 555 // Location bar should be focused.
609 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 556 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
610 557
611 // Now let's press shift-tab to move the focus in reverse. 558 // Now let's press shift-tab to move the focus in reverse.
612 for (size_t j = 0; j < 7; ++j) { 559 for (size_t j = 0; j < 7; ++j) {
613 ASSERT_TRUE(ui_controls::SendKeyPress(window, base::VKEY_TAB, 560 ASSERT_TRUE(ui_controls::SendKeyPress(window, base::VKEY_TAB,
614 false, true, false)); 561 false, true, false));
615 562
616 if (j < arraysize(kExpElementIDs) - 1) { 563 if (j < arraysize(kExpElementIDs) - 1) {
617 interstitial_page->WaitForFocusChange(); 564 interstitial_page->WaitForFocusChange();
618 } else { 565 } else {
619 // On the last tab key press, the focus returns to the browser. 566 // On the last tab key press, the focus returns to the browser.
(...skipping 14 matching lines...) Expand all
634 581
635 // Focus stays on page with interstitials. 582 // Focus stays on page with interstitials.
636 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, InterstitialFocus) { 583 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, InterstitialFocus) {
637 HTTPTestServer* server = StartHTTPServer(); 584 HTTPTestServer* server = StartHTTPServer();
638 585
639 // First we navigate to our test page. 586 // First we navigate to our test page.
640 GURL url = server->TestServerPageW(kSimplePage); 587 GURL url = server->TestServerPageW(kSimplePage);
641 ui_test_utils::NavigateToURL(browser(), url); 588 ui_test_utils::NavigateToURL(browser(), url);
642 589
643 // Page should have focus. 590 // Page should have focus.
644 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 591 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
645 EXPECT_TRUE(browser()->GetSelectedTabContents()->render_view_host()->view()-> 592 EXPECT_TRUE(browser()->GetSelectedTabContents()->render_view_host()->view()->
646 HasFocus()); 593 HasFocus());
647 594
648 // Let's show an interstitial. 595 // Let's show an interstitial.
649 TestInterstitialPage* interstitial_page = 596 TestInterstitialPage* interstitial_page =
650 new TestInterstitialPage(browser()->GetSelectedTabContents(), 597 new TestInterstitialPage(browser()->GetSelectedTabContents(),
651 true, GURL("http://interstitial.com")); 598 true, GURL("http://interstitial.com"));
652 interstitial_page->Show(); 599 interstitial_page->Show();
653 // Give some time for the interstitial to show. 600 // Give some time for the interstitial to show.
654 MessageLoop::current()->PostDelayedTask(FROM_HERE, 601 MessageLoop::current()->PostDelayedTask(FROM_HERE,
655 new MessageLoop::QuitTask(), 602 new MessageLoop::QuitTask(),
656 1000); 603 1000);
657 ui_test_utils::RunMessageLoop(); 604 ui_test_utils::RunMessageLoop();
658 605
659 // The interstitial should have focus now. 606 // The interstitial should have focus now.
660 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 607 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
661 EXPECT_TRUE(interstitial_page->HasFocus()); 608 EXPECT_TRUE(interstitial_page->HasFocus());
662 609
663 // Hide the interstitial. 610 // Hide the interstitial.
664 interstitial_page->DontProceed(); 611 interstitial_page->DontProceed();
665 612
666 // Focus should be back on the original page. 613 // Focus should be back on the original page.
667 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 614 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
668 } 615 }
669 616
670 // Make sure Find box can request focus, even when it is already open. 617 // Make sure Find box can request focus, even when it is already open.
671 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FindFocusTest) { 618 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FindFocusTest) {
672 HTTPTestServer* server = StartHTTPServer(); 619 HTTPTestServer* server = StartHTTPServer();
673 620
674 // Open some page (any page that doesn't steal focus). 621 // Open some page (any page that doesn't steal focus).
675 GURL url = server->TestServerPageW(kTypicalPage); 622 GURL url = server->TestServerPageW(kTypicalPage);
676 ui_test_utils::NavigateToURL(browser(), url); 623 ui_test_utils::NavigateToURL(browser(), url);
677 624
678 gfx::NativeWindow window = browser()->window()->GetNativeHandle(); 625 gfx::NativeWindow window = browser()->window()->GetNativeHandle();
679 626
680 // Press Ctrl+F, which will make the Find box open and request focus. 627 // Press Ctrl+F, which will make the Find box open and request focus.
681 ui_controls::SendKeyPressNotifyWhenDone(window, base::VKEY_F, true, 628 ui_controls::SendKeyPressNotifyWhenDone(window, base::VKEY_F, true,
682 false, false, 629 false, false,
683 new MessageLoop::QuitTask()); 630 new MessageLoop::QuitTask());
684 ui_test_utils::RunMessageLoop(); 631 ui_test_utils::RunMessageLoop();
685 632
686 // Ideally, we wouldn't sleep here and instead would intercept the 633 // Ideally, we wouldn't sleep here and instead would intercept the
687 // RenderViewHostDelegate::HandleKeyboardEvent() callback. To do that, we 634 // RenderViewHostDelegate::HandleKeyboardEvent() callback. To do that, we
688 // could create a RenderViewHostDelegate wrapper and hook-it up by either: 635 // could create a RenderViewHostDelegate wrapper and hook-it up by either:
689 // - creating a factory used to create the delegate 636 // - creating a factory used to create the delegate
690 // - making the test a private and overwriting the delegate member directly. 637 // - making the test a private and overwriting the delegate member directly.
691 MessageLoop::current()->PostDelayedTask( 638 MessageLoop::current()->PostDelayedTask(
692 FROM_HERE, new MessageLoop::QuitTask(), kActionDelayMs); 639 FROM_HERE, new MessageLoop::QuitTask(), kActionDelayMs);
693 ui_test_utils::RunMessageLoop(); 640 ui_test_utils::RunMessageLoop();
694 641
695 CheckViewHasFocus(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD); 642 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
696 643
697 browser()->FocusLocationBar(); 644 browser()->FocusLocationBar();
698 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 645 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
699 646
700 // Now press Ctrl+F again and focus should move to the Find box. 647 // Now press Ctrl+F again and focus should move to the Find box.
701 ui_controls::SendKeyPressNotifyWhenDone(window, base::VKEY_F, true, 648 ui_controls::SendKeyPressNotifyWhenDone(window, base::VKEY_F, true,
702 false, false, 649 false, false,
703 new MessageLoop::QuitTask()); 650 new MessageLoop::QuitTask());
704 ui_test_utils::RunMessageLoop(); 651 ui_test_utils::RunMessageLoop();
705 CheckViewHasFocus(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD); 652 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
706 653
707 // Set focus to the page. 654 // Set focus to the page.
708 ClickOnView(VIEW_ID_TAB_CONTAINER); 655 ClickOnView(VIEW_ID_TAB_CONTAINER);
709 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 656 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
710 657
711 // Now press Ctrl+F again and focus should move to the Find box. 658 // Now press Ctrl+F again and focus should move to the Find box.
712 ui_controls::SendKeyPressNotifyWhenDone(window, base::VKEY_F, true, false, 659 ui_controls::SendKeyPressNotifyWhenDone(window, base::VKEY_F, true, false,
713 false, new MessageLoop::QuitTask()); 660 false, new MessageLoop::QuitTask());
714 ui_test_utils::RunMessageLoop(); 661 ui_test_utils::RunMessageLoop();
715 662
716 // See remark above on why we wait. 663 // See remark above on why we wait.
717 MessageLoop::current()->PostDelayedTask( 664 MessageLoop::current()->PostDelayedTask(
718 FROM_HERE, new MessageLoop::QuitTask(), kActionDelayMs); 665 FROM_HERE, new MessageLoop::QuitTask(), kActionDelayMs);
719 ui_test_utils::RunMessageLoop(); 666 ui_test_utils::RunMessageLoop();
720 CheckViewHasFocus(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD); 667 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD));
721 } 668 }
722 669
723 // Makes sure the focus is in the right location when opening the different 670 // Makes sure the focus is in the right location when opening the different
724 // types of tabs. 671 // types of tabs.
725 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, TabInitialFocus) { 672 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, TabInitialFocus) {
726 // Open the history tab, focus should be on the tab contents. 673 // Open the history tab, focus should be on the tab contents.
727 browser()->ShowHistoryTab(); 674 browser()->ShowHistoryTab();
728 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 675 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
729 676
730 // Open the new tab, focus should be on the location bar. 677 // Open the new tab, focus should be on the location bar.
731 browser()->NewTab(); 678 browser()->NewTab();
732 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 679 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
733 680
734 // Open the download tab, focus should be on the tab contents. 681 // Open the download tab, focus should be on the tab contents.
735 browser()->ShowDownloadsTab(); 682 browser()->ShowDownloadsTab();
736 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 683 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
737 684
738 // Open about:blank, focus should be on the location bar. 685 // Open about:blank, focus should be on the location bar.
739 browser()->AddTabWithURL(GURL("about:blank"), GURL(), PageTransition::LINK, 686 browser()->AddTabWithURL(GURL("about:blank"), GURL(), PageTransition::LINK,
740 true, -1, false, NULL); 687 true, -1, false, NULL);
741 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 688 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
742 } 689 }
743 690
744 // Tests that focus goes where expected when using reload. 691 // Tests that focus goes where expected when using reload.
745 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusOnReload) { 692 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusOnReload) {
746 HTTPTestServer* server = StartHTTPServer(); 693 HTTPTestServer* server = StartHTTPServer();
747 694
748 // Open the new tab, reload. 695 // Open the new tab, reload.
749 browser()->NewTab(); 696 browser()->NewTab();
750 browser()->Reload(); 697 browser()->Reload();
751 ASSERT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(browser())); 698 ASSERT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(browser()));
752 // Focus should stay on the location bar. 699 // Focus should stay on the location bar.
753 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 700 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
754 701
755 // Open a regular page, focus the location bar, reload. 702 // Open a regular page, focus the location bar, reload.
756 ui_test_utils::NavigateToURL(browser(), server->TestServerPageW(kSimplePage)); 703 ui_test_utils::NavigateToURL(browser(), server->TestServerPageW(kSimplePage));
757 browser()->FocusLocationBar(); 704 browser()->FocusLocationBar();
758 CheckViewHasFocus(VIEW_ID_LOCATION_BAR); 705 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR));
759 browser()->Reload(); 706 browser()->Reload();
760 ASSERT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(browser())); 707 ASSERT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(browser()));
761 // Focus should now be on the tab contents. 708 // Focus should now be on the tab contents.
762 browser()->ShowDownloadsTab(); 709 browser()->ShowDownloadsTab();
763 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 710 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
764 } 711 }
765 712
766 // Tests that focus goes where expected when using reload on a crashed tab. 713 // Tests that focus goes where expected when using reload on a crashed tab.
767 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusOnReloadCrashedTab) { 714 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusOnReloadCrashedTab) {
768 HTTPTestServer* server = StartHTTPServer(); 715 HTTPTestServer* server = StartHTTPServer();
769 716
770 // Open a regular page, crash, reload. 717 // Open a regular page, crash, reload.
771 ui_test_utils::NavigateToURL(browser(), server->TestServerPageW(kSimplePage)); 718 ui_test_utils::NavigateToURL(browser(), server->TestServerPageW(kSimplePage));
772 ui_test_utils::CrashTab(browser()->GetSelectedTabContents()); 719 ui_test_utils::CrashTab(browser()->GetSelectedTabContents());
773 browser()->Reload(); 720 browser()->Reload();
774 ASSERT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(browser())); 721 ASSERT_TRUE(ui_test_utils::WaitForNavigationInCurrentTab(browser()));
775 // Focus should now be on the tab contents. 722 // Focus should now be on the tab contents.
776 browser()->ShowDownloadsTab(); 723 browser()->ShowDownloadsTab();
777 CheckViewHasFocus(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW); 724 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW));
778 } 725 }
OLDNEW
« no previous file with comments | « chrome/browser/automation/ui_controls_linux.cc ('k') | chrome/browser/browser_keyevents_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698