| 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_manager.h" | 7 #include "ash/display/display_manager.h" |
| 8 #include "ash/launcher/launcher.h" | 8 #include "ash/launcher/launcher.h" |
| 9 #include "ash/screen_ash.h" | 9 #include "ash/screen_ash.h" |
| 10 #include "ash/shell.h" | 10 #include "ash/shell.h" |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 91 gfx::Display primary = gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); | 91 gfx::Display primary = gfx::Screen::GetNativeScreen()->GetPrimaryDisplay(); |
| 92 EXPECT_EQ("0,0 444x333", primary.bounds().ToString()); | 92 EXPECT_EQ("0,0 444x333", primary.bounds().ToString()); |
| 93 EXPECT_EQ(2, gfx::Screen::GetNativeScreen()->GetNumDisplays()); | 93 EXPECT_EQ(2, gfx::Screen::GetNativeScreen()->GetNumDisplays()); |
| 94 } | 94 } |
| 95 }; | 95 }; |
| 96 | 96 |
| 97 } // namespace | 97 } // namespace |
| 98 | 98 |
| 99 typedef test::AshTestBase DisplayControllerTest; | 99 typedef test::AshTestBase DisplayControllerTest; |
| 100 | 100 |
| 101 #if defined(OS_WIN) | 101 TEST_F(DisplayControllerShutdownTest, Shutdown) { |
| 102 // TODO(oshima): Windows creates a window with smaller client area. | |
| 103 // Fix this and enable tests. | |
| 104 #define MAYBE_SecondaryDisplayLayout DISABLED_SecondaryDisplayLayout | |
| 105 #define MAYBE_BoundsUpdated DISABLED_BoundsUpdated | |
| 106 #define MAYBE_UpdateDisplayWithHostOrigin DISABLED_UpdateDisplayWithHostOrigin | |
| 107 #define MAYBE_CursorDeviceScaleFactorSwapPrimary \ | |
| 108 DISABLED_CursorDeviceScaleFactorSwapPrimary | |
| 109 #define MAYBE_Shutdown DISABLED_Shutdown | |
| 110 #else | |
| 111 #define MAYBE_SecondaryDisplayLayout SecondaryDisplayLayout | |
| 112 #define MAYBE_BoundsUpdated BoundsUpdated | |
| 113 #define MAYBE_CursorDeviceScaleFactorSwapPrimary \ | |
| 114 CursorDeviceScaleFactorSwapPrimary | |
| 115 #define MAYBE_UpdateDisplayWithHostOrigin UpdateDisplayWithHostOrigin | |
| 116 #define MAYBE_Shutdown Shutdown | |
| 117 #endif | |
| 118 | |
| 119 TEST_F(DisplayControllerShutdownTest, MAYBE_Shutdown) { | |
| 120 UpdateDisplay("444x333, 200x200"); | 102 UpdateDisplay("444x333, 200x200"); |
| 121 } | 103 } |
| 122 | 104 |
| 123 // Flaky - crbug.com/161857 | 105 TEST_F(DisplayControllerTest, SecondaryDisplayLayout) { |
| 124 TEST_F(DisplayControllerTest, MAYBE_SecondaryDisplayLayout) { | |
| 125 TestObserver observer; | 106 TestObserver observer; |
| 126 UpdateDisplay("500x500,400x400"); | 107 UpdateDisplay("500x500,400x400"); |
| 127 EXPECT_EQ(2, observer.CountAndReset()) | 108 EXPECT_EQ(2, observer.CountAndReset()) |
| 128 << observer.ToString(); // resize and add | 109 << observer.ToString(); // resize and add |
| 129 gfx::Display* secondary_display = | 110 gfx::Display* secondary_display = |
| 130 Shell::GetInstance()->display_manager()->GetDisplayAt(1); | 111 Shell::GetInstance()->display_manager()->GetDisplayAt(1); |
| 131 gfx::Insets insets(5, 5, 5, 5); | 112 gfx::Insets insets(5, 5, 5, 5); |
| 132 secondary_display->UpdateWorkAreaFromInsets(insets); | 113 secondary_display->UpdateWorkAreaFromInsets(insets); |
| 133 | 114 |
| 134 // Default layout is RIGHT. | 115 // Default layout is RIGHT. |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 219 SetSecondaryDisplayLayoutAndOffset(DisplayLayout::BOTTOM, -400); | 200 SetSecondaryDisplayLayoutAndOffset(DisplayLayout::BOTTOM, -400); |
| 220 EXPECT_EQ(1, observer.CountAndReset()) | 201 EXPECT_EQ(1, observer.CountAndReset()) |
| 221 << observer.ToString(); | 202 << observer.ToString(); |
| 222 EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString()) | 203 EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString()) |
| 223 << observer.ToString(); | 204 << observer.ToString(); |
| 224 EXPECT_EQ("-300,500 400x400", GetSecondaryDisplay().bounds().ToString()) | 205 EXPECT_EQ("-300,500 400x400", GetSecondaryDisplay().bounds().ToString()) |
| 225 << observer.ToString(); | 206 << observer.ToString(); |
| 226 | 207 |
| 227 } | 208 } |
| 228 | 209 |
| 229 TEST_F(DisplayControllerTest, MAYBE_BoundsUpdated) { | 210 TEST_F(DisplayControllerTest, BoundsUpdated) { |
| 230 TestObserver observer; | 211 TestObserver observer; |
| 231 SetSecondaryDisplayLayout(DisplayLayout::BOTTOM); | 212 SetSecondaryDisplayLayout(DisplayLayout::BOTTOM); |
| 232 UpdateDisplay("200x200,300x300"); // layout, resize and add. | 213 UpdateDisplay("200x200,300x300"); // layout, resize and add. |
| 233 EXPECT_EQ(3, observer.CountAndReset()); | 214 EXPECT_EQ(3, observer.CountAndReset()); |
| 234 | 215 |
| 235 gfx::Display* secondary_display = | 216 gfx::Display* secondary_display = |
| 236 Shell::GetInstance()->display_manager()->GetDisplayAt(1); | 217 Shell::GetInstance()->display_manager()->GetDisplayAt(1); |
| 237 gfx::Insets insets(5, 5, 5, 5); | 218 gfx::Insets insets(5, 5, 5, 5); |
| 238 secondary_display->UpdateWorkAreaFromInsets(insets); | 219 secondary_display->UpdateWorkAreaFromInsets(insets); |
| 239 | 220 |
| (...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 317 aura::Window* launcher_window = | 298 aura::Window* launcher_window = |
| 318 Launcher::ForPrimaryDisplay()->widget()->GetNativeView(); | 299 Launcher::ForPrimaryDisplay()->widget()->GetNativeView(); |
| 319 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 300 EXPECT_TRUE(primary_root->Contains(launcher_window)); |
| 320 EXPECT_FALSE(secondary_root->Contains(launcher_window)); | 301 EXPECT_FALSE(secondary_root->Contains(launcher_window)); |
| 321 EXPECT_EQ(primary_display.id(), | 302 EXPECT_EQ(primary_display.id(), |
| 322 Shell::GetScreen()->GetDisplayNearestPoint( | 303 Shell::GetScreen()->GetDisplayNearestPoint( |
| 323 gfx::Point(-100, -100)).id()); | 304 gfx::Point(-100, -100)).id()); |
| 324 EXPECT_EQ(primary_display.id(), | 305 EXPECT_EQ(primary_display.id(), |
| 325 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 306 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
| 326 | 307 |
| 327 #if !defined(OS_WIN) | |
| 328 EXPECT_EQ("0,0 200x200", primary_display.bounds().ToString()); | 308 EXPECT_EQ("0,0 200x200", primary_display.bounds().ToString()); |
| 329 EXPECT_EQ("0,0 200x152", primary_display.work_area().ToString()); | 309 EXPECT_EQ("0,0 200x152", primary_display.work_area().ToString()); |
| 330 EXPECT_EQ("200,0 300x300", secondary_display.bounds().ToString()); | 310 EXPECT_EQ("200,0 300x300", secondary_display.bounds().ToString()); |
| 331 EXPECT_EQ("200,0 300x300", secondary_display.work_area().ToString()); | 311 EXPECT_EQ("200,0 300x300", secondary_display.work_area().ToString()); |
| 332 #endif | |
| 333 | 312 |
| 334 // Switch primary and secondary | 313 // Switch primary and secondary |
| 335 display_controller->SetPrimaryDisplay(secondary_display); | 314 display_controller->SetPrimaryDisplay(secondary_display); |
| 336 EXPECT_EQ(secondary_display.id(), | 315 EXPECT_EQ(secondary_display.id(), |
| 337 Shell::GetScreen()->GetPrimaryDisplay().id()); | 316 Shell::GetScreen()->GetPrimaryDisplay().id()); |
| 338 EXPECT_EQ(primary_display.id(), ScreenAsh::GetSecondaryDisplay().id()); | 317 EXPECT_EQ(primary_display.id(), ScreenAsh::GetSecondaryDisplay().id()); |
| 339 EXPECT_EQ(secondary_display.id(), | 318 EXPECT_EQ(secondary_display.id(), |
| 340 Shell::GetScreen()->GetDisplayNearestPoint( | 319 Shell::GetScreen()->GetDisplayNearestPoint( |
| 341 gfx::Point(-100, -100)).id()); | 320 gfx::Point(-100, -100)).id()); |
| 342 EXPECT_EQ(secondary_display.id(), | 321 EXPECT_EQ(secondary_display.id(), |
| 343 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); | 322 Shell::GetScreen()->GetDisplayNearestWindow(NULL).id()); |
| 344 | 323 |
| 345 EXPECT_EQ( | 324 EXPECT_EQ( |
| 346 primary_root, | 325 primary_root, |
| 347 display_controller->GetRootWindowForDisplayId(secondary_display.id())); | 326 display_controller->GetRootWindowForDisplayId(secondary_display.id())); |
| 348 EXPECT_EQ( | 327 EXPECT_EQ( |
| 349 secondary_root, | 328 secondary_root, |
| 350 display_controller->GetRootWindowForDisplayId(primary_display.id())); | 329 display_controller->GetRootWindowForDisplayId(primary_display.id())); |
| 351 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 330 EXPECT_TRUE(primary_root->Contains(launcher_window)); |
| 352 EXPECT_FALSE(secondary_root->Contains(launcher_window)); | 331 EXPECT_FALSE(secondary_root->Contains(launcher_window)); |
| 353 | 332 |
| 354 #if !defined(OS_WIN) | |
| 355 // Test if the bounds are correctly swapped. | 333 // Test if the bounds are correctly swapped. |
| 356 gfx::Display swapped_primary = Shell::GetScreen()->GetPrimaryDisplay(); | 334 gfx::Display swapped_primary = Shell::GetScreen()->GetPrimaryDisplay(); |
| 357 gfx::Display swapped_secondary = ScreenAsh::GetSecondaryDisplay(); | 335 gfx::Display swapped_secondary = ScreenAsh::GetSecondaryDisplay(); |
| 358 EXPECT_EQ("0,0 300x300", swapped_primary.bounds().ToString()); | 336 EXPECT_EQ("0,0 300x300", swapped_primary.bounds().ToString()); |
| 359 EXPECT_EQ("0,0 300x252", swapped_primary.work_area().ToString()); | 337 EXPECT_EQ("0,0 300x252", swapped_primary.work_area().ToString()); |
| 360 EXPECT_EQ("-200,-50 200x200", swapped_secondary.bounds().ToString()); | 338 EXPECT_EQ("-200,-50 200x200", swapped_secondary.bounds().ToString()); |
| 361 EXPECT_EQ("-200,-50 200x200", swapped_secondary.work_area().ToString()); | 339 EXPECT_EQ("-200,-50 200x200", swapped_secondary.work_area().ToString()); |
| 362 #endif | |
| 363 | 340 |
| 364 const DisplayLayout& inverted_layout = | 341 const DisplayLayout& inverted_layout = |
| 365 display_controller->GetLayoutForDisplay(primary_display); | 342 display_controller->GetLayoutForDisplay(primary_display); |
| 366 | 343 |
| 367 EXPECT_EQ("left, -50", inverted_layout.ToString()); | 344 EXPECT_EQ("left, -50", inverted_layout.ToString()); |
| 368 | 345 |
| 369 aura::WindowTracker tracker; | 346 aura::WindowTracker tracker; |
| 370 tracker.Add(primary_root); | 347 tracker.Add(primary_root); |
| 371 tracker.Add(secondary_root); | 348 tracker.Add(secondary_root); |
| 372 | 349 |
| (...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 495 EXPECT_EQ(third_display.id(), ScreenAsh::GetSecondaryDisplay().id()); | 472 EXPECT_EQ(third_display.id(), ScreenAsh::GetSecondaryDisplay().id()); |
| 496 EXPECT_EQ( | 473 EXPECT_EQ( |
| 497 primary_root, | 474 primary_root, |
| 498 display_controller->GetRootWindowForDisplayId(primary_display.id())); | 475 display_controller->GetRootWindowForDisplayId(primary_display.id())); |
| 499 EXPECT_NE( | 476 EXPECT_NE( |
| 500 primary_root, | 477 primary_root, |
| 501 display_controller->GetRootWindowForDisplayId(third_display.id())); | 478 display_controller->GetRootWindowForDisplayId(third_display.id())); |
| 502 EXPECT_TRUE(primary_root->Contains(launcher_window)); | 479 EXPECT_TRUE(primary_root->Contains(launcher_window)); |
| 503 } | 480 } |
| 504 | 481 |
| 505 TEST_F(DisplayControllerTest, MAYBE_CursorDeviceScaleFactorSwapPrimary) { | 482 TEST_F(DisplayControllerTest, CursorDeviceScaleFactorSwapPrimary) { |
| 506 DisplayController* display_controller = | 483 DisplayController* display_controller = |
| 507 Shell::GetInstance()->display_controller(); | 484 Shell::GetInstance()->display_controller(); |
| 508 | 485 |
| 509 UpdateDisplay("200x200,200x200*2"); | 486 UpdateDisplay("200x200,200x200*2"); |
| 510 gfx::Display primary_display = Shell::GetScreen()->GetPrimaryDisplay(); | 487 gfx::Display primary_display = Shell::GetScreen()->GetPrimaryDisplay(); |
| 511 gfx::Display secondary_display = ScreenAsh::GetSecondaryDisplay(); | 488 gfx::Display secondary_display = ScreenAsh::GetSecondaryDisplay(); |
| 512 | 489 |
| 513 aura::RootWindow* primary_root = | 490 aura::RootWindow* primary_root = |
| 514 display_controller->GetRootWindowForDisplayId(primary_display.id()); | 491 display_controller->GetRootWindowForDisplayId(primary_display.id()); |
| 515 aura::RootWindow* secondary_root = | 492 aura::RootWindow* secondary_root = |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 547 | 524 |
| 548 // Cursor's device scale factor should be updated even without moving cursor. | 525 // Cursor's device scale factor should be updated even without moving cursor. |
| 549 EXPECT_EQ(1.0f, test_api.GetDeviceScaleFactor()); | 526 EXPECT_EQ(1.0f, test_api.GetDeviceScaleFactor()); |
| 550 | 527 |
| 551 primary_root->MoveCursorTo(gfx::Point(50, 50)); | 528 primary_root->MoveCursorTo(gfx::Point(50, 50)); |
| 552 EXPECT_EQ(1.0f, | 529 EXPECT_EQ(1.0f, |
| 553 primary_root->AsRootWindowHostDelegate()->GetDeviceScaleFactor()); | 530 primary_root->AsRootWindowHostDelegate()->GetDeviceScaleFactor()); |
| 554 EXPECT_EQ(1.0f, test_api.GetDeviceScaleFactor()); | 531 EXPECT_EQ(1.0f, test_api.GetDeviceScaleFactor()); |
| 555 } | 532 } |
| 556 | 533 |
| 534 #if defined(OS_WIN) |
| 535 // TODO(oshima): On Windows, we don't update the origin/size right away. |
| 536 #define MAYBE_UpdateDisplayWithHostOrigin DISABLED_UpdateDisplayWithHostOrigin |
| 537 #else |
| 538 #define MAYBE_UpdateDisplayWithHostOrigin UpdateDisplayWithHostOrigin |
| 539 #endif |
| 540 |
| 557 TEST_F(DisplayControllerTest, MAYBE_UpdateDisplayWithHostOrigin) { | 541 TEST_F(DisplayControllerTest, MAYBE_UpdateDisplayWithHostOrigin) { |
| 558 UpdateDisplay("100x200,300x400"); | 542 UpdateDisplay("100x200,300x400"); |
| 559 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 543 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
| 560 Shell::RootWindowList root_windows = | 544 Shell::RootWindowList root_windows = |
| 561 Shell::GetInstance()->GetAllRootWindows(); | 545 Shell::GetInstance()->GetAllRootWindows(); |
| 562 ASSERT_EQ(2U, root_windows.size()); | 546 ASSERT_EQ(2U, root_windows.size()); |
| 563 EXPECT_EQ("0,0", root_windows[0]->GetHostOrigin().ToString()); | 547 EXPECT_EQ("1,1", root_windows[0]->GetHostOrigin().ToString()); |
| 564 EXPECT_EQ("100x200", root_windows[0]->GetHostSize().ToString()); | 548 EXPECT_EQ("100x200", root_windows[0]->GetHostSize().ToString()); |
| 565 // UpdateDisplay set the origin if it's not set. | 549 // UpdateDisplay set the origin if it's not set. |
| 566 EXPECT_NE("0,0", root_windows[1]->GetHostOrigin().ToString()); | 550 EXPECT_NE("1,1", root_windows[1]->GetHostOrigin().ToString()); |
| 567 EXPECT_EQ("300x400", root_windows[1]->GetHostSize().ToString()); | 551 EXPECT_EQ("300x400", root_windows[1]->GetHostSize().ToString()); |
| 568 | 552 |
| 569 UpdateDisplay("100x200,200+300-300x400"); | 553 UpdateDisplay("100x200,200+300-300x400"); |
| 570 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 554 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
| 571 EXPECT_EQ("0,0", root_windows[0]->GetHostOrigin().ToString()); | 555 EXPECT_EQ("0,0", root_windows[0]->GetHostOrigin().ToString()); |
| 572 EXPECT_EQ("100x200", root_windows[0]->GetHostSize().ToString()); | 556 EXPECT_EQ("100x200", root_windows[0]->GetHostSize().ToString()); |
| 573 EXPECT_EQ("200,300", root_windows[1]->GetHostOrigin().ToString()); | 557 EXPECT_EQ("200,300", root_windows[1]->GetHostOrigin().ToString()); |
| 574 EXPECT_EQ("300x400", root_windows[1]->GetHostSize().ToString()); | 558 EXPECT_EQ("300x400", root_windows[1]->GetHostSize().ToString()); |
| 575 | 559 |
| 576 UpdateDisplay("400+500-200x300,300x400"); | 560 UpdateDisplay("400+500-200x300,300x400"); |
| 577 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 561 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
| 578 EXPECT_EQ("400,500", root_windows[0]->GetHostOrigin().ToString()); | 562 EXPECT_EQ("400,500", root_windows[0]->GetHostOrigin().ToString()); |
| 579 EXPECT_EQ("200x300", root_windows[0]->GetHostSize().ToString()); | 563 EXPECT_EQ("200x300", root_windows[0]->GetHostSize().ToString()); |
| 580 EXPECT_EQ("0,0", root_windows[1]->GetHostOrigin().ToString()); | 564 EXPECT_EQ("0,0", root_windows[1]->GetHostOrigin().ToString()); |
| 581 EXPECT_EQ("300x400", root_windows[1]->GetHostSize().ToString()); | 565 EXPECT_EQ("300x400", root_windows[1]->GetHostSize().ToString()); |
| 582 | 566 |
| 583 UpdateDisplay("100+200-100x200,300+500-200x300"); | 567 UpdateDisplay("100+200-100x200,300+500-200x300"); |
| 584 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); | 568 ASSERT_EQ(2, Shell::GetScreen()->GetNumDisplays()); |
| 585 EXPECT_EQ("100,200", root_windows[0]->GetHostOrigin().ToString()); | 569 EXPECT_EQ("100,200", root_windows[0]->GetHostOrigin().ToString()); |
| 586 EXPECT_EQ("100x200", root_windows[0]->GetHostSize().ToString()); | 570 EXPECT_EQ("100x200", root_windows[0]->GetHostSize().ToString()); |
| 587 EXPECT_EQ("300,500", root_windows[1]->GetHostOrigin().ToString()); | 571 EXPECT_EQ("300,500", root_windows[1]->GetHostOrigin().ToString()); |
| 588 EXPECT_EQ("200x300", root_windows[1]->GetHostSize().ToString()); | 572 EXPECT_EQ("200x300", root_windows[1]->GetHostSize().ToString()); |
| 589 } | 573 } |
| 590 | 574 |
| 591 } // namespace test | 575 } // namespace test |
| 592 } // namespace ash | 576 } // namespace ash |
| OLD | NEW |