123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- // Copyright 2020 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include "ash/display/display_highlight_controller.h"
- #include "ash/constants/ash_features.h"
- #include "ash/shell.h"
- #include "ash/test/ash_test_base.h"
- #include "base/test/scoped_feature_list.h"
- #include "ui/display/manager/display_manager.h"
- namespace ash {
- class DisplayHighlightControllerTest : public AshTestBase {
- public:
- DisplayHighlightControllerTest() = default;
- ~DisplayHighlightControllerTest() override = default;
- void LockScreen() { GetSessionControllerClient()->LockScreen(); }
- DisplayHighlightController* display_highlight_controller() const {
- return Shell::Get()->display_highlight_controller();
- }
- void ExpectNoHighlight() {
- EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
- }
- void ExpectHighlightWithDisplay(const display::Display target) {
- views::Widget* widget =
- display_highlight_controller()->GetWidgetForTesting();
- const int64_t display_id = target.id();
- EXPECT_EQ(target, display_manager()->FindDisplayContainingPoint(
- widget->GetWindowBoundsInScreen().origin()));
- ASSERT_NE(widget, nullptr);
- EXPECT_EQ(widget->GetNativeWindow()->GetRootWindow(),
- Shell::GetRootWindowForDisplayId(display_id));
- EXPECT_EQ(widget->GetWindowBoundsInScreen(), target.bounds());
- EXPECT_TRUE(widget->IsVisible());
- }
- };
- TEST_F(DisplayHighlightControllerTest, OnDisplayChangedNoDisplaySelected) {
- UpdateDisplay("1920x1080");
- ExpectNoHighlight();
- }
- TEST_F(DisplayHighlightControllerTest, SetHighlightedDisplaySingle) {
- UpdateDisplay("1920x1080");
- const display::Display& display = display_manager()->GetDisplayAt(0);
- display_highlight_controller()->SetHighlightedDisplay(display.id());
- EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
- }
- TEST_F(DisplayHighlightControllerTest, OnDisplayChangedInvalidDisplaySelected) {
- UpdateDisplay("1920x1080");
- display_highlight_controller()->SetHighlightedDisplay(
- display::kInvalidDisplayId);
- ExpectNoHighlight();
- }
- TEST_F(DisplayHighlightControllerTest, SetHighlightedDisplayCycleMultiple) {
- UpdateDisplay("1920x1080,800x600,1366x768");
- DisplayHighlightController* highlight_controller =
- display_highlight_controller();
- display::DisplayManager* display_manager_ptr = display_manager();
- const display::Display& display = display_manager_ptr->GetDisplayAt(0);
- highlight_controller->SetHighlightedDisplay(display.id());
- EXPECT_NE(display.id(), display::kInvalidDisplayId);
- ExpectHighlightWithDisplay(display);
- const display::Display& second_display = display_manager_ptr->GetDisplayAt(1);
- highlight_controller->SetHighlightedDisplay(second_display.id());
- ExpectHighlightWithDisplay(second_display);
- const display::Display& third_display = display_manager_ptr->GetDisplayAt(2);
- highlight_controller->SetHighlightedDisplay(third_display.id());
- ExpectHighlightWithDisplay(third_display);
- }
- TEST_F(DisplayHighlightControllerTest, AddDisplay) {
- UpdateDisplay("1920x1080");
- display::DisplayManager* display_manager_ptr = display_manager();
- const display::Display& display = display_manager_ptr->GetDisplayAt(0);
- display_highlight_controller()->SetHighlightedDisplay(display.id());
- EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
- UpdateDisplay("1920x1080,800x600");
- const display::Display& updated_display =
- display_manager_ptr->GetDisplayAt(0);
- ExpectHighlightWithDisplay(updated_display);
- }
- TEST_F(DisplayHighlightControllerTest, NotVisibleUnifiedMode) {
- UpdateDisplay("1920x1080,800x600");
- display::DisplayManager* display_manager_ptr = display_manager();
- display_manager_ptr->SetUnifiedDesktopEnabled(true);
- const display::Display& display = display_manager_ptr->GetDisplayAt(0);
- display_highlight_controller()->SetHighlightedDisplay(display.id());
- EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
- }
- TEST_F(DisplayHighlightControllerTest, NotVisibleMirroredMode) {
- UpdateDisplay("1920x1080,800x600");
- display::DisplayManager* display_manager_ptr = display_manager();
- display_manager_ptr->SetMultiDisplayMode(display::DisplayManager::MIRRORING);
- display_manager_ptr->UpdateDisplays();
- const display::Display& display = display_manager_ptr->GetDisplayAt(0);
- display_highlight_controller()->SetHighlightedDisplay(display.id());
- EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
- }
- TEST_F(DisplayHighlightControllerTest, VisibleMixedMode) {
- UpdateDisplay("300x400,400x500,500x600");
- // Turn on mixed mirror mode. (Mirror from the first display to the second
- // display)
- display::DisplayManager* display_manager_ptr = display_manager();
- display::DisplayIdList id_list =
- display_manager_ptr->GetConnectedDisplayIdList();
- display::DisplayIdList dst_ids;
- dst_ids.emplace_back(id_list[1]);
- absl::optional<display::MixedMirrorModeParams> mixed_params(
- absl::in_place, id_list[0], dst_ids);
- display_manager_ptr->SetMirrorMode(display::MirrorMode::kMixed, mixed_params);
- const display::Display& display = display_manager_ptr->GetDisplayAt(0);
- display_highlight_controller()->SetHighlightedDisplay(display.id());
- ExpectHighlightWithDisplay(display);
- }
- TEST_F(DisplayHighlightControllerTest, LockedScreenHighlightVisiblity) {
- UpdateDisplay("1920x1080,800x600,1366x768");
- const display::Display& display = display_manager()->GetDisplayAt(0);
- display_highlight_controller()->SetHighlightedDisplay(display.id());
- EXPECT_NE(display.id(), display::kInvalidDisplayId);
- ExpectHighlightWithDisplay(display);
- // Lock screen
- LockScreen();
- EXPECT_EQ(display_highlight_controller()->GetWidgetForTesting(), nullptr);
- }
- } // namespace ash
|