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_manager.h" | 5 #include "ash/display/display_manager.h" |
6 | 6 |
7 #include "ash/display/display_controller.h" | 7 #include "ash/display/display_controller.h" |
8 #include "ash/screen_ash.h" | 8 #include "ash/screen_ash.h" |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "ash/test/ash_test_base.h" | 10 #include "ash/test/ash_test_base.h" |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
79 } | 79 } |
80 | 80 |
81 const gfx::Display& FindDisplayForId(int64 id) { | 81 const gfx::Display& FindDisplayForId(int64 id) { |
82 return display_manager()->FindDisplayForId(id); | 82 return display_manager()->FindDisplayForId(id); |
83 } | 83 } |
84 | 84 |
85 const DisplayInfo& FindDisplayInfoForId(int64 id) { | 85 const DisplayInfo& FindDisplayInfoForId(int64 id) { |
86 return GetDisplayInfo(display_manager()->FindDisplayForId(id)); | 86 return GetDisplayInfo(display_manager()->FindDisplayForId(id)); |
87 } | 87 } |
88 | 88 |
| 89 const gfx::Display GetMirroredDisplay() { |
| 90 test::MirrorWindowTestApi test_api; |
| 91 return Shell::GetInstance()->display_manager()-> |
| 92 FindDisplayForRootWindow(test_api.GetRootWindow()); |
| 93 } |
| 94 |
89 // aura::DisplayObserver overrides: | 95 // aura::DisplayObserver overrides: |
90 virtual void OnDisplayBoundsChanged(const gfx::Display& display) OVERRIDE { | 96 virtual void OnDisplayBoundsChanged(const gfx::Display& display) OVERRIDE { |
91 changed_.push_back(display); | 97 changed_.push_back(display); |
92 } | 98 } |
93 virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE { | 99 virtual void OnDisplayAdded(const gfx::Display& new_display) OVERRIDE { |
94 added_.push_back(new_display); | 100 added_.push_back(new_display); |
95 } | 101 } |
96 virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE { | 102 virtual void OnDisplayRemoved(const gfx::Display& old_display) OVERRIDE { |
97 ++removed_count_; | 103 ++removed_count_; |
98 } | 104 } |
(...skipping 285 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
384 std::string default_bounds = | 390 std::string default_bounds = |
385 display_manager()->GetDisplayAt(0)->bounds().ToString(); | 391 display_manager()->GetDisplayAt(0)->bounds().ToString(); |
386 | 392 |
387 std::vector<DisplayInfo> display_info_list; | 393 std::vector<DisplayInfo> display_info_list; |
388 // Primary disconnected. | 394 // Primary disconnected. |
389 display_manager()->OnNativeDisplaysChanged(display_info_list); | 395 display_manager()->OnNativeDisplaysChanged(display_info_list); |
390 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); | 396 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
391 EXPECT_EQ(default_bounds, | 397 EXPECT_EQ(default_bounds, |
392 display_manager()->GetDisplayAt(0)->bounds().ToString()); | 398 display_manager()->GetDisplayAt(0)->bounds().ToString()); |
393 EXPECT_EQ(1U, display_manager()->num_connected_displays()); | 399 EXPECT_EQ(1U, display_manager()->num_connected_displays()); |
394 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 400 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
395 | 401 |
396 // External connected while primary was disconnected. | 402 // External connected while primary was disconnected. |
397 display_info_list.push_back(external_display_info); | 403 display_info_list.push_back(external_display_info); |
398 display_manager()->OnNativeDisplaysChanged(display_info_list); | 404 display_manager()->OnNativeDisplaysChanged(display_info_list); |
399 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); | 405 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
400 | 406 |
401 EXPECT_EQ(invalid_id, FindDisplayForId(internal_display_id).id()); | 407 EXPECT_EQ(invalid_id, FindDisplayForId(internal_display_id).id()); |
402 EXPECT_EQ("1,1 100x100", | 408 EXPECT_EQ("1,1 100x100", |
403 FindDisplayInfoForId(external_id).bounds_in_pixel().ToString()); | 409 FindDisplayInfoForId(external_id).bounds_in_pixel().ToString()); |
404 EXPECT_EQ(1U, display_manager()->num_connected_displays()); | 410 EXPECT_EQ(1U, display_manager()->num_connected_displays()); |
405 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 411 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
406 EXPECT_EQ(external_id, Shell::GetScreen()->GetPrimaryDisplay().id()); | 412 EXPECT_EQ(external_id, Shell::GetScreen()->GetPrimaryDisplay().id()); |
407 | 413 |
408 // Primary connected, with different bounds. | 414 // Primary connected, with different bounds. |
409 display_info_list.clear(); | 415 display_info_list.clear(); |
410 display_info_list.push_back(internal_display_info); | 416 display_info_list.push_back(internal_display_info); |
411 display_info_list.push_back(external_display_info); | 417 display_info_list.push_back(external_display_info); |
412 display_manager()->OnNativeDisplaysChanged(display_info_list); | 418 display_manager()->OnNativeDisplaysChanged(display_info_list); |
413 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); | 419 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); |
414 // need to remember which is primary | 420 // need to remember which is primary |
415 EXPECT_EQ("0,0 500x500", | 421 EXPECT_EQ("0,0 500x500", |
416 FindDisplayForId(internal_display_id).bounds().ToString()); | 422 FindDisplayForId(internal_display_id).bounds().ToString()); |
417 EXPECT_EQ("1,1 100x100", | 423 EXPECT_EQ("1,1 100x100", |
418 FindDisplayInfoForId(10).bounds_in_pixel().ToString()); | 424 FindDisplayInfoForId(10).bounds_in_pixel().ToString()); |
419 EXPECT_EQ(2U, display_manager()->num_connected_displays()); | 425 EXPECT_EQ(2U, display_manager()->num_connected_displays()); |
420 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 426 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
421 EXPECT_EQ(StringPrintf("x-%d", internal_display_id), | 427 EXPECT_EQ(StringPrintf("x-%d", internal_display_id), |
422 display_manager()->GetDisplayNameForId(internal_display_id)); | 428 display_manager()->GetDisplayNameForId(internal_display_id)); |
423 | 429 |
424 // Emulate suspend. | 430 // Emulate suspend. |
425 display_info_list.clear(); | 431 display_info_list.clear(); |
426 display_manager()->OnNativeDisplaysChanged(display_info_list); | 432 display_manager()->OnNativeDisplaysChanged(display_info_list); |
427 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); | 433 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); |
428 EXPECT_EQ("0,0 500x500", | 434 EXPECT_EQ("0,0 500x500", |
429 FindDisplayForId(internal_display_id).bounds().ToString()); | 435 FindDisplayForId(internal_display_id).bounds().ToString()); |
430 EXPECT_EQ("1,1 100x100", | 436 EXPECT_EQ("1,1 100x100", |
431 FindDisplayInfoForId(10).bounds_in_pixel().ToString()); | 437 FindDisplayInfoForId(10).bounds_in_pixel().ToString()); |
432 EXPECT_EQ(2U, display_manager()->num_connected_displays()); | 438 EXPECT_EQ(2U, display_manager()->num_connected_displays()); |
433 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 439 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
434 EXPECT_EQ(StringPrintf("x-%d", internal_display_id), | 440 EXPECT_EQ(StringPrintf("x-%d", internal_display_id), |
435 display_manager()->GetDisplayNameForId(internal_display_id)); | 441 display_manager()->GetDisplayNameForId(internal_display_id)); |
436 | 442 |
437 // External display has disconnected then resumed. | 443 // External display has disconnected then resumed. |
438 display_info_list.push_back(internal_display_info); | 444 display_info_list.push_back(internal_display_info); |
439 display_manager()->OnNativeDisplaysChanged(display_info_list); | 445 display_manager()->OnNativeDisplaysChanged(display_info_list); |
440 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); | 446 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
441 EXPECT_EQ("0,0 500x500", | 447 EXPECT_EQ("0,0 500x500", |
442 FindDisplayForId(internal_display_id).bounds().ToString()); | 448 FindDisplayForId(internal_display_id).bounds().ToString()); |
443 EXPECT_EQ(1U, display_manager()->num_connected_displays()); | 449 EXPECT_EQ(1U, display_manager()->num_connected_displays()); |
444 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 450 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
445 | 451 |
446 // External display was changed during suspend. | 452 // External display was changed during suspend. |
447 display_info_list.push_back(external_display_info); | 453 display_info_list.push_back(external_display_info); |
448 display_manager()->OnNativeDisplaysChanged(display_info_list); | 454 display_manager()->OnNativeDisplaysChanged(display_info_list); |
449 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); | 455 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); |
450 EXPECT_EQ(2U, display_manager()->num_connected_displays()); | 456 EXPECT_EQ(2U, display_manager()->num_connected_displays()); |
451 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 457 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
452 | 458 |
453 // suspend... | 459 // suspend... |
454 display_info_list.clear(); | 460 display_info_list.clear(); |
455 display_manager()->OnNativeDisplaysChanged(display_info_list); | 461 display_manager()->OnNativeDisplaysChanged(display_info_list); |
456 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); | 462 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); |
457 EXPECT_EQ(2U, display_manager()->num_connected_displays()); | 463 EXPECT_EQ(2U, display_manager()->num_connected_displays()); |
458 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 464 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
459 | 465 |
460 // and resume with different external display. | 466 // and resume with different external display. |
461 display_info_list.push_back(internal_display_info); | 467 display_info_list.push_back(internal_display_info); |
462 display_info_list.push_back(CreateDisplayInfo(12, gfx::Rect(1, 1, 100, 100))); | 468 display_info_list.push_back(CreateDisplayInfo(12, gfx::Rect(1, 1, 100, 100))); |
463 display_manager()->OnNativeDisplaysChanged(display_info_list); | 469 display_manager()->OnNativeDisplaysChanged(display_info_list); |
464 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); | 470 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); |
465 EXPECT_EQ(2U, display_manager()->num_connected_displays()); | 471 EXPECT_EQ(2U, display_manager()->num_connected_displays()); |
466 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 472 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
467 EXPECT_FALSE(display_manager()->IsMirrored()); | 473 EXPECT_FALSE(display_manager()->IsMirrored()); |
468 | 474 |
469 // mirrored... | 475 // mirrored... |
470 display_info_list.clear(); | 476 display_info_list.clear(); |
471 display_info_list.push_back(internal_display_info); | 477 display_info_list.push_back(internal_display_info); |
472 display_info_list.push_back(mirrored_display_info); | 478 display_info_list.push_back(mirrored_display_info); |
473 display_manager()->OnNativeDisplaysChanged(display_info_list); | 479 display_manager()->OnNativeDisplaysChanged(display_info_list); |
474 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); | 480 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
475 EXPECT_EQ("0,0 500x500", | 481 EXPECT_EQ("0,0 500x500", |
476 FindDisplayForId(internal_display_id).bounds().ToString()); | 482 FindDisplayForId(internal_display_id).bounds().ToString()); |
477 EXPECT_EQ(2U, display_manager()->num_connected_displays()); | 483 EXPECT_EQ(2U, display_manager()->num_connected_displays()); |
478 EXPECT_EQ(11U, display_manager()->mirrored_display_id()); | 484 EXPECT_EQ(11U, display_manager()->mirrored_display().id()); |
479 EXPECT_TRUE(display_manager()->IsMirrored()); | 485 EXPECT_TRUE(display_manager()->IsMirrored()); |
480 | 486 |
481 // Test display name. | 487 // Test display name. |
482 EXPECT_EQ(StringPrintf("x-%d", internal_display_id), | 488 EXPECT_EQ(StringPrintf("x-%d", internal_display_id), |
483 display_manager()->GetDisplayNameForId(internal_display_id)); | 489 display_manager()->GetDisplayNameForId(internal_display_id)); |
484 EXPECT_EQ("x-10", display_manager()->GetDisplayNameForId(10)); | 490 EXPECT_EQ("x-10", display_manager()->GetDisplayNameForId(10)); |
485 EXPECT_EQ("x-11", display_manager()->GetDisplayNameForId(11)); | 491 EXPECT_EQ("x-11", display_manager()->GetDisplayNameForId(11)); |
486 EXPECT_EQ("x-12", display_manager()->GetDisplayNameForId(12)); | 492 EXPECT_EQ("x-12", display_manager()->GetDisplayNameForId(12)); |
487 // Default name for the id that doesn't exist. | 493 // Default name for the id that doesn't exist. |
488 EXPECT_EQ("Display 100", display_manager()->GetDisplayNameForId(100)); | 494 EXPECT_EQ("Display 100", display_manager()->GetDisplayNameForId(100)); |
(...skipping 13 matching lines...) Expand all Loading... |
502 | 508 |
503 // Turn off internal | 509 // Turn off internal |
504 display_info_list.clear(); | 510 display_info_list.clear(); |
505 display_info_list.push_back(external_display_info); | 511 display_info_list.push_back(external_display_info); |
506 display_manager()->OnNativeDisplaysChanged(display_info_list); | 512 display_manager()->OnNativeDisplaysChanged(display_info_list); |
507 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); | 513 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
508 EXPECT_EQ(invalid_id, FindDisplayForId(internal_display_id).id()); | 514 EXPECT_EQ(invalid_id, FindDisplayForId(internal_display_id).id()); |
509 EXPECT_EQ("1,1 100x100", | 515 EXPECT_EQ("1,1 100x100", |
510 FindDisplayInfoForId(external_id).bounds_in_pixel().ToString()); | 516 FindDisplayInfoForId(external_id).bounds_in_pixel().ToString()); |
511 EXPECT_EQ(1U, display_manager()->num_connected_displays()); | 517 EXPECT_EQ(1U, display_manager()->num_connected_displays()); |
512 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 518 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
513 | 519 |
514 // Switched to another display | 520 // Switched to another display |
515 display_info_list.clear(); | 521 display_info_list.clear(); |
516 display_info_list.push_back(internal_display_info); | 522 display_info_list.push_back(internal_display_info); |
517 display_manager()->OnNativeDisplaysChanged(display_info_list); | 523 display_manager()->OnNativeDisplaysChanged(display_info_list); |
518 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); | 524 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
519 EXPECT_EQ( | 525 EXPECT_EQ( |
520 "0,0 500x500", | 526 "0,0 500x500", |
521 FindDisplayInfoForId(internal_display_id).bounds_in_pixel().ToString()); | 527 FindDisplayInfoForId(internal_display_id).bounds_in_pixel().ToString()); |
522 EXPECT_EQ(1U, display_manager()->num_connected_displays()); | 528 EXPECT_EQ(1U, display_manager()->num_connected_displays()); |
523 EXPECT_EQ(invalid_id, display_manager()->mirrored_display_id()); | 529 EXPECT_FALSE(display_manager()->mirrored_display().is_valid()); |
524 } | 530 } |
525 | 531 |
526 #if defined(OS_WIN) | 532 #if defined(OS_WIN) |
527 // This test currently fails on Win8/Metro as it picks up the actual | 533 // This test currently fails on Win8/Metro as it picks up the actual |
528 // display size. http://crbug.com/154081 | 534 // display size. http://crbug.com/154081 |
529 #define MAYBE_TestNativeDisplaysChangedNoInternal \ | 535 #define MAYBE_TestNativeDisplaysChangedNoInternal \ |
530 DISABLED_TestNativeDisplaysChangedNoInternal | 536 DISABLED_TestNativeDisplaysChangedNoInternal |
531 #else | 537 #else |
532 #define MAYBE_TestNativeDisplaysChangedNoInternal \ | 538 #define MAYBE_TestNativeDisplaysChangedNoInternal \ |
533 TestNativeDisplaysChangedNoInternal | 539 TestNativeDisplaysChangedNoInternal |
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
870 test::MirrorWindowTestApi test_api; | 876 test::MirrorWindowTestApi test_api; |
871 EXPECT_EQ(NULL, test_api.GetRootWindow()); | 877 EXPECT_EQ(NULL, test_api.GetRootWindow()); |
872 | 878 |
873 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | 879 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); |
874 display_manager->SetSoftwareMirroring(true); | 880 display_manager->SetSoftwareMirroring(true); |
875 display_manager->UpdateDisplays(); | 881 display_manager->UpdateDisplays(); |
876 EXPECT_EQ(1U, display_manager->GetNumDisplays()); | 882 EXPECT_EQ(1U, display_manager->GetNumDisplays()); |
877 EXPECT_EQ("0,0 300x400", | 883 EXPECT_EQ("0,0 300x400", |
878 Shell::GetScreen()->GetPrimaryDisplay().bounds().ToString()); | 884 Shell::GetScreen()->GetPrimaryDisplay().bounds().ToString()); |
879 EXPECT_EQ("400x500", test_api.GetRootWindow()->GetHostSize().ToString()); | 885 EXPECT_EQ("400x500", test_api.GetRootWindow()->GetHostSize().ToString()); |
| 886 EXPECT_EQ("300x400", test_api.GetRootWindow()->bounds().size().ToString()); |
880 EXPECT_TRUE(display_manager->IsMirrored()); | 887 EXPECT_TRUE(display_manager->IsMirrored()); |
881 | 888 |
882 display_manager->SetMirrorMode(false); | 889 display_manager->SetMirrorMode(false); |
883 EXPECT_EQ(NULL, test_api.GetRootWindow()); | 890 EXPECT_EQ(NULL, test_api.GetRootWindow()); |
884 EXPECT_EQ(2U, display_manager->GetNumDisplays()); | 891 EXPECT_EQ(2U, display_manager->GetNumDisplays()); |
885 EXPECT_FALSE(display_manager->IsMirrored()); | 892 EXPECT_FALSE(display_manager->IsMirrored()); |
| 893 |
| 894 // Make sure the mirror window has the pixel size of the |
| 895 // source display. |
| 896 display_manager->SetMirrorMode(true); |
| 897 |
| 898 UpdateDisplay("300x400@0.5,400x500"); |
| 899 EXPECT_EQ("300x400", test_api.GetRootWindow()->bounds().size().ToString()); |
| 900 EXPECT_EQ("400x500", GetMirroredDisplay().size().ToString()); |
| 901 |
| 902 UpdateDisplay("310x410*2,400x500"); |
| 903 EXPECT_EQ("310x410", test_api.GetRootWindow()->bounds().size().ToString()); |
| 904 EXPECT_EQ("400x500", GetMirroredDisplay().size().ToString()); |
| 905 |
| 906 UpdateDisplay("320x420/r,400x500"); |
| 907 EXPECT_EQ("320x420", test_api.GetRootWindow()->bounds().size().ToString()); |
| 908 EXPECT_EQ("400x500", GetMirroredDisplay().size().ToString()); |
| 909 |
| 910 UpdateDisplay("330x440/r,400x500"); |
| 911 EXPECT_EQ("330x440", test_api.GetRootWindow()->bounds().size().ToString()); |
| 912 EXPECT_EQ("400x500", GetMirroredDisplay().size().ToString()); |
| 913 |
| 914 // Overscan insets are ignored. |
| 915 UpdateDisplay("400x600/o,600x800/o"); |
| 916 EXPECT_EQ("400x600", test_api.GetRootWindow()->bounds().size().ToString()); |
| 917 EXPECT_EQ("600x800", GetMirroredDisplay().size().ToString()); |
886 } | 918 } |
887 | 919 |
888 } // namespace internal | 920 } // namespace internal |
889 } // namespace ash | 921 } // namespace ash |
OLD | NEW |