| 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 "ui/views/corewm/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" | |
| 10 #include "ash/test/child_modal_window.h" | |
| 11 #include "ash/wm/window_util.h" | 9 #include "ash/wm/window_util.h" |
| 12 #include "ui/aura/client/aura_constants.h" | 10 #include "ui/aura/client/aura_constants.h" |
| 13 #include "ui/aura/test/event_generator.h" | 11 #include "ui/aura/test/event_generator.h" |
| 14 #include "ui/aura/test/test_window_delegate.h" | 12 #include "ui/aura/test/test_window_delegate.h" |
| 15 #include "ui/aura/test/test_windows.h" | 13 #include "ui/aura/test/test_windows.h" |
| 16 #include "ui/aura/window.h" | 14 #include "ui/aura/window.h" |
| 17 #include "ui/base/ui_base_types.h" | 15 #include "ui/base/ui_base_types.h" |
| 16 #include "ui/views/test/capture_tracking_view.h" |
| 17 #include "ui/views/test/child_modal_window.h" |
| 18 #include "ui/views/widget/widget.h" | 18 #include "ui/views/widget/widget.h" |
| 19 | 19 |
| 20 namespace ash { | 20 namespace ash { |
| 21 namespace internal { | 21 namespace internal { |
| 22 | 22 |
| 23 typedef test::AshTestBase WindowModalityControllerTest; | 23 typedef test::AshTestBase WindowModalityControllerTest; |
| 24 | 24 |
| 25 namespace { | 25 namespace { |
| 26 | 26 |
| 27 bool ValidateStacking(aura::Window* parent, int ids[], int count) { | 27 bool ValidateStacking(aura::Window* parent, int ids[], int count) { |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 aura::test::TestWindowDelegate d; | 212 aura::test::TestWindowDelegate d; |
| 213 scoped_ptr<aura::Window> w1( | 213 scoped_ptr<aura::Window> w1( |
| 214 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); | 214 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
| 215 scoped_ptr<aura::Window> w11( | 215 scoped_ptr<aura::Window> w11( |
| 216 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); | 216 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); |
| 217 scoped_ptr<aura::Window> w2( | 217 scoped_ptr<aura::Window> w2( |
| 218 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); | 218 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
| 219 w2->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 219 w2->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
| 220 | 220 |
| 221 aura::Window* wt; | 221 aura::Window* wt; |
| 222 wt = GetModalTransient(w1.get()); | 222 wt = views::corewm::GetModalTransient(w1.get()); |
| 223 ASSERT_EQ(static_cast<aura::Window*>(NULL), wt); | 223 ASSERT_EQ(static_cast<aura::Window*>(NULL), wt); |
| 224 | 224 |
| 225 // Parent w2 to w1. It should get parented to the parent of w1. | 225 // Parent w2 to w1. It should get parented to the parent of w1. |
| 226 w1->AddTransientChild(w2.get()); | 226 w1->AddTransientChild(w2.get()); |
| 227 ASSERT_EQ(2U, w1->parent()->children().size()); | 227 ASSERT_EQ(2U, w1->parent()->children().size()); |
| 228 EXPECT_EQ(-2, w1->parent()->children().at(1)->id()); | 228 EXPECT_EQ(-2, w1->parent()->children().at(1)->id()); |
| 229 | 229 |
| 230 // Request the modal transient window for w1, it should be w2. | 230 // Request the modal transient window for w1, it should be w2. |
| 231 wt = GetModalTransient(w1.get()); | 231 wt = views::corewm::GetModalTransient(w1.get()); |
| 232 ASSERT_NE(static_cast<aura::Window*>(NULL), wt); | 232 ASSERT_NE(static_cast<aura::Window*>(NULL), wt); |
| 233 EXPECT_EQ(-2, wt->id()); | 233 EXPECT_EQ(-2, wt->id()); |
| 234 | 234 |
| 235 // Request the modal transient window for w11, it should also be w2. | 235 // Request the modal transient window for w11, it should also be w2. |
| 236 wt = GetModalTransient(w11.get()); | 236 wt = views::corewm::GetModalTransient(w11.get()); |
| 237 ASSERT_NE(static_cast<aura::Window*>(NULL), wt); | 237 ASSERT_NE(static_cast<aura::Window*>(NULL), wt); |
| 238 EXPECT_EQ(-2, wt->id()); | 238 EXPECT_EQ(-2, wt->id()); |
| 239 } | 239 } |
| 240 | 240 |
| 241 // Verifies we generate a capture lost when showing a modal window. | 241 // Verifies we generate a capture lost when showing a modal window. |
| 242 TEST_F(WindowModalityControllerTest, ChangeCapture) { | 242 TEST_F(WindowModalityControllerTest, ChangeCapture) { |
| 243 views::Widget* widget = views::Widget::CreateWindow(NULL); | 243 views::Widget* widget = views::Widget::CreateWindow(NULL); |
| 244 scoped_ptr<aura::Window> widget_window(widget->GetNativeView()); | 244 scoped_ptr<aura::Window> widget_window(widget->GetNativeView()); |
| 245 test::CaptureTrackingView* view = new test::CaptureTrackingView; | 245 views::test::CaptureTrackingView* view = new views::test::CaptureTrackingView; |
| 246 widget->client_view()->AddChildView(view); | 246 widget->client_view()->AddChildView(view); |
| 247 widget->SetBounds(gfx::Rect(0, 0, 200, 200)); | 247 widget->SetBounds(gfx::Rect(0, 0, 200, 200)); |
| 248 view->SetBoundsRect(widget->client_view()->GetLocalBounds()); | 248 view->SetBoundsRect(widget->client_view()->GetLocalBounds()); |
| 249 widget->Show(); | 249 widget->Show(); |
| 250 | 250 |
| 251 gfx::Point center(view->width() / 2, view->height() / 2); | 251 gfx::Point center(view->width() / 2, view->height() / 2); |
| 252 views::View::ConvertPointToScreen(view, ¢er); | 252 views::View::ConvertPointToScreen(view, ¢er); |
| 253 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), center); | 253 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), center); |
| 254 generator.PressLeftButton(); | 254 generator.PressLeftButton(); |
| 255 EXPECT_TRUE(view->got_press()); | 255 EXPECT_TRUE(view->got_press()); |
| 256 | 256 |
| 257 views::Widget* modal_widget = | 257 views::Widget* modal_widget = |
| 258 views::Widget::CreateWindowWithParent(NULL, widget->GetNativeView()); | 258 views::Widget::CreateWindowWithParent(NULL, widget->GetNativeView()); |
| 259 scoped_ptr<aura::Window> modal_window(modal_widget->GetNativeView()); | 259 scoped_ptr<aura::Window> modal_window(modal_widget->GetNativeView()); |
| 260 modal_window->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); | 260 modal_window->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_WINDOW); |
| 261 test::CaptureTrackingView* modal_view = new test::CaptureTrackingView; | 261 views::test::CaptureTrackingView* modal_view = |
| 262 new views::test::CaptureTrackingView; |
| 262 modal_widget->client_view()->AddChildView(modal_view); | 263 modal_widget->client_view()->AddChildView(modal_view); |
| 263 modal_widget->SetBounds(gfx::Rect(50, 50, 200, 200)); | 264 modal_widget->SetBounds(gfx::Rect(50, 50, 200, 200)); |
| 264 modal_view->SetBoundsRect(modal_widget->client_view()->GetLocalBounds()); | 265 modal_view->SetBoundsRect(modal_widget->client_view()->GetLocalBounds()); |
| 265 modal_widget->Show(); | 266 modal_widget->Show(); |
| 266 | 267 |
| 267 EXPECT_TRUE(view->got_capture_lost()); | 268 EXPECT_TRUE(view->got_capture_lost()); |
| 268 generator.ReleaseLeftButton(); | 269 generator.ReleaseLeftButton(); |
| 269 | 270 |
| 270 view->reset(); | 271 view->reset(); |
| 271 | 272 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 352 // - A |child| window with parent window |parent|, but is modal to | 353 // - A |child| window with parent window |parent|, but is modal to |
| 353 // |modal_parent| window. | 354 // |modal_parent| window. |
| 354 // Validates: | 355 // Validates: |
| 355 // - Clicking on the |modal_parent| should activate the |child| window. | 356 // - Clicking on the |modal_parent| should activate the |child| window. |
| 356 // - Clicking on the |parent| window outside of the |modal_parent| bounds should | 357 // - Clicking on the |parent| window outside of the |modal_parent| bounds should |
| 357 // activate the |parent| window. | 358 // activate the |parent| window. |
| 358 // - Clicking on the |child| while |parent| is active should activate the | 359 // - Clicking on the |child| while |parent| is active should activate the |
| 359 // |child| window. | 360 // |child| window. |
| 360 // - Focus should follow the active window. | 361 // - Focus should follow the active window. |
| 361 TEST_F(WindowModalityControllerTest, ChildModal) { | 362 TEST_F(WindowModalityControllerTest, ChildModal) { |
| 362 test::ChildModalParent* delegate = new test::ChildModalParent; | 363 views::test::ChildModalParent* delegate = new views::test::ChildModalParent; |
| 363 views::Widget* widget = views::Widget::CreateWindowWithBounds( | 364 views::Widget* widget = views::Widget::CreateWindowWithBounds( |
| 364 delegate, gfx::Rect(0, 0, 400, 400)); | 365 delegate, gfx::Rect(0, 0, 400, 400)); |
| 365 widget->Show(); | 366 widget->Show(); |
| 366 | 367 |
| 367 aura::Window* parent = widget->GetNativeView(); | 368 aura::Window* parent = widget->GetNativeView(); |
| 368 EXPECT_TRUE(wm::IsActiveWindow(parent)); | 369 EXPECT_TRUE(wm::IsActiveWindow(parent)); |
| 369 | 370 |
| 370 aura::Window* modal_parent = delegate->GetModalParent(); | 371 aura::Window* modal_parent = delegate->GetModalParent(); |
| 371 EXPECT_NE(static_cast<aura::Window*>(NULL), modal_parent); | 372 EXPECT_NE(static_cast<aura::Window*>(NULL), modal_parent); |
| 372 EXPECT_NE(parent, modal_parent); | 373 EXPECT_NE(parent, modal_parent); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 411 EXPECT_FALSE(wm::IsActiveWindow(parent)); | 412 EXPECT_FALSE(wm::IsActiveWindow(parent)); |
| 412 | 413 |
| 413 EXPECT_TRUE(child->HasFocus()); | 414 EXPECT_TRUE(child->HasFocus()); |
| 414 EXPECT_FALSE(modal_parent->HasFocus()); | 415 EXPECT_FALSE(modal_parent->HasFocus()); |
| 415 EXPECT_FALSE(parent->HasFocus()); | 416 EXPECT_FALSE(parent->HasFocus()); |
| 416 } | 417 } |
| 417 | 418 |
| 418 // Same as |ChildModal| test, but using |EventGenerator| rather than bypassing | 419 // Same as |ChildModal| test, but using |EventGenerator| rather than bypassing |
| 419 // it by calling |ActivateWindow|. | 420 // it by calling |ActivateWindow|. |
| 420 TEST_F(WindowModalityControllerTest, ChildModalEventGenerator) { | 421 TEST_F(WindowModalityControllerTest, ChildModalEventGenerator) { |
| 421 test::ChildModalParent* delegate = new test::ChildModalParent; | 422 views::test::ChildModalParent* delegate = new views::test::ChildModalParent; |
| 422 views::Widget* widget = views::Widget::CreateWindowWithBounds( | 423 views::Widget* widget = views::Widget::CreateWindowWithBounds( |
| 423 delegate, gfx::Rect(0, 0, 400, 400)); | 424 delegate, gfx::Rect(0, 0, 400, 400)); |
| 424 widget->Show(); | 425 widget->Show(); |
| 425 | 426 |
| 426 aura::Window* parent = widget->GetNativeView(); | 427 aura::Window* parent = widget->GetNativeView(); |
| 427 EXPECT_TRUE(wm::IsActiveWindow(parent)); | 428 EXPECT_TRUE(wm::IsActiveWindow(parent)); |
| 428 | 429 |
| 429 aura::Window* modal_parent = delegate->GetModalParent(); | 430 aura::Window* modal_parent = delegate->GetModalParent(); |
| 430 EXPECT_NE(static_cast<aura::Window*>(NULL), modal_parent); | 431 EXPECT_NE(static_cast<aura::Window*>(NULL), modal_parent); |
| 431 EXPECT_NE(parent, modal_parent); | 432 EXPECT_NE(parent, modal_parent); |
| (...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 525 aura::test::TestWindowDelegate d; | 526 aura::test::TestWindowDelegate d; |
| 526 scoped_ptr<aura::Window> w1( | 527 scoped_ptr<aura::Window> w1( |
| 527 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); | 528 CreateTestWindowInShellWithDelegate(&d, -1, gfx::Rect())); |
| 528 scoped_ptr<aura::Window> w2( | 529 scoped_ptr<aura::Window> w2( |
| 529 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); | 530 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w1.get())); |
| 530 scoped_ptr<aura::Window> w3( | 531 scoped_ptr<aura::Window> w3( |
| 531 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w2.get())); | 532 aura::test::CreateTestWindowWithDelegate(&d, -11, gfx::Rect(), w2.get())); |
| 532 scoped_ptr<aura::Window> w4( | 533 scoped_ptr<aura::Window> w4( |
| 533 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); | 534 CreateTestWindowInShellWithDelegate(&d, -2, gfx::Rect())); |
| 534 w4->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_CHILD); | 535 w4->SetProperty(aura::client::kModalKey, ui::MODAL_TYPE_CHILD); |
| 535 SetModalParent(w4.get(), w2.get()); | 536 views::corewm::SetModalParent(w4.get(), w2.get()); |
| 536 w1->AddTransientChild(w4.get()); | 537 w1->AddTransientChild(w4.get()); |
| 537 | 538 |
| 538 wm::ActivateWindow(w1.get()); | 539 wm::ActivateWindow(w1.get()); |
| 539 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 540 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
| 540 | 541 |
| 541 wm::ActivateWindow(w2.get()); | 542 wm::ActivateWindow(w2.get()); |
| 542 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 543 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 543 | 544 |
| 544 wm::ActivateWindow(w3.get()); | 545 wm::ActivateWindow(w3.get()); |
| 545 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 546 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 546 | 547 |
| 547 wm::ActivateWindow(w4.get()); | 548 wm::ActivateWindow(w4.get()); |
| 548 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); | 549 EXPECT_TRUE(wm::IsActiveWindow(w4.get())); |
| 549 } | 550 } |
| 550 | 551 |
| 551 } // namespace internal | 552 } // namespace internal |
| 552 } // namespace ash | 553 } // namespace ash |
| OLD | NEW |