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

Side by Side Diff: ash/wm/workspace/workspace_window_resizer_unittest.cc

Issue 11280283: Extract the code of showing a dragging window on another display from PhantomWindowController. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: assign NULL after deleting Layer Created 8 years 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
« no previous file with comments | « ash/wm/workspace/workspace_window_resizer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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/workspace/workspace_window_resizer.h" 5 #include "ash/wm/workspace/workspace_window_resizer.h"
6 6
7 #include "ash/display/display_controller.h" 7 #include "ash/display/display_controller.h"
8 #include "ash/display/mouse_cursor_event_filter.h" 8 #include "ash/display/mouse_cursor_event_filter.h"
9 #include "ash/root_window_controller.h" 9 #include "ash/root_window_controller.h"
10 #include "ash/screen_ash.h" 10 #include "ash/screen_ash.h"
11 #include "ash/shell.h" 11 #include "ash/shell.h"
12 #include "ash/shell_window_ids.h" 12 #include "ash/shell_window_ids.h"
13 #include "ash/test/ash_test_base.h" 13 #include "ash/test/ash_test_base.h"
14 #include "ash/test/cursor_manager_test_api.h" 14 #include "ash/test/cursor_manager_test_api.h"
15 #include "ash/wm/cursor_manager.h" 15 #include "ash/wm/cursor_manager.h"
16 #include "ash/wm/drag_window_controller.h"
16 #include "ash/wm/property_util.h" 17 #include "ash/wm/property_util.h"
17 #include "ash/wm/shelf_layout_manager.h" 18 #include "ash/wm/shelf_layout_manager.h"
18 #include "ash/wm/window_util.h" 19 #include "ash/wm/window_util.h"
20 #include "ash/wm/workspace/phantom_window_controller.h"
21 #include "ash/wm/workspace/snap_sizer.h"
19 #include "ash/wm/workspace_controller.h" 22 #include "ash/wm/workspace_controller.h"
20 #include "ash/wm/workspace/snap_sizer.h"
21 #include "ash/wm/workspace/phantom_window_controller.h"
22 #include "base/string_number_conversions.h" 23 #include "base/string_number_conversions.h"
23 #include "base/stringprintf.h" 24 #include "base/stringprintf.h"
24 #include "ui/aura/client/aura_constants.h" 25 #include "ui/aura/client/aura_constants.h"
25 #include "ui/aura/root_window.h" 26 #include "ui/aura/root_window.h"
26 #include "ui/aura/test/test_window_delegate.h" 27 #include "ui/aura/test/test_window_delegate.h"
27 #include "ui/base/hit_test.h" 28 #include "ui/base/hit_test.h"
28 #include "ui/gfx/insets.h" 29 #include "ui/gfx/insets.h"
29 #include "ui/gfx/screen.h" 30 #include "ui/gfx/screen.h"
30 #include "ui/views/widget/widget.h" 31 #include "ui/views/widget/widget.h"
31 32
(...skipping 568 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); 601 window_.get(), gfx::Point(), HTCAPTION, empty_windows()));
601 ASSERT_TRUE(resizer.get()); 602 ASSERT_TRUE(resizer.get());
602 // Move the mouse near the right edge, (798, 0), of the primary display. 603 // Move the mouse near the right edge, (798, 0), of the primary display.
603 resizer->Drag(CalculateDragPoint(*resizer, -2, 0), ui::EF_CONTROL_DOWN); 604 resizer->Drag(CalculateDragPoint(*resizer, -2, 0), ui::EF_CONTROL_DOWN);
604 resizer->CompleteDrag(0); 605 resizer->CompleteDrag(0);
605 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); 606 EXPECT_EQ(root_windows[0], window_->GetRootWindow());
606 EXPECT_EQ("798,0 50x60", window_->bounds().ToString()); 607 EXPECT_EQ("798,0 50x60", window_->bounds().ToString());
607 } 608 }
608 } 609 }
609 610
610 // Verifies the style of the drag phantom window is correct. 611 // Verifies the drag window controller is instanciated appropriately.
611 TEST_F(WorkspaceWindowResizerTest, PhantomStyle) { 612 TEST_F(WorkspaceWindowResizerTest, DragWindowController) {
612 UpdateDisplay("800x600,800x600"); 613 UpdateDisplay("800x600,800x600");
613 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); 614 Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
614 ASSERT_EQ(2U, root_windows.size()); 615 ASSERT_EQ(2U, root_windows.size());
615 616
616 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), 617 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60),
617 Shell::GetScreen()->GetPrimaryDisplay()); 618 Shell::GetScreen()->GetPrimaryDisplay());
618 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); 619 EXPECT_EQ(root_windows[0], window_->GetRootWindow());
619 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); 620 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity());
620 { 621 {
621 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( 622 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create(
622 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); 623 window_.get(), gfx::Point(), HTCAPTION, empty_windows()));
623 ASSERT_TRUE(resizer.get()); 624 ASSERT_TRUE(resizer.get());
624 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get()); 625 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get());
625 EXPECT_FALSE(resizer->drag_phantom_window_controller_.get()); 626 EXPECT_FALSE(resizer->drag_window_controller_.get());
626 627
627 // The pointer is inside the primary root. Both phantoms should be NULL. 628 // The pointer is inside the primary root. Both phantoms should be NULL.
628 resizer->Drag(CalculateDragPoint(*resizer, 10, 10), 0); 629 resizer->Drag(CalculateDragPoint(*resizer, 10, 10), 0);
629 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get()); 630 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get());
630 EXPECT_FALSE(resizer->drag_phantom_window_controller_.get()); 631 EXPECT_FALSE(resizer->drag_window_controller_.get());
631 632
632 // The window spans both root windows. 633 // The window spans both root windows.
633 resizer->Drag(CalculateDragPoint(*resizer, 798, 10), 0); 634 resizer->Drag(CalculateDragPoint(*resizer, 798, 10), 0);
634 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get()); 635 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get());
635 PhantomWindowController* controller = 636 DragWindowController* controller =
636 resizer->drag_phantom_window_controller_.get(); 637 resizer->drag_window_controller_.get();
637 ASSERT_TRUE(controller); 638 ASSERT_TRUE(controller);
638 EXPECT_EQ(PhantomWindowController::STYLE_DRAGGING, controller->style()); 639 ASSERT_TRUE(controller->drag_widget_);
640 ui::Layer* drag_layer =
641 controller->drag_widget_->GetNativeWindow()->layer();
642 ASSERT_TRUE(drag_layer);
639 643
640 // Check if |resizer->layer_| is properly set to the phantom widget. 644 // Check if |resizer->layer_| is properly set to the phantom widget.
641 const std::vector<ui::Layer*>& layers = 645 const std::vector<ui::Layer*>& layers = drag_layer->children();
642 controller->phantom_widget_->GetNativeWindow()->layer()->children();
643 EXPECT_FALSE(layers.empty()); 646 EXPECT_FALSE(layers.empty());
644 EXPECT_EQ(resizer->layer_, layers.back()); 647 EXPECT_EQ(controller->layer_, layers.back());
645 648
646 // |window_| should be opaque since the pointer is still on the primary 649 // |window_| should be opaque since the pointer is still on the primary
647 // root window. The phantom should be semi-transparent. 650 // root window. The phantom should be semi-transparent.
648 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); 651 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity());
649 EXPECT_GT(1.0f, controller->GetOpacity()); 652 EXPECT_GT(1.0f, drag_layer->opacity());
650 653
651 // Enter the pointer to the secondary display. 654 // Enter the pointer to the secondary display.
652 resizer->Drag(CalculateDragPoint(*resizer, 800, 10), 0); 655 resizer->Drag(CalculateDragPoint(*resizer, 800, 10), 0);
653 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get()); 656 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get());
654 controller = resizer->drag_phantom_window_controller_.get(); 657 controller = resizer->drag_window_controller_.get();
655 ASSERT_TRUE(controller); 658 ASSERT_TRUE(controller);
656 EXPECT_EQ(PhantomWindowController::STYLE_DRAGGING, controller->style());
657 // |window_| should be transparent, and the phantom should be opaque. 659 // |window_| should be transparent, and the phantom should be opaque.
658 EXPECT_GT(1.0f, window_->layer()->opacity()); 660 EXPECT_GT(1.0f, window_->layer()->opacity());
659 EXPECT_FLOAT_EQ(1.0f, controller->GetOpacity()); 661 EXPECT_FLOAT_EQ(1.0f, drag_layer->opacity());
660 662
661 resizer->CompleteDrag(0); 663 resizer->CompleteDrag(0);
662 EXPECT_EQ(root_windows[1], window_->GetRootWindow()); 664 EXPECT_EQ(root_windows[1], window_->GetRootWindow());
663 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); 665 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity());
664 } 666 }
665 667
666 // Do the same test with RevertDrag(). 668 // Do the same test with RevertDrag().
667 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), 669 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60),
668 Shell::GetScreen()->GetPrimaryDisplay()); 670 Shell::GetScreen()->GetPrimaryDisplay());
669 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); 671 EXPECT_EQ(root_windows[0], window_->GetRootWindow());
670 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); 672 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity());
671 { 673 {
672 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( 674 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create(
673 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); 675 window_.get(), gfx::Point(), HTCAPTION, empty_windows()));
674 ASSERT_TRUE(resizer.get()); 676 ASSERT_TRUE(resizer.get());
675 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get()); 677 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get());
676 EXPECT_FALSE(resizer->drag_phantom_window_controller_.get()); 678 EXPECT_FALSE(resizer->drag_window_controller_.get());
677 679
678 resizer->Drag(CalculateDragPoint(*resizer, 0, 610), 0); 680 resizer->Drag(CalculateDragPoint(*resizer, 0, 610), 0);
679 resizer->RevertDrag(); 681 resizer->RevertDrag();
680 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); 682 EXPECT_EQ(root_windows[0], window_->GetRootWindow());
681 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); 683 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity());
682 } 684 }
683 } 685 }
684 686
685 // Verifies the style of the drag phantom window is correct. 687 // Verifies the style of the drag phantom window is correct.
686 TEST_F(WorkspaceWindowResizerTest, CancelSnapPhantom) { 688 TEST_F(WorkspaceWindowResizerTest, CancelSnapPhantom) {
687 UpdateDisplay("800x600,800x600"); 689 UpdateDisplay("800x600,800x600");
688 Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); 690 Shell::RootWindowList root_windows = Shell::GetAllRootWindows();
689 ASSERT_EQ(2U, root_windows.size()); 691 ASSERT_EQ(2U, root_windows.size());
690 692
691 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60), 693 window_->SetBoundsInScreen(gfx::Rect(0, 0, 50, 60),
692 Shell::GetScreen()->GetPrimaryDisplay()); 694 Shell::GetScreen()->GetPrimaryDisplay());
693 EXPECT_EQ(root_windows[0], window_->GetRootWindow()); 695 EXPECT_EQ(root_windows[0], window_->GetRootWindow());
694 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity()); 696 EXPECT_FLOAT_EQ(1.0f, window_->layer()->opacity());
695 { 697 {
696 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create( 698 scoped_ptr<WorkspaceWindowResizer> resizer(WorkspaceWindowResizer::Create(
697 window_.get(), gfx::Point(), HTCAPTION, empty_windows())); 699 window_.get(), gfx::Point(), HTCAPTION, empty_windows()));
698 ASSERT_TRUE(resizer.get()); 700 ASSERT_TRUE(resizer.get());
699 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get()); 701 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get());
700 EXPECT_FALSE(resizer->drag_phantom_window_controller_.get()); 702 EXPECT_FALSE(resizer->drag_window_controller_.get());
701 EXPECT_EQ(WorkspaceWindowResizer::SNAP_NONE, resizer->snap_type_); 703 EXPECT_EQ(WorkspaceWindowResizer::SNAP_NONE, resizer->snap_type_);
702 704
703 // The pointer is on the edge but not shared. Both controllers should be 705 // The pointer is on the edge but not shared. Both controllers should be
704 // non-NULL. 706 // non-NULL.
705 resizer->Drag(CalculateDragPoint(*resizer, 799, 0), 0); 707 resizer->Drag(CalculateDragPoint(*resizer, 799, 0), 0);
706 EXPECT_TRUE(resizer->snap_phantom_window_controller_.get()); 708 EXPECT_TRUE(resizer->snap_phantom_window_controller_.get());
707 EXPECT_EQ(WorkspaceWindowResizer::SNAP_RIGHT_EDGE, resizer->snap_type_); 709 EXPECT_EQ(WorkspaceWindowResizer::SNAP_RIGHT_EDGE, resizer->snap_type_);
708 PhantomWindowController* controller = 710 DragWindowController* controller =
709 resizer->drag_phantom_window_controller_.get(); 711 resizer->drag_window_controller_.get();
710 ASSERT_TRUE(controller); 712 ASSERT_TRUE(controller);
711 EXPECT_EQ(PhantomWindowController::STYLE_DRAGGING, controller->style());
712 713
713 // Move the cursor across the edge. Now the snap phantom controller 714 // Move the cursor across the edge. Now the snap phantom controller
714 // should be canceled. 715 // should be canceled.
715 resizer->Drag(CalculateDragPoint(*resizer, 800, 0), 0); 716 resizer->Drag(CalculateDragPoint(*resizer, 800, 0), 0);
716 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get()); 717 EXPECT_FALSE(resizer->snap_phantom_window_controller_.get());
717 EXPECT_EQ(WorkspaceWindowResizer::SNAP_NONE, resizer->snap_type_); 718 EXPECT_EQ(WorkspaceWindowResizer::SNAP_NONE, resizer->snap_type_);
718 controller = 719 controller =
719 resizer->drag_phantom_window_controller_.get(); 720 resizer->drag_window_controller_.get();
720 ASSERT_TRUE(controller); 721 ASSERT_TRUE(controller);
721 EXPECT_EQ(PhantomWindowController::STYLE_DRAGGING, controller->style());
722 } 722 }
723 } 723 }
724 724
725 // Verifies if the resizer sets and resets 725 // Verifies if the resizer sets and resets
726 // MouseCursorEventFilter::mouse_warp_mode_ as expected. 726 // MouseCursorEventFilter::mouse_warp_mode_ as expected.
727 TEST_F(WorkspaceWindowResizerTest, WarpMousePointer) { 727 TEST_F(WorkspaceWindowResizerTest, WarpMousePointer) {
728 MouseCursorEventFilter* event_filter = 728 MouseCursorEventFilter* event_filter =
729 Shell::GetInstance()->mouse_cursor_filter(); 729 Shell::GetInstance()->mouse_cursor_filter();
730 ASSERT_TRUE(event_filter); 730 ASSERT_TRUE(event_filter);
731 window_->SetBounds(gfx::Rect(0, 0, 50, 60)); 731 window_->SetBounds(gfx::Rect(0, 0, 50, 60));
(...skipping 990 matching lines...) Expand 10 before | Expand all | Expand 10 after
1722 ASSERT_TRUE(resizer.get()); 1722 ASSERT_TRUE(resizer.get());
1723 // Move it 50 to the left, which should contract w1 and expand w2-3. 1723 // Move it 50 to the left, which should contract w1 and expand w2-3.
1724 resizer->Drag(CalculateDragPoint(*resizer, -50, 0), 0); 1724 resizer->Drag(CalculateDragPoint(*resizer, -50, 0), 0);
1725 EXPECT_EQ("100,100 98x100", window_->bounds().ToString()); 1725 EXPECT_EQ("100,100 98x100", window_->bounds().ToString());
1726 EXPECT_EQ("198,100 101x100", window2_->bounds().ToString()); 1726 EXPECT_EQ("198,100 101x100", window2_->bounds().ToString());
1727 EXPECT_EQ("299,100 101x100", window3_->bounds().ToString()); 1727 EXPECT_EQ("299,100 101x100", window3_->bounds().ToString());
1728 } 1728 }
1729 1729
1730 } // namespace internal 1730 } // namespace internal
1731 } // namespace ash 1731 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/workspace/workspace_window_resizer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698