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/wm/window_modality_controller.h" | 5 #include "ash/wm/window_modality_controller.h" |
6 | 6 |
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/capture_tracking_view.h" | 9 #include "ash/test/capture_tracking_view.h" |
10 #include "ash/wm/window_util.h" | 10 #include "ash/wm/window_util.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 | 35 |
36 // Creates three windows, w1, w11, and w12. w11 is a non-modal transient, w12 is | 36 // Creates three windows, w1, w11, and w12. w11 is a non-modal transient, w12 is |
37 // a modal transient. | 37 // a modal transient. |
38 // Validates: | 38 // Validates: |
39 // - it should be possible to activate w12 even when w11 is open. | 39 // - it should be possible to activate w12 even when w11 is open. |
40 // - activating w1 activates w12 and updates stacking order appropriately. | 40 // - activating w1 activates w12 and updates stacking order appropriately. |
41 // - closing a window passes focus up the stack. | 41 // - closing a window passes focus up the stack. |
42 TEST_F(WindowModalityControllerTest, BasicActivation) { | 42 TEST_F(WindowModalityControllerTest, BasicActivation) { |
43 aura::test::TestWindowDelegate d; | 43 aura::test::TestWindowDelegate d; |
44 scoped_ptr<aura::Window> w1( | 44 scoped_ptr<aura::Window> w1( |
45 aura::test::CreateTestWindowWithDelegate(&d, -1, gfx::Rect(), NULL)); | 45 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
46 scoped_ptr<aura::Window> w11( | 46 scoped_ptr<aura::Window> w11( |
47 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), NULL)); | 47 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect())); |
48 scoped_ptr<aura::Window> w12( | 48 scoped_ptr<aura::Window> w12( |
49 aura::test::CreateTestWindowWithDelegate(&d, -12, gfx::Rect(), NULL)); | 49 CreateTestWindowInShellWithDelegate(&d, -12, gfx::Rect())); |
50 | 50 |
51 w1->AddTransientChild(w11.get()); | 51 w1->AddTransientChild(w11.get()); |
52 wm::ActivateWindow(w1.get()); | 52 wm::ActivateWindow(w1.get()); |
53 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 53 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
54 wm::ActivateWindow(w11.get()); | 54 wm::ActivateWindow(w11.get()); |
55 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); | 55 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); |
56 | 56 |
57 w12->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 57 w12->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
58 w1->AddTransientChild(w12.get()); | 58 w1->AddTransientChild(w12.get()); |
59 wm::ActivateWindow(w12.get()); | 59 wm::ActivateWindow(w12.get()); |
(...skipping 20 matching lines...) Expand all Loading... |
80 | 80 |
81 // Create two toplevel windows w1 and w2, and nest two modals w11 and w111 below | 81 // Create two toplevel windows w1 and w2, and nest two modals w11 and w111 below |
82 // w1. | 82 // w1. |
83 // Validates: | 83 // Validates: |
84 // - activating w1 while w11/w111 is showing always activates most deeply nested | 84 // - activating w1 while w11/w111 is showing always activates most deeply nested |
85 // descendant. | 85 // descendant. |
86 // - closing a window passes focus up the stack. | 86 // - closing a window passes focus up the stack. |
87 TEST_F(WindowModalityControllerTest, NestedModals) { | 87 TEST_F(WindowModalityControllerTest, NestedModals) { |
88 aura::test::TestWindowDelegate d; | 88 aura::test::TestWindowDelegate d; |
89 scoped_ptr<aura::Window> w1( | 89 scoped_ptr<aura::Window> w1( |
90 aura::test::CreateTestWindowWithDelegate(&d, -1, gfx::Rect(), NULL)); | 90 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
91 scoped_ptr<aura::Window> w11( | 91 scoped_ptr<aura::Window> w11( |
92 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), NULL)); | 92 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect())); |
93 scoped_ptr<aura::Window> w111( | 93 scoped_ptr<aura::Window> w111( |
94 aura::test::CreateTestWindowWithDelegate(&d, -111, gfx::Rect(), NULL)); | 94 CreateTestWindowInShellWithDelegate(&d, -111, gfx::Rect())); |
95 scoped_ptr<aura::Window> w2( | 95 scoped_ptr<aura::Window> w2( |
96 aura::test::CreateTestWindowWithDelegate(&d, -2, gfx::Rect(), NULL)); | 96 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
97 | 97 |
98 w1->AddTransientChild(w11.get()); | 98 w1->AddTransientChild(w11.get()); |
99 w11->AddTransientChild(w111.get()); | 99 w11->AddTransientChild(w111.get()); |
100 | 100 |
101 wm::ActivateWindow(w1.get()); | 101 wm::ActivateWindow(w1.get()); |
102 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 102 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
103 wm::ActivateWindow(w2.get()); | 103 wm::ActivateWindow(w2.get()); |
104 EXPECT_TRUE(wm::IsActiveWindow(w2.get())); | 104 EXPECT_TRUE(wm::IsActiveWindow(w2.get())); |
105 | 105 |
106 // Set up modality. | 106 // Set up modality. |
(...skipping 26 matching lines...) Expand all Loading... |
133 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 133 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
134 } | 134 } |
135 | 135 |
136 // Create two toplevel windows w1 and w2, and nest two modals w11 and w111 below | 136 // Create two toplevel windows w1 and w2, and nest two modals w11 and w111 below |
137 // w1. | 137 // w1. |
138 // Validates: | 138 // Validates: |
139 // - destroying w11 while w111 is focused activates w1. | 139 // - destroying w11 while w111 is focused activates w1. |
140 TEST_F(WindowModalityControllerTest, NestedModalsOuterClosed) { | 140 TEST_F(WindowModalityControllerTest, NestedModalsOuterClosed) { |
141 aura::test::TestWindowDelegate d; | 141 aura::test::TestWindowDelegate d; |
142 scoped_ptr<aura::Window> w1( | 142 scoped_ptr<aura::Window> w1( |
143 aura::test::CreateTestWindowWithDelegate(&d, -1, gfx::Rect(), NULL)); | 143 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
144 scoped_ptr<aura::Window> w11( | 144 scoped_ptr<aura::Window> w11( |
145 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), NULL)); | 145 CreateTestWindowInShellWithDelegate(&d, -11, gfx::Rect())); |
146 // |w111| will be owned and deleted by |w11|. | 146 // |w111| will be owned and deleted by |w11|. |
147 aura::Window* w111 = | 147 aura::Window* w111 = |
148 aura::test::CreateTestWindowWithDelegate(&d, -111, gfx::Rect(), NULL); | 148 CreateTestWindowInShellWithDelegate(&d, -111, gfx::Rect()); |
149 scoped_ptr<aura::Window> w2( | 149 scoped_ptr<aura::Window> w2( |
150 aura::test::CreateTestWindowWithDelegate(&d, -2, gfx::Rect(), NULL)); | 150 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
151 | 151 |
152 w1->AddTransientChild(w11.get()); | 152 w1->AddTransientChild(w11.get()); |
153 w11->AddTransientChild(w111); | 153 w11->AddTransientChild(w111); |
154 | 154 |
155 wm::ActivateWindow(w1.get()); | 155 wm::ActivateWindow(w1.get()); |
156 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 156 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
157 wm::ActivateWindow(w2.get()); | 157 wm::ActivateWindow(w2.get()); |
158 EXPECT_TRUE(wm::IsActiveWindow(w2.get())); | 158 EXPECT_TRUE(wm::IsActiveWindow(w2.get())); |
159 | 159 |
160 // Set up modality. | 160 // Set up modality. |
(...skipping 10 matching lines...) Expand all Loading... |
171 // modal window. There is no such use case right now, but it | 171 // modal window. There is no such use case right now, but it |
172 // probably should. | 172 // probably should. |
173 | 173 |
174 w11.reset(); | 174 w11.reset(); |
175 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 175 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
176 } | 176 } |
177 | 177 |
178 // Modality also prevents events from being passed to the transient parent. | 178 // Modality also prevents events from being passed to the transient parent. |
179 TEST_F(WindowModalityControllerTest, Events) { | 179 TEST_F(WindowModalityControllerTest, Events) { |
180 aura::test::TestWindowDelegate d; | 180 aura::test::TestWindowDelegate d; |
181 scoped_ptr<aura::Window> w1(aura::test::CreateTestWindowWithDelegate(&d, -1, | 181 scoped_ptr<aura::Window> w1(CreateTestWindowInShellWithDelegate(&d, -1, |
182 gfx::Rect(0, 0, 100, 100), NULL)); | 182 gfx::Rect(0, 0, 100, 100))); |
183 scoped_ptr<aura::Window> w11(aura::test::CreateTestWindowWithDelegate(&d, -11, | 183 scoped_ptr<aura::Window> w11(CreateTestWindowInShellWithDelegate(&d, -11, |
184 gfx::Rect(20, 20, 50, 50), NULL)); | 184 gfx::Rect(20, 20, 50, 50))); |
185 | 185 |
186 w1->AddTransientChild(w11.get()); | 186 w1->AddTransientChild(w11.get()); |
187 | 187 |
188 { | 188 { |
189 // Clicking a point within w1 should activate that window. | 189 // Clicking a point within w1 should activate that window. |
190 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 190 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
191 gfx::Point(10, 10)); | 191 gfx::Point(10, 10)); |
192 generator.ClickLeftButton(); | 192 generator.ClickLeftButton(); |
193 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 193 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
194 } | 194 } |
195 | 195 |
196 w11->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 196 w11->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
197 | 197 |
198 { | 198 { |
199 // Clicking a point within w1 should activate w11. | 199 // Clicking a point within w1 should activate w11. |
200 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 200 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
201 gfx::Point(10, 10)); | 201 gfx::Point(10, 10)); |
202 generator.ClickLeftButton(); | 202 generator.ClickLeftButton(); |
203 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); | 203 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); |
204 } | 204 } |
205 } | 205 } |
206 | 206 |
207 // Creates windows w1 and non activatiable child w11. Creates transient window | 207 // Creates windows w1 and non activatiable child w11. Creates transient window |
208 // w2 and adds it as a transeint child of w1. Ensures that w2 is parented to | 208 // w2 and adds it as a transeint child of w1. Ensures that w2 is parented to |
209 // the parent of w1, and that GetWindowModalTransient(w11) returns w2. | 209 // the parent of w1, and that GetWindowModalTransient(w11) returns w2. |
210 TEST_F(WindowModalityControllerTest, GetWindowModalTransient) { | 210 TEST_F(WindowModalityControllerTest, GetWindowModalTransient) { |
211 aura::test::TestWindowDelegate d; | 211 aura::test::TestWindowDelegate d; |
212 scoped_ptr<aura::Window> w1( | 212 scoped_ptr<aura::Window> w1( |
213 aura::test::CreateTestWindowWithDelegate(&d, -1, gfx::Rect(), NULL)); | 213 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
214 scoped_ptr<aura::Window> w11( | 214 scoped_ptr<aura::Window> w11( |
215 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); | 215 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); |
216 scoped_ptr<aura::Window> w2( | 216 scoped_ptr<aura::Window> w2( |
217 aura::test::CreateTestWindowWithDelegate(&d, -2, gfx::Rect(), NULL)); | 217 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
218 w2->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 218 w2->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
219 | 219 |
220 aura::Window* wt; | 220 aura::Window* wt; |
221 wt = wm::GetWindowModalTransient(w1.get()); | 221 wt = wm::GetWindowModalTransient(w1.get()); |
222 ASSERT_EQ(static_cast<aura::Window*>(NULL), wt); | 222 ASSERT_EQ(static_cast<aura::Window*>(NULL), wt); |
223 | 223 |
224 // Parent w2 to w1. It should get parented to the parent of w1. | 224 // Parent w2 to w1. It should get parented to the parent of w1. |
225 w1->AddTransientChild(w2.get()); | 225 w1->AddTransientChild(w2.get()); |
226 ASSERT_EQ(2U, w1->parent()->children().size()); | 226 ASSERT_EQ(2U, w1->parent()->children().size()); |
227 EXPECT_EQ(-2, w1->parent()->children().at(1)->id()); | 227 EXPECT_EQ(-2, w1->parent()->children().at(1)->id()); |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
300 } | 300 } |
301 | 301 |
302 bool received_touch_; | 302 bool received_touch_; |
303 | 303 |
304 DISALLOW_COPY_AND_ASSIGN(TouchTrackerWindowDelegate); | 304 DISALLOW_COPY_AND_ASSIGN(TouchTrackerWindowDelegate); |
305 }; | 305 }; |
306 | 306 |
307 // Modality should prevent events from being passed to the transient parent. | 307 // Modality should prevent events from being passed to the transient parent. |
308 TEST_F(WindowModalityControllerTest, TouchEvent) { | 308 TEST_F(WindowModalityControllerTest, TouchEvent) { |
309 TouchTrackerWindowDelegate d1; | 309 TouchTrackerWindowDelegate d1; |
310 scoped_ptr<aura::Window> w1(aura::test::CreateTestWindowWithDelegate(&d1, | 310 scoped_ptr<aura::Window> w1(CreateTestWindowInShellWithDelegate(&d1, |
311 -1, gfx::Rect(0, 0, 100, 100), NULL)); | 311 -1, gfx::Rect(0, 0, 100, 100))); |
312 TouchTrackerWindowDelegate d11; | 312 TouchTrackerWindowDelegate d11; |
313 scoped_ptr<aura::Window> w11(aura::test::CreateTestWindowWithDelegate(&d11, | 313 scoped_ptr<aura::Window> w11(CreateTestWindowInShellWithDelegate(&d11, |
314 -11, gfx::Rect(20, 20, 50, 50), NULL)); | 314 -11, gfx::Rect(20, 20, 50, 50))); |
315 | 315 |
316 w1->AddTransientChild(w11.get()); | 316 w1->AddTransientChild(w11.get()); |
317 d1.reset(); | 317 d1.reset(); |
318 d11.reset(); | 318 d11.reset(); |
319 | 319 |
320 { | 320 { |
321 // Clicking a point within w1 should activate that window. | 321 // Clicking a point within w1 should activate that window. |
322 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 322 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
323 gfx::Point(10, 10)); | 323 gfx::Point(10, 10)); |
324 generator.PressMoveAndReleaseTouchTo(gfx::Point(10, 10)); | 324 generator.PressMoveAndReleaseTouchTo(gfx::Point(10, 10)); |
(...skipping 12 matching lines...) Expand all Loading... |
337 gfx::Point(10, 10)); | 337 gfx::Point(10, 10)); |
338 generator.PressMoveAndReleaseTouchTo(gfx::Point(10, 10)); | 338 generator.PressMoveAndReleaseTouchTo(gfx::Point(10, 10)); |
339 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); | 339 EXPECT_TRUE(wm::IsActiveWindow(w11.get())); |
340 EXPECT_FALSE(d1.received_touch()); | 340 EXPECT_FALSE(d1.received_touch()); |
341 EXPECT_FALSE(d11.received_touch()); | 341 EXPECT_FALSE(d11.received_touch()); |
342 } | 342 } |
343 } | 343 } |
344 | 344 |
345 } // namespace internal | 345 } // namespace internal |
346 } // namespace ash | 346 } // namespace ash |
OLD | NEW |