- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / views / frame / browser_view_focus_uitest.cc
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
21 const char kSimplePage[] = "/focus/page_with_focus.html";
22
23 class 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.
31 IN_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 }