| 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/shell.h" | 5 #include "ash/shell.h" |
| 6 #include "ash/shell_window_ids.h" | 6 #include "ash/shell_window_ids.h" |
| 7 #include "ash/test/ash_test_base.h" | 7 #include "ash/test/ash_test_base.h" |
| 8 #include "ash/test/test_activation_delegate.h" | 8 #include "ash/test/test_activation_delegate.h" |
| 9 #include "ash/wm/activation_controller.h" | 9 #include "ash/wm/activation_controller.h" |
| 10 #include "ash/wm/cursor_manager.h" | 10 #include "ash/wm/cursor_manager.h" |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 112 Shell::TestApi shell_test(Shell::GetInstance()); | 112 Shell::TestApi shell_test(Shell::GetInstance()); |
| 113 Shell::GetInstance()->RemovePreTargetHandler( | 113 Shell::GetInstance()->RemovePreTargetHandler( |
| 114 shell_test.input_method_event_filter()); | 114 shell_test.input_method_event_filter()); |
| 115 | 115 |
| 116 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); | 116 aura::RootWindow* 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 scoped_ptr<aura::Window> w1(aura::test::CreateTestWindow( | 122 scoped_ptr<aura::Window> w1(CreateTestWindowInShell( |
| 123 SK_ColorWHITE, -1, gfx::Rect(10, 10, 500, 500), NULL)); | 123 SK_ColorWHITE, -1, gfx::Rect(10, 10, 500, 500))); |
| 124 scoped_ptr<aura::Window> w11(aura::test::CreateTestWindow( | 124 scoped_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())); |
| 126 scoped_ptr<aura::Window> w111(aura::test::CreateTestWindow( | 126 scoped_ptr<aura::Window> w111(aura::test::CreateTestWindow( |
| 127 SK_ColorCYAN, -111, gfx::Rect(5, 5, 75, 75), w11.get())); | 127 SK_ColorCYAN, -111, gfx::Rect(5, 5, 75, 75), w11.get())); |
| 128 scoped_ptr<aura::Window> w1111(aura::test::CreateTestWindow( | 128 scoped_ptr<aura::Window> w1111(aura::test::CreateTestWindow( |
| 129 SK_ColorRED, -1111, gfx::Rect(5, 5, 50, 50), w111.get())); | 129 SK_ColorRED, -1111, gfx::Rect(5, 5, 50, 50), w111.get())); |
| 130 scoped_ptr<aura::Window> w12(aura::test::CreateTestWindow( | 130 scoped_ptr<aura::Window> w12(aura::test::CreateTestWindow( |
| 131 SK_ColorMAGENTA, -12, gfx::Rect(10, 420, 25, 25), w1.get())); | 131 SK_ColorMAGENTA, -12, gfx::Rect(10, 420, 25, 25), w1.get())); |
| 132 aura::test::ColorTestWindowDelegate* w121delegate = | 132 aura::test::ColorTestWindowDelegate* w121delegate = |
| 133 new aura::test::ColorTestWindowDelegate(SK_ColorYELLOW); | 133 new aura::test::ColorTestWindowDelegate(SK_ColorYELLOW); |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 212 EXPECT_EQ(NULL, w123->GetFocusManager()); | 212 EXPECT_EQ(NULL, w123->GetFocusManager()); |
| 213 EXPECT_FALSE(root_window->AsRootWindowHostDelegate()->OnHostKeyEvent(&keyev)); | 213 EXPECT_FALSE(root_window->AsRootWindowHostDelegate()->OnHostKeyEvent(&keyev)); |
| 214 } | 214 } |
| 215 | 215 |
| 216 // Various assertion testing for activating windows. | 216 // Various assertion testing for activating windows. |
| 217 TEST_F(WindowManagerTest, ActivateOnMouse) { | 217 TEST_F(WindowManagerTest, ActivateOnMouse) { |
| 218 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); | 218 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); |
| 219 | 219 |
| 220 test::TestActivationDelegate d1; | 220 test::TestActivationDelegate d1; |
| 221 aura::test::TestWindowDelegate wd; | 221 aura::test::TestWindowDelegate wd; |
| 222 scoped_ptr<aura::Window> w1(aura::test::CreateTestWindowWithDelegate( | 222 scoped_ptr<aura::Window> w1(CreateTestWindowInShellWithDelegate( |
| 223 &wd, -1, gfx::Rect(10, 10, 50, 50), NULL)); | 223 &wd, -1, gfx::Rect(10, 10, 50, 50))); |
| 224 d1.SetWindow(w1.get()); | 224 d1.SetWindow(w1.get()); |
| 225 test::TestActivationDelegate d2; | 225 test::TestActivationDelegate d2; |
| 226 scoped_ptr<aura::Window> w2(aura::test::CreateTestWindowWithDelegate( | 226 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithDelegate( |
| 227 &wd, -1, gfx::Rect(70, 70, 50, 50), NULL)); | 227 &wd, -1, gfx::Rect(70, 70, 50, 50))); |
| 228 d2.SetWindow(w2.get()); | 228 d2.SetWindow(w2.get()); |
| 229 | 229 |
| 230 aura::FocusManager* focus_manager = w1->GetFocusManager(); | 230 aura::FocusManager* focus_manager = w1->GetFocusManager(); |
| 231 | 231 |
| 232 d1.Clear(); | 232 d1.Clear(); |
| 233 d2.Clear(); | 233 d2.Clear(); |
| 234 | 234 |
| 235 // Activate window1. | 235 // Activate window1. |
| 236 wm::ActivateWindow(w1.get()); | 236 wm::ActivateWindow(w1.get()); |
| 237 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 237 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 EXPECT_EQ(w1.get(), wm::GetActiveWindow()); | 307 EXPECT_EQ(w1.get(), wm::GetActiveWindow()); |
| 308 } | 308 } |
| 309 | 309 |
| 310 // Clicking on a non-focusable window inside a background window should still | 310 // Clicking on a non-focusable window inside a background window should still |
| 311 // give focus to the background window. | 311 // give focus to the background window. |
| 312 { | 312 { |
| 313 NonFocusableDelegate nfd; | 313 NonFocusableDelegate nfd; |
| 314 scoped_ptr<aura::Window> w11(CreateTestWindowWithDelegate( | 314 scoped_ptr<aura::Window> w11(CreateTestWindowWithDelegate( |
| 315 &nfd, -1, gfx::Rect(10, 10, 10, 10), w1.get())); | 315 &nfd, -1, gfx::Rect(10, 10, 10, 10), w1.get())); |
| 316 // Move focus to |w2| first. | 316 // Move focus to |w2| first. |
| 317 scoped_ptr<aura::Window> w2(aura::test::CreateTestWindowWithDelegate( | 317 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithDelegate( |
| 318 &wd, -1, gfx::Rect(70, 70, 50, 50), NULL)); | 318 &wd, -1, gfx::Rect(70, 70, 50, 50))); |
| 319 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), | 319 aura::test::EventGenerator generator(Shell::GetPrimaryRootWindow(), |
| 320 w2.get()); | 320 w2.get()); |
| 321 generator.ClickLeftButton(); | 321 generator.ClickLeftButton(); |
| 322 EXPECT_EQ(w2.get(), focus_manager->GetFocusedWindow()); | 322 EXPECT_EQ(w2.get(), focus_manager->GetFocusedWindow()); |
| 323 EXPECT_FALSE(w11->CanFocus()); | 323 EXPECT_FALSE(w11->CanFocus()); |
| 324 | 324 |
| 325 // Click on |w11|. This should focus w1. | 325 // Click on |w11|. This should focus w1. |
| 326 generator.MoveMouseToCenterOf(w11.get()); | 326 generator.MoveMouseToCenterOf(w11.get()); |
| 327 generator.ClickLeftButton(); | 327 generator.ClickLeftButton(); |
| 328 EXPECT_EQ(w1.get(), focus_manager->GetFocusedWindow()); | 328 EXPECT_EQ(w1.get(), focus_manager->GetFocusedWindow()); |
| 329 } | 329 } |
| 330 } | 330 } |
| 331 | 331 |
| 332 // Essentially the same as ActivateOnMouse, but for touch events. | 332 // Essentially the same as ActivateOnMouse, but for touch events. |
| 333 TEST_F(WindowManagerTest, ActivateOnTouch) { | 333 TEST_F(WindowManagerTest, ActivateOnTouch) { |
| 334 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); | 334 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); |
| 335 | 335 |
| 336 test::TestActivationDelegate d1; | 336 test::TestActivationDelegate d1; |
| 337 aura::test::TestWindowDelegate wd; | 337 aura::test::TestWindowDelegate wd; |
| 338 scoped_ptr<aura::Window> w1(aura::test::CreateTestWindowWithDelegate( | 338 scoped_ptr<aura::Window> w1(CreateTestWindowInShellWithDelegate( |
| 339 &wd, -1, gfx::Rect(10, 10, 50, 50), NULL)); | 339 &wd, -1, gfx::Rect(10, 10, 50, 50))); |
| 340 d1.SetWindow(w1.get()); | 340 d1.SetWindow(w1.get()); |
| 341 test::TestActivationDelegate d2; | 341 test::TestActivationDelegate d2; |
| 342 scoped_ptr<aura::Window> w2(aura::test::CreateTestWindowWithDelegate( | 342 scoped_ptr<aura::Window> w2(CreateTestWindowInShellWithDelegate( |
| 343 &wd, -2, gfx::Rect(70, 70, 50, 50), NULL)); | 343 &wd, -2, gfx::Rect(70, 70, 50, 50))); |
| 344 d2.SetWindow(w2.get()); | 344 d2.SetWindow(w2.get()); |
| 345 | 345 |
| 346 aura::FocusManager* focus_manager = w1->GetFocusManager(); | 346 aura::FocusManager* focus_manager = w1->GetFocusManager(); |
| 347 | 347 |
| 348 d1.Clear(); | 348 d1.Clear(); |
| 349 d2.Clear(); | 349 d2.Clear(); |
| 350 | 350 |
| 351 // Activate window1. | 351 // Activate window1. |
| 352 wm::ActivateWindow(w1.get()); | 352 wm::ActivateWindow(w1.get()); |
| 353 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); | 353 EXPECT_TRUE(wm::IsActiveWindow(w1.get())); |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 EXPECT_EQ(0, d1.lost_active_count()); | 400 EXPECT_EQ(0, d1.lost_active_count()); |
| 401 } | 401 } |
| 402 | 402 |
| 403 TEST_F(WindowManagerTest, MouseEventCursors) { | 403 TEST_F(WindowManagerTest, MouseEventCursors) { |
| 404 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); | 404 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); |
| 405 | 405 |
| 406 // Create a window. | 406 // Create a window. |
| 407 const int kWindowLeft = 123; | 407 const int kWindowLeft = 123; |
| 408 const int kWindowTop = 45; | 408 const int kWindowTop = 45; |
| 409 HitTestWindowDelegate window_delegate; | 409 HitTestWindowDelegate window_delegate; |
| 410 scoped_ptr<aura::Window> window(aura::test::CreateTestWindowWithDelegate( | 410 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate( |
| 411 &window_delegate, | 411 &window_delegate, |
| 412 -1, | 412 -1, |
| 413 gfx::Rect(kWindowLeft, kWindowTop, 640, 480), | 413 gfx::Rect(kWindowLeft, kWindowTop, 640, 480))); |
| 414 NULL)); | |
| 415 | 414 |
| 416 // Create two mouse movement events we can switch between. | 415 // Create two mouse movement events we can switch between. |
| 417 gfx::Point point1(kWindowLeft, kWindowTop); | 416 gfx::Point point1(kWindowLeft, kWindowTop); |
| 418 aura::Window::ConvertPointToTarget(window->parent(), root_window, &point1); | 417 aura::Window::ConvertPointToTarget(window->parent(), root_window, &point1); |
| 419 | 418 |
| 420 gfx::Point point2(kWindowLeft + 1, kWindowTop + 1); | 419 gfx::Point point2(kWindowLeft + 1, kWindowTop + 1); |
| 421 aura::Window::ConvertPointToTarget(window->parent(), root_window, &point2); | 420 aura::Window::ConvertPointToTarget(window->parent(), root_window, &point2); |
| 422 | 421 |
| 423 // Cursor starts as a pointer (set during Shell::Init()). | 422 // Cursor starts as a pointer (set during Shell::Init()). |
| 424 EXPECT_EQ(ui::kCursorPointer, root_window->last_cursor().native_type()); | 423 EXPECT_EQ(ui::kCursorPointer, root_window->last_cursor().native_type()); |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 507 | 506 |
| 508 // Rotate it clock-wise 90 degrees. | 507 // Rotate it clock-wise 90 degrees. |
| 509 gfx::Transform transform; | 508 gfx::Transform transform; |
| 510 transform.SetRotate(90.0f); | 509 transform.SetRotate(90.0f); |
| 511 transform.ConcatTranslate(size.width(), 0); | 510 transform.ConcatTranslate(size.width(), 0); |
| 512 root_window->SetTransform(transform); | 511 root_window->SetTransform(transform); |
| 513 | 512 |
| 514 test::TestActivationDelegate d1; | 513 test::TestActivationDelegate d1; |
| 515 aura::test::TestWindowDelegate wd; | 514 aura::test::TestWindowDelegate wd; |
| 516 scoped_ptr<aura::Window> w1( | 515 scoped_ptr<aura::Window> w1( |
| 517 CreateTestWindowWithDelegate(&wd, 1, gfx::Rect(0, 10, 50, 50), NULL)); | 516 CreateTestWindowInShellWithDelegate(&wd, 1, gfx::Rect(0, 10, 50, 50))); |
| 518 d1.SetWindow(w1.get()); | 517 d1.SetWindow(w1.get()); |
| 519 w1->Show(); | 518 w1->Show(); |
| 520 | 519 |
| 521 gfx::Point miss_point(5, 5); | 520 gfx::Point miss_point(5, 5); |
| 522 transform.TransformPoint(miss_point); | 521 transform.TransformPoint(miss_point); |
| 523 ui::MouseEvent mouseev1(ui::ET_MOUSE_PRESSED, | 522 ui::MouseEvent mouseev1(ui::ET_MOUSE_PRESSED, |
| 524 miss_point, | 523 miss_point, |
| 525 miss_point, | 524 miss_point, |
| 526 ui::EF_LEFT_MOUSE_BUTTON); | 525 ui::EF_LEFT_MOUSE_BUTTON); |
| 527 root_window->AsRootWindowHostDelegate()->OnHostMouseEvent(&mouseev1); | 526 root_window->AsRootWindowHostDelegate()->OnHostMouseEvent(&mouseev1); |
| (...skipping 18 matching lines...) Expand all Loading... |
| 546 TEST_F(WindowManagerTest, AdditionalFilters) { | 545 TEST_F(WindowManagerTest, AdditionalFilters) { |
| 547 // The IME event filter interferes with the basic key event propagation we | 546 // The IME event filter interferes with the basic key event propagation we |
| 548 // attempt to do here, so we remove it. | 547 // attempt to do here, so we remove it. |
| 549 Shell::TestApi shell_test(Shell::GetInstance()); | 548 Shell::TestApi shell_test(Shell::GetInstance()); |
| 550 Shell::GetInstance()->RemovePreTargetHandler( | 549 Shell::GetInstance()->RemovePreTargetHandler( |
| 551 shell_test.input_method_event_filter()); | 550 shell_test.input_method_event_filter()); |
| 552 | 551 |
| 553 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); | 552 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); |
| 554 | 553 |
| 555 // Creates a window and make it active | 554 // Creates a window and make it active |
| 556 scoped_ptr<aura::Window> w1(aura::test::CreateTestWindow( | 555 scoped_ptr<aura::Window> w1(CreateTestWindowInShell( |
| 557 SK_ColorWHITE, -1, gfx::Rect(0, 0, 100, 100), NULL)); | 556 SK_ColorWHITE, -1, gfx::Rect(0, 0, 100, 100))); |
| 558 wm::ActivateWindow(w1.get()); | 557 wm::ActivateWindow(w1.get()); |
| 559 | 558 |
| 560 // Creates two addition filters | 559 // Creates two addition filters |
| 561 scoped_ptr<CustomEventHandler> f1(new CustomEventHandler); | 560 scoped_ptr<CustomEventHandler> f1(new CustomEventHandler); |
| 562 scoped_ptr<CustomEventHandler> f2(new CustomEventHandler); | 561 scoped_ptr<CustomEventHandler> f2(new CustomEventHandler); |
| 563 | 562 |
| 564 // Adds them to root window event filter. | 563 // Adds them to root window event filter. |
| 565 views::corewm::CompoundEventFilter* env_filter = | 564 views::corewm::CompoundEventFilter* env_filter = |
| 566 Shell::GetInstance()->env_filter(); | 565 Shell::GetInstance()->env_filter(); |
| 567 env_filter->AddHandler(f1.get()); | 566 env_filter->AddHandler(f1.get()); |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 616 EXPECT_EQ(1, f2->num_mouse_events()); | 615 EXPECT_EQ(1, f2->num_mouse_events()); |
| 617 | 616 |
| 618 env_filter->RemoveHandler(f2.get()); | 617 env_filter->RemoveHandler(f2.get()); |
| 619 } | 618 } |
| 620 | 619 |
| 621 // We should show and hide the cursor in response to mouse and touch events as | 620 // We should show and hide the cursor in response to mouse and touch events as |
| 622 // requested. | 621 // requested. |
| 623 TEST_F(WindowManagerTest, UpdateCursorVisibility) { | 622 TEST_F(WindowManagerTest, UpdateCursorVisibility) { |
| 624 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); | 623 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); |
| 625 root_window->SetBounds(gfx::Rect(0, 0, 500, 500)); | 624 root_window->SetBounds(gfx::Rect(0, 0, 500, 500)); |
| 626 scoped_ptr<aura::Window> window(aura::test::CreateTestWindow( | 625 scoped_ptr<aura::Window> window(CreateTestWindowInShell( |
| 627 SK_ColorWHITE, -1, gfx::Rect(0, 0, 500, 500), NULL)); | 626 SK_ColorWHITE, -1, gfx::Rect(0, 0, 500, 500))); |
| 628 | 627 |
| 629 ash::CursorManager* cursor_manager = | 628 ash::CursorManager* cursor_manager = |
| 630 ash::Shell::GetInstance()->cursor_manager(); | 629 ash::Shell::GetInstance()->cursor_manager(); |
| 631 | 630 |
| 632 ui::MouseEvent mouse_moved( | 631 ui::MouseEvent mouse_moved( |
| 633 ui::ET_MOUSE_MOVED, gfx::Point(0, 0), gfx::Point(0, 0), 0x0); | 632 ui::ET_MOUSE_MOVED, gfx::Point(0, 0), gfx::Point(0, 0), 0x0); |
| 634 ui::TouchEvent touch_pressed1( | 633 ui::TouchEvent touch_pressed1( |
| 635 ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), 0, getTime()); | 634 ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), 0, getTime()); |
| 636 ui::TouchEvent touch_pressed2( | 635 ui::TouchEvent touch_pressed2( |
| 637 ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), 1, getTime()); | 636 ui::ET_TOUCH_PRESSED, gfx::Point(0, 0), 1, getTime()); |
| (...skipping 29 matching lines...) Expand all Loading... |
| 667 EXPECT_TRUE(cursor_manager->cursor_visible()); | 666 EXPECT_TRUE(cursor_manager->cursor_visible()); |
| 668 root_window->AsRootWindowHostDelegate()->OnHostTouchEvent(&touch_pressed2); | 667 root_window->AsRootWindowHostDelegate()->OnHostTouchEvent(&touch_pressed2); |
| 669 EXPECT_FALSE(cursor_manager->cursor_visible()); | 668 EXPECT_FALSE(cursor_manager->cursor_visible()); |
| 670 root_window->AsRootWindowHostDelegate()->OnHostMouseEvent(&mouse_moved); | 669 root_window->AsRootWindowHostDelegate()->OnHostMouseEvent(&mouse_moved); |
| 671 EXPECT_TRUE(cursor_manager->cursor_visible()); | 670 EXPECT_TRUE(cursor_manager->cursor_visible()); |
| 672 root_window->AsRootWindowHostDelegate()->OnHostTouchEvent(&touch_released2); | 671 root_window->AsRootWindowHostDelegate()->OnHostTouchEvent(&touch_released2); |
| 673 EXPECT_TRUE(cursor_manager->cursor_visible()); | 672 EXPECT_TRUE(cursor_manager->cursor_visible()); |
| 674 } | 673 } |
| 675 | 674 |
| 676 } // namespace ash | 675 } // namespace ash |
| OLD | NEW |