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 |