browser_view_focus_uitest.cc revision 7dbb3d5cf0c15f500944d211057644d6a2f37371
1// Copyright 2013 The Chromium Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style license that can be 3// found in the LICENSE file. 4 5#include "chrome/browser/ui/views/frame/browser_view.h" 6 7#include "build/build_config.h" 8#include "chrome/browser/ui/browser.h" 9#include "chrome/browser/ui/browser_commands.h" 10#include "chrome/browser/ui/browser_tabstrip.h" 11#include "chrome/browser/ui/browser_window.h" 12#include "chrome/browser/ui/view_ids.h" 13#include "chrome/test/base/in_process_browser_test.h" 14#include "chrome/test/base/interactive_test_utils.h" 15#include "chrome/test/base/ui_test_utils.h" 16#include "net/test/embedded_test_server/embedded_test_server.h" 17#include "ui/views/focus/focus_manager.h" 18#include "ui/views/view.h" 19#include "url/gurl.h" 20 21const char kSimplePage[] = "/focus/page_with_focus.html"; 22 23class BrowserViewFocusTest : public InProcessBrowserTest { 24 public: 25 bool IsViewFocused(ViewID vid) { 26 return ui_test_utils::IsViewFocused(browser(), vid); 27 } 28}; 29 30// Flaky, http://crbug.com/69034. 31IN_PROC_BROWSER_TEST_F(BrowserViewFocusTest, DISABLED_BrowsersRememberFocus) { 32 ASSERT_TRUE(ui_test_utils::BringBrowserWindowToFront(browser())); 33 ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady()); 34 35 // First we navigate to our test page. 36 GURL url = embedded_test_server()->GetURL(kSimplePage); 37 ui_test_utils::NavigateToURL(browser(), url); 38 39 gfx::NativeWindow window = browser()->window()->GetNativeWindow(); 40 41 // The focus should be on the Tab contents. 42 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 43 // Now hide the window, show it again, the focus should not have changed. 44 ui_test_utils::HideNativeWindow(window); 45 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(window)); 46 ASSERT_TRUE(IsViewFocused(VIEW_ID_TAB_CONTAINER)); 47 48 chrome::FocusLocationBar(browser()); 49 ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 50 // Hide the window, show it again, the focus should not have changed. 51 ui_test_utils::HideNativeWindow(window); 52 ASSERT_TRUE(ui_test_utils::ShowAndFocusNativeWindow(window)); 53 ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 54 55 // The rest of this test does not make sense on Linux because the behavior 56 // of Activate() is not well defined and can vary by window manager. 57#if defined(OS_WIN) 58 // Open a new browser window. 59 Browser* browser2 = 60 new Browser(Browser::CreateParams(browser()->profile(), 61 browser()->host_desktop_type())); 62 ASSERT_TRUE(browser2); 63 chrome::AddBlankTabAt(browser2, -1, true); 64 browser2->window()->Show(); 65 ui_test_utils::NavigateToURL(browser2, url); 66 67 gfx::NativeWindow window2 = browser2->window()->GetNativeWindow(); 68 BrowserView* browser_view2 = BrowserView::GetBrowserViewForBrowser(browser2); 69 ASSERT_TRUE(browser_view2); 70 const views::Widget* widget2 = 71 views::Widget::GetWidgetForNativeWindow(window2); 72 ASSERT_TRUE(widget2); 73 const views::FocusManager* focus_manager2 = widget2->GetFocusManager(); 74 ASSERT_TRUE(focus_manager2); 75 EXPECT_EQ(browser_view2->GetTabContentsContainerView(), 76 focus_manager2->GetFocusedView()); 77 78 // Switch to the 1st browser window, focus should still be on the location 79 // bar and the second browser should have nothing focused. 80 browser()->window()->Activate(); 81 ASSERT_TRUE(IsViewFocused(VIEW_ID_OMNIBOX)); 82 EXPECT_EQ(NULL, focus_manager2->GetFocusedView()); 83 84 // Switch back to the second browser, focus should still be on the page. 85 browser2->window()->Activate(); 86 views::Widget* widget = views::Widget::GetWidgetForNativeWindow(window); 87 ASSERT_TRUE(widget); 88 EXPECT_EQ(NULL, widget->GetFocusManager()->GetFocusedView()); 89 EXPECT_EQ(browser_view2->GetTabContentsContainerView(), 90 focus_manager2->GetFocusedView()); 91 92 // Close the 2nd browser to avoid a DCHECK(). 93 browser_view2->Close(); 94#endif 95} 96