Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(580)

Side by Side Diff: ash/wm/system_modal_container_layout_manager_unittest.cc

Issue 11795004: Continue threading context through unit tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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/system_modal_container_layout_manager.h" 5 #include "ash/wm/system_modal_container_layout_manager.h"
6 6
7 #include "ash/root_window_controller.h" 7 #include "ash/root_window_controller.h"
8 #include "ash/shell.h" 8 #include "ash/shell.h"
9 #include "ash/shell_delegate.h" 9 #include "ash/shell_delegate.h"
10 #include "ash/shell_window_ids.h" 10 #include "ash/shell_window_ids.h"
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
51 bool AllRootWindowsHaveModalBackgrounds() { 51 bool AllRootWindowsHaveModalBackgrounds() {
52 return AllRootWindowsHaveModalBackgroundsForContainer( 52 return AllRootWindowsHaveModalBackgroundsForContainer(
53 internal::kShellWindowId_SystemModalContainer); 53 internal::kShellWindowId_SystemModalContainer);
54 } 54 }
55 55
56 class TestWindow : public views::WidgetDelegateView { 56 class TestWindow : public views::WidgetDelegateView {
57 public: 57 public:
58 explicit TestWindow(bool modal) : modal_(modal) {} 58 explicit TestWindow(bool modal) : modal_(modal) {}
59 virtual ~TestWindow() {} 59 virtual ~TestWindow() {}
60 60
61 static aura::Window* OpenTestWindow(aura::Window* parent, bool modal) {
62 views::Widget* widget =
63 views::Widget::CreateWindowWithParent(new TestWindow(modal), parent);
64 widget->Show();
65 return widget->GetNativeView();
66 }
67
68 // The window needs be closed from widget in order for 61 // The window needs be closed from widget in order for
69 // aura::client::kModalKey property to be reset. 62 // aura::client::kModalKey property to be reset.
70 static void CloseTestWindow(aura::Window* window) { 63 static void CloseTestWindow(aura::Window* window) {
71 views::Widget::GetWidgetForNativeWindow(window)->Close(); 64 views::Widget::GetWidgetForNativeWindow(window)->Close();
72 } 65 }
73 66
74 // Overridden from views::View: 67 // Overridden from views::View:
75 virtual gfx::Size GetPreferredSize() OVERRIDE { 68 virtual gfx::Size GetPreferredSize() OVERRIDE {
76 return gfx::Size(50, 50); 69 return gfx::Size(50, 50);
77 } 70 }
(...skipping 11 matching lines...) Expand all
89 82
90 DISALLOW_COPY_AND_ASSIGN(TestWindow); 83 DISALLOW_COPY_AND_ASSIGN(TestWindow);
91 }; 84 };
92 85
93 class EventTestWindow : public TestWindow { 86 class EventTestWindow : public TestWindow {
94 public: 87 public:
95 explicit EventTestWindow(bool modal) : TestWindow(modal), 88 explicit EventTestWindow(bool modal) : TestWindow(modal),
96 mouse_presses_(0) {} 89 mouse_presses_(0) {}
97 virtual ~EventTestWindow() {} 90 virtual ~EventTestWindow() {}
98 91
99 aura::Window* OpenTestWindow(aura::Window* parent) { 92 aura::Window* OpenTestWindowWithContext(aura::RootWindow* context) {
93 views::Widget* widget =
94 views::Widget::CreateWindowWithContext(this, context);
95 widget->Show();
96 return widget->GetNativeView();
97 }
98
99 aura::Window* OpenTestWindowWithParent(aura::Window* parent) {
100 DCHECK(parent);
100 views::Widget* widget = 101 views::Widget* widget =
101 views::Widget::CreateWindowWithParent(this, parent); 102 views::Widget::CreateWindowWithParent(this, parent);
102 widget->Show(); 103 widget->Show();
103 return widget->GetNativeView(); 104 return widget->GetNativeView();
104 } 105 }
105 106
106 // Overridden from views::View: 107 // Overridden from views::View:
107 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE { 108 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE {
108 mouse_presses_++; 109 mouse_presses_++;
109 return false; 110 return false;
(...skipping 19 matching lines...) Expand all
129 } 130 }
130 131
131 private: 132 private:
132 bool destroyed_; 133 bool destroyed_;
133 134
134 DISALLOW_COPY_AND_ASSIGN(TransientWindowObserver); 135 DISALLOW_COPY_AND_ASSIGN(TransientWindowObserver);
135 }; 136 };
136 137
137 } // namespace 138 } // namespace
138 139
139 typedef AshTestBase SystemModalContainerLayoutManagerTest; 140 class SystemModalContainerLayoutManagerTest : public AshTestBase {
141 public:
142 aura::Window* OpenToplevelTestWindow(bool modal) {
143 views::Widget* widget = views::Widget::CreateWindowWithContext(
144 new TestWindow(modal), CurrentContext());
145 widget->Show();
146 return widget->GetNativeView();
147 }
148
149 aura::Window* OpenTestWindowWithParent(aura::Window* parent, bool modal) {
150 views::Widget* widget =
151 views::Widget::CreateWindowWithParent(new TestWindow(modal), parent);
152 widget->Show();
153 return widget->GetNativeView();
154 }
155 };
140 156
141 TEST_F(SystemModalContainerLayoutManagerTest, NonModalTransient) { 157 TEST_F(SystemModalContainerLayoutManagerTest, NonModalTransient) {
142 scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false)); 158 scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
143 aura::Window* transient = TestWindow::OpenTestWindow(parent.get(), false); 159 aura::Window* transient = OpenTestWindowWithParent(parent.get(), false);
144 TransientWindowObserver destruction_observer; 160 TransientWindowObserver destruction_observer;
145 transient->AddObserver(&destruction_observer); 161 transient->AddObserver(&destruction_observer);
146 162
147 EXPECT_EQ(parent.get(), transient->transient_parent()); 163 EXPECT_EQ(parent.get(), transient->transient_parent());
148 EXPECT_EQ(parent->parent(), transient->parent()); 164 EXPECT_EQ(parent->parent(), transient->parent());
149 165
150 // The transient should be destroyed with its parent. 166 // The transient should be destroyed with its parent.
151 parent.reset(); 167 parent.reset();
152 EXPECT_TRUE(destruction_observer.destroyed()); 168 EXPECT_TRUE(destruction_observer.destroyed());
153 } 169 }
154 170
155 TEST_F(SystemModalContainerLayoutManagerTest, ModalTransient) { 171 TEST_F(SystemModalContainerLayoutManagerTest, ModalTransient) {
156 scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false)); 172 scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
157 // parent should be active. 173 // parent should be active.
158 EXPECT_TRUE(wm::IsActiveWindow(parent.get())); 174 EXPECT_TRUE(wm::IsActiveWindow(parent.get()));
159 aura::Window* t1 = TestWindow::OpenTestWindow(parent.get(), true); 175 aura::Window* t1 = OpenTestWindowWithParent(parent.get(), true);
160 176
161 TransientWindowObserver do1; 177 TransientWindowObserver do1;
162 t1->AddObserver(&do1); 178 t1->AddObserver(&do1);
163 179
164 EXPECT_EQ(parent.get(), t1->transient_parent()); 180 EXPECT_EQ(parent.get(), t1->transient_parent());
165 EXPECT_EQ(GetModalContainer(), t1->parent()); 181 EXPECT_EQ(GetModalContainer(), t1->parent());
166 182
167 // t1 should now be active. 183 // t1 should now be active.
168 EXPECT_TRUE(wm::IsActiveWindow(t1)); 184 EXPECT_TRUE(wm::IsActiveWindow(t1));
169 185
170 // Attempting to click the parent should result in no activation change. 186 // Attempting to click the parent should result in no activation change.
171 aura::test::EventGenerator e1(Shell::GetPrimaryRootWindow(), parent.get()); 187 aura::test::EventGenerator e1(Shell::GetPrimaryRootWindow(), parent.get());
172 e1.ClickLeftButton(); 188 e1.ClickLeftButton();
173 EXPECT_TRUE(wm::IsActiveWindow(t1)); 189 EXPECT_TRUE(wm::IsActiveWindow(t1));
174 190
175 // Now open another modal transient parented to the original modal transient. 191 // Now open another modal transient parented to the original modal transient.
176 aura::Window* t2 = TestWindow::OpenTestWindow(t1, true); 192 aura::Window* t2 = OpenTestWindowWithParent(t1, true);
177 TransientWindowObserver do2; 193 TransientWindowObserver do2;
178 t2->AddObserver(&do2); 194 t2->AddObserver(&do2);
179 195
180 EXPECT_TRUE(wm::IsActiveWindow(t2)); 196 EXPECT_TRUE(wm::IsActiveWindow(t2));
181 197
182 EXPECT_EQ(t1, t2->transient_parent()); 198 EXPECT_EQ(t1, t2->transient_parent());
183 EXPECT_EQ(GetModalContainer(), t2->parent()); 199 EXPECT_EQ(GetModalContainer(), t2->parent());
184 200
185 // t2 should still be active, even after clicking on t1. 201 // t2 should still be active, even after clicking on t1.
186 aura::test::EventGenerator e2(Shell::GetPrimaryRootWindow(), t1); 202 aura::test::EventGenerator e2(Shell::GetPrimaryRootWindow(), t1);
187 e2.ClickLeftButton(); 203 e2.ClickLeftButton();
188 EXPECT_TRUE(wm::IsActiveWindow(t2)); 204 EXPECT_TRUE(wm::IsActiveWindow(t2));
189 205
190 // Both transients should be destroyed with parent. 206 // Both transients should be destroyed with parent.
191 parent.reset(); 207 parent.reset();
192 EXPECT_TRUE(do1.destroyed()); 208 EXPECT_TRUE(do1.destroyed());
193 EXPECT_TRUE(do2.destroyed()); 209 EXPECT_TRUE(do2.destroyed());
194 } 210 }
195 211
196 TEST_F(SystemModalContainerLayoutManagerTest, ModalNonTransient) { 212 TEST_F(SystemModalContainerLayoutManagerTest, ModalNonTransient) {
197 scoped_ptr<aura::Window> t1(TestWindow::OpenTestWindow(NULL, true)); 213 scoped_ptr<aura::Window> t1(OpenToplevelTestWindow(true));
198 // parent should be active. 214 // parent should be active.
199 EXPECT_TRUE(wm::IsActiveWindow(t1.get())); 215 EXPECT_TRUE(wm::IsActiveWindow(t1.get()));
200 TransientWindowObserver do1; 216 TransientWindowObserver do1;
201 t1->AddObserver(&do1); 217 t1->AddObserver(&do1);
202 218
203 EXPECT_EQ(NULL, t1->transient_parent()); 219 EXPECT_EQ(NULL, t1->transient_parent());
204 EXPECT_EQ(GetModalContainer(), t1->parent()); 220 EXPECT_EQ(GetModalContainer(), t1->parent());
205 221
206 // t1 should now be active. 222 // t1 should now be active.
207 EXPECT_TRUE(wm::IsActiveWindow(t1.get())); 223 EXPECT_TRUE(wm::IsActiveWindow(t1.get()));
208 224
209 // Attempting to click the parent should result in no activation change. 225 // Attempting to click the parent should result in no activation change.
210 aura::test::EventGenerator e1(Shell::GetPrimaryRootWindow(), 226 aura::test::EventGenerator e1(Shell::GetPrimaryRootWindow(),
211 Shell::GetPrimaryRootWindow()); 227 Shell::GetPrimaryRootWindow());
212 e1.ClickLeftButton(); 228 e1.ClickLeftButton();
213 EXPECT_TRUE(wm::IsActiveWindow(t1.get())); 229 EXPECT_TRUE(wm::IsActiveWindow(t1.get()));
214 230
215 // Now open another modal transient parented to the original modal transient. 231 // Now open another modal transient parented to the original modal transient.
216 aura::Window* t2 = TestWindow::OpenTestWindow(t1.get(), true); 232 aura::Window* t2 = OpenTestWindowWithParent(t1.get(), true);
217 TransientWindowObserver do2; 233 TransientWindowObserver do2;
218 t2->AddObserver(&do2); 234 t2->AddObserver(&do2);
219 235
220 EXPECT_TRUE(wm::IsActiveWindow(t2)); 236 EXPECT_TRUE(wm::IsActiveWindow(t2));
221 237
222 EXPECT_EQ(t1, t2->transient_parent()); 238 EXPECT_EQ(t1, t2->transient_parent());
223 EXPECT_EQ(GetModalContainer(), t2->parent()); 239 EXPECT_EQ(GetModalContainer(), t2->parent());
224 240
225 // t2 should still be active, even after clicking on t1. 241 // t2 should still be active, even after clicking on t1.
226 aura::test::EventGenerator e2(Shell::GetPrimaryRootWindow(), t1.get()); 242 aura::test::EventGenerator e2(Shell::GetPrimaryRootWindow(), t1.get());
(...skipping 10 matching lines...) Expand all
237 #if defined(OS_MACOSX) 253 #if defined(OS_MACOSX)
238 #define MAYBE_CanActivateAfterEndModalSession \ 254 #define MAYBE_CanActivateAfterEndModalSession \
239 DISABLED_CanActivateAfterEndModalSession 255 DISABLED_CanActivateAfterEndModalSession
240 #else 256 #else
241 #define MAYBE_CanActivateAfterEndModalSession CanActivateAfterEndModalSession 257 #define MAYBE_CanActivateAfterEndModalSession CanActivateAfterEndModalSession
242 #endif 258 #endif
243 // Tests that we can activate an unrelated window after a modal window is closed 259 // Tests that we can activate an unrelated window after a modal window is closed
244 // for a window. 260 // for a window.
245 TEST_F(SystemModalContainerLayoutManagerTest, 261 TEST_F(SystemModalContainerLayoutManagerTest,
246 MAYBE_CanActivateAfterEndModalSession) { 262 MAYBE_CanActivateAfterEndModalSession) {
247 scoped_ptr<aura::Window> unrelated(TestWindow::OpenTestWindow(NULL, false)); 263 scoped_ptr<aura::Window> unrelated(OpenToplevelTestWindow(false));
248 unrelated->SetBounds(gfx::Rect(100, 100, 50, 50)); 264 unrelated->SetBounds(gfx::Rect(100, 100, 50, 50));
249 scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false)); 265 scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
250 // parent should be active. 266 // parent should be active.
251 EXPECT_TRUE(wm::IsActiveWindow(parent.get())); 267 EXPECT_TRUE(wm::IsActiveWindow(parent.get()));
252 268
253 scoped_ptr<aura::Window> transient( 269 scoped_ptr<aura::Window> transient(
254 TestWindow::OpenTestWindow(parent.get(), true)); 270 OpenTestWindowWithParent(parent.get(), true));
255 // t1 should now be active. 271 // t1 should now be active.
256 EXPECT_TRUE(wm::IsActiveWindow(transient.get())); 272 EXPECT_TRUE(wm::IsActiveWindow(transient.get()));
257 273
258 // Attempting to click the parent should result in no activation change. 274 // Attempting to click the parent should result in no activation change.
259 aura::test::EventGenerator e1(Shell::GetPrimaryRootWindow(), parent.get()); 275 aura::test::EventGenerator e1(Shell::GetPrimaryRootWindow(), parent.get());
260 e1.ClickLeftButton(); 276 e1.ClickLeftButton();
261 EXPECT_TRUE(wm::IsActiveWindow(transient.get())); 277 EXPECT_TRUE(wm::IsActiveWindow(transient.get()));
262 278
263 // Now close the transient. 279 // Now close the transient.
264 transient->Hide(); 280 transient->Hide();
265 TestWindow::CloseTestWindow(transient.release()); 281 TestWindow::CloseTestWindow(transient.release());
266 282
267 MessageLoopForUI::current()->RunUntilIdle(); 283 MessageLoopForUI::current()->RunUntilIdle();
268 284
269 // parent should now be active again. 285 // parent should now be active again.
270 EXPECT_TRUE(wm::IsActiveWindow(parent.get())); 286 EXPECT_TRUE(wm::IsActiveWindow(parent.get()));
271 287
272 // Attempting to click unrelated should activate it. 288 // Attempting to click unrelated should activate it.
273 aura::test::EventGenerator e2(Shell::GetPrimaryRootWindow(), unrelated.get()); 289 aura::test::EventGenerator e2(Shell::GetPrimaryRootWindow(), unrelated.get());
274 e2.ClickLeftButton(); 290 e2.ClickLeftButton();
275 EXPECT_TRUE(wm::IsActiveWindow(unrelated.get())); 291 EXPECT_TRUE(wm::IsActiveWindow(unrelated.get()));
276 } 292 }
277 293
278 TEST_F(SystemModalContainerLayoutManagerTest, EventFocusContainers) { 294 TEST_F(SystemModalContainerLayoutManagerTest, EventFocusContainers) {
279 // Create a normal window and attempt to receive a click event. 295 // Create a normal window and attempt to receive a click event.
280 EventTestWindow* main_delegate = new EventTestWindow(false); 296 EventTestWindow* main_delegate = new EventTestWindow(false);
281 scoped_ptr<aura::Window> main(main_delegate->OpenTestWindow(NULL)); 297 scoped_ptr<aura::Window> main(
298 main_delegate->OpenTestWindowWithContext(CurrentContext()));
282 EXPECT_TRUE(wm::IsActiveWindow(main.get())); 299 EXPECT_TRUE(wm::IsActiveWindow(main.get()));
283 aura::test::EventGenerator e1(Shell::GetPrimaryRootWindow(), main.get()); 300 aura::test::EventGenerator e1(Shell::GetPrimaryRootWindow(), main.get());
284 e1.ClickLeftButton(); 301 e1.ClickLeftButton();
285 EXPECT_EQ(1, main_delegate->mouse_presses()); 302 EXPECT_EQ(1, main_delegate->mouse_presses());
286 303
287 // Create a modal window for the main window and verify that the main window 304 // Create a modal window for the main window and verify that the main window
288 // no longer receives mouse events. 305 // no longer receives mouse events.
289 EventTestWindow* transient_delegate = new EventTestWindow(true); 306 EventTestWindow* transient_delegate = new EventTestWindow(true);
290 aura::Window* transient = transient_delegate->OpenTestWindow(main.get()); 307 aura::Window* transient =
308 transient_delegate->OpenTestWindowWithParent(main.get());
291 EXPECT_TRUE(wm::IsActiveWindow(transient)); 309 EXPECT_TRUE(wm::IsActiveWindow(transient));
292 e1.ClickLeftButton(); 310 e1.ClickLeftButton();
293 EXPECT_EQ(1, transient_delegate->mouse_presses()); 311 EXPECT_EQ(1, transient_delegate->mouse_presses());
294 312
295 // Create a window in the lock screen container and ensure that it receives 313 // Create a window in the lock screen container and ensure that it receives
296 // the mouse event instead of the modal window (crbug.com/110920). 314 // the mouse event instead of the modal window (crbug.com/110920).
297 Shell::GetInstance()->delegate()->LockScreen(); 315 Shell::GetInstance()->delegate()->LockScreen();
298 EventTestWindow* lock_delegate = new EventTestWindow(false); 316 EventTestWindow* lock_delegate = new EventTestWindow(false);
299 scoped_ptr<aura::Window> lock(lock_delegate->OpenTestWindow( 317 scoped_ptr<aura::Window> lock(lock_delegate->OpenTestWindowWithParent(
300 Shell::GetPrimaryRootWindowController()->GetContainer( 318 Shell::GetPrimaryRootWindowController()->GetContainer(
301 ash::internal::kShellWindowId_LockScreenContainer))); 319 ash::internal::kShellWindowId_LockScreenContainer)));
302 EXPECT_TRUE(wm::IsActiveWindow(lock.get())); 320 EXPECT_TRUE(wm::IsActiveWindow(lock.get()));
303 e1.ClickLeftButton(); 321 e1.ClickLeftButton();
304 EXPECT_EQ(1, lock_delegate->mouse_presses()); 322 EXPECT_EQ(1, lock_delegate->mouse_presses());
305 323
306 // Make sure that a modal container created by the lock screen can still 324 // Make sure that a modal container created by the lock screen can still
307 // receive mouse events. 325 // receive mouse events.
308 EventTestWindow* lock_modal_delegate = new EventTestWindow(true); 326 EventTestWindow* lock_modal_delegate = new EventTestWindow(true);
309 aura::Window* lock_modal = lock_modal_delegate->OpenTestWindow(lock.get()); 327 aura::Window* lock_modal =
328 lock_modal_delegate->OpenTestWindowWithParent(lock.get());
310 EXPECT_TRUE(wm::IsActiveWindow(lock_modal)); 329 EXPECT_TRUE(wm::IsActiveWindow(lock_modal));
311 e1.ClickLeftButton(); 330 e1.ClickLeftButton();
312 EXPECT_EQ(1, lock_modal_delegate->mouse_presses()); 331 EXPECT_EQ(1, lock_modal_delegate->mouse_presses());
313 332
314 // Verify that none of the other containers received any more mouse presses. 333 // Verify that none of the other containers received any more mouse presses.
315 EXPECT_EQ(1, main_delegate->mouse_presses()); 334 EXPECT_EQ(1, main_delegate->mouse_presses());
316 EXPECT_EQ(1, transient_delegate->mouse_presses()); 335 EXPECT_EQ(1, transient_delegate->mouse_presses());
317 EXPECT_EQ(1, lock_delegate->mouse_presses()); 336 EXPECT_EQ(1, lock_delegate->mouse_presses());
318 EXPECT_EQ(1, lock_modal_delegate->mouse_presses()); 337 EXPECT_EQ(1, lock_modal_delegate->mouse_presses());
319 338
320 Shell::GetInstance()->delegate()->UnlockScreen(); 339 Shell::GetInstance()->delegate()->UnlockScreen();
321 } 340 }
322 341
323 // Makes sure we don't crash if a modal window is shown while the parent window 342 // Makes sure we don't crash if a modal window is shown while the parent window
324 // is hidden. 343 // is hidden.
325 TEST_F(SystemModalContainerLayoutManagerTest, ShowModalWhileHidden) { 344 TEST_F(SystemModalContainerLayoutManagerTest, ShowModalWhileHidden) {
326 // Hide the lock screen. 345 // Hide the lock screen.
327 Shell::GetPrimaryRootWindowController()->GetContainer( 346 Shell::GetPrimaryRootWindowController()->GetContainer(
328 internal::kShellWindowId_SystemModalContainer)->layer()->SetOpacity(0); 347 internal::kShellWindowId_SystemModalContainer)->layer()->SetOpacity(0);
329 348
330 // Create a modal window. 349 // Create a modal window.
331 scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false)); 350 scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
332 scoped_ptr<aura::Window> modal_window( 351 scoped_ptr<aura::Window> modal_window(
333 TestWindow::OpenTestWindow(parent.get(), true)); 352 OpenTestWindowWithParent(parent.get(), true));
334 parent->Show(); 353 parent->Show();
335 modal_window->Show(); 354 modal_window->Show();
336 } 355 }
337 356
338 // Verifies we generate a capture lost when showing a modal window. 357 // Verifies we generate a capture lost when showing a modal window.
339 TEST_F(SystemModalContainerLayoutManagerTest, ChangeCapture) { 358 TEST_F(SystemModalContainerLayoutManagerTest, ChangeCapture) {
340 views::Widget* widget = 359 views::Widget* widget = views::Widget::CreateWindowWithContext(
341 views::Widget::CreateWindowWithParent(new TestWindow(false), NULL); 360 new TestWindow(false), CurrentContext());
342 scoped_ptr<aura::Window> widget_window(widget->GetNativeView()); 361 scoped_ptr<aura::Window> widget_window(widget->GetNativeView());
343 views::test::CaptureTrackingView* view = new views::test::CaptureTrackingView; 362 views::test::CaptureTrackingView* view = new views::test::CaptureTrackingView;
344 widget->GetContentsView()->AddChildView(view); 363 widget->GetContentsView()->AddChildView(view);
345 view->SetBoundsRect(widget->GetContentsView()->bounds()); 364 view->SetBoundsRect(widget->GetContentsView()->bounds());
346 widget->Show(); 365 widget->Show();
347 366
348 gfx::Point center(view->width() / 2, view->height() / 2); 367 gfx::Point center(view->width() / 2, view->height() / 2);
349 views::View::ConvertPointToScreen(view, &center); 368 views::View::ConvertPointToScreen(view, &center);
350 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), center); 369 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), center);
351 generator.PressLeftButton(); 370 generator.PressLeftButton();
352 EXPECT_TRUE(view->got_press()); 371 EXPECT_TRUE(view->got_press());
353 scoped_ptr<aura::Window> modal_window( 372 scoped_ptr<aura::Window> modal_window(
354 TestWindow::OpenTestWindow(widget->GetNativeView(), true)); 373 OpenTestWindowWithParent(widget->GetNativeView(), true));
355 modal_window->Show(); 374 modal_window->Show();
356 EXPECT_TRUE(view->got_capture_lost()); 375 EXPECT_TRUE(view->got_capture_lost());
357 } 376 }
358 377
359 // Verifies that the window gets moved into the visible screen area upon screen 378 // Verifies that the window gets moved into the visible screen area upon screen
360 // resize. 379 // resize.
361 TEST_F(SystemModalContainerLayoutManagerTest, KeepVisible) { 380 TEST_F(SystemModalContainerLayoutManagerTest, KeepVisible) {
362 GetModalContainer()->SetBounds(gfx::Rect(0, 0, 1024, 768)); 381 GetModalContainer()->SetBounds(gfx::Rect(0, 0, 1024, 768));
363 scoped_ptr<aura::Window> main(TestWindow::OpenTestWindow(GetModalContainer(), 382 scoped_ptr<aura::Window> main(OpenTestWindowWithParent(GetModalContainer(),
364 true)); 383 true));
365 main->SetBounds(gfx::Rect(924, 668, 100, 100)); 384 main->SetBounds(gfx::Rect(924, 668, 100, 100));
366 // We set now the bounds of the root window to something new which will 385 // We set now the bounds of the root window to something new which will
367 // Then trigger the repos operation. 386 // Then trigger the repos operation.
368 GetModalContainer()->SetBounds(gfx::Rect(0, 0, 800, 600)); 387 GetModalContainer()->SetBounds(gfx::Rect(0, 0, 800, 600));
369 388
370 gfx::Rect bounds = main->bounds(); 389 gfx::Rect bounds = main->bounds();
371 EXPECT_EQ(bounds, gfx::Rect(700, 500, 100, 100)); 390 EXPECT_EQ(bounds, gfx::Rect(700, 500, 100, 100));
372 } 391 }
373 392
374 TEST_F(SystemModalContainerLayoutManagerTest, ShowNormalBackgroundOrLocked) { 393 TEST_F(SystemModalContainerLayoutManagerTest, ShowNormalBackgroundOrLocked) {
375 scoped_ptr<aura::Window> parent(TestWindow::OpenTestWindow(NULL, false)); 394 scoped_ptr<aura::Window> parent(OpenToplevelTestWindow(false));
376 scoped_ptr<aura::Window> modal_window( 395 scoped_ptr<aura::Window> modal_window(
377 TestWindow::OpenTestWindow(parent.get(), true)); 396 OpenTestWindowWithParent(parent.get(), true));
378 parent->Show(); 397 parent->Show();
379 modal_window->Show(); 398 modal_window->Show();
380 399
381 // Normal system modal window. Shows normal system modal background and not 400 // Normal system modal window. Shows normal system modal background and not
382 // locked. 401 // locked.
383 EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds()); 402 EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds());
384 EXPECT_FALSE(AllRootWindowsHaveLockedModalBackgrounds()); 403 EXPECT_FALSE(AllRootWindowsHaveLockedModalBackgrounds());
385 404
386 TestWindow::CloseTestWindow(modal_window.release()); 405 TestWindow::CloseTestWindow(modal_window.release());
387 EXPECT_FALSE(AllRootWindowsHaveModalBackgrounds()); 406 EXPECT_FALSE(AllRootWindowsHaveModalBackgrounds());
388 EXPECT_FALSE(AllRootWindowsHaveLockedModalBackgrounds()); 407 EXPECT_FALSE(AllRootWindowsHaveLockedModalBackgrounds());
389 408
390 // Normal system modal window while locked. Shows locked system modal 409 // Normal system modal window while locked. Shows locked system modal
391 // background. 410 // background.
392 Shell::GetInstance()->delegate()->LockScreen(); 411 Shell::GetInstance()->delegate()->LockScreen();
393 scoped_ptr<aura::Window> lock_parent(TestWindow::OpenTestWindow( 412 scoped_ptr<aura::Window> lock_parent(OpenTestWindowWithParent(
394 Shell::GetPrimaryRootWindowController()->GetContainer( 413 Shell::GetPrimaryRootWindowController()->GetContainer(
395 ash::internal::kShellWindowId_LockScreenContainer), 414 ash::internal::kShellWindowId_LockScreenContainer),
396 false)); 415 false));
397 scoped_ptr<aura::Window> lock_modal_window(TestWindow::OpenTestWindow( 416 scoped_ptr<aura::Window> lock_modal_window(OpenTestWindowWithParent(
398 lock_parent.get(), true)); 417 lock_parent.get(), true));
399 lock_parent->Show(); 418 lock_parent->Show();
400 lock_modal_window->Show(); 419 lock_modal_window->Show();
401 EXPECT_FALSE(AllRootWindowsHaveModalBackgrounds()); 420 EXPECT_FALSE(AllRootWindowsHaveModalBackgrounds());
402 EXPECT_TRUE(AllRootWindowsHaveLockedModalBackgrounds()); 421 EXPECT_TRUE(AllRootWindowsHaveLockedModalBackgrounds());
403 TestWindow::CloseTestWindow(lock_modal_window.release()); 422 TestWindow::CloseTestWindow(lock_modal_window.release());
404 423
405 // Normal system modal window while locked, but it belongs to the normal 424 // Normal system modal window while locked, but it belongs to the normal
406 // window. Shouldn't show locked system modal background, but normal. 425 // window. Shouldn't show locked system modal background, but normal.
407 scoped_ptr<aura::Window> modal_window2( 426 scoped_ptr<aura::Window> modal_window2(
408 TestWindow::OpenTestWindow(parent.get(), true)); 427 OpenTestWindowWithParent(parent.get(), true));
409 modal_window2->Show(); 428 modal_window2->Show();
410 EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds()); 429 EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds());
411 EXPECT_FALSE(AllRootWindowsHaveLockedModalBackgrounds()); 430 EXPECT_FALSE(AllRootWindowsHaveLockedModalBackgrounds());
412 TestWindow::CloseTestWindow(modal_window2.release()); 431 TestWindow::CloseTestWindow(modal_window2.release());
413 432
414 // Here we should check the behavior of the locked system modal dialog when 433 // Here we should check the behavior of the locked system modal dialog when
415 // unlocked, but such case isn't handled very well right now. 434 // unlocked, but such case isn't handled very well right now.
416 // See crbug.com/157660 435 // See crbug.com/157660
417 // TODO(mukai): add the test case when the bug is fixed. 436 // TODO(mukai): add the test case when the bug is fixed.
418 } 437 }
419 438
420 TEST_F(SystemModalContainerLayoutManagerTest, MultiDisplays) { 439 TEST_F(SystemModalContainerLayoutManagerTest, MultiDisplays) {
421 UpdateDisplay("500x500,500x500"); 440 UpdateDisplay("500x500,500x500");
422 441
423 scoped_ptr<aura::Window> normal(TestWindow::OpenTestWindow(NULL, false)); 442 scoped_ptr<aura::Window> normal(OpenToplevelTestWindow(false));
424 normal->SetBounds(gfx::Rect(100, 100, 50, 50)); 443 normal->SetBounds(gfx::Rect(100, 100, 50, 50));
425 444
426 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); 445 Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
427 EXPECT_EQ(2U, root_windows.size()); 446 EXPECT_EQ(2U, root_windows.size());
428 aura::Window* container1 = Shell::GetContainer( 447 aura::Window* container1 = Shell::GetContainer(
429 root_windows[0], ash::internal::kShellWindowId_SystemModalContainer); 448 root_windows[0], ash::internal::kShellWindowId_SystemModalContainer);
430 aura::Window* container2 = Shell::GetContainer( 449 aura::Window* container2 = Shell::GetContainer(
431 root_windows[1], ash::internal::kShellWindowId_SystemModalContainer); 450 root_windows[1], ash::internal::kShellWindowId_SystemModalContainer);
432 451
433 scoped_ptr<aura::Window> modal1( 452 scoped_ptr<aura::Window> modal1(
434 TestWindow::OpenTestWindow(container1, true)); 453 OpenTestWindowWithParent(container1, true));
435 EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds()); 454 EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds());
436 EXPECT_TRUE(wm::IsActiveWindow(modal1.get())); 455 EXPECT_TRUE(wm::IsActiveWindow(modal1.get()));
437 456
438 scoped_ptr<aura::Window> modal11( 457 scoped_ptr<aura::Window> modal11(
439 TestWindow::OpenTestWindow(container1, true)); 458 OpenTestWindowWithParent(container1, true));
440 EXPECT_TRUE(wm::IsActiveWindow(modal11.get())); 459 EXPECT_TRUE(wm::IsActiveWindow(modal11.get()));
441 460
442 scoped_ptr<aura::Window> modal2( 461 scoped_ptr<aura::Window> modal2(
443 TestWindow::OpenTestWindow(container2, true)); 462 OpenTestWindowWithParent(container2, true));
444 EXPECT_TRUE(wm::IsActiveWindow(modal2.get())); 463 EXPECT_TRUE(wm::IsActiveWindow(modal2.get()));
445 464
446 // Sanity check if they're on the correct containers. 465 // Sanity check if they're on the correct containers.
447 EXPECT_EQ(container1, modal1->parent()); 466 EXPECT_EQ(container1, modal1->parent());
448 EXPECT_EQ(container1, modal11->parent()); 467 EXPECT_EQ(container1, modal11->parent());
449 EXPECT_EQ(container2, modal2->parent()); 468 EXPECT_EQ(container2, modal2->parent());
450 469
451 TestWindow::CloseTestWindow(modal2.release()); 470 TestWindow::CloseTestWindow(modal2.release());
452 EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds()); 471 EXPECT_TRUE(AllRootWindowsHaveModalBackgrounds());
453 EXPECT_TRUE(wm::IsActiveWindow(modal11.get())); 472 EXPECT_TRUE(wm::IsActiveWindow(modal11.get()));
(...skipping 12 matching lines...) Expand all
466 485
467 // No more modal screen. 486 // No more modal screen.
468 modal1->Hide(); 487 modal1->Hide();
469 TestWindow::CloseTestWindow(modal1.release()); 488 TestWindow::CloseTestWindow(modal1.release());
470 EXPECT_FALSE(AllRootWindowsHaveModalBackgrounds()); 489 EXPECT_FALSE(AllRootWindowsHaveModalBackgrounds());
471 EXPECT_TRUE(wm::IsActiveWindow(normal.get())); 490 EXPECT_TRUE(wm::IsActiveWindow(normal.get()));
472 } 491 }
473 492
474 } // namespace test 493 } // namespace test
475 } // namespace ash 494 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/system_gesture_event_filter_unittest.cc ('k') | ash/wm/window_modality_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698