| OLD | NEW | 
|    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  Loading... | 
|   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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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  Loading... | 
|  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 } | 
| OLD | NEW |