OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/file_util.h" | 7 #include "base/file_util.h" |
8 #include "base/format_macros.h" | 8 #include "base/format_macros.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
(...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
120 << "Caption: " << caption.c_str(); | 120 << "Caption: " << caption.c_str(); |
121 return chrome_window_in_foreground; | 121 return chrome_window_in_foreground; |
122 #else | 122 #else |
123 // Windows only at the moment. | 123 // Windows only at the moment. |
124 return true; | 124 return true; |
125 #endif | 125 #endif |
126 } | 126 } |
127 | 127 |
128 class BrowserFocusTest : public InProcessBrowserTest { | 128 class BrowserFocusTest : public InProcessBrowserTest { |
129 public: | 129 public: |
130 BrowserFocusTest() { | 130 BrowserFocusTest() : |
| 131 #if defined(USE_AURA) |
| 132 location_bar_focus_view_id_(VIEW_ID_OMNIBOX) |
| 133 #else |
| 134 location_bar_focus_view_id_(VIEW_ID_LOCATION_BAR) |
| 135 #endif |
| 136 { |
131 set_show_window(true); | 137 set_show_window(true); |
132 EnableDOMAutomation(); | 138 EnableDOMAutomation(); |
133 } | 139 } |
134 | 140 |
135 bool IsViewFocused(ViewID vid) { | 141 bool IsViewFocused(ViewID vid) { |
136 return ui_test_utils::IsViewFocused(browser(), vid); | 142 return ui_test_utils::IsViewFocused(browser(), vid); |
137 } | 143 } |
138 | 144 |
139 void ClickOnView(ViewID vid) { | 145 void ClickOnView(ViewID vid) { |
140 ui_test_utils::ClickOnView(browser(), vid); | 146 ui_test_utils::ClickOnView(browser(), vid); |
141 } | 147 } |
| 148 |
| 149 ViewID location_bar_focus_view_id_; |
142 }; | 150 }; |
143 | 151 |
144 class TestInterstitialPage : public InterstitialPage { | 152 class TestInterstitialPage : public InterstitialPage { |
145 public: | 153 public: |
146 TestInterstitialPage(TabContents* tab, bool new_navigation, const GURL& url) | 154 TestInterstitialPage(TabContents* tab, bool new_navigation, const GURL& url) |
147 : InterstitialPage(tab, new_navigation, url) { | 155 : InterstitialPage(tab, new_navigation, url) { |
148 FilePath file_path; | 156 FilePath file_path; |
149 bool r = PathService::Get(chrome::DIR_TEST_DATA, &file_path); | 157 bool r = PathService::Get(chrome::DIR_TEST_DATA, &file_path); |
150 EXPECT_TRUE(r); | 158 EXPECT_TRUE(r); |
151 file_path = file_path.AppendASCII("focus"); | 159 file_path = file_path.AppendASCII("focus"); |
(...skipping 28 matching lines...) Expand all Loading... |
180 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 188 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
181 #if defined(OS_POSIX) | 189 #if defined(OS_POSIX) |
182 // It seems we have to wait a little bit for the widgets to spin up before | 190 // It seems we have to wait a little bit for the widgets to spin up before |
183 // we can start clicking on them. | 191 // we can start clicking on them. |
184 MessageLoop::current()->PostDelayedTask(FROM_HERE, | 192 MessageLoop::current()->PostDelayedTask(FROM_HERE, |
185 new MessageLoop::QuitTask(), | 193 new MessageLoop::QuitTask(), |
186 kActionDelayMs); | 194 kActionDelayMs); |
187 ui_test_utils::RunMessageLoop(); | 195 ui_test_utils::RunMessageLoop(); |
188 #endif // defined(OS_POSIX) | 196 #endif // defined(OS_POSIX) |
189 | 197 |
190 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 198 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
191 | 199 |
192 ClickOnView(VIEW_ID_TAB_CONTAINER); | 200 ClickOnView(VIEW_ID_TAB_CONTAINER); |
193 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 201 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
194 | 202 |
195 ClickOnView(VIEW_ID_LOCATION_BAR); | 203 ClickOnView(VIEW_ID_LOCATION_BAR); |
196 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 204 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
197 } | 205 } |
198 | 206 |
199 // Flaky, http://crbug.com/69034. | 207 // Flaky, http://crbug.com/69034. |
200 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FLAKY_BrowsersRememberFocus) { | 208 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FLAKY_BrowsersRememberFocus) { |
201 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 209 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
202 ASSERT_TRUE(test_server()->Start()); | 210 ASSERT_TRUE(test_server()->Start()); |
203 | 211 |
204 // First we navigate to our test page. | 212 // First we navigate to our test page. |
205 GURL url = test_server()->GetURL(kSimplePage); | 213 GURL url = test_server()->GetURL(kSimplePage); |
206 ui_test_utils::NavigateToURL(browser(), url); | 214 ui_test_utils::NavigateToURL(browser(), url); |
207 | 215 |
208 gfx::NativeWindow window = browser()->window()->GetNativeHandle(); | 216 gfx::NativeWindow window = browser()->window()->GetNativeHandle(); |
209 | 217 |
210 // The focus should be on the Tab contents. | 218 // The focus should be on the Tab contents. |
211 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 219 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
212 // Now hide the window, show it again, the focus should not have changed. | 220 // Now hide the window, show it again, the focus should not have changed. |
213 ui_test_utils::HideNativeWindow(window); | 221 ui_test_utils::HideNativeWindow(window); |
214 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(window)); | 222 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(window)); |
215 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 223 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
216 | 224 |
217 browser()->FocusLocationBar(); | 225 browser()->FocusLocationBar(); |
218 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 226 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
219 // Hide the window, show it again, the focus should not have changed. | 227 // Hide the window, show it again, the focus should not have changed. |
220 ui_test_utils::HideNativeWindow(window); | 228 ui_test_utils::HideNativeWindow(window); |
221 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(window)); | 229 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(window)); |
222 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 230 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
223 | 231 |
224 // The rest of this test does not make sense on Linux because the behavior | 232 // The rest of this test does not make sense on Linux because the behavior |
225 // of Activate() is not well defined and can vary by window manager. | 233 // of Activate() is not well defined and can vary by window manager. |
226 #if defined(OS_WIN) | 234 #if defined(OS_WIN) |
227 // Open a new browser window. | 235 // Open a new browser window. |
228 Browser* browser2 = Browser::Create(browser()->profile()); | 236 Browser* browser2 = Browser::Create(browser()->profile()); |
229 ASSERT_TRUE(browser2); | 237 ASSERT_TRUE(browser2); |
230 browser2->tabstrip_model()->delegate()->AddBlankTab(true); | 238 browser2->tabstrip_model()->delegate()->AddBlankTab(true); |
231 browser2->window()->Show(); | 239 browser2->window()->Show(); |
232 ui_test_utils::NavigateToURL(browser2, url); | 240 ui_test_utils::NavigateToURL(browser2, url); |
233 | 241 |
234 gfx::NativeWindow window2 = browser2->window()->GetNativeHandle(); | 242 gfx::NativeWindow window2 = browser2->window()->GetNativeHandle(); |
235 BrowserView* browser_view2 = | 243 BrowserView* browser_view2 = |
236 BrowserView::GetBrowserViewForBrowser(browser2); | 244 BrowserView::GetBrowserViewForBrowser(browser2); |
237 ASSERT_TRUE(browser_view2); | 245 ASSERT_TRUE(browser_view2); |
238 const views::Widget* widget2 = | 246 const views::Widget* widget2 = |
239 views::Widget::GetWidgetForNativeWindow(window2); | 247 views::Widget::GetWidgetForNativeWindow(window2); |
240 ASSERT_TRUE(widget2); | 248 ASSERT_TRUE(widget2); |
241 const views::FocusManager* focus_manager2 = widget2->GetFocusManager(); | 249 const views::FocusManager* focus_manager2 = widget2->GetFocusManager(); |
242 ASSERT_TRUE(focus_manager2); | 250 ASSERT_TRUE(focus_manager2); |
243 EXPECT_EQ(browser_view2->GetTabContentsContainerView(), | 251 EXPECT_EQ(browser_view2->GetTabContentsContainerView(), |
244 focus_manager2->GetFocusedView()); | 252 focus_manager2->GetFocusedView()); |
245 | 253 |
246 // Switch to the 1st browser window, focus should still be on the location | 254 // Switch to the 1st browser window, focus should still be on the location |
247 // bar and the second browser should have nothing focused. | 255 // bar and the second browser should have nothing focused. |
248 browser()->window()->Activate(); | 256 browser()->window()->Activate(); |
249 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 257 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
250 EXPECT_EQ(NULL, focus_manager2->GetFocusedView()); | 258 EXPECT_EQ(NULL, focus_manager2->GetFocusedView()); |
251 | 259 |
252 // Switch back to the second browser, focus should still be on the page. | 260 // Switch back to the second browser, focus should still be on the page. |
253 browser2->window()->Activate(); | 261 browser2->window()->Activate(); |
254 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); | 262 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); |
255 ASSERT_TRUE(widget); | 263 ASSERT_TRUE(widget); |
256 EXPECT_EQ(NULL, widget->GetFocusManager()->GetFocusedView()); | 264 EXPECT_EQ(NULL, widget->GetFocusManager()->GetFocusedView()); |
257 EXPECT_EQ(browser_view2->GetTabContentsContainerView(), | 265 EXPECT_EQ(browser_view2->GetTabContentsContainerView(), |
258 focus_manager2->GetFocusedView()); | 266 focus_manager2->GetFocusedView()); |
259 | 267 |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
295 browser()->FocusLocationBar(); | 303 browser()->FocusLocationBar(); |
296 } | 304 } |
297 } | 305 } |
298 | 306 |
299 // Now come back to the tab and check the right view is focused. | 307 // Now come back to the tab and check the right view is focused. |
300 for (int j = 0; j < 5; j++) { | 308 for (int j = 0; j < 5; j++) { |
301 // Activate the tab. | 309 // Activate the tab. |
302 browser()->ActivateTabAt(j, true); | 310 browser()->ActivateTabAt(j, true); |
303 | 311 |
304 ViewID vid = kFocusPage[i][j] ? VIEW_ID_TAB_CONTAINER_FOCUS_VIEW : | 312 ViewID vid = kFocusPage[i][j] ? VIEW_ID_TAB_CONTAINER_FOCUS_VIEW : |
305 VIEW_ID_LOCATION_BAR; | 313 location_bar_focus_view_id_; |
306 ASSERT_TRUE(IsViewFocused(vid)); | 314 ASSERT_TRUE(IsViewFocused(vid)); |
307 } | 315 } |
308 | 316 |
309 browser()->ActivateTabAt(0, true); | 317 browser()->ActivateTabAt(0, true); |
310 // Try the above, but with ctrl+tab. Since tab normally changes focus, | 318 // Try the above, but with ctrl+tab. Since tab normally changes focus, |
311 // this has regressed in the past. Loop through several times to be sure. | 319 // this has regressed in the past. Loop through several times to be sure. |
312 for (int j = 0; j < 15; j++) { | 320 for (int j = 0; j < 15; j++) { |
313 ViewID vid = kFocusPage[i][j % 5] ? VIEW_ID_TAB_CONTAINER_FOCUS_VIEW : | 321 ViewID vid = kFocusPage[i][j % 5] ? VIEW_ID_TAB_CONTAINER_FOCUS_VIEW : |
314 VIEW_ID_LOCATION_BAR; | 322 location_bar_focus_view_id_; |
315 ASSERT_TRUE(IsViewFocused(vid)); | 323 ASSERT_TRUE(IsViewFocused(vid)); |
316 | 324 |
317 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 325 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
318 browser(), ui::VKEY_TAB, true, false, false, false)); | 326 browser(), ui::VKEY_TAB, true, false, false, false)); |
319 } | 327 } |
320 | 328 |
321 // As above, but with ctrl+shift+tab. | 329 // As above, but with ctrl+shift+tab. |
322 browser()->ActivateTabAt(4, true); | 330 browser()->ActivateTabAt(4, true); |
323 for (int j = 14; j >= 0; --j) { | 331 for (int j = 14; j >= 0; --j) { |
324 ViewID vid = kFocusPage[i][j % 5] ? VIEW_ID_TAB_CONTAINER_FOCUS_VIEW : | 332 ViewID vid = kFocusPage[i][j % 5] ? VIEW_ID_TAB_CONTAINER_FOCUS_VIEW : |
325 VIEW_ID_LOCATION_BAR; | 333 location_bar_focus_view_id_; |
326 ASSERT_TRUE(IsViewFocused(vid)); | 334 ASSERT_TRUE(IsViewFocused(vid)); |
327 | 335 |
328 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 336 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
329 browser(), ui::VKEY_TAB, true, true, false, false)); | 337 browser(), ui::VKEY_TAB, true, true, false, false)); |
330 } | 338 } |
331 } | 339 } |
332 } | 340 } |
333 | 341 |
334 // Tabs remember focus with find-in-page box. | 342 // Tabs remember focus with find-in-page box. |
335 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_TabsRememberFocusFindInPage) { | 343 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_TabsRememberFocusFindInPage) { |
(...skipping 14 matching lines...) Expand all Loading... |
350 | 358 |
351 // Create a 2nd tab. | 359 // Create a 2nd tab. |
352 browser()->AddSelectedTabWithURL(url, content::PAGE_TRANSITION_TYPED); | 360 browser()->AddSelectedTabWithURL(url, content::PAGE_TRANSITION_TYPED); |
353 | 361 |
354 // Focus should be on the recently opened tab page. | 362 // Focus should be on the recently opened tab page. |
355 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 363 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
356 | 364 |
357 // Select 1st tab, focus should still be on the location-bar. | 365 // Select 1st tab, focus should still be on the location-bar. |
358 // (bug http://crbug.com/23296) | 366 // (bug http://crbug.com/23296) |
359 browser()->ActivateTabAt(0, true); | 367 browser()->ActivateTabAt(0, true); |
360 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 368 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
361 | 369 |
362 // Now open the find box again, switch to another tab and come back, the focus | 370 // Now open the find box again, switch to another tab and come back, the focus |
363 // should return to the find box. | 371 // should return to the find box. |
364 browser()->Find(); | 372 browser()->Find(); |
365 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | 373 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); |
366 browser()->ActivateTabAt(1, true); | 374 browser()->ActivateTabAt(1, true); |
367 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 375 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
368 browser()->ActivateTabAt(0, true); | 376 browser()->ActivateTabAt(0, true); |
369 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | 377 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); |
370 } | 378 } |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
428 GURL url = test_server()->GetURL(kStealFocusPage); | 436 GURL url = test_server()->GetURL(kStealFocusPage); |
429 ui_test_utils::NavigateToURL(browser(), url); | 437 ui_test_utils::NavigateToURL(browser(), url); |
430 | 438 |
431 browser()->FocusLocationBar(); | 439 browser()->FocusLocationBar(); |
432 | 440 |
433 ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( | 441 ASSERT_TRUE(ui_test_utils::ExecuteJavaScript( |
434 browser()->GetSelectedTabContents()->render_view_host(), L"", | 442 browser()->GetSelectedTabContents()->render_view_host(), L"", |
435 L"stealFocus();")); | 443 L"stealFocus();")); |
436 | 444 |
437 // Make sure the location bar is still focused. | 445 // Make sure the location bar is still focused. |
438 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 446 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
439 } | 447 } |
440 | 448 |
441 // Focus traversal on a regular page. | 449 // Focus traversal on a regular page. |
442 // Note that this test relies on a notification from the renderer that the | 450 // Note that this test relies on a notification from the renderer that the |
443 // focus has changed in the page. The notification in the renderer may change | 451 // focus has changed in the page. The notification in the renderer may change |
444 // at which point this test would fail (see comment in | 452 // at which point this test would fail (see comment in |
445 // RenderWidget::didFocus()). | 453 // RenderWidget::didFocus()). |
446 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_FocusTraversal) { | 454 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, MAYBE_FocusTraversal) { |
447 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 455 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
448 ASSERT_TRUE(test_server()->Start()); | 456 ASSERT_TRUE(test_server()->Start()); |
449 | 457 |
450 // First we navigate to our test page. | 458 // First we navigate to our test page. |
451 GURL url = test_server()->GetURL(kTypicalPage); | 459 GURL url = test_server()->GetURL(kTypicalPage); |
452 ui_test_utils::NavigateToURL(browser(), url); | 460 ui_test_utils::NavigateToURL(browser(), url); |
453 | 461 |
454 browser()->FocusLocationBar(); | 462 browser()->FocusLocationBar(); |
455 | 463 |
456 const char* kTextElementID = "textEdit"; | 464 const char* kTextElementID = "textEdit"; |
457 const char* kExpElementIDs[] = { | 465 const char* kExpElementIDs[] = { |
458 "", // Initially no element in the page should be focused | 466 "", // Initially no element in the page should be focused |
459 // (the location bar is focused). | 467 // (the location bar is focused). |
460 kTextElementID, "searchButton", "luckyButton", "googleLink", "gmailLink", | 468 kTextElementID, "searchButton", "luckyButton", "googleLink", "gmailLink", |
461 "gmapLink" | 469 "gmapLink" |
462 }; | 470 }; |
463 | 471 |
464 // Test forward focus traversal. | 472 // Test forward focus traversal. |
465 for (int i = 0; i < 3; ++i) { | 473 for (int i = 0; i < 3; ++i) { |
466 SCOPED_TRACE(base::StringPrintf("outer loop: %d", i)); | 474 SCOPED_TRACE(base::StringPrintf("outer loop: %d", i)); |
467 // Location bar should be focused. | 475 // Location bar should be focused. |
468 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 476 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
469 | 477 |
470 // Move the caret to the end, otherwise the next Tab key may not move focus. | 478 // Move the caret to the end, otherwise the next Tab key may not move focus. |
471 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 479 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
472 browser(), ui::VKEY_END, false, false, false, false)); | 480 browser(), ui::VKEY_END, false, false, false, false)); |
473 | 481 |
474 // Now let's press tab to move the focus. | 482 // Now let's press tab to move the focus. |
475 for (size_t j = 0; j < arraysize(kExpElementIDs); ++j) { | 483 for (size_t j = 0; j < arraysize(kExpElementIDs); ++j) { |
476 SCOPED_TRACE(base::StringPrintf("inner loop %" PRIuS, j)); | 484 SCOPED_TRACE(base::StringPrintf("inner loop %" PRIuS, j)); |
477 // Let's make sure the focus is on the expected element in the page. | 485 // Let's make sure the focus is on the expected element in the page. |
478 std::string actual; | 486 std::string actual; |
(...skipping 29 matching lines...) Expand all Loading... |
508 // At this point the renderer has sent us a message asking to advance the | 516 // At this point the renderer has sent us a message asking to advance the |
509 // focus (as the end of the focus loop was reached in the renderer). | 517 // focus (as the end of the focus loop was reached in the renderer). |
510 // We need to run the message loop to process it. | 518 // We need to run the message loop to process it. |
511 ui_test_utils::RunAllPendingInMessageLoop(); | 519 ui_test_utils::RunAllPendingInMessageLoop(); |
512 } | 520 } |
513 | 521 |
514 // Now let's try reverse focus traversal. | 522 // Now let's try reverse focus traversal. |
515 for (int i = 0; i < 3; ++i) { | 523 for (int i = 0; i < 3; ++i) { |
516 SCOPED_TRACE(base::StringPrintf("outer loop: %d", i)); | 524 SCOPED_TRACE(base::StringPrintf("outer loop: %d", i)); |
517 // Location bar should be focused. | 525 // Location bar should be focused. |
518 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 526 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
519 | 527 |
520 // Move the caret to the end, otherwise the next Tab key may not move focus. | 528 // Move the caret to the end, otherwise the next Tab key may not move focus. |
521 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 529 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
522 browser(), ui::VKEY_END, false, false, false, false)); | 530 browser(), ui::VKEY_END, false, false, false, false)); |
523 | 531 |
524 // Now let's press shift-tab to move the focus in reverse. | 532 // Now let's press shift-tab to move the focus in reverse. |
525 for (size_t j = 0; j < arraysize(kExpElementIDs); ++j) { | 533 for (size_t j = 0; j < arraysize(kExpElementIDs); ++j) { |
526 SCOPED_TRACE(base::StringPrintf("inner loop: %" PRIuS, j)); | 534 SCOPED_TRACE(base::StringPrintf("inner loop: %" PRIuS, j)); |
527 const char* next_element = | 535 const char* next_element = |
528 kExpElementIDs[arraysize(kExpElementIDs) - 1 - j]; | 536 kExpElementIDs[arraysize(kExpElementIDs) - 1 - j]; |
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
592 const char* kExpElementIDs[] = { | 600 const char* kExpElementIDs[] = { |
593 "", // Initially no element in the page should be focused | 601 "", // Initially no element in the page should be focused |
594 // (the location bar is focused). | 602 // (the location bar is focused). |
595 "textEdit", "searchButton", "luckyButton", "googleLink", "gmailLink", | 603 "textEdit", "searchButton", "luckyButton", "googleLink", "gmailLink", |
596 "gmapLink" | 604 "gmapLink" |
597 }; | 605 }; |
598 | 606 |
599 // Test forward focus traversal. | 607 // Test forward focus traversal. |
600 for (int i = 0; i < 2; ++i) { | 608 for (int i = 0; i < 2; ++i) { |
601 // Location bar should be focused. | 609 // Location bar should be focused. |
602 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 610 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
603 | 611 |
604 // Move the caret to the end, otherwise the next Tab key may not move focus. | 612 // Move the caret to the end, otherwise the next Tab key may not move focus. |
605 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 613 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
606 browser(), ui::VKEY_END, false, false, false, false)); | 614 browser(), ui::VKEY_END, false, false, false, false)); |
607 | 615 |
608 // Now let's press tab to move the focus. | 616 // Now let's press tab to move the focus. |
609 for (size_t j = 0; j < 7; ++j) { | 617 for (size_t j = 0; j < 7; ++j) { |
610 // Let's make sure the focus is on the expected element in the page. | 618 // Let's make sure the focus is on the expected element in the page. |
611 std::string actual; | 619 std::string actual; |
612 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( | 620 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractString( |
(...skipping 22 matching lines...) Expand all Loading... |
635 | 643 |
636 // At this point the renderer has sent us a message asking to advance the | 644 // At this point the renderer has sent us a message asking to advance the |
637 // focus (as the end of the focus loop was reached in the renderer). | 645 // focus (as the end of the focus loop was reached in the renderer). |
638 // We need to run the message loop to process it. | 646 // We need to run the message loop to process it. |
639 ui_test_utils::RunAllPendingInMessageLoop(); | 647 ui_test_utils::RunAllPendingInMessageLoop(); |
640 } | 648 } |
641 | 649 |
642 // Now let's try reverse focus traversal. | 650 // Now let's try reverse focus traversal. |
643 for (int i = 0; i < 2; ++i) { | 651 for (int i = 0; i < 2; ++i) { |
644 // Location bar should be focused. | 652 // Location bar should be focused. |
645 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 653 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
646 | 654 |
647 // Move the caret to the end, otherwise the next Tab key may not move focus. | 655 // Move the caret to the end, otherwise the next Tab key may not move focus. |
648 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 656 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
649 browser(), ui::VKEY_END, false, false, false, false)); | 657 browser(), ui::VKEY_END, false, false, false, false)); |
650 | 658 |
651 // Now let's press shift-tab to move the focus in reverse. | 659 // Now let's press shift-tab to move the focus in reverse. |
652 for (size_t j = 0; j < 7; ++j) { | 660 for (size_t j = 0; j < 7; ++j) { |
653 int notification_type; | 661 int notification_type; |
654 content::NotificationSource notification_source = | 662 content::NotificationSource notification_source = |
655 content::NotificationService::AllSources(); | 663 content::NotificationService::AllSources(); |
(...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
756 // could create a RenderViewHostDelegate wrapper and hook-it up by either: | 764 // could create a RenderViewHostDelegate wrapper and hook-it up by either: |
757 // - creating a factory used to create the delegate | 765 // - creating a factory used to create the delegate |
758 // - making the test a private and overwriting the delegate member directly. | 766 // - making the test a private and overwriting the delegate member directly. |
759 MessageLoop::current()->PostDelayedTask( | 767 MessageLoop::current()->PostDelayedTask( |
760 FROM_HERE, new MessageLoop::QuitTask(), kActionDelayMs); | 768 FROM_HERE, new MessageLoop::QuitTask(), kActionDelayMs); |
761 ui_test_utils::RunMessageLoop(); | 769 ui_test_utils::RunMessageLoop(); |
762 | 770 |
763 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | 771 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); |
764 | 772 |
765 browser()->FocusLocationBar(); | 773 browser()->FocusLocationBar(); |
766 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 774 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
767 | 775 |
768 // Now press Ctrl+F again and focus should move to the Find box. | 776 // Now press Ctrl+F again and focus should move to the Find box. |
769 #if defined(OS_MACOSX) | 777 #if defined(OS_MACOSX) |
770 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 778 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
771 browser(), ui::VKEY_F, false, false, false, true)); | 779 browser(), ui::VKEY_F, false, false, false, true)); |
772 #else | 780 #else |
773 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( | 781 ASSERT_TRUE(ui_test_utils::SendKeyPressSync( |
774 browser(), ui::VKEY_F, true, false, false, false)); | 782 browser(), ui::VKEY_F, true, false, false, false)); |
775 #endif | 783 #endif |
776 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); | 784 ASSERT_TRUE(IsViewFocused(VIEW_ID_FIND_IN_PAGE_TEXT_FIELD)); |
(...skipping 27 matching lines...) Expand all Loading... |
804 // Open the history tab, focus should be on the tab contents. | 812 // Open the history tab, focus should be on the tab contents. |
805 browser()->ShowHistoryTab(); | 813 browser()->ShowHistoryTab(); |
806 ASSERT_NO_FATAL_FAILURE(ui_test_utils::WaitForLoadStop( | 814 ASSERT_NO_FATAL_FAILURE(ui_test_utils::WaitForLoadStop( |
807 browser()->GetSelectedTabContents())); | 815 browser()->GetSelectedTabContents())); |
808 EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 816 EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
809 | 817 |
810 // Open the new tab, focus should be on the location bar. | 818 // Open the new tab, focus should be on the location bar. |
811 browser()->NewTab(); | 819 browser()->NewTab(); |
812 ASSERT_NO_FATAL_FAILURE(ui_test_utils::WaitForLoadStop( | 820 ASSERT_NO_FATAL_FAILURE(ui_test_utils::WaitForLoadStop( |
813 browser()->GetSelectedTabContents())); | 821 browser()->GetSelectedTabContents())); |
814 EXPECT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 822 EXPECT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
815 | 823 |
816 // Open the download tab, focus should be on the tab contents. | 824 // Open the download tab, focus should be on the tab contents. |
817 browser()->ShowDownloadsTab(); | 825 browser()->ShowDownloadsTab(); |
818 ASSERT_NO_FATAL_FAILURE(ui_test_utils::WaitForLoadStop( | 826 ASSERT_NO_FATAL_FAILURE(ui_test_utils::WaitForLoadStop( |
819 browser()->GetSelectedTabContents())); | 827 browser()->GetSelectedTabContents())); |
820 EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 828 EXPECT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
821 | 829 |
822 // Open about:blank, focus should be on the location bar. | 830 // Open about:blank, focus should be on the location bar. |
823 browser()->AddSelectedTabWithURL(GURL(chrome::kAboutBlankURL), | 831 browser()->AddSelectedTabWithURL(GURL(chrome::kAboutBlankURL), |
824 content::PAGE_TRANSITION_LINK); | 832 content::PAGE_TRANSITION_LINK); |
825 ASSERT_NO_FATAL_FAILURE(ui_test_utils::WaitForLoadStop( | 833 ASSERT_NO_FATAL_FAILURE(ui_test_utils::WaitForLoadStop( |
826 browser()->GetSelectedTabContents())); | 834 browser()->GetSelectedTabContents())); |
827 EXPECT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 835 EXPECT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
828 } | 836 } |
829 | 837 |
830 // Tests that focus goes where expected when using reload. | 838 // Tests that focus goes where expected when using reload. |
831 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusOnReload) { | 839 IN_PROC_BROWSER_TEST_F(BrowserFocusTest, FocusOnReload) { |
832 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); | 840 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); |
833 ASSERT_TRUE(test_server()->Start()); | 841 ASSERT_TRUE(test_server()->Start()); |
834 | 842 |
835 // Open the new tab, reload. | 843 // Open the new tab, reload. |
836 { | 844 { |
837 ui_test_utils::WindowedNotificationObserver observer( | 845 ui_test_utils::WindowedNotificationObserver observer( |
838 content::NOTIFICATION_LOAD_STOP, | 846 content::NOTIFICATION_LOAD_STOP, |
839 content::NotificationService::AllSources()); | 847 content::NotificationService::AllSources()); |
840 browser()->NewTab(); | 848 browser()->NewTab(); |
841 observer.Wait(); | 849 observer.Wait(); |
842 } | 850 } |
843 ui_test_utils::RunAllPendingInMessageLoop(); | 851 ui_test_utils::RunAllPendingInMessageLoop(); |
844 | 852 |
845 { | 853 { |
846 ui_test_utils::WindowedNotificationObserver observer( | 854 ui_test_utils::WindowedNotificationObserver observer( |
847 content::NOTIFICATION_LOAD_STOP, | 855 content::NOTIFICATION_LOAD_STOP, |
848 content::Source<NavigationController>( | 856 content::Source<NavigationController>( |
849 &browser()->GetSelectedTabContentsWrapper()->controller())); | 857 &browser()->GetSelectedTabContentsWrapper()->controller())); |
850 browser()->Reload(CURRENT_TAB); | 858 browser()->Reload(CURRENT_TAB); |
851 observer.Wait(); | 859 observer.Wait(); |
852 } | 860 } |
853 // Focus should stay on the location bar. | 861 // Focus should stay on the location bar. |
854 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 862 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
855 | 863 |
856 // Open a regular page, focus the location bar, reload. | 864 // Open a regular page, focus the location bar, reload. |
857 ui_test_utils::NavigateToURL(browser(), test_server()->GetURL(kSimplePage)); | 865 ui_test_utils::NavigateToURL(browser(), test_server()->GetURL(kSimplePage)); |
858 browser()->FocusLocationBar(); | 866 browser()->FocusLocationBar(); |
859 ASSERT_TRUE(IsViewFocused(VIEW_ID_LOCATION_BAR)); | 867 ASSERT_TRUE(IsViewFocused(location_bar_focus_view_id_)); |
860 { | 868 { |
861 ui_test_utils::WindowedNotificationObserver observer( | 869 ui_test_utils::WindowedNotificationObserver observer( |
862 content::NOTIFICATION_LOAD_STOP, | 870 content::NOTIFICATION_LOAD_STOP, |
863 content::Source<NavigationController>( | 871 content::Source<NavigationController>( |
864 &browser()->GetSelectedTabContentsWrapper()->controller())); | 872 &browser()->GetSelectedTabContentsWrapper()->controller())); |
865 browser()->Reload(CURRENT_TAB); | 873 browser()->Reload(CURRENT_TAB); |
866 observer.Wait(); | 874 observer.Wait(); |
867 } | 875 } |
868 | 876 |
869 // Focus should now be on the tab contents. | 877 // Focus should now be on the tab contents. |
(...skipping 17 matching lines...) Expand all Loading... |
887 browser()->Reload(CURRENT_TAB); | 895 browser()->Reload(CURRENT_TAB); |
888 observer.Wait(); | 896 observer.Wait(); |
889 } | 897 } |
890 | 898 |
891 // Focus should now be on the tab contents. | 899 // Focus should now be on the tab contents. |
892 browser()->ShowDownloadsTab(); | 900 browser()->ShowDownloadsTab(); |
893 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); | 901 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER_FOCUS_VIEW)); |
894 } | 902 } |
895 | 903 |
896 } // namespace | 904 } // namespace |
OLD | NEW |