OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 "ash/display/display_controller.h" | 5 #include "ash/display/display_controller.h" |
6 #include "ash/display/display_manager.h" | 6 #include "ash/display/display_manager.h" |
7 #include "ash/screen_ash.h" | 7 #include "ash/screen_ash.h" |
8 #include "ash/shell.h" | 8 #include "ash/shell.h" |
9 #include "ash/shell_window_ids.h" | 9 #include "ash/shell_window_ids.h" |
10 #include "ash/system/tray/system_tray.h" | 10 #include "ash/system/tray/system_tray.h" |
11 #include "ash/test/ash_test_base.h" | 11 #include "ash/test/ash_test_base.h" |
12 #include "ash/wm/coordinate_conversion.h" | 12 #include "ash/wm/coordinate_conversion.h" |
13 #include "ash/wm/property_util.h" | 13 #include "ash/wm/property_util.h" |
14 #include "ash/wm/window_cycle_controller.h" | 14 #include "ash/wm/window_cycle_controller.h" |
15 #include "ash/wm/window_properties.h" | 15 #include "ash/wm/window_properties.h" |
16 #include "ash/wm/window_util.h" | 16 #include "ash/wm/window_util.h" |
17 #include "base/string_util.h" | 17 #include "base/string_util.h" |
18 #include "ui/aura/client/activation_client.h" | 18 #include "ui/aura/client/activation_client.h" |
19 #include "ui/aura/client/capture_client.h" | 19 #include "ui/aura/client/capture_client.h" |
20 #include "ui/aura/focus_manager.h" | 20 #include "ui/aura/client/focus_client.h" |
21 #include "ui/aura/root_window.h" | 21 #include "ui/aura/root_window.h" |
22 #include "ui/aura/test/event_generator.h" | 22 #include "ui/aura/test/event_generator.h" |
23 #include "ui/aura/test/test_windows.h" | 23 #include "ui/aura/test/test_windows.h" |
24 #include "ui/aura/window.h" | 24 #include "ui/aura/window.h" |
25 #include "ui/base/cursor/cursor.h" | 25 #include "ui/base/cursor/cursor.h" |
26 #include "ui/base/events/event_handler.h" | 26 #include "ui/base/events/event_handler.h" |
27 #include "ui/gfx/display.h" | 27 #include "ui/gfx/display.h" |
28 #include "ui/gfx/screen.h" | 28 #include "ui/gfx/screen.h" |
29 #include "ui/views/controls/textfield/textfield.h" | 29 #include "ui/views/controls/textfield/textfield.h" |
30 #include "ui/views/widget/widget.h" | 30 #include "ui/views/widget/widget.h" |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 UpdateDisplay("1000x600,600x400"); | 112 UpdateDisplay("1000x600,600x400"); |
113 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 113 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
114 | 114 |
115 // All root windows must have the root window controller. | 115 // All root windows must have the root window controller. |
116 ASSERT_EQ(2U, root_windows.size()); | 116 ASSERT_EQ(2U, root_windows.size()); |
117 for (Shell::RootWindowList::const_iterator iter = root_windows.begin(); | 117 for (Shell::RootWindowList::const_iterator iter = root_windows.begin(); |
118 iter != root_windows.end(); ++iter) { | 118 iter != root_windows.end(); ++iter) { |
119 EXPECT_TRUE(GetRootWindowController(*iter) != NULL); | 119 EXPECT_TRUE(GetRootWindowController(*iter) != NULL); |
120 } | 120 } |
121 // Make sure root windows share the same controllers. | 121 // Make sure root windows share the same controllers. |
122 EXPECT_EQ(root_windows[0]->GetFocusManager(), | 122 EXPECT_EQ(aura::client::GetFocusClient(root_windows[0]), |
123 root_windows[1]->GetFocusManager()); | 123 aura::client::GetFocusClient(root_windows[1])); |
124 EXPECT_EQ(aura::client::GetActivationClient(root_windows[0]), | 124 EXPECT_EQ(aura::client::GetActivationClient(root_windows[0]), |
125 aura::client::GetActivationClient(root_windows[1])); | 125 aura::client::GetActivationClient(root_windows[1])); |
126 EXPECT_EQ(aura::client::GetCaptureClient(root_windows[0]), | 126 EXPECT_EQ(aura::client::GetCaptureClient(root_windows[0]), |
127 aura::client::GetCaptureClient(root_windows[1])); | 127 aura::client::GetCaptureClient(root_windows[1])); |
128 } | 128 } |
129 | 129 |
130 TEST_F(ExtendedDesktopTest, Activation) { | 130 TEST_F(ExtendedDesktopTest, Activation) { |
131 UpdateDisplay("1000x600,600x400"); | 131 UpdateDisplay("1000x600,600x400"); |
132 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 132 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
133 | 133 |
134 views::Widget* widget_on_1st = CreateTestWidget(gfx::Rect(10, 10, 100, 100)); | 134 views::Widget* widget_on_1st = CreateTestWidget(gfx::Rect(10, 10, 100, 100)); |
135 views::Widget* widget_on_2nd = | 135 views::Widget* widget_on_2nd = |
136 CreateTestWidget(gfx::Rect(1200, 10, 100, 100)); | 136 CreateTestWidget(gfx::Rect(1200, 10, 100, 100)); |
137 EXPECT_EQ(root_windows[0], widget_on_1st->GetNativeView()->GetRootWindow()); | 137 EXPECT_EQ(root_windows[0], widget_on_1st->GetNativeView()->GetRootWindow()); |
138 EXPECT_EQ(root_windows[1], widget_on_2nd->GetNativeView()->GetRootWindow()); | 138 EXPECT_EQ(root_windows[1], widget_on_2nd->GetNativeView()->GetRootWindow()); |
139 | 139 |
140 EXPECT_EQ(widget_on_2nd->GetNativeView(), | 140 EXPECT_EQ(widget_on_2nd->GetNativeView(), |
141 root_windows[0]->GetFocusManager()->GetFocusedWindow()); | 141 aura::client::GetFocusClient(root_windows[0])->GetFocusedWindow()); |
142 EXPECT_TRUE(wm::IsActiveWindow(widget_on_2nd->GetNativeView())); | 142 EXPECT_TRUE(wm::IsActiveWindow(widget_on_2nd->GetNativeView())); |
143 | 143 |
144 aura::test::EventGenerator generator_1st(root_windows[0]); | 144 aura::test::EventGenerator generator_1st(root_windows[0]); |
145 aura::test::EventGenerator generator_2nd(root_windows[1]); | 145 aura::test::EventGenerator generator_2nd(root_windows[1]); |
146 | 146 |
147 // Clicking a window changes the active window and active root window. | 147 // Clicking a window changes the active window and active root window. |
148 generator_1st.MoveMouseToCenterOf(widget_on_1st->GetNativeView()); | 148 generator_1st.MoveMouseToCenterOf(widget_on_1st->GetNativeView()); |
149 generator_1st.ClickLeftButton(); | 149 generator_1st.ClickLeftButton(); |
150 | 150 |
151 EXPECT_EQ(widget_on_1st->GetNativeView(), | 151 EXPECT_EQ(widget_on_1st->GetNativeView(), |
152 root_windows[0]->GetFocusManager()->GetFocusedWindow()); | 152 aura::client::GetFocusClient(root_windows[0])->GetFocusedWindow()); |
153 EXPECT_TRUE(wm::IsActiveWindow(widget_on_1st->GetNativeView())); | 153 EXPECT_TRUE(wm::IsActiveWindow(widget_on_1st->GetNativeView())); |
154 | 154 |
155 generator_2nd.MoveMouseToCenterOf(widget_on_2nd->GetNativeView()); | 155 generator_2nd.MoveMouseToCenterOf(widget_on_2nd->GetNativeView()); |
156 generator_2nd.ClickLeftButton(); | 156 generator_2nd.ClickLeftButton(); |
157 | 157 |
158 EXPECT_EQ(widget_on_2nd->GetNativeView(), | 158 EXPECT_EQ(widget_on_2nd->GetNativeView(), |
159 root_windows[0]->GetFocusManager()->GetFocusedWindow()); | 159 aura::client::GetFocusClient(root_windows[0])->GetFocusedWindow()); |
160 EXPECT_TRUE(wm::IsActiveWindow(widget_on_2nd->GetNativeView())); | 160 EXPECT_TRUE(wm::IsActiveWindow(widget_on_2nd->GetNativeView())); |
161 } | 161 } |
162 | 162 |
163 TEST_F(ExtendedDesktopTest, SystemModal) { | 163 TEST_F(ExtendedDesktopTest, SystemModal) { |
164 UpdateDisplay("1000x600,600x400"); | 164 UpdateDisplay("1000x600,600x400"); |
165 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 165 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); |
166 | 166 |
167 views::Widget* widget_on_1st = CreateTestWidget(gfx::Rect(10, 10, 100, 100)); | 167 views::Widget* widget_on_1st = CreateTestWidget(gfx::Rect(10, 10, 100, 100)); |
168 EXPECT_TRUE(wm::IsActiveWindow(widget_on_1st->GetNativeView())); | 168 EXPECT_TRUE(wm::IsActiveWindow(widget_on_1st->GetNativeView())); |
169 EXPECT_EQ(root_windows[0], widget_on_1st->GetNativeView()->GetRootWindow()); | 169 EXPECT_EQ(root_windows[0], widget_on_1st->GetNativeView()->GetRootWindow()); |
(...skipping 493 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
663 views::Textfield* textfield = new views::Textfield; | 663 views::Textfield* textfield = new views::Textfield; |
664 lock_widget->SetContentsView(textfield); | 664 lock_widget->SetContentsView(textfield); |
665 | 665 |
666 ash::Shell::GetContainer( | 666 ash::Shell::GetContainer( |
667 Shell::GetPrimaryRootWindow(), | 667 Shell::GetPrimaryRootWindow(), |
668 ash::internal::kShellWindowId_LockScreenContainer)-> | 668 ash::internal::kShellWindowId_LockScreenContainer)-> |
669 AddChild(lock_widget->GetNativeView()); | 669 AddChild(lock_widget->GetNativeView()); |
670 lock_widget->Show(); | 670 lock_widget->Show(); |
671 textfield->RequestFocus(); | 671 textfield->RequestFocus(); |
672 | 672 |
673 aura::FocusManager* focus_manager = root_windows[0]->GetFocusManager(); | 673 aura::client::FocusClient* focus_client = |
674 EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow()); | 674 aura::client::GetFocusClient(root_windows[0]); |
| 675 EXPECT_EQ(lock_widget->GetNativeView(), focus_client->GetFocusedWindow()); |
675 | 676 |
676 // The lock window should get events on both root windows. | 677 // The lock window should get events on both root windows. |
677 aura::test::EventGenerator generator1(root_windows[0]); | 678 aura::test::EventGenerator generator1(root_windows[0]); |
678 generator1.PressKey(ui::VKEY_A, 0); | 679 generator1.PressKey(ui::VKEY_A, 0); |
679 generator1.ReleaseKey(ui::VKEY_A, 0); | 680 generator1.ReleaseKey(ui::VKEY_A, 0); |
680 EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow()); | 681 EXPECT_EQ(lock_widget->GetNativeView(), focus_client->GetFocusedWindow()); |
681 EXPECT_EQ("a", UTF16ToASCII(textfield->text())); | 682 EXPECT_EQ("a", UTF16ToASCII(textfield->text())); |
682 | 683 |
683 aura::test::EventGenerator generator2(root_windows[1]); | 684 aura::test::EventGenerator generator2(root_windows[1]); |
684 generator2.PressKey(ui::VKEY_B, 0); | 685 generator2.PressKey(ui::VKEY_B, 0); |
685 generator2.ReleaseKey(ui::VKEY_B, 0); | 686 generator2.ReleaseKey(ui::VKEY_B, 0); |
686 EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow()); | 687 EXPECT_EQ(lock_widget->GetNativeView(), focus_client->GetFocusedWindow()); |
687 EXPECT_EQ("ab", UTF16ToASCII(textfield->text())); | 688 EXPECT_EQ("ab", UTF16ToASCII(textfield->text())); |
688 | 689 |
689 // Deleting 2nd display. The lock window still should get the events. | 690 // Deleting 2nd display. The lock window still should get the events. |
690 UpdateDisplay("100x100"); | 691 UpdateDisplay("100x100"); |
691 generator2.PressKey(ui::VKEY_C, 0); | 692 generator2.PressKey(ui::VKEY_C, 0); |
692 generator2.ReleaseKey(ui::VKEY_C, 0); | 693 generator2.ReleaseKey(ui::VKEY_C, 0); |
693 EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow()); | 694 EXPECT_EQ(lock_widget->GetNativeView(), focus_client->GetFocusedWindow()); |
694 EXPECT_EQ("abc", UTF16ToASCII(textfield->text())); | 695 EXPECT_EQ("abc", UTF16ToASCII(textfield->text())); |
695 | 696 |
696 // Creating 2nd display again, and lock window still should get events | 697 // Creating 2nd display again, and lock window still should get events |
697 // on both root windows. | 698 // on both root windows. |
698 UpdateDisplay("100x100,200x200"); | 699 UpdateDisplay("100x100,200x200"); |
699 root_windows = Shell::GetAllRootWindows(); | 700 root_windows = Shell::GetAllRootWindows(); |
700 generator1.PressKey(ui::VKEY_D, 0); | 701 generator1.PressKey(ui::VKEY_D, 0); |
701 generator1.ReleaseKey(ui::VKEY_D, 0); | 702 generator1.ReleaseKey(ui::VKEY_D, 0); |
702 EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow()); | 703 EXPECT_EQ(lock_widget->GetNativeView(), focus_client->GetFocusedWindow()); |
703 EXPECT_EQ("abcd", UTF16ToASCII(textfield->text())); | 704 EXPECT_EQ("abcd", UTF16ToASCII(textfield->text())); |
704 | 705 |
705 aura::test::EventGenerator generator22(root_windows[1]); | 706 aura::test::EventGenerator generator22(root_windows[1]); |
706 generator22.PressKey(ui::VKEY_E, 0); | 707 generator22.PressKey(ui::VKEY_E, 0); |
707 generator22.ReleaseKey(ui::VKEY_E, 0); | 708 generator22.ReleaseKey(ui::VKEY_E, 0); |
708 EXPECT_EQ(lock_widget->GetNativeView(), focus_manager->GetFocusedWindow()); | 709 EXPECT_EQ(lock_widget->GetNativeView(), focus_client->GetFocusedWindow()); |
709 EXPECT_EQ("abcde", UTF16ToASCII(textfield->text())); | 710 EXPECT_EQ("abcde", UTF16ToASCII(textfield->text())); |
710 } | 711 } |
711 | 712 |
712 } // namespace internal | 713 } // namespace internal |
713 } // namespace ash | 714 } // namespace ash |
OLD | NEW |