display_highlight_controller_unittest.cc 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "ash/display/display_highlight_controller.h"
  5. #include "ash/constants/ash_features.h"
  6. #include "ash/shell.h"
  7. #include "ash/test/ash_test_base.h"
  8. #include "base/test/scoped_feature_list.h"
  9. #include "ui/display/manager/display_manager.h"
  10. namespace ash {
  11. class DisplayHighlightControllerTest : public AshTestBase {
  12. public:
  13. DisplayHighlightControllerTest() = default;
  14. ~DisplayHighlightControllerTest() override = default;
  15. void LockScreen() { GetSessionControllerClient()->LockScreen(); }
  16. DisplayHighlightController* display_highlight_controller() const {
  17. return Shell::Get()->display_highlight_controller();
  18. }
  19. void ExpectNoHighlight() {
  20. EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
  21. }
  22. void ExpectHighlightWithDisplay(const display::Display target) {
  23. views::Widget* widget =
  24. display_highlight_controller()->GetWidgetForTesting();
  25. const int64_t display_id = target.id();
  26. EXPECT_EQ(target, display_manager()->FindDisplayContainingPoint(
  27. widget->GetWindowBoundsInScreen().origin()));
  28. ASSERT_NE(widget, nullptr);
  29. EXPECT_EQ(widget->GetNativeWindow()->GetRootWindow(),
  30. Shell::GetRootWindowForDisplayId(display_id));
  31. EXPECT_EQ(widget->GetWindowBoundsInScreen(), target.bounds());
  32. EXPECT_TRUE(widget->IsVisible());
  33. }
  34. };
  35. TEST_F(DisplayHighlightControllerTest, OnDisplayChangedNoDisplaySelected) {
  36. UpdateDisplay("1920x1080");
  37. ExpectNoHighlight();
  38. }
  39. TEST_F(DisplayHighlightControllerTest, SetHighlightedDisplaySingle) {
  40. UpdateDisplay("1920x1080");
  41. const display::Display& display = display_manager()->GetDisplayAt(0);
  42. display_highlight_controller()->SetHighlightedDisplay(display.id());
  43. EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
  44. }
  45. TEST_F(DisplayHighlightControllerTest, OnDisplayChangedInvalidDisplaySelected) {
  46. UpdateDisplay("1920x1080");
  47. display_highlight_controller()->SetHighlightedDisplay(
  48. display::kInvalidDisplayId);
  49. ExpectNoHighlight();
  50. }
  51. TEST_F(DisplayHighlightControllerTest, SetHighlightedDisplayCycleMultiple) {
  52. UpdateDisplay("1920x1080,800x600,1366x768");
  53. DisplayHighlightController* highlight_controller =
  54. display_highlight_controller();
  55. display::DisplayManager* display_manager_ptr = display_manager();
  56. const display::Display& display = display_manager_ptr->GetDisplayAt(0);
  57. highlight_controller->SetHighlightedDisplay(display.id());
  58. EXPECT_NE(display.id(), display::kInvalidDisplayId);
  59. ExpectHighlightWithDisplay(display);
  60. const display::Display& second_display = display_manager_ptr->GetDisplayAt(1);
  61. highlight_controller->SetHighlightedDisplay(second_display.id());
  62. ExpectHighlightWithDisplay(second_display);
  63. const display::Display& third_display = display_manager_ptr->GetDisplayAt(2);
  64. highlight_controller->SetHighlightedDisplay(third_display.id());
  65. ExpectHighlightWithDisplay(third_display);
  66. }
  67. TEST_F(DisplayHighlightControllerTest, AddDisplay) {
  68. UpdateDisplay("1920x1080");
  69. display::DisplayManager* display_manager_ptr = display_manager();
  70. const display::Display& display = display_manager_ptr->GetDisplayAt(0);
  71. display_highlight_controller()->SetHighlightedDisplay(display.id());
  72. EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
  73. UpdateDisplay("1920x1080,800x600");
  74. const display::Display& updated_display =
  75. display_manager_ptr->GetDisplayAt(0);
  76. ExpectHighlightWithDisplay(updated_display);
  77. }
  78. TEST_F(DisplayHighlightControllerTest, NotVisibleUnifiedMode) {
  79. UpdateDisplay("1920x1080,800x600");
  80. display::DisplayManager* display_manager_ptr = display_manager();
  81. display_manager_ptr->SetUnifiedDesktopEnabled(true);
  82. const display::Display& display = display_manager_ptr->GetDisplayAt(0);
  83. display_highlight_controller()->SetHighlightedDisplay(display.id());
  84. EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
  85. }
  86. TEST_F(DisplayHighlightControllerTest, NotVisibleMirroredMode) {
  87. UpdateDisplay("1920x1080,800x600");
  88. display::DisplayManager* display_manager_ptr = display_manager();
  89. display_manager_ptr->SetMultiDisplayMode(display::DisplayManager::MIRRORING);
  90. display_manager_ptr->UpdateDisplays();
  91. const display::Display& display = display_manager_ptr->GetDisplayAt(0);
  92. display_highlight_controller()->SetHighlightedDisplay(display.id());
  93. EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
  94. }
  95. TEST_F(DisplayHighlightControllerTest, VisibleMixedMode) {
  96. UpdateDisplay("300x400,400x500,500x600");
  97. // Turn on mixed mirror mode. (Mirror from the first display to the second
  98. // display)
  99. display::DisplayManager* display_manager_ptr = display_manager();
  100. display::DisplayIdList id_list =
  101. display_manager_ptr->GetConnectedDisplayIdList();
  102. display::DisplayIdList dst_ids;
  103. dst_ids.emplace_back(id_list[1]);
  104. absl::optional<display::MixedMirrorModeParams> mixed_params(
  105. absl::in_place, id_list[0], dst_ids);
  106. display_manager_ptr->SetMirrorMode(display::MirrorMode::kMixed, mixed_params);
  107. const display::Display& display = display_manager_ptr->GetDisplayAt(0);
  108. display_highlight_controller()->SetHighlightedDisplay(display.id());
  109. ExpectHighlightWithDisplay(display);
  110. }
  111. TEST_F(DisplayHighlightControllerTest, LockedScreenHighlightVisiblity) {
  112. UpdateDisplay("1920x1080,800x600,1366x768");
  113. const display::Display& display = display_manager()->GetDisplayAt(0);
  114. display_highlight_controller()->SetHighlightedDisplay(display.id());
  115. EXPECT_NE(display.id(), display::kInvalidDisplayId);
  116. ExpectHighlightWithDisplay(display);
  117. // Lock screen
  118. LockScreen();
  119. EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
  120. }
  121. } // namespace ash