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