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/public/cpp/config.h" | 5 #include "ash/public/cpp/config.h" |
6 #include "ash/public/cpp/shell_window_ids.h" | 6 #include "ash/public/cpp/shell_window_ids.h" |
7 #include "ash/shell.h" | 7 #include "ash/shell.h" |
8 #include "ash/test/ash_test_base.h" | 8 #include "ash/test/ash_test_base.h" |
9 #include "ash/test/test_activation_delegate.h" | 9 #include "ash/test/test_activation_delegate.h" |
10 #include "ash/wm/window_util.h" | 10 #include "ash/wm/window_util.h" |
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
104 } | 104 } |
105 | 105 |
106 int hittest_code_; | 106 int hittest_code_; |
107 | 107 |
108 DISALLOW_COPY_AND_ASSIGN(HitTestWindowDelegate); | 108 DISALLOW_COPY_AND_ASSIGN(HitTestWindowDelegate); |
109 }; | 109 }; |
110 | 110 |
111 TEST_F(WindowManagerTest, Focus) { | 111 TEST_F(WindowManagerTest, Focus) { |
112 // The IME event filter interferes with the basic key event propagation we | 112 // The IME event filter interferes with the basic key event propagation we |
113 // attempt to do here, so we disable it. | 113 // attempt to do here, so we disable it. |
114 // | 114 const bool kSkipIME = true; |
115 DisableIME(); | 115 |
116 aura::Window* root_window = Shell::GetPrimaryRootWindow(); | 116 aura::Window* root_window = Shell::GetPrimaryRootWindow(); |
117 root_window->SetBounds(gfx::Rect(0, 0, 510, 510)); | 117 root_window->SetBounds(gfx::Rect(0, 0, 510, 510)); |
118 | 118 |
119 // Supplied ids are negative so as not to collide with shell ids. | 119 // Supplied ids are negative so as not to collide with shell ids. |
120 // TODO(beng): maybe introduce a MAKE_SHELL_ID() macro that generates a safe | 120 // TODO(beng): maybe introduce a MAKE_SHELL_ID() macro that generates a safe |
121 // id beyond shell id max? | 121 // id beyond shell id max? |
122 std::unique_ptr<aura::Window> w1( | 122 std::unique_ptr<aura::Window> w1( |
123 CreateTestWindowInShell(SK_ColorWHITE, -1, gfx::Rect(10, 10, 500, 500))); | 123 CreateTestWindowInShell(SK_ColorWHITE, -1, gfx::Rect(10, 10, 500, 500))); |
124 std::unique_ptr<aura::Window> w11(aura::test::CreateTestWindow( | 124 std::unique_ptr<aura::Window> w11(aura::test::CreateTestWindow( |
125 SK_ColorGREEN, -11, gfx::Rect(5, 5, 100, 100), w1.get())); | 125 SK_ColorGREEN, -11, gfx::Rect(5, 5, 100, 100), w1.get())); |
(...skipping 23 matching lines...) Expand all Loading... |
149 generator.ClickLeftButton(); | 149 generator.ClickLeftButton(); |
150 | 150 |
151 aura::client::FocusClient* focus_client = | 151 aura::client::FocusClient* focus_client = |
152 aura::client::GetFocusClient(w121.get()); | 152 aura::client::GetFocusClient(w121.get()); |
153 EXPECT_EQ(w121.get(), focus_client->GetFocusedWindow()); | 153 EXPECT_EQ(w121.get(), focus_client->GetFocusedWindow()); |
154 | 154 |
155 ui::EventSink* sink = root_window->GetHost()->event_sink(); | 155 ui::EventSink* sink = root_window->GetHost()->event_sink(); |
156 | 156 |
157 // The key press should be sent to the focused sub-window. | 157 // The key press should be sent to the focused sub-window. |
158 ui::KeyEvent keyev(ui::ET_KEY_PRESSED, ui::VKEY_E, ui::EF_NONE); | 158 ui::KeyEvent keyev(ui::ET_KEY_PRESSED, ui::VKEY_E, ui::EF_NONE); |
| 159 keyev.set_skip_ime(kSkipIME); |
159 ui::EventDispatchDetails details = sink->OnEventFromSource(&keyev); | 160 ui::EventDispatchDetails details = sink->OnEventFromSource(&keyev); |
160 ASSERT_FALSE(details.dispatcher_destroyed); | 161 ASSERT_FALSE(details.dispatcher_destroyed); |
161 EXPECT_EQ(ui::VKEY_E, w121delegate->last_key_code()); | 162 EXPECT_EQ(ui::VKEY_E, w121delegate->last_key_code()); |
162 | 163 |
163 // Touch on a sub-window (w122) to focus it. | 164 // Touch on a sub-window (w122) to focus it. |
164 gfx::Point click_point = w122->bounds().CenterPoint(); | 165 gfx::Point click_point = w122->bounds().CenterPoint(); |
165 aura::Window::ConvertPointToTarget(w122->parent(), root_window, &click_point); | 166 aura::Window::ConvertPointToTarget(w122->parent(), root_window, &click_point); |
166 ui::TouchEvent touchev( | 167 ui::TouchEvent touchev( |
167 ui::ET_TOUCH_PRESSED, click_point, getTime(), | 168 ui::ET_TOUCH_PRESSED, click_point, getTime(), |
168 ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0)); | 169 ui::PointerDetails(ui::EventPointerType::POINTER_TYPE_TOUCH, 0)); |
169 details = sink->OnEventFromSource(&touchev); | 170 details = sink->OnEventFromSource(&touchev); |
170 ASSERT_FALSE(details.dispatcher_destroyed); | 171 ASSERT_FALSE(details.dispatcher_destroyed); |
171 focus_client = aura::client::GetFocusClient(w122.get()); | 172 focus_client = aura::client::GetFocusClient(w122.get()); |
172 EXPECT_EQ(w122.get(), focus_client->GetFocusedWindow()); | 173 EXPECT_EQ(w122.get(), focus_client->GetFocusedWindow()); |
173 | 174 |
174 // The key press should be sent to the focused sub-window. | 175 // The key press should be sent to the focused sub-window. |
175 keyev = ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_E, ui::EF_NONE); | 176 keyev = ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_E, ui::EF_NONE); |
| 177 keyev.set_skip_ime(kSkipIME); |
176 details = sink->OnEventFromSource(&keyev); | 178 details = sink->OnEventFromSource(&keyev); |
177 ASSERT_FALSE(details.dispatcher_destroyed); | 179 ASSERT_FALSE(details.dispatcher_destroyed); |
178 EXPECT_EQ(ui::VKEY_E, w122delegate->last_key_code()); | 180 EXPECT_EQ(ui::VKEY_E, w122delegate->last_key_code()); |
179 | 181 |
180 // Hiding the focused window will set the focus to its parent if | 182 // Hiding the focused window will set the focus to its parent if |
181 // it's focusable. | 183 // it's focusable. |
182 w122->Hide(); | 184 w122->Hide(); |
183 EXPECT_EQ(aura::client::GetFocusClient(w12.get()), | 185 EXPECT_EQ(aura::client::GetFocusClient(w12.get()), |
184 aura::client::GetFocusClient(w122.get())); | 186 aura::client::GetFocusClient(w122.get())); |
185 EXPECT_EQ(w12.get(), | 187 EXPECT_EQ(w12.get(), |
(...skipping 19 matching lines...) Expand all Loading... |
205 aura::client::GetFocusClient(w12.get())->GetFocusedWindow()); | 207 aura::client::GetFocusClient(w12.get())->GetFocusedWindow()); |
206 aura::client::SetActivationDelegate(w1.get(), &activation_delegate); | 208 aura::client::SetActivationDelegate(w1.get(), &activation_delegate); |
207 | 209 |
208 // Hiding the focused window will set the focus to NULL because | 210 // Hiding the focused window will set the focus to NULL because |
209 // parent window is not focusable. | 211 // parent window is not focusable. |
210 w123->Hide(); | 212 w123->Hide(); |
211 EXPECT_EQ(aura::client::GetFocusClient(w12.get()), | 213 EXPECT_EQ(aura::client::GetFocusClient(w12.get()), |
212 aura::client::GetFocusClient(w123.get())); | 214 aura::client::GetFocusClient(w123.get())); |
213 EXPECT_EQ(NULL, aura::client::GetFocusClient(w12.get())->GetFocusedWindow()); | 215 EXPECT_EQ(NULL, aura::client::GetFocusClient(w12.get())->GetFocusedWindow()); |
214 keyev = ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_E, ui::EF_NONE); | 216 keyev = ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_E, ui::EF_NONE); |
| 217 keyev.set_skip_ime(kSkipIME); |
215 details = sink->OnEventFromSource(&keyev); | 218 details = sink->OnEventFromSource(&keyev); |
216 EXPECT_FALSE(keyev.handled() || details.dispatcher_destroyed); | 219 EXPECT_FALSE(keyev.handled() || details.dispatcher_destroyed); |
217 | 220 |
218 // Set the focus back to w123 | 221 // Set the focus back to w123 |
219 aura::client::SetActivationDelegate(w1.get(), NULL); | 222 aura::client::SetActivationDelegate(w1.get(), NULL); |
220 w123->Show(); | 223 w123->Show(); |
221 w123->Focus(); | 224 w123->Focus(); |
222 EXPECT_EQ(w123.get(), | 225 EXPECT_EQ(w123.get(), |
223 aura::client::GetFocusClient(w12.get())->GetFocusedWindow()); | 226 aura::client::GetFocusClient(w12.get())->GetFocusedWindow()); |
224 aura::client::SetActivationDelegate(w1.get(), &activation_delegate); | 227 aura::client::SetActivationDelegate(w1.get(), &activation_delegate); |
225 | 228 |
226 // Removing the focused window will set the focus to NULL because | 229 // Removing the focused window will set the focus to NULL because |
227 // parent window is not focusable. | 230 // parent window is not focusable. |
228 w12->RemoveChild(w123.get()); | 231 w12->RemoveChild(w123.get()); |
229 EXPECT_EQ(NULL, aura::client::GetFocusClient(w123.get())); | 232 EXPECT_EQ(NULL, aura::client::GetFocusClient(w123.get())); |
230 keyev = ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_E, ui::EF_NONE); | 233 keyev = ui::KeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_E, ui::EF_NONE); |
| 234 keyev.set_skip_ime(kSkipIME); |
231 details = sink->OnEventFromSource(&keyev); | 235 details = sink->OnEventFromSource(&keyev); |
232 EXPECT_FALSE(keyev.handled() || details.dispatcher_destroyed); | 236 EXPECT_FALSE(keyev.handled() || details.dispatcher_destroyed); |
233 | 237 |
234 // Must set to NULL since the activation delegate will be destroyed before | 238 // Must set to NULL since the activation delegate will be destroyed before |
235 // the windows. | 239 // the windows. |
236 aura::client::SetActivationDelegate(w1.get(), NULL); | 240 aura::client::SetActivationDelegate(w1.get(), NULL); |
237 } | 241 } |
238 | 242 |
239 // Various assertion testing for activating windows. | 243 // Various assertion testing for activating windows. |
240 TEST_F(WindowManagerTest, ActivateOnMouse) { | 244 TEST_F(WindowManagerTest, ActivateOnMouse) { |
(...skipping 426 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
667 details = sink->OnEventFromSource(&mouseev2); | 671 details = sink->OnEventFromSource(&mouseev2); |
668 ASSERT_FALSE(details.dispatcher_destroyed); | 672 ASSERT_FALSE(details.dispatcher_destroyed); |
669 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 673 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
670 EXPECT_EQ(w1.get(), | 674 EXPECT_EQ(w1.get(), |
671 aura::client::GetFocusClient(w1.get())->GetFocusedWindow()); | 675 aura::client::GetFocusClient(w1.get())->GetFocusedWindow()); |
672 } | 676 } |
673 | 677 |
674 TEST_F(WindowManagerTest, AdditionalFilters) { | 678 TEST_F(WindowManagerTest, AdditionalFilters) { |
675 // The IME event filter interferes with the basic key event propagation we | 679 // The IME event filter interferes with the basic key event propagation we |
676 // attempt to do here, so we disable it. | 680 // attempt to do here, so we disable it. |
677 DisableIME(); | 681 const bool kSkipIME = true; |
| 682 |
678 aura::Window* root_window = Shell::GetPrimaryRootWindow(); | 683 aura::Window* root_window = Shell::GetPrimaryRootWindow(); |
679 | 684 |
680 // Creates a window and make it active | 685 // Creates a window and make it active |
681 std::unique_ptr<aura::Window> w1( | 686 std::unique_ptr<aura::Window> w1( |
682 CreateTestWindowInShell(SK_ColorWHITE, -1, gfx::Rect(0, 0, 100, 100))); | 687 CreateTestWindowInShell(SK_ColorWHITE, -1, gfx::Rect(0, 0, 100, 100))); |
683 wm::ActivateWindow(w1.get()); | 688 wm::ActivateWindow(w1.get()); |
684 | 689 |
685 // Creates two addition filters | 690 // Creates two addition filters |
686 std::unique_ptr<CustomEventHandler> f1(new CustomEventHandler); | 691 std::unique_ptr<CustomEventHandler> f1(new CustomEventHandler); |
687 std::unique_ptr<CustomEventHandler> f2(new CustomEventHandler); | 692 std::unique_ptr<CustomEventHandler> f2(new CustomEventHandler); |
688 | 693 |
689 // Adds them to root window event filter. | 694 // Adds them to root window event filter. |
690 ::wm::CompoundEventFilter* env_filter = Shell::Get()->env_filter(); | 695 ::wm::CompoundEventFilter* env_filter = Shell::Get()->env_filter(); |
691 env_filter->AddHandler(f1.get()); | 696 env_filter->AddHandler(f1.get()); |
692 env_filter->AddHandler(f2.get()); | 697 env_filter->AddHandler(f2.get()); |
693 | 698 |
694 // Dispatches mouse and keyboard events. | 699 // Dispatches mouse and keyboard events. |
695 ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); | 700 ui::KeyEvent key_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE); |
| 701 key_event.set_skip_ime(kSkipIME); |
696 ui::EventSink* sink = root_window->GetHost()->event_sink(); | 702 ui::EventSink* sink = root_window->GetHost()->event_sink(); |
697 ui::EventDispatchDetails details = sink->OnEventFromSource(&key_event); | 703 ui::EventDispatchDetails details = sink->OnEventFromSource(&key_event); |
698 ASSERT_FALSE(details.dispatcher_destroyed); | 704 ASSERT_FALSE(details.dispatcher_destroyed); |
699 ui::MouseEvent mouse_pressed(ui::ET_MOUSE_PRESSED, gfx::Point(0, 0), | 705 ui::MouseEvent mouse_pressed(ui::ET_MOUSE_PRESSED, gfx::Point(0, 0), |
700 gfx::Point(0, 0), ui::EventTimeForNow(), 0, 0); | 706 gfx::Point(0, 0), ui::EventTimeForNow(), 0, 0); |
701 details = sink->OnEventFromSource(&mouse_pressed); | 707 details = sink->OnEventFromSource(&mouse_pressed); |
702 ASSERT_FALSE(details.dispatcher_destroyed); | 708 ASSERT_FALSE(details.dispatcher_destroyed); |
703 | 709 |
704 // Both filters should get the events. | 710 // Both filters should get the events. |
705 EXPECT_EQ(1, f1->num_key_events()); | 711 EXPECT_EQ(1, f1->num_key_events()); |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 observer_b.reset(); | 903 observer_b.reset(); |
898 generator.MoveMouseTo(50, 50); | 904 generator.MoveMouseTo(50, 50); |
899 EXPECT_TRUE(observer_a.did_visibility_change()); | 905 EXPECT_TRUE(observer_a.did_visibility_change()); |
900 EXPECT_FALSE(observer_b.did_visibility_change()); | 906 EXPECT_FALSE(observer_b.did_visibility_change()); |
901 EXPECT_TRUE(observer_a.is_cursor_visible()); | 907 EXPECT_TRUE(observer_a.is_cursor_visible()); |
902 | 908 |
903 cursor_manager->RemoveObserver(&observer_a); | 909 cursor_manager->RemoveObserver(&observer_a); |
904 } | 910 } |
905 | 911 |
906 } // namespace ash | 912 } // namespace ash |
OLD | NEW |