| 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/display/display_controller.h" | 5 #include "ash/display/display_controller.h" | 
| 6 | 6 | 
|  | 7 #include "ash/display/display_info.h" | 
| 7 #include "ash/display/display_manager.h" | 8 #include "ash/display/display_manager.h" | 
| 8 #include "ash/launcher/launcher.h" | 9 #include "ash/launcher/launcher.h" | 
| 9 #include "ash/screen_ash.h" | 10 #include "ash/screen_ash.h" | 
| 10 #include "ash/shell.h" | 11 #include "ash/shell.h" | 
| 11 #include "ash/test/ash_test_base.h" | 12 #include "ash/test/ash_test_base.h" | 
| 12 #include "ash/test/cursor_manager_test_api.h" | 13 #include "ash/test/cursor_manager_test_api.h" | 
| 13 #include "ui/aura/env.h" | 14 #include "ui/aura/env.h" | 
| 14 #include "ui/aura/root_window.h" | 15 #include "ui/aura/root_window.h" | 
|  | 16 #include "ui/aura/test/event_generator.h" | 
| 15 #include "ui/aura/window_tracker.h" | 17 #include "ui/aura/window_tracker.h" | 
|  | 18 #include "ui/base/events/event_handler.h" | 
| 16 #include "ui/gfx/display.h" | 19 #include "ui/gfx/display.h" | 
| 17 #include "ui/gfx/screen.h" | 20 #include "ui/gfx/screen.h" | 
| 18 #include "ui/views/widget/widget.h" | 21 #include "ui/views/widget/widget.h" | 
| 19 | 22 | 
|  | 23 #if defined(OS_WIN) | 
|  | 24 #include "win8/util/win8_util.h" | 
|  | 25 #endif | 
|  | 26 | 
| 20 namespace ash { | 27 namespace ash { | 
| 21 namespace test { | 28 namespace test { | 
| 22 namespace { | 29 namespace { | 
| 23 | 30 | 
| 24 class TestObserver : public DisplayController::Observer { | 31 class TestObserver : public DisplayController::Observer { | 
| 25  public: | 32  public: | 
| 26   TestObserver() : count_(0) { | 33   TestObserver() : count_(0) { | 
| 27     Shell::GetInstance()->display_controller()->AddObserver(this); | 34     Shell::GetInstance()->display_controller()->AddObserver(this); | 
| 28   } | 35   } | 
| 29 | 36 | 
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 69 | 76 | 
| 70 void SetSecondaryDisplayLayout(DisplayLayout::Position position) { | 77 void SetSecondaryDisplayLayout(DisplayLayout::Position position) { | 
| 71   SetSecondaryDisplayLayoutAndOffset(position, 0); | 78   SetSecondaryDisplayLayoutAndOffset(position, 0); | 
| 72 } | 79 } | 
| 73 | 80 | 
| 74 class DisplayControllerShutdownTest : public test::AshTestBase { | 81 class DisplayControllerShutdownTest : public test::AshTestBase { | 
| 75  public: | 82  public: | 
| 76   virtual void TearDown() OVERRIDE { | 83   virtual void TearDown() OVERRIDE { | 
| 77     test::AshTestBase::TearDown(); | 84     test::AshTestBase::TearDown(); | 
| 78     // Make sure that primary display is accessible after shutdown. | 85     // Make sure that primary display is accessible after shutdown. | 
| 79     gfx::Display primary = gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); | 86     gfx::Display primary = Shell::GetScreen()->GetPrimaryDisplay(); | 
| 80     EXPECT_EQ("0,0 444x333", primary.bounds().ToString()); | 87     EXPECT_EQ("0,0 444x333", primary.bounds().ToString()); | 
| 81     EXPECT_EQ(2, gfx::Screen::GetNativeScreen()->GetNumDisplays()); | 88     EXPECT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 
| 82   } | 89   } | 
| 83 }; | 90 }; | 
| 84 | 91 | 
|  | 92 class TestEventHandler : public ui::EventHandler { | 
|  | 93  public: | 
|  | 94   TestEventHandler() : target_root_(NULL) {} | 
|  | 95   virtual ~TestEventHandler() {} | 
|  | 96 | 
|  | 97   virtual void OnMouseEvent(ui::MouseEvent* event) OVERRIDE { | 
|  | 98     aura::Window* target = static_cast<aura::Window*>(event->target()); | 
|  | 99     // Only record when the target is the background which covers | 
|  | 100     // entire root window. | 
|  | 101     if (target->name() != "DesktopBackgroundView") | 
|  | 102       return; | 
|  | 103     mouse_location_ = event->location(); | 
|  | 104     target_root_ = target->GetRootWindow(); | 
|  | 105     event->StopPropagation(); | 
|  | 106   } | 
|  | 107 | 
|  | 108   std::string GetLocationAndReset() { | 
|  | 109     std::string result = mouse_location_.ToString(); | 
|  | 110     mouse_location_.SetPoint(0, 0); | 
|  | 111     target_root_ = NULL; | 
|  | 112     return result; | 
|  | 113   } | 
|  | 114 | 
|  | 115  private: | 
|  | 116   gfx::Point mouse_location_; | 
|  | 117   aura::RootWindow* target_root_; | 
|  | 118 | 
|  | 119   DISALLOW_COPY_AND_ASSIGN(TestEventHandler); | 
|  | 120 }; | 
|  | 121 | 
| 85 }  // namespace | 122 }  // namespace | 
| 86 | 123 | 
| 87 typedef test::AshTestBase DisplayControllerTest; | 124 typedef test::AshTestBase DisplayControllerTest; | 
| 88 | 125 | 
| 89 TEST_F(DisplayControllerShutdownTest, Shutdown) { | 126 TEST_F(DisplayControllerShutdownTest, Shutdown) { | 
| 90   UpdateDisplay("444x333, 200x200"); | 127   UpdateDisplay("444x333, 200x200"); | 
| 91 } | 128 } | 
| 92 | 129 | 
| 93 TEST_F(DisplayControllerTest, SecondaryDisplayLayout) { | 130 TEST_F(DisplayControllerTest, SecondaryDisplayLayout) { | 
| 94   TestObserver observer; | 131   TestObserver observer; | 
| (...skipping 434 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 529   EXPECT_EQ("300x400", root_windows[1]->GetHostSize().ToString()); | 566   EXPECT_EQ("300x400", root_windows[1]->GetHostSize().ToString()); | 
| 530 | 567 | 
| 531   UpdateDisplay("100+200-100x200,300+500-200x300"); | 568   UpdateDisplay("100+200-100x200,300+500-200x300"); | 
| 532   ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 569   ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 
| 533   EXPECT_EQ("100,200", root_windows[0]->GetHostOrigin().ToString()); | 570   EXPECT_EQ("100,200", root_windows[0]->GetHostOrigin().ToString()); | 
| 534   EXPECT_EQ("100x200", root_windows[0]->GetHostSize().ToString()); | 571   EXPECT_EQ("100x200", root_windows[0]->GetHostSize().ToString()); | 
| 535   EXPECT_EQ("300,500", root_windows[1]->GetHostOrigin().ToString()); | 572   EXPECT_EQ("300,500", root_windows[1]->GetHostOrigin().ToString()); | 
| 536   EXPECT_EQ("200x300", root_windows[1]->GetHostSize().ToString()); | 573   EXPECT_EQ("200x300", root_windows[1]->GetHostSize().ToString()); | 
| 537 } | 574 } | 
| 538 | 575 | 
|  | 576 #if defined(OS_WIN) | 
|  | 577 // TODO(oshima): Windows does not supoprts insets. | 
|  | 578 #define MAYBE_OverscanInsets DISABLED_OverscanInsets | 
|  | 579 #else | 
|  | 580 #define MAYBE_OverscanInsets OverscanInsets | 
|  | 581 #endif | 
|  | 582 | 
|  | 583 TEST_F(DisplayControllerTest, MAYBE_OverscanInsets) { | 
|  | 584   DisplayController* display_controller = | 
|  | 585       Shell::GetInstance()->display_controller(); | 
|  | 586   TestEventHandler event_handler; | 
|  | 587   Shell::GetInstance()->AddPreTargetHandler(&event_handler); | 
|  | 588 | 
|  | 589   UpdateDisplay("120x200,300x400*2"); | 
|  | 590   gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay(); | 
|  | 591   Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 
|  | 592 | 
|  | 593   display_controller->SetOverscanInsets(display1.id(), | 
|  | 594                                         gfx::Insets(10, 15, 20, 25)); | 
|  | 595   EXPECT_EQ("0,0 80x170", root_windows[0]->bounds().ToString()); | 
|  | 596   EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); | 
|  | 597   EXPECT_EQ("80,0 150x200", | 
|  | 598             ScreenAsh::GetSecondaryDisplay().bounds().ToString()); | 
|  | 599 | 
|  | 600   aura::test::EventGenerator generator(root_windows[0]); | 
|  | 601   generator.MoveMouseTo(20, 25); | 
|  | 602   EXPECT_EQ("5,15", event_handler.GetLocationAndReset()); | 
|  | 603 | 
|  | 604   display_controller->ClearCustomOverscanInsets(display1.id()); | 
|  | 605   EXPECT_EQ("0,0 120x200", root_windows[0]->bounds().ToString()); | 
|  | 606   EXPECT_EQ("120,0 150x200", | 
|  | 607             ScreenAsh::GetSecondaryDisplay().bounds().ToString()); | 
|  | 608 | 
|  | 609   generator.MoveMouseTo(30, 20); | 
|  | 610   EXPECT_EQ("30,20", event_handler.GetLocationAndReset()); | 
|  | 611 | 
|  | 612   Shell::GetInstance()->RemovePreTargetHandler(&event_handler); | 
|  | 613 } | 
|  | 614 | 
|  | 615 TEST_F(DisplayControllerTest, Rotate) { | 
|  | 616 #if defined(OS_WIN) | 
|  | 617   // On Win8 Metro mode, the host window can't be resized and | 
|  | 618   // SetTransform updates the window using the orignal host window | 
|  | 619   // size.  Just skip this test on win8, so that this test still rusn | 
|  | 620   // on win7 bots. | 
|  | 621   if (win8::IsSingleWindowMetroMode()) | 
|  | 622     return; | 
|  | 623 #endif | 
|  | 624 | 
|  | 625   DisplayController* display_controller = | 
|  | 626       Shell::GetInstance()->display_controller(); | 
|  | 627   internal::DisplayManager* display_manager = | 
|  | 628       Shell::GetInstance()->display_manager(); | 
|  | 629   TestEventHandler event_handler; | 
|  | 630   Shell::GetInstance()->AddPreTargetHandler(&event_handler); | 
|  | 631 | 
|  | 632   UpdateDisplay("120x200,300x400*2"); | 
|  | 633   gfx::Display display1 = Shell::GetScreen()->GetPrimaryDisplay(); | 
|  | 634   int64 display2_id = ScreenAsh::GetSecondaryDisplay().id(); | 
|  | 635   Shell::RootWindowList root_windows = Shell::GetAllRootWindows(); | 
|  | 636   aura::test::EventGenerator generator1(root_windows[0]); | 
|  | 637 | 
|  | 638   EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); | 
|  | 639   EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); | 
|  | 640   EXPECT_EQ("120,0 150x200", | 
|  | 641             ScreenAsh::GetSecondaryDisplay().bounds().ToString()); | 
|  | 642   generator1.MoveMouseTo(50, 40); | 
|  | 643   EXPECT_EQ("50,40", event_handler.GetLocationAndReset()); | 
|  | 644 | 
|  | 645   display_manager->SetDisplayRotation(display1.id(), | 
|  | 646                                       internal::DisplayInfo::Rotate90); | 
|  | 647   EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString()); | 
|  | 648   EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); | 
|  | 649   EXPECT_EQ("200,0 150x200", | 
|  | 650             ScreenAsh::GetSecondaryDisplay().bounds().ToString()); | 
|  | 651   generator1.MoveMouseTo(50, 40); | 
|  | 652   EXPECT_EQ("40,70", event_handler.GetLocationAndReset()); | 
|  | 653 | 
|  | 654   DisplayLayout display_layout(DisplayLayout::BOTTOM, 50); | 
|  | 655   display_controller->SetLayoutForCurrentDisplays(display_layout); | 
|  | 656   EXPECT_EQ("50,120 150x200", | 
|  | 657             ScreenAsh::GetSecondaryDisplay().bounds().ToString()); | 
|  | 658 | 
|  | 659   display_manager->SetDisplayRotation(display2_id, | 
|  | 660                                       internal::DisplayInfo::Rotate270); | 
|  | 661   EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString()); | 
|  | 662   EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); | 
|  | 663   EXPECT_EQ("50,120 200x150", | 
|  | 664             ScreenAsh::GetSecondaryDisplay().bounds().ToString()); | 
|  | 665 | 
|  | 666   aura::test::EventGenerator generator2(root_windows[1]); | 
|  | 667   generator2.MoveMouseTo(50, 40); | 
|  | 668   EXPECT_EQ("180,25", event_handler.GetLocationAndReset()); | 
|  | 669   display_manager->SetDisplayRotation(display1.id(), | 
|  | 670                                       internal::DisplayInfo::Rotate180); | 
|  | 671 | 
|  | 672   EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); | 
|  | 673   EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); | 
|  | 674   // Dislay must share at least 100, so the x's offset becomes 20. | 
|  | 675   EXPECT_EQ("20,200 200x150", | 
|  | 676             ScreenAsh::GetSecondaryDisplay().bounds().ToString()); | 
|  | 677 | 
|  | 678   generator1.MoveMouseTo(50, 40); | 
|  | 679   EXPECT_EQ("70,160", event_handler.GetLocationAndReset()); | 
|  | 680 | 
|  | 681   Shell::GetInstance()->RemovePreTargetHandler(&event_handler); | 
|  | 682 } | 
|  | 683 | 
| 539 }  // namespace test | 684 }  // namespace test | 
| 540 }  // namespace ash | 685 }  // namespace ash | 
| OLD | NEW | 
|---|