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/window_tree_host_manager.h" | 5 #include "ash/display/window_tree_host_manager.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 | 8 |
9 #include "ash/aura/wm_window_aura.h" | 9 #include "ash/aura/wm_window_aura.h" |
10 #include "ash/common/material_design/material_design_controller.h" | 10 #include "ash/common/material_design/material_design_controller.h" |
(...skipping 173 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
184 display::Display GetPrimaryDisplay() { | 184 display::Display GetPrimaryDisplay() { |
185 return display::Screen::GetScreen()->GetDisplayNearestWindow( | 185 return display::Screen::GetScreen()->GetDisplayNearestWindow( |
186 Shell::GetAllRootWindows()[0]); | 186 Shell::GetAllRootWindows()[0]); |
187 } | 187 } |
188 | 188 |
189 display::Display GetSecondaryDisplay() { | 189 display::Display GetSecondaryDisplay() { |
190 return display::Screen::GetScreen()->GetDisplayNearestWindow( | 190 return display::Screen::GetScreen()->GetDisplayNearestWindow( |
191 Shell::GetAllRootWindows()[1]); | 191 Shell::GetAllRootWindows()[1]); |
192 } | 192 } |
193 | 193 |
194 void SetSecondaryDisplayLayoutAndOffset( | 194 class TestHelper { |
| 195 public: |
| 196 explicit TestHelper(test::AshTestBase* delegate); |
| 197 ~TestHelper(); |
| 198 |
| 199 void SetSecondaryDisplayLayoutAndOffset( |
| 200 display::DisplayPlacement::Position position, |
| 201 int offset); |
| 202 |
| 203 void SetSecondaryDisplayLayout(display::DisplayPlacement::Position position); |
| 204 |
| 205 void SetDefaultDisplayLayout(display::DisplayPlacement::Position position); |
| 206 |
| 207 float GetStoredUIScale(int64_t id); |
| 208 |
| 209 private: |
| 210 test::AshTestBase* delegate_; // Not owned |
| 211 DISALLOW_COPY_AND_ASSIGN(TestHelper); |
| 212 }; |
| 213 |
| 214 TestHelper::TestHelper(test::AshTestBase* delegate) : delegate_(delegate) {} |
| 215 TestHelper::~TestHelper() {} |
| 216 |
| 217 void TestHelper::SetSecondaryDisplayLayoutAndOffset( |
195 display::DisplayPlacement::Position position, | 218 display::DisplayPlacement::Position position, |
196 int offset) { | 219 int offset) { |
197 std::unique_ptr<display::DisplayLayout> layout( | 220 std::unique_ptr<display::DisplayLayout> layout(test::CreateDisplayLayout( |
198 test::CreateDisplayLayout(position, offset)); | 221 delegate_->display_manager(), position, offset)); |
199 ASSERT_GT(display::Screen::GetScreen()->GetNumDisplays(), 1); | 222 ASSERT_GT(display::Screen::GetScreen()->GetNumDisplays(), 1); |
200 Shell::GetInstance()->display_manager()->SetLayoutForCurrentDisplays( | 223 delegate_->display_manager()->SetLayoutForCurrentDisplays(std::move(layout)); |
201 std::move(layout)); | |
202 } | 224 } |
203 | 225 |
204 void SetSecondaryDisplayLayout(display::DisplayPlacement::Position position) { | 226 void TestHelper::SetSecondaryDisplayLayout( |
| 227 display::DisplayPlacement::Position position) { |
205 SetSecondaryDisplayLayoutAndOffset(position, 0); | 228 SetSecondaryDisplayLayoutAndOffset(position, 0); |
206 } | 229 } |
207 | 230 |
208 void SetDefaultDisplayLayout(display::DisplayPlacement::Position position) { | 231 void TestHelper::SetDefaultDisplayLayout( |
| 232 display::DisplayPlacement::Position position) { |
209 display::DisplayPlacement default_placement(position, 0); | 233 display::DisplayPlacement default_placement(position, 0); |
210 | 234 delegate_->display_manager()->layout_store()->SetDefaultDisplayPlacement( |
211 Shell::GetInstance() | 235 default_placement); |
212 ->display_manager() | |
213 ->layout_store() | |
214 ->SetDefaultDisplayPlacement(default_placement); | |
215 } | 236 } |
216 | 237 |
217 class WindowTreeHostManagerShutdownTest : public test::AshTestBase { | 238 float TestHelper::GetStoredUIScale(int64_t id) { |
| 239 return delegate_->display_manager()->GetDisplayInfo(id).GetEffectiveUIScale(); |
| 240 } |
| 241 |
| 242 class WindowTreeHostManagerShutdownTest : public test::AshTestBase, |
| 243 public TestHelper { |
218 public: | 244 public: |
219 WindowTreeHostManagerShutdownTest() {} | 245 WindowTreeHostManagerShutdownTest() : TestHelper(this) {} |
220 ~WindowTreeHostManagerShutdownTest() override {} | 246 ~WindowTreeHostManagerShutdownTest() override {} |
221 | 247 |
222 void TearDown() override { | 248 void TearDown() override { |
223 test::AshTestBase::TearDown(); | 249 test::AshTestBase::TearDown(); |
224 if (!SupportsMultipleDisplays()) | 250 if (!SupportsMultipleDisplays()) |
225 return; | 251 return; |
226 | 252 |
227 // Make sure that primary display is accessible after shutdown. | 253 // Make sure that primary display is accessible after shutdown. |
228 display::Display primary = | 254 display::Display primary = |
229 display::Screen::GetScreen()->GetPrimaryDisplay(); | 255 display::Screen::GetScreen()->GetPrimaryDisplay(); |
(...skipping 23 matching lines...) Expand all Loading... |
253 } | 279 } |
254 | 280 |
255 bool displays_initialized() const { return displays_initialized_; } | 281 bool displays_initialized() const { return displays_initialized_; } |
256 | 282 |
257 private: | 283 private: |
258 bool displays_initialized_; | 284 bool displays_initialized_; |
259 | 285 |
260 DISALLOW_COPY_AND_ASSIGN(StartupHelper); | 286 DISALLOW_COPY_AND_ASSIGN(StartupHelper); |
261 }; | 287 }; |
262 | 288 |
263 class WindowTreeHostManagerStartupTest : public test::AshTestBase { | 289 class WindowTreeHostManagerStartupTest : public test::AshTestBase, |
| 290 public TestHelper { |
264 public: | 291 public: |
265 WindowTreeHostManagerStartupTest() : startup_helper_(new StartupHelper) {} | 292 WindowTreeHostManagerStartupTest() |
| 293 : TestHelper(this), startup_helper_(new StartupHelper) {} |
266 ~WindowTreeHostManagerStartupTest() override {} | 294 ~WindowTreeHostManagerStartupTest() override {} |
267 | 295 |
268 // ash::test::AshTestBase: | 296 // ash::test::AshTestBase: |
269 void SetUp() override { | 297 void SetUp() override { |
270 ash_test_helper()->set_test_shell_delegate(startup_helper_); | 298 ash_test_helper()->set_test_shell_delegate(startup_helper_); |
271 test::AshTestBase::SetUp(); | 299 test::AshTestBase::SetUp(); |
272 } | 300 } |
273 void TearDown() override { | 301 void TearDown() override { |
274 Shell::GetInstance()->window_tree_host_manager()->RemoveObserver( | 302 Shell::GetInstance()->window_tree_host_manager()->RemoveObserver( |
275 startup_helper_); | 303 startup_helper_); |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
356 float touch_radius_x_; | 384 float touch_radius_x_; |
357 float touch_radius_y_; | 385 float touch_radius_y_; |
358 float scroll_x_offset_; | 386 float scroll_x_offset_; |
359 float scroll_y_offset_; | 387 float scroll_y_offset_; |
360 float scroll_x_offset_ordinal_; | 388 float scroll_x_offset_ordinal_; |
361 float scroll_y_offset_ordinal_; | 389 float scroll_y_offset_ordinal_; |
362 | 390 |
363 DISALLOW_COPY_AND_ASSIGN(TestEventHandler); | 391 DISALLOW_COPY_AND_ASSIGN(TestEventHandler); |
364 }; | 392 }; |
365 | 393 |
366 float GetStoredUIScale(int64_t id) { | |
367 return Shell::GetInstance() | |
368 ->display_manager() | |
369 ->GetDisplayInfo(id) | |
370 .GetEffectiveUIScale(); | |
371 } | |
372 | 394 |
373 class TestMouseWatcherListener : public views::MouseWatcherListener { | 395 class TestMouseWatcherListener : public views::MouseWatcherListener { |
374 public: | 396 public: |
375 TestMouseWatcherListener() {} | 397 TestMouseWatcherListener() {} |
376 | 398 |
377 private: | 399 private: |
378 // views::MouseWatcherListener: | 400 // views::MouseWatcherListener: |
379 void MouseMovedOutOfHost() override {} | 401 void MouseMovedOutOfHost() override {} |
380 | 402 |
381 DISALLOW_COPY_AND_ASSIGN(TestMouseWatcherListener); | 403 DISALLOW_COPY_AND_ASSIGN(TestMouseWatcherListener); |
382 }; | 404 }; |
383 | 405 |
384 } // namespace | 406 } // namespace |
385 | 407 |
386 using WindowTreeHostManagerTest = test::AshMDTestBase; | 408 class WindowTreeHostManagerTest : public test::AshMDTestBase, |
| 409 public TestHelper { |
| 410 public: |
| 411 WindowTreeHostManagerTest() : TestHelper(this){}; |
| 412 ~WindowTreeHostManagerTest() override{}; |
| 413 |
| 414 private: |
| 415 DISALLOW_COPY_AND_ASSIGN(WindowTreeHostManagerTest); |
| 416 }; |
387 | 417 |
388 INSTANTIATE_TEST_CASE_P( | 418 INSTANTIATE_TEST_CASE_P( |
389 /* prefix intentionally left blank due to only one parameterization */, | 419 /* prefix intentionally left blank due to only one parameterization */, |
390 WindowTreeHostManagerTest, | 420 WindowTreeHostManagerTest, |
391 testing::Values(MaterialDesignController::NON_MATERIAL, | 421 testing::Values(MaterialDesignController::NON_MATERIAL, |
392 MaterialDesignController::MATERIAL_NORMAL, | 422 MaterialDesignController::MATERIAL_NORMAL, |
393 MaterialDesignController::MATERIAL_EXPERIMENTAL)); | 423 MaterialDesignController::MATERIAL_EXPERIMENTAL)); |
394 | 424 |
395 TEST_F(WindowTreeHostManagerShutdownTest, Shutdown) { | 425 TEST_F(WindowTreeHostManagerShutdownTest, Shutdown) { |
396 if (!SupportsMultipleDisplays()) | 426 if (!SupportsMultipleDisplays()) |
(...skipping 18 matching lines...) Expand all Loading... |
415 w1->Focus(); | 445 w1->Focus(); |
416 | 446 |
417 TestObserver observer; | 447 TestObserver observer; |
418 UpdateDisplay("500x500,400x400"); | 448 UpdateDisplay("500x500,400x400"); |
419 EXPECT_EQ(1, observer.CountAndReset()); // resize and add | 449 EXPECT_EQ(1, observer.CountAndReset()); // resize and add |
420 EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset()); | 450 EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset()); |
421 EXPECT_EQ(2, observer.GetWorkareaChangedCountAndReset()); | 451 EXPECT_EQ(2, observer.GetWorkareaChangedCountAndReset()); |
422 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 452 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
423 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 453 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
424 gfx::Insets insets(5, 5, 5, 5); | 454 gfx::Insets insets(5, 5, 5, 5); |
425 int64_t secondary_display_id = ScreenUtil::GetSecondaryDisplay().id(); | 455 int64_t secondary_display_id = display_manager()->GetSecondaryDisplay().id(); |
426 Shell::GetInstance()->display_manager()->UpdateWorkAreaOfDisplay( | 456 display_manager()->UpdateWorkAreaOfDisplay(secondary_display_id, insets); |
427 secondary_display_id, insets); | |
428 | 457 |
429 // Default layout is RIGHT. | 458 // Default layout is RIGHT. |
430 EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString()); | 459 EXPECT_EQ("0,0 500x500", GetPrimaryDisplay().bounds().ToString()); |
431 EXPECT_EQ("500,0 400x400", GetSecondaryDisplay().bounds().ToString()); | 460 EXPECT_EQ("500,0 400x400", GetSecondaryDisplay().bounds().ToString()); |
432 EXPECT_EQ("505,5 390x390", GetSecondaryDisplay().work_area().ToString()); | 461 EXPECT_EQ("505,5 390x390", GetSecondaryDisplay().work_area().ToString()); |
433 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 462 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
434 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 463 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
435 | 464 |
436 // Layout the secondary display to the bottom of the primary. | 465 // Layout the secondary display to the bottom of the primary. |
437 SetSecondaryDisplayLayout(display::DisplayPlacement::BOTTOM); | 466 SetSecondaryDisplayLayout(display::DisplayPlacement::BOTTOM); |
(...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
574 | 603 |
575 TEST_P(WindowTreeHostManagerTest, MirrorToDockedWithFullscreen) { | 604 TEST_P(WindowTreeHostManagerTest, MirrorToDockedWithFullscreen) { |
576 if (!SupportsMultipleDisplays()) | 605 if (!SupportsMultipleDisplays()) |
577 return; | 606 return; |
578 | 607 |
579 // Creates windows to catch activation change event. | 608 // Creates windows to catch activation change event. |
580 std::unique_ptr<aura::Window> w1(CreateTestWindowInShellWithId(1)); | 609 std::unique_ptr<aura::Window> w1(CreateTestWindowInShellWithId(1)); |
581 w1->Focus(); | 610 w1->Focus(); |
582 | 611 |
583 // Docked mode. | 612 // Docked mode. |
584 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | |
585 | 613 |
586 const display::ManagedDisplayInfo internal_display_info = | 614 const display::ManagedDisplayInfo internal_display_info = |
587 CreateMirroredDisplayInfo(1, 2.0f); | 615 CreateMirroredDisplayInfo(1, 2.0f); |
588 const display::ManagedDisplayInfo external_display_info = | 616 const display::ManagedDisplayInfo external_display_info = |
589 CreateMirroredDisplayInfo(2, 1.0f); | 617 CreateMirroredDisplayInfo(2, 1.0f); |
590 | 618 |
591 std::vector<display::ManagedDisplayInfo> display_info_list; | 619 std::vector<display::ManagedDisplayInfo> display_info_list; |
592 // Mirror. | 620 // Mirror. |
593 display_info_list.push_back(internal_display_info); | 621 display_info_list.push_back(internal_display_info); |
594 display_info_list.push_back(external_display_info); | 622 display_info_list.push_back(external_display_info); |
595 display_manager->OnNativeDisplaysChanged(display_info_list); | 623 display_manager()->OnNativeDisplaysChanged(display_info_list); |
596 const int64_t internal_display_id = | 624 const int64_t internal_display_id = |
597 test::DisplayManagerTestApi().SetFirstDisplayAsInternalDisplay(); | 625 test::DisplayManagerTestApi(display_manager()) |
| 626 .SetFirstDisplayAsInternalDisplay(); |
598 EXPECT_EQ(1, internal_display_id); | 627 EXPECT_EQ(1, internal_display_id); |
599 EXPECT_EQ(2U, display_manager->num_connected_displays()); | 628 EXPECT_EQ(2U, display_manager()->num_connected_displays()); |
600 EXPECT_EQ(1U, display_manager->GetNumDisplays()); | 629 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
601 | 630 |
602 wm::WindowState* window_state = wm::GetWindowState(w1.get()); | 631 wm::WindowState* window_state = wm::GetWindowState(w1.get()); |
603 const wm::WMEvent toggle_fullscreen_event(wm::WM_EVENT_TOGGLE_FULLSCREEN); | 632 const wm::WMEvent toggle_fullscreen_event(wm::WM_EVENT_TOGGLE_FULLSCREEN); |
604 window_state->OnWMEvent(&toggle_fullscreen_event); | 633 window_state->OnWMEvent(&toggle_fullscreen_event); |
605 EXPECT_TRUE(window_state->IsFullscreen()); | 634 EXPECT_TRUE(window_state->IsFullscreen()); |
606 EXPECT_EQ("0,0 250x250", w1->bounds().ToString()); | 635 EXPECT_EQ("0,0 250x250", w1->bounds().ToString()); |
607 // Dock mode. | 636 // Dock mode. |
608 TestObserver observer; | 637 TestObserver observer; |
609 display_info_list.clear(); | 638 display_info_list.clear(); |
610 display_info_list.push_back(external_display_info); | 639 display_info_list.push_back(external_display_info); |
611 display_manager->OnNativeDisplaysChanged(display_info_list); | 640 display_manager()->OnNativeDisplaysChanged(display_info_list); |
612 EXPECT_EQ(1U, display_manager->GetNumDisplays()); | 641 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
613 EXPECT_EQ(1U, display_manager->num_connected_displays()); | 642 EXPECT_EQ(1U, display_manager()->num_connected_displays()); |
614 // Observers are called due to primary change. | 643 // Observers are called due to primary change. |
615 EXPECT_EQ(2, observer.GetChangedDisplayIdAndReset()); | 644 EXPECT_EQ(2, observer.GetChangedDisplayIdAndReset()); |
616 EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset()); | 645 EXPECT_EQ(1, observer.GetBoundsChangedCountAndReset()); |
617 EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset()); | 646 EXPECT_EQ(1, observer.GetWorkareaChangedCountAndReset()); |
618 EXPECT_EQ(1, observer.GetPrimaryChangedCountAndReset()); | 647 EXPECT_EQ(1, observer.GetPrimaryChangedCountAndReset()); |
619 EXPECT_EQ(1, observer.CountAndReset()); | 648 EXPECT_EQ(1, observer.CountAndReset()); |
620 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 649 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
621 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 650 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
622 | 651 |
623 EXPECT_TRUE(window_state->IsFullscreen()); | 652 EXPECT_TRUE(window_state->IsFullscreen()); |
624 EXPECT_EQ("0,0 500x500", w1->bounds().ToString()); | 653 EXPECT_EQ("0,0 500x500", w1->bounds().ToString()); |
625 } | 654 } |
626 | 655 |
627 TEST_P(WindowTreeHostManagerTest, BoundsUpdated) { | 656 TEST_P(WindowTreeHostManagerTest, BoundsUpdated) { |
628 if (!SupportsMultipleDisplays()) | 657 if (!SupportsMultipleDisplays()) |
629 return; | 658 return; |
630 | 659 |
631 // Creates windows to catch activation change event. | 660 // Creates windows to catch activation change event. |
632 std::unique_ptr<aura::Window> w1(CreateTestWindowInShellWithId(1)); | 661 std::unique_ptr<aura::Window> w1(CreateTestWindowInShellWithId(1)); |
633 w1->Focus(); | 662 w1->Focus(); |
634 | 663 |
635 TestObserver observer; | 664 TestObserver observer; |
636 SetDefaultDisplayLayout(display::DisplayPlacement::BOTTOM); | 665 SetDefaultDisplayLayout(display::DisplayPlacement::BOTTOM); |
637 UpdateDisplay("200x200,300x300"); // layout, resize and add. | 666 UpdateDisplay("200x200,300x300"); // layout, resize and add. |
638 EXPECT_EQ(1, observer.CountAndReset()); | 667 EXPECT_EQ(1, observer.CountAndReset()); |
639 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 668 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
640 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 669 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
641 | 670 |
642 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | |
643 gfx::Insets insets(5, 5, 5, 5); | 671 gfx::Insets insets(5, 5, 5, 5); |
644 display_manager->UpdateWorkAreaOfDisplay( | 672 display_manager()->UpdateWorkAreaOfDisplay(GetSecondaryDisplay().id(), |
645 ScreenUtil::GetSecondaryDisplay().id(), insets); | 673 insets); |
646 | 674 |
647 EXPECT_EQ("0,0 200x200", GetPrimaryDisplay().bounds().ToString()); | 675 EXPECT_EQ("0,0 200x200", GetPrimaryDisplay().bounds().ToString()); |
648 EXPECT_EQ("0,200 300x300", GetSecondaryDisplay().bounds().ToString()); | 676 EXPECT_EQ("0,200 300x300", GetSecondaryDisplay().bounds().ToString()); |
649 EXPECT_EQ("5,205 290x290", GetSecondaryDisplay().work_area().ToString()); | 677 EXPECT_EQ("5,205 290x290", GetSecondaryDisplay().work_area().ToString()); |
650 | 678 |
651 UpdateDisplay("400x400,200x200"); | 679 UpdateDisplay("400x400,200x200"); |
652 EXPECT_EQ(1, observer.CountAndReset()); // two resizes | 680 EXPECT_EQ(1, observer.CountAndReset()); // two resizes |
653 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 681 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
654 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 682 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
655 EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString()); | 683 EXPECT_EQ("0,0 400x400", GetPrimaryDisplay().bounds().ToString()); |
(...skipping 24 matching lines...) Expand all Loading... |
680 // No change | 708 // No change |
681 UpdateDisplay("400x500*2,300x300"); | 709 UpdateDisplay("400x500*2,300x300"); |
682 // We still call into Pre/PostDisplayConfigurationChange(). | 710 // We still call into Pre/PostDisplayConfigurationChange(). |
683 EXPECT_EQ(1, observer.CountAndReset()); | 711 EXPECT_EQ(1, observer.CountAndReset()); |
684 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 712 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
685 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 713 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
686 | 714 |
687 // Rotation | 715 // Rotation |
688 observer.GetRotationChangedCountAndReset(); // we only want to reset. | 716 observer.GetRotationChangedCountAndReset(); // we only want to reset. |
689 int64_t primary_id = GetPrimaryDisplay().id(); | 717 int64_t primary_id = GetPrimaryDisplay().id(); |
690 display_manager->SetDisplayRotation(primary_id, display::Display::ROTATE_90, | 718 display_manager()->SetDisplayRotation( |
691 display::Display::ROTATION_SOURCE_ACTIVE); | 719 primary_id, display::Display::ROTATE_90, |
| 720 display::Display::ROTATION_SOURCE_ACTIVE); |
692 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); | 721 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); |
693 EXPECT_EQ(1, observer.CountAndReset()); | 722 EXPECT_EQ(1, observer.CountAndReset()); |
694 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 723 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
695 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 724 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
696 display_manager->SetDisplayRotation(primary_id, display::Display::ROTATE_90, | 725 display_manager()->SetDisplayRotation( |
697 display::Display::ROTATION_SOURCE_ACTIVE); | 726 primary_id, display::Display::ROTATE_90, |
| 727 display::Display::ROTATION_SOURCE_ACTIVE); |
698 EXPECT_EQ(0, observer.GetRotationChangedCountAndReset()); | 728 EXPECT_EQ(0, observer.GetRotationChangedCountAndReset()); |
699 EXPECT_EQ(0, observer.CountAndReset()); | 729 EXPECT_EQ(0, observer.CountAndReset()); |
700 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 730 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
701 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 731 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
702 | 732 |
703 // UI scale is eanbled only on internal display. | 733 // UI scale is eanbled only on internal display. |
704 int64_t secondary_id = GetSecondaryDisplay().id(); | 734 int64_t secondary_id = GetSecondaryDisplay().id(); |
705 test::ScopedSetInternalDisplayId set_internal(secondary_id); | 735 test::ScopedSetInternalDisplayId set_internal(display_manager(), |
| 736 secondary_id); |
706 // Changing internal ID display changes the DisplayIdPair (it comes | 737 // Changing internal ID display changes the DisplayIdPair (it comes |
707 // first), which also changes the primary display candidate. Update | 738 // first), which also changes the primary display candidate. Update |
708 // the primary display manually to update the primary display to | 739 // the primary display manually to update the primary display to |
709 // avoid getting the OnDisplayConfigurationChanged() call twice in | 740 // avoid getting the OnDisplayConfigurationChanged() call twice in |
710 // SetDisplayUIScale. Note that this scenario will never happen on | 741 // SetDisplayUIScale. Note that this scenario will never happen on |
711 // real devices. | 742 // real devices. |
712 Shell::GetInstance()->window_tree_host_manager()->SetPrimaryDisplayId( | 743 Shell::GetInstance()->window_tree_host_manager()->SetPrimaryDisplayId( |
713 secondary_id); | 744 secondary_id); |
714 EXPECT_EQ(1, observer.CountAndReset()); | 745 EXPECT_EQ(1, observer.CountAndReset()); |
715 | 746 |
716 Shell::GetInstance()->display_manager()->SetDisplayUIScale(secondary_id, | 747 display_manager()->SetDisplayUIScale(secondary_id, 1.125f); |
717 1.125f); | |
718 EXPECT_EQ(1, observer.CountAndReset()); | 748 EXPECT_EQ(1, observer.CountAndReset()); |
719 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 749 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
720 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 750 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
721 Shell::GetInstance()->display_manager()->SetDisplayUIScale(secondary_id, | 751 display_manager()->SetDisplayUIScale(secondary_id, 1.125f); |
722 1.125f); | |
723 EXPECT_EQ(0, observer.CountAndReset()); | 752 EXPECT_EQ(0, observer.CountAndReset()); |
724 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 753 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
725 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 754 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
726 Shell::GetInstance()->display_manager()->SetDisplayUIScale(primary_id, | 755 display_manager()->SetDisplayUIScale(primary_id, 1.125f); |
727 1.125f); | |
728 EXPECT_EQ(0, observer.CountAndReset()); | 756 EXPECT_EQ(0, observer.CountAndReset()); |
729 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 757 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
730 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 758 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
731 Shell::GetInstance()->display_manager()->SetDisplayUIScale(primary_id, | 759 display_manager()->SetDisplayUIScale(primary_id, 1.125f); |
732 1.125f); | |
733 EXPECT_EQ(0, observer.CountAndReset()); | 760 EXPECT_EQ(0, observer.CountAndReset()); |
734 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); | 761 EXPECT_EQ(0, observer.GetFocusChangedCountAndReset()); |
735 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); | 762 EXPECT_EQ(0, observer.GetActivationChangedCountAndReset()); |
736 } | 763 } |
737 | 764 |
738 TEST_P(WindowTreeHostManagerTest, FindNearestDisplay) { | 765 TEST_P(WindowTreeHostManagerTest, FindNearestDisplay) { |
739 if (!SupportsMultipleDisplays()) | 766 if (!SupportsMultipleDisplays()) |
740 return; | 767 return; |
741 | 768 |
742 WindowTreeHostManager* window_tree_host_manager = | 769 WindowTreeHostManager* window_tree_host_manager = |
743 Shell::GetInstance()->window_tree_host_manager(); | 770 Shell::GetInstance()->window_tree_host_manager(); |
744 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | |
745 | 771 |
746 UpdateDisplay("200x200,300x300"); | 772 UpdateDisplay("200x200,300x300"); |
747 display_manager->SetLayoutForCurrentDisplays( | 773 display_manager()->SetLayoutForCurrentDisplays(test::CreateDisplayLayout( |
748 test::CreateDisplayLayout(display::DisplayPlacement::RIGHT, 50)); | 774 display_manager(), display::DisplayPlacement::RIGHT, 50)); |
749 | 775 |
750 display::Display primary_display = | 776 display::Display primary_display = |
751 display::Screen::GetScreen()->GetPrimaryDisplay(); | 777 display::Screen::GetScreen()->GetPrimaryDisplay(); |
752 display::Display secondary_display = ScreenUtil::GetSecondaryDisplay(); | 778 display::Display secondary_display = display_manager()->GetSecondaryDisplay(); |
753 EXPECT_NE(primary_display.id(), secondary_display.id()); | 779 EXPECT_NE(primary_display.id(), secondary_display.id()); |
754 aura::Window* primary_root = | 780 aura::Window* primary_root = |
755 window_tree_host_manager->GetRootWindowForDisplayId(primary_display.id()); | 781 window_tree_host_manager->GetRootWindowForDisplayId(primary_display.id()); |
756 aura::Window* secondary_root = | 782 aura::Window* secondary_root = |
757 window_tree_host_manager->GetRootWindowForDisplayId( | 783 window_tree_host_manager->GetRootWindowForDisplayId( |
758 secondary_display.id()); | 784 secondary_display.id()); |
759 EXPECT_NE(primary_root, secondary_root); | 785 EXPECT_NE(primary_root, secondary_root); |
760 | 786 |
761 // Test that points outside of any display return the nearest display. | 787 // Test that points outside of any display return the nearest display. |
762 EXPECT_EQ(primary_display.id(), | 788 EXPECT_EQ(primary_display.id(), |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
797 .id()); | 823 .id()); |
798 } | 824 } |
799 | 825 |
800 TEST_P(WindowTreeHostManagerTest, SwapPrimaryById) { | 826 TEST_P(WindowTreeHostManagerTest, SwapPrimaryById) { |
801 if (!SupportsMultipleDisplays()) | 827 if (!SupportsMultipleDisplays()) |
802 return; | 828 return; |
803 const int height_offset = GetMdMaximizedWindowHeightOffset(); | 829 const int height_offset = GetMdMaximizedWindowHeightOffset(); |
804 | 830 |
805 WindowTreeHostManager* window_tree_host_manager = | 831 WindowTreeHostManager* window_tree_host_manager = |
806 Shell::GetInstance()->window_tree_host_manager(); | 832 Shell::GetInstance()->window_tree_host_manager(); |
807 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | |
808 | 833 |
809 UpdateDisplay("200x200,300x300"); | 834 UpdateDisplay("200x200,300x300"); |
810 display::Display primary_display = | 835 display::Display primary_display = |
811 display::Screen::GetScreen()->GetPrimaryDisplay(); | 836 display::Screen::GetScreen()->GetPrimaryDisplay(); |
812 display::Display secondary_display = ScreenUtil::GetSecondaryDisplay(); | 837 display::Display secondary_display = display_manager()->GetSecondaryDisplay(); |
813 | 838 |
814 display_manager->SetLayoutForCurrentDisplays( | 839 display_manager()->SetLayoutForCurrentDisplays(test::CreateDisplayLayout( |
815 test::CreateDisplayLayout(display::DisplayPlacement::RIGHT, 50)); | 840 display_manager(), display::DisplayPlacement::RIGHT, 50)); |
816 | 841 |
817 EXPECT_NE(primary_display.id(), secondary_display.id()); | 842 EXPECT_NE(primary_display.id(), secondary_display.id()); |
818 aura::Window* primary_root = | 843 aura::Window* primary_root = |
819 window_tree_host_manager->GetRootWindowForDisplayId(primary_display.id()); | 844 window_tree_host_manager->GetRootWindowForDisplayId(primary_display.id()); |
820 aura::Window* secondary_root = | 845 aura::Window* secondary_root = |
821 window_tree_host_manager->GetRootWindowForDisplayId( | 846 window_tree_host_manager->GetRootWindowForDisplayId( |
822 secondary_display.id()); | 847 secondary_display.id()); |
823 aura::Window* shelf_window = | 848 aura::Window* shelf_window = |
824 GetPrimaryShelf()->shelf_widget()->GetNativeView(); | 849 GetPrimaryShelf()->shelf_widget()->GetNativeView(); |
825 EXPECT_TRUE(primary_root->Contains(shelf_window)); | 850 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
826 EXPECT_FALSE(secondary_root->Contains(shelf_window)); | 851 EXPECT_FALSE(secondary_root->Contains(shelf_window)); |
827 EXPECT_NE(primary_root, secondary_root); | 852 EXPECT_NE(primary_root, secondary_root); |
828 EXPECT_EQ(primary_display.id(), | 853 EXPECT_EQ(primary_display.id(), |
829 display::Screen::GetScreen() | 854 display::Screen::GetScreen() |
830 ->GetDisplayNearestPoint(gfx::Point(-100, -100)) | 855 ->GetDisplayNearestPoint(gfx::Point(-100, -100)) |
831 .id()); | 856 .id()); |
832 EXPECT_EQ( | 857 EXPECT_EQ( |
833 primary_display.id(), | 858 primary_display.id(), |
834 display::Screen::GetScreen()->GetDisplayNearestWindow(nullptr).id()); | 859 display::Screen::GetScreen()->GetDisplayNearestWindow(nullptr).id()); |
835 | 860 |
836 EXPECT_EQ("0,0 200x200", primary_display.bounds().ToString()); | 861 EXPECT_EQ("0,0 200x200", primary_display.bounds().ToString()); |
837 EXPECT_EQ(gfx::Rect(0, 0, 200, 153 + height_offset).ToString(), | 862 EXPECT_EQ(gfx::Rect(0, 0, 200, 153 + height_offset).ToString(), |
838 primary_display.work_area().ToString()); | 863 primary_display.work_area().ToString()); |
839 EXPECT_EQ("200,0 300x300", secondary_display.bounds().ToString()); | 864 EXPECT_EQ("200,0 300x300", secondary_display.bounds().ToString()); |
840 EXPECT_EQ(gfx::Rect(200, 0, 300, 253 + height_offset).ToString(), | 865 EXPECT_EQ(gfx::Rect(200, 0, 300, 253 + height_offset).ToString(), |
841 secondary_display.work_area().ToString()); | 866 secondary_display.work_area().ToString()); |
842 EXPECT_EQ( | 867 EXPECT_EQ("id=2200000001, parent=2200000000, right, 50", |
843 "id=2200000001, parent=2200000000, right, 50", | 868 display_manager() |
844 display_manager->GetCurrentDisplayLayout().placement_list[0].ToString()); | 869 ->GetCurrentDisplayLayout() |
| 870 .placement_list[0] |
| 871 .ToString()); |
845 | 872 |
846 // Switch primary and secondary by display ID. | 873 // Switch primary and secondary by display ID. |
847 TestObserver observer; | 874 TestObserver observer; |
848 window_tree_host_manager->SetPrimaryDisplayId(secondary_display.id()); | 875 window_tree_host_manager->SetPrimaryDisplayId(secondary_display.id()); |
849 EXPECT_EQ(secondary_display.id(), | 876 EXPECT_EQ(secondary_display.id(), |
850 display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 877 display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
851 EXPECT_EQ(primary_display.id(), ScreenUtil::GetSecondaryDisplay().id()); | 878 EXPECT_EQ(primary_display.id(), |
| 879 display_manager()->GetSecondaryDisplay().id()); |
852 EXPECT_LT(0, observer.CountAndReset()); | 880 EXPECT_LT(0, observer.CountAndReset()); |
853 | 881 |
854 EXPECT_EQ(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( | 882 EXPECT_EQ(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( |
855 secondary_display.id())); | 883 secondary_display.id())); |
856 EXPECT_EQ(secondary_root, window_tree_host_manager->GetRootWindowForDisplayId( | 884 EXPECT_EQ(secondary_root, window_tree_host_manager->GetRootWindowForDisplayId( |
857 primary_display.id())); | 885 primary_display.id())); |
858 EXPECT_TRUE(primary_root->Contains(shelf_window)); | 886 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
859 EXPECT_FALSE(secondary_root->Contains(shelf_window)); | 887 EXPECT_FALSE(secondary_root->Contains(shelf_window)); |
860 | 888 |
861 const display::DisplayLayout& inverted_layout = | 889 const display::DisplayLayout& inverted_layout = |
862 display_manager->GetCurrentDisplayLayout(); | 890 display_manager()->GetCurrentDisplayLayout(); |
863 | 891 |
864 EXPECT_EQ("id=2200000000, parent=2200000001, left, -50", | 892 EXPECT_EQ("id=2200000000, parent=2200000001, left, -50", |
865 inverted_layout.placement_list[0].ToString()); | 893 inverted_layout.placement_list[0].ToString()); |
866 // Test if the bounds are correctly swapped. | 894 // Test if the bounds are correctly swapped. |
867 display::Display swapped_primary = | 895 display::Display swapped_primary = |
868 display::Screen::GetScreen()->GetPrimaryDisplay(); | 896 display::Screen::GetScreen()->GetPrimaryDisplay(); |
869 display::Display swapped_secondary = ScreenUtil::GetSecondaryDisplay(); | 897 display::Display swapped_secondary = display_manager()->GetSecondaryDisplay(); |
870 EXPECT_EQ("0,0 300x300", swapped_primary.bounds().ToString()); | 898 EXPECT_EQ("0,0 300x300", swapped_primary.bounds().ToString()); |
871 EXPECT_EQ(gfx::Rect(0, 0, 300, 253 + height_offset).ToString(), | 899 EXPECT_EQ(gfx::Rect(0, 0, 300, 253 + height_offset).ToString(), |
872 swapped_primary.work_area().ToString()); | 900 swapped_primary.work_area().ToString()); |
873 EXPECT_EQ("-200,-50 200x200", swapped_secondary.bounds().ToString()); | 901 EXPECT_EQ("-200,-50 200x200", swapped_secondary.bounds().ToString()); |
874 EXPECT_EQ(gfx::Rect(-200, -50, 200, 153 + height_offset).ToString(), | 902 EXPECT_EQ(gfx::Rect(-200, -50, 200, 153 + height_offset).ToString(), |
875 swapped_secondary.work_area().ToString()); | 903 swapped_secondary.work_area().ToString()); |
876 | 904 |
877 // Calling the same ID don't do anything. | 905 // Calling the same ID don't do anything. |
878 window_tree_host_manager->SetPrimaryDisplayId(secondary_display.id()); | 906 window_tree_host_manager->SetPrimaryDisplayId(secondary_display.id()); |
879 EXPECT_EQ(0, observer.CountAndReset()); | 907 EXPECT_EQ(0, observer.CountAndReset()); |
(...skipping 16 matching lines...) Expand all Loading... |
896 primary_display.id(), | 924 primary_display.id(), |
897 display::Screen::GetScreen()->GetDisplayNearestWindow(nullptr).id()); | 925 display::Screen::GetScreen()->GetDisplayNearestWindow(nullptr).id()); |
898 EXPECT_TRUE(tracker.Contains(primary_root)); | 926 EXPECT_TRUE(tracker.Contains(primary_root)); |
899 EXPECT_FALSE(tracker.Contains(secondary_root)); | 927 EXPECT_FALSE(tracker.Contains(secondary_root)); |
900 EXPECT_TRUE(primary_root->Contains(shelf_window)); | 928 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
901 | 929 |
902 // Adding 2nd display with the same ID. The 2nd display should become primary | 930 // Adding 2nd display with the same ID. The 2nd display should become primary |
903 // since secondary id is still stored as desirable_primary_id. | 931 // since secondary id is still stored as desirable_primary_id. |
904 std::vector<display::ManagedDisplayInfo> display_info_list; | 932 std::vector<display::ManagedDisplayInfo> display_info_list; |
905 display_info_list.push_back( | 933 display_info_list.push_back( |
906 display_manager->GetDisplayInfo(primary_display.id())); | 934 display_manager()->GetDisplayInfo(primary_display.id())); |
907 display_info_list.push_back( | 935 display_info_list.push_back( |
908 display_manager->GetDisplayInfo(secondary_display.id())); | 936 display_manager()->GetDisplayInfo(secondary_display.id())); |
909 | 937 |
910 display_manager->OnNativeDisplaysChanged(display_info_list); | 938 display_manager()->OnNativeDisplaysChanged(display_info_list); |
911 | 939 |
912 EXPECT_EQ(2, display::Screen::GetScreen()->GetNumDisplays()); | 940 EXPECT_EQ(2, display::Screen::GetScreen()->GetNumDisplays()); |
913 EXPECT_EQ(secondary_display.id(), | 941 EXPECT_EQ(secondary_display.id(), |
914 display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 942 display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
915 EXPECT_EQ(primary_display.id(), ScreenUtil::GetSecondaryDisplay().id()); | 943 EXPECT_EQ(primary_display.id(), |
| 944 display_manager()->GetSecondaryDisplay().id()); |
916 EXPECT_EQ(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( | 945 EXPECT_EQ(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( |
917 secondary_display.id())); | 946 secondary_display.id())); |
918 EXPECT_NE(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( | 947 EXPECT_NE(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( |
919 primary_display.id())); | 948 primary_display.id())); |
920 EXPECT_TRUE(primary_root->Contains(shelf_window)); | 949 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
921 | 950 |
922 // Deleting 2nd display and adding 2nd display with a different ID. The 2nd | 951 // Deleting 2nd display and adding 2nd display with a different ID. The 2nd |
923 // display shouldn't become primary. | 952 // display shouldn't become primary. |
924 UpdateDisplay("200x200"); | 953 UpdateDisplay("200x200"); |
925 display::ManagedDisplayInfo third_display_info(secondary_display.id() + 1, | 954 display::ManagedDisplayInfo third_display_info(secondary_display.id() + 1, |
926 std::string(), false); | 955 std::string(), false); |
927 third_display_info.SetBounds(secondary_display.bounds()); | 956 third_display_info.SetBounds(secondary_display.bounds()); |
928 ASSERT_NE(primary_display.id(), third_display_info.id()); | 957 ASSERT_NE(primary_display.id(), third_display_info.id()); |
929 | 958 |
930 const display::ManagedDisplayInfo& primary_display_info = | 959 const display::ManagedDisplayInfo& primary_display_info = |
931 display_manager->GetDisplayInfo(primary_display.id()); | 960 display_manager()->GetDisplayInfo(primary_display.id()); |
932 std::vector<display::ManagedDisplayInfo> display_info_list2; | 961 std::vector<display::ManagedDisplayInfo> display_info_list2; |
933 display_info_list2.push_back(primary_display_info); | 962 display_info_list2.push_back(primary_display_info); |
934 display_info_list2.push_back(third_display_info); | 963 display_info_list2.push_back(third_display_info); |
935 display_manager->OnNativeDisplaysChanged(display_info_list2); | 964 display_manager()->OnNativeDisplaysChanged(display_info_list2); |
936 EXPECT_EQ(2, display::Screen::GetScreen()->GetNumDisplays()); | 965 EXPECT_EQ(2, display::Screen::GetScreen()->GetNumDisplays()); |
937 EXPECT_EQ(primary_display.id(), | 966 EXPECT_EQ(primary_display.id(), |
938 display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 967 display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
939 EXPECT_EQ(third_display_info.id(), ScreenUtil::GetSecondaryDisplay().id()); | 968 EXPECT_EQ(third_display_info.id(), |
| 969 display_manager()->GetSecondaryDisplay().id()); |
940 EXPECT_EQ(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( | 970 EXPECT_EQ(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( |
941 primary_display.id())); | 971 primary_display.id())); |
942 EXPECT_NE(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( | 972 EXPECT_NE(primary_root, window_tree_host_manager->GetRootWindowForDisplayId( |
943 third_display_info.id())); | 973 third_display_info.id())); |
944 EXPECT_TRUE(primary_root->Contains(shelf_window)); | 974 EXPECT_TRUE(primary_root->Contains(shelf_window)); |
945 } | 975 } |
946 | 976 |
947 TEST_P(WindowTreeHostManagerTest, NoSwapPrimaryWithThreeDisplays) { | 977 TEST_P(WindowTreeHostManagerTest, NoSwapPrimaryWithThreeDisplays) { |
948 if (!SupportsMultipleDisplays()) | 978 if (!SupportsMultipleDisplays()) |
949 return; | 979 return; |
950 int64_t primary = display::Screen::GetScreen()->GetPrimaryDisplay().id(); | 980 int64_t primary = display::Screen::GetScreen()->GetPrimaryDisplay().id(); |
951 UpdateDisplay("500x400,400x300,300x200"); | 981 UpdateDisplay("500x400,400x300,300x200"); |
952 EXPECT_EQ(primary, display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 982 EXPECT_EQ(primary, display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
953 Shell::GetInstance()->window_tree_host_manager()->SetPrimaryDisplayId( | 983 Shell::GetInstance()->window_tree_host_manager()->SetPrimaryDisplayId( |
954 ScreenUtil::GetSecondaryDisplay().id()); | 984 display_manager()->GetSecondaryDisplay().id()); |
955 EXPECT_EQ(primary, display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 985 EXPECT_EQ(primary, display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
956 } | 986 } |
957 | 987 |
958 TEST_P(WindowTreeHostManagerTest, OverscanInsets) { | 988 TEST_P(WindowTreeHostManagerTest, OverscanInsets) { |
959 if (!SupportsMultipleDisplays()) | 989 if (!SupportsMultipleDisplays()) |
960 return; | 990 return; |
961 | 991 |
962 WindowTreeHostManager* window_tree_host_manager = | 992 WindowTreeHostManager* window_tree_host_manager = |
963 Shell::GetInstance()->window_tree_host_manager(); | 993 Shell::GetInstance()->window_tree_host_manager(); |
964 TestEventHandler event_handler; | 994 TestEventHandler event_handler; |
965 Shell::GetInstance()->AddPreTargetHandler(&event_handler); | 995 Shell::GetInstance()->AddPreTargetHandler(&event_handler); |
966 | 996 |
967 UpdateDisplay("120x200,300x400*2"); | 997 UpdateDisplay("120x200,300x400*2"); |
968 display::Display display1 = display::Screen::GetScreen()->GetPrimaryDisplay(); | 998 display::Display display1 = display::Screen::GetScreen()->GetPrimaryDisplay(); |
969 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 999 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
970 | 1000 |
971 window_tree_host_manager->SetOverscanInsets(display1.id(), | 1001 window_tree_host_manager->SetOverscanInsets(display1.id(), |
972 gfx::Insets(10, 15, 20, 25)); | 1002 gfx::Insets(10, 15, 20, 25)); |
973 EXPECT_EQ("0,0 80x170", root_windows[0]->bounds().ToString()); | 1003 EXPECT_EQ("0,0 80x170", root_windows[0]->bounds().ToString()); |
974 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); | 1004 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); |
975 EXPECT_EQ("80,0 150x200", | 1005 EXPECT_EQ("80,0 150x200", |
976 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1006 display_manager()->GetSecondaryDisplay().bounds().ToString()); |
977 | 1007 |
978 ui::test::EventGenerator generator(root_windows[0]); | 1008 ui::test::EventGenerator generator(root_windows[0]); |
979 generator.MoveMouseToInHost(20, 25); | 1009 generator.MoveMouseToInHost(20, 25); |
980 EXPECT_EQ("5,15", event_handler.GetLocationAndReset()); | 1010 EXPECT_EQ("5,15", event_handler.GetLocationAndReset()); |
981 | 1011 |
982 window_tree_host_manager->SetOverscanInsets(display1.id(), gfx::Insets()); | 1012 window_tree_host_manager->SetOverscanInsets(display1.id(), gfx::Insets()); |
983 EXPECT_EQ("0,0 120x200", root_windows[0]->bounds().ToString()); | 1013 EXPECT_EQ("0,0 120x200", root_windows[0]->bounds().ToString()); |
984 EXPECT_EQ("120,0 150x200", | 1014 EXPECT_EQ("120,0 150x200", |
985 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1015 display_manager()->GetSecondaryDisplay().bounds().ToString()); |
986 | 1016 |
987 generator.MoveMouseToInHost(30, 20); | 1017 generator.MoveMouseToInHost(30, 20); |
988 EXPECT_EQ("30,20", event_handler.GetLocationAndReset()); | 1018 EXPECT_EQ("30,20", event_handler.GetLocationAndReset()); |
989 | 1019 |
990 // Make sure the root window transformer uses correct scale | 1020 // Make sure the root window transformer uses correct scale |
991 // factor when swapping display. Test crbug.com/253690. | 1021 // factor when swapping display. Test crbug.com/253690. |
992 UpdateDisplay("400x300*2,600x400/o"); | 1022 UpdateDisplay("400x300*2,600x400/o"); |
993 root_windows = Shell::GetAllRootWindows(); | 1023 root_windows = Shell::GetAllRootWindows(); |
994 gfx::Point point; | 1024 gfx::Point point; |
995 Shell::GetAllRootWindows()[1]->GetHost()->GetRootTransform().TransformPoint( | 1025 Shell::GetAllRootWindows()[1]->GetHost()->GetRootTransform().TransformPoint( |
996 &point); | 1026 &point); |
997 EXPECT_EQ("15,10", point.ToString()); | 1027 EXPECT_EQ("15,10", point.ToString()); |
998 | 1028 |
999 test::SwapPrimaryDisplay(); | 1029 SwapPrimaryDisplay(); |
1000 point.SetPoint(0, 0); | 1030 point.SetPoint(0, 0); |
1001 Shell::GetAllRootWindows()[1]->GetHost()->GetRootTransform().TransformPoint( | 1031 Shell::GetAllRootWindows()[1]->GetHost()->GetRootTransform().TransformPoint( |
1002 &point); | 1032 &point); |
1003 EXPECT_EQ("15,10", point.ToString()); | 1033 EXPECT_EQ("15,10", point.ToString()); |
1004 | 1034 |
1005 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); | 1035 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); |
1006 } | 1036 } |
1007 | 1037 |
1008 TEST_P(WindowTreeHostManagerTest, Rotate) { | 1038 TEST_P(WindowTreeHostManagerTest, Rotate) { |
1009 if (!SupportsMultipleDisplays()) | 1039 if (!SupportsMultipleDisplays()) |
1010 return; | 1040 return; |
1011 | 1041 |
1012 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | |
1013 TestEventHandler event_handler; | 1042 TestEventHandler event_handler; |
1014 Shell::GetInstance()->AddPreTargetHandler(&event_handler); | 1043 Shell::GetInstance()->AddPreTargetHandler(&event_handler); |
1015 | 1044 |
1016 UpdateDisplay("120x200,300x400*2"); | 1045 UpdateDisplay("120x200,300x400*2"); |
1017 display::Display display1 = display::Screen::GetScreen()->GetPrimaryDisplay(); | 1046 display::Display display1 = display::Screen::GetScreen()->GetPrimaryDisplay(); |
1018 int64_t display2_id = ScreenUtil::GetSecondaryDisplay().id(); | 1047 int64_t display2_id = display_manager()->GetSecondaryDisplay().id(); |
1019 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1048 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
1020 ui::test::EventGenerator generator1(root_windows[0]); | 1049 ui::test::EventGenerator generator1(root_windows[0]); |
1021 | 1050 |
1022 TestObserver observer; | 1051 TestObserver observer; |
1023 EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); | 1052 EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); |
1024 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); | 1053 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); |
1025 EXPECT_EQ("120,0 150x200", | 1054 EXPECT_EQ("120,0 150x200", |
1026 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1055 display_manager()->GetSecondaryDisplay().bounds().ToString()); |
1027 generator1.MoveMouseToInHost(50, 40); | 1056 generator1.MoveMouseToInHost(50, 40); |
1028 EXPECT_EQ("50,40", event_handler.GetLocationAndReset()); | 1057 EXPECT_EQ("50,40", event_handler.GetLocationAndReset()); |
1029 EXPECT_EQ(display::Display::ROTATE_0, | 1058 EXPECT_EQ(display::Display::ROTATE_0, |
1030 GetActiveDisplayRotation(display1.id())); | 1059 GetActiveDisplayRotation(display1.id())); |
1031 EXPECT_EQ(display::Display::ROTATE_0, GetActiveDisplayRotation(display2_id)); | 1060 EXPECT_EQ(display::Display::ROTATE_0, GetActiveDisplayRotation(display2_id)); |
1032 EXPECT_EQ(0, observer.GetRotationChangedCountAndReset()); | 1061 EXPECT_EQ(0, observer.GetRotationChangedCountAndReset()); |
1033 | 1062 |
1034 display_manager->SetDisplayRotation(display1.id(), | 1063 display_manager()->SetDisplayRotation( |
1035 display::Display::ROTATE_90, | 1064 display1.id(), display::Display::ROTATE_90, |
1036 display::Display::ROTATION_SOURCE_ACTIVE); | 1065 display::Display::ROTATION_SOURCE_ACTIVE); |
1037 EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString()); | 1066 EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString()); |
1038 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); | 1067 EXPECT_EQ("150x200", root_windows[1]->bounds().size().ToString()); |
1039 EXPECT_EQ("200,0 150x200", | 1068 EXPECT_EQ("200,0 150x200", |
1040 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1069 display_manager()->GetSecondaryDisplay().bounds().ToString()); |
1041 generator1.MoveMouseToInHost(50, 40); | 1070 generator1.MoveMouseToInHost(50, 40); |
1042 EXPECT_EQ("40,69", event_handler.GetLocationAndReset()); | 1071 EXPECT_EQ("40,69", event_handler.GetLocationAndReset()); |
1043 EXPECT_EQ(display::Display::ROTATE_90, | 1072 EXPECT_EQ(display::Display::ROTATE_90, |
1044 GetActiveDisplayRotation(display1.id())); | 1073 GetActiveDisplayRotation(display1.id())); |
1045 EXPECT_EQ(display::Display::ROTATE_0, GetActiveDisplayRotation(display2_id)); | 1074 EXPECT_EQ(display::Display::ROTATE_0, GetActiveDisplayRotation(display2_id)); |
1046 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); | 1075 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); |
1047 | 1076 |
1048 display_manager->SetLayoutForCurrentDisplays( | 1077 display_manager()->SetLayoutForCurrentDisplays(test::CreateDisplayLayout( |
1049 test::CreateDisplayLayout(display::DisplayPlacement::BOTTOM, 50)); | 1078 display_manager(), display::DisplayPlacement::BOTTOM, 50)); |
1050 EXPECT_EQ("50,120 150x200", | 1079 EXPECT_EQ("50,120 150x200", |
1051 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1080 display_manager()->GetSecondaryDisplay().bounds().ToString()); |
1052 | 1081 |
1053 display_manager->SetDisplayRotation(display2_id, display::Display::ROTATE_270, | 1082 display_manager()->SetDisplayRotation( |
1054 display::Display::ROTATION_SOURCE_ACTIVE); | 1083 display2_id, display::Display::ROTATE_270, |
| 1084 display::Display::ROTATION_SOURCE_ACTIVE); |
1055 EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString()); | 1085 EXPECT_EQ("200x120", root_windows[0]->bounds().size().ToString()); |
1056 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); | 1086 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); |
1057 EXPECT_EQ("50,120 200x150", | 1087 EXPECT_EQ("50,120 200x150", |
1058 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1088 display_manager()->GetSecondaryDisplay().bounds().ToString()); |
1059 EXPECT_EQ(display::Display::ROTATE_90, | 1089 EXPECT_EQ(display::Display::ROTATE_90, |
1060 GetActiveDisplayRotation(display1.id())); | 1090 GetActiveDisplayRotation(display1.id())); |
1061 EXPECT_EQ(display::Display::ROTATE_270, | 1091 EXPECT_EQ(display::Display::ROTATE_270, |
1062 GetActiveDisplayRotation(display2_id)); | 1092 GetActiveDisplayRotation(display2_id)); |
1063 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); | 1093 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); |
1064 | 1094 |
1065 #if !defined(OS_WIN) | 1095 #if !defined(OS_WIN) |
1066 ui::test::EventGenerator generator2(root_windows[1]); | 1096 ui::test::EventGenerator generator2(root_windows[1]); |
1067 generator2.MoveMouseToInHost(50, 40); | 1097 generator2.MoveMouseToInHost(50, 40); |
1068 EXPECT_EQ("179,25", event_handler.GetLocationAndReset()); | 1098 EXPECT_EQ("179,25", event_handler.GetLocationAndReset()); |
1069 display_manager->SetDisplayRotation(display1.id(), | 1099 display_manager()->SetDisplayRotation( |
1070 display::Display::ROTATE_180, | 1100 display1.id(), display::Display::ROTATE_180, |
1071 display::Display::ROTATION_SOURCE_ACTIVE); | 1101 display::Display::ROTATION_SOURCE_ACTIVE); |
1072 | 1102 |
1073 EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); | 1103 EXPECT_EQ("120x200", root_windows[0]->bounds().size().ToString()); |
1074 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); | 1104 EXPECT_EQ("200x150", root_windows[1]->bounds().size().ToString()); |
1075 // Dislay must share at least 100, so the x's offset becomes 20. | 1105 // Dislay must share at least 100, so the x's offset becomes 20. |
1076 EXPECT_EQ("20,200 200x150", | 1106 EXPECT_EQ("20,200 200x150", |
1077 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1107 display_manager()->GetSecondaryDisplay().bounds().ToString()); |
1078 EXPECT_EQ(display::Display::ROTATE_180, | 1108 EXPECT_EQ(display::Display::ROTATE_180, |
1079 GetActiveDisplayRotation(display1.id())); | 1109 GetActiveDisplayRotation(display1.id())); |
1080 EXPECT_EQ(display::Display::ROTATE_270, | 1110 EXPECT_EQ(display::Display::ROTATE_270, |
1081 GetActiveDisplayRotation(display2_id)); | 1111 GetActiveDisplayRotation(display2_id)); |
1082 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); | 1112 EXPECT_EQ(1, observer.GetRotationChangedCountAndReset()); |
1083 | 1113 |
1084 generator1.MoveMouseToInHost(50, 40); | 1114 generator1.MoveMouseToInHost(50, 40); |
1085 EXPECT_EQ("69,159", event_handler.GetLocationAndReset()); | 1115 EXPECT_EQ("69,159", event_handler.GetLocationAndReset()); |
1086 #endif | 1116 #endif |
1087 | 1117 |
1088 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); | 1118 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); |
1089 } | 1119 } |
1090 | 1120 |
1091 TEST_P(WindowTreeHostManagerTest, ScaleRootWindow) { | 1121 TEST_P(WindowTreeHostManagerTest, ScaleRootWindow) { |
1092 if (!SupportsMultipleDisplays()) | 1122 if (!SupportsMultipleDisplays()) |
1093 return; | 1123 return; |
1094 | 1124 |
1095 TestEventHandler event_handler; | 1125 TestEventHandler event_handler; |
1096 Shell::GetInstance()->AddPreTargetHandler(&event_handler); | 1126 Shell::GetInstance()->AddPreTargetHandler(&event_handler); |
1097 | 1127 |
1098 UpdateDisplay("600x400*2@1.5,500x300"); | 1128 UpdateDisplay("600x400*2@1.5,500x300"); |
1099 | 1129 |
1100 display::Display display1 = display::Screen::GetScreen()->GetPrimaryDisplay(); | 1130 display::Display display1 = display::Screen::GetScreen()->GetPrimaryDisplay(); |
1101 test::ScopedSetInternalDisplayId set_internal(display1.id()); | 1131 test::ScopedSetInternalDisplayId set_internal(display_manager(), |
| 1132 display1.id()); |
1102 | 1133 |
1103 display::Display display2 = ScreenUtil::GetSecondaryDisplay(); | 1134 display::Display display2 = display_manager()->GetSecondaryDisplay(); |
1104 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1135 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
1105 EXPECT_EQ("0,0 450x300", display1.bounds().ToString()); | 1136 EXPECT_EQ("0,0 450x300", display1.bounds().ToString()); |
1106 EXPECT_EQ("0,0 450x300", root_windows[0]->bounds().ToString()); | 1137 EXPECT_EQ("0,0 450x300", root_windows[0]->bounds().ToString()); |
1107 EXPECT_EQ("450,0 500x300", display2.bounds().ToString()); | 1138 EXPECT_EQ("450,0 500x300", display2.bounds().ToString()); |
1108 EXPECT_EQ(1.5f, GetStoredUIScale(display1.id())); | 1139 EXPECT_EQ(1.5f, GetStoredUIScale(display1.id())); |
1109 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id())); | 1140 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id())); |
1110 | 1141 |
1111 ui::test::EventGenerator generator(root_windows[0]); | 1142 ui::test::EventGenerator generator(root_windows[0]); |
1112 generator.MoveMouseToInHost(599, 200); | 1143 generator.MoveMouseToInHost(599, 200); |
1113 EXPECT_EQ("449,150", event_handler.GetLocationAndReset()); | 1144 EXPECT_EQ("449,150", event_handler.GetLocationAndReset()); |
1114 | 1145 |
1115 Shell::GetInstance()->display_manager()->SetDisplayUIScale(display1.id(), | 1146 display_manager()->SetDisplayUIScale(display1.id(), 1.25f); |
1116 1.25f); | |
1117 display1 = display::Screen::GetScreen()->GetPrimaryDisplay(); | 1147 display1 = display::Screen::GetScreen()->GetPrimaryDisplay(); |
1118 display2 = ScreenUtil::GetSecondaryDisplay(); | 1148 display2 = display_manager()->GetSecondaryDisplay(); |
1119 EXPECT_EQ("0,0 375x250", display1.bounds().ToString()); | 1149 EXPECT_EQ("0,0 375x250", display1.bounds().ToString()); |
1120 EXPECT_EQ("0,0 375x250", root_windows[0]->bounds().ToString()); | 1150 EXPECT_EQ("0,0 375x250", root_windows[0]->bounds().ToString()); |
1121 EXPECT_EQ("375,0 500x300", display2.bounds().ToString()); | 1151 EXPECT_EQ("375,0 500x300", display2.bounds().ToString()); |
1122 EXPECT_EQ(1.25f, GetStoredUIScale(display1.id())); | 1152 EXPECT_EQ(1.25f, GetStoredUIScale(display1.id())); |
1123 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id())); | 1153 EXPECT_EQ(1.0f, GetStoredUIScale(display2.id())); |
1124 | 1154 |
1125 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); | 1155 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); |
1126 } | 1156 } |
1127 | 1157 |
1128 TEST_P(WindowTreeHostManagerTest, TouchScale) { | 1158 TEST_P(WindowTreeHostManagerTest, TouchScale) { |
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1216 | 1246 |
1217 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); | 1247 Shell::GetInstance()->RemovePreTargetHandler(&event_handler); |
1218 } | 1248 } |
1219 | 1249 |
1220 // Make sure that the compositor based mirroring can switch | 1250 // Make sure that the compositor based mirroring can switch |
1221 // from/to dock mode. | 1251 // from/to dock mode. |
1222 TEST_P(WindowTreeHostManagerTest, DockToSingle) { | 1252 TEST_P(WindowTreeHostManagerTest, DockToSingle) { |
1223 if (!SupportsMultipleDisplays()) | 1253 if (!SupportsMultipleDisplays()) |
1224 return; | 1254 return; |
1225 | 1255 |
1226 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | |
1227 | |
1228 const int64_t internal_id = 1; | 1256 const int64_t internal_id = 1; |
1229 | 1257 |
1230 const display::ManagedDisplayInfo internal_display_info = | 1258 const display::ManagedDisplayInfo internal_display_info = |
1231 CreateDisplayInfo(internal_id, 0, display::Display::ROTATE_0); | 1259 CreateDisplayInfo(internal_id, 0, display::Display::ROTATE_0); |
1232 const display::ManagedDisplayInfo external_display_info = | 1260 const display::ManagedDisplayInfo external_display_info = |
1233 CreateDisplayInfo(2, 1, display::Display::ROTATE_90); | 1261 CreateDisplayInfo(2, 1, display::Display::ROTATE_90); |
1234 | 1262 |
1235 std::vector<display::ManagedDisplayInfo> display_info_list; | 1263 std::vector<display::ManagedDisplayInfo> display_info_list; |
1236 // Extended | 1264 // Extended |
1237 display_info_list.push_back(internal_display_info); | 1265 display_info_list.push_back(internal_display_info); |
1238 display_info_list.push_back(external_display_info); | 1266 display_info_list.push_back(external_display_info); |
1239 display_manager->OnNativeDisplaysChanged(display_info_list); | 1267 display_manager()->OnNativeDisplaysChanged(display_info_list); |
1240 const int64_t internal_display_id = | 1268 const int64_t internal_display_id = |
1241 test::DisplayManagerTestApi().SetFirstDisplayAsInternalDisplay(); | 1269 test::DisplayManagerTestApi(display_manager()) |
| 1270 .SetFirstDisplayAsInternalDisplay(); |
1242 EXPECT_EQ(internal_id, internal_display_id); | 1271 EXPECT_EQ(internal_id, internal_display_id); |
1243 EXPECT_EQ(2U, display_manager->GetNumDisplays()); | 1272 EXPECT_EQ(2U, display_manager()->GetNumDisplays()); |
1244 | 1273 |
1245 // Dock mode. | 1274 // Dock mode. |
1246 display_info_list.clear(); | 1275 display_info_list.clear(); |
1247 display_info_list.push_back(external_display_info); | 1276 display_info_list.push_back(external_display_info); |
1248 display_manager->OnNativeDisplaysChanged(display_info_list); | 1277 display_manager()->OnNativeDisplaysChanged(display_info_list); |
1249 EXPECT_EQ(1U, display_manager->GetNumDisplays()); | 1278 EXPECT_EQ(1U, display_manager()->GetNumDisplays()); |
1250 EXPECT_FALSE(Shell::GetPrimaryRootWindow() | 1279 EXPECT_FALSE(Shell::GetPrimaryRootWindow() |
1251 ->GetHost() | 1280 ->GetHost() |
1252 ->GetRootTransform() | 1281 ->GetRootTransform() |
1253 .IsIdentityOrIntegerTranslation()); | 1282 .IsIdentityOrIntegerTranslation()); |
1254 | 1283 |
1255 // Switch to single mode and make sure the transform is the one | 1284 // Switch to single mode and make sure the transform is the one |
1256 // for the internal display. | 1285 // for the internal display. |
1257 display_info_list.clear(); | 1286 display_info_list.clear(); |
1258 display_info_list.push_back(internal_display_info); | 1287 display_info_list.push_back(internal_display_info); |
1259 display_manager->OnNativeDisplaysChanged(display_info_list); | 1288 display_manager()->OnNativeDisplaysChanged(display_info_list); |
1260 EXPECT_TRUE(Shell::GetPrimaryRootWindow() | 1289 EXPECT_TRUE(Shell::GetPrimaryRootWindow() |
1261 ->GetHost() | 1290 ->GetHost() |
1262 ->GetRootTransform() | 1291 ->GetRootTransform() |
1263 .IsIdentityOrIntegerTranslation()); | 1292 .IsIdentityOrIntegerTranslation()); |
1264 } | 1293 } |
1265 | 1294 |
1266 // Tests if switching two displays at the same time while the primary display | 1295 // Tests if switching two displays at the same time while the primary display |
1267 // is swapped should not cause a crash. (crbug.com/426292) | 1296 // is swapped should not cause a crash. (crbug.com/426292) |
1268 TEST_P(WindowTreeHostManagerTest, ReplaceSwappedPrimary) { | 1297 TEST_P(WindowTreeHostManagerTest, ReplaceSwappedPrimary) { |
1269 if (!SupportsMultipleDisplays()) | 1298 if (!SupportsMultipleDisplays()) |
1270 return; | 1299 return; |
1271 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | |
1272 | 1300 |
1273 const display::ManagedDisplayInfo first_display_info = | 1301 const display::ManagedDisplayInfo first_display_info = |
1274 CreateDisplayInfo(10, 0, display::Display::ROTATE_0); | 1302 CreateDisplayInfo(10, 0, display::Display::ROTATE_0); |
1275 const display::ManagedDisplayInfo second_display_info = | 1303 const display::ManagedDisplayInfo second_display_info = |
1276 CreateDisplayInfo(11, 1, display::Display::ROTATE_0); | 1304 CreateDisplayInfo(11, 1, display::Display::ROTATE_0); |
1277 | 1305 |
1278 std::vector<display::ManagedDisplayInfo> display_info_list; | 1306 std::vector<display::ManagedDisplayInfo> display_info_list; |
1279 // Extended | 1307 // Extended |
1280 display_info_list.push_back(first_display_info); | 1308 display_info_list.push_back(first_display_info); |
1281 display_info_list.push_back(second_display_info); | 1309 display_info_list.push_back(second_display_info); |
1282 display_manager->OnNativeDisplaysChanged(display_info_list); | 1310 display_manager()->OnNativeDisplaysChanged(display_info_list); |
1283 | 1311 |
1284 test::SwapPrimaryDisplay(); | 1312 SwapPrimaryDisplay(); |
1285 | 1313 |
1286 EXPECT_EQ(11, display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 1314 EXPECT_EQ(11, display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
1287 | 1315 |
1288 display_info_list.clear(); | 1316 display_info_list.clear(); |
1289 const display::ManagedDisplayInfo new_first_display_info = | 1317 const display::ManagedDisplayInfo new_first_display_info = |
1290 CreateDisplayInfo(20, 0, display::Display::ROTATE_0); | 1318 CreateDisplayInfo(20, 0, display::Display::ROTATE_0); |
1291 const display::ManagedDisplayInfo new_second_display_info = | 1319 const display::ManagedDisplayInfo new_second_display_info = |
1292 CreateDisplayInfo(21, 1, display::Display::ROTATE_0); | 1320 CreateDisplayInfo(21, 1, display::Display::ROTATE_0); |
1293 display_info_list.push_back(new_first_display_info); | 1321 display_info_list.push_back(new_first_display_info); |
1294 display_info_list.push_back(new_second_display_info); | 1322 display_info_list.push_back(new_second_display_info); |
1295 display_manager->OnNativeDisplaysChanged(display_info_list); | 1323 display_manager()->OnNativeDisplaysChanged(display_info_list); |
1296 | 1324 |
1297 EXPECT_EQ(20, display::Screen::GetScreen()->GetPrimaryDisplay().id()); | 1325 EXPECT_EQ(20, display::Screen::GetScreen()->GetPrimaryDisplay().id()); |
1298 } | 1326 } |
1299 | 1327 |
1300 namespace { | 1328 namespace { |
1301 | 1329 |
1302 class RootWindowTestObserver : public aura::WindowObserver { | 1330 class RootWindowTestObserver : public aura::WindowObserver { |
1303 public: | 1331 public: |
1304 RootWindowTestObserver() {} | 1332 RootWindowTestObserver() {} |
1305 ~RootWindowTestObserver() override {} | 1333 ~RootWindowTestObserver() override {} |
(...skipping 19 matching lines...) Expand all Loading... |
1325 | 1353 |
1326 // Make sure that GetDisplayBoundsWithShelf returns the correct bounds | 1354 // Make sure that GetDisplayBoundsWithShelf returns the correct bounds |
1327 // when the primary display gets replaced in one of the following scenarios: | 1355 // when the primary display gets replaced in one of the following scenarios: |
1328 // 1) Two displays connected: a) b) | 1356 // 1) Two displays connected: a) b) |
1329 // 2) both are disconnected and new one with the same size as b) is connected | 1357 // 2) both are disconnected and new one with the same size as b) is connected |
1330 // in one configuration event. | 1358 // in one configuration event. |
1331 // See crbug.com/547280. | 1359 // See crbug.com/547280. |
1332 TEST_P(WindowTreeHostManagerTest, ReplacePrimary) { | 1360 TEST_P(WindowTreeHostManagerTest, ReplacePrimary) { |
1333 if (!SupportsMultipleDisplays()) | 1361 if (!SupportsMultipleDisplays()) |
1334 return; | 1362 return; |
1335 DisplayManager* display_manager = Shell::GetInstance()->display_manager(); | |
1336 | 1363 |
1337 display::ManagedDisplayInfo first_display_info = | 1364 display::ManagedDisplayInfo first_display_info = |
1338 CreateDisplayInfo(10, 0, display::Display::ROTATE_0); | 1365 CreateDisplayInfo(10, 0, display::Display::ROTATE_0); |
1339 first_display_info.SetBounds(gfx::Rect(0, 0, 400, 400)); | 1366 first_display_info.SetBounds(gfx::Rect(0, 0, 400, 400)); |
1340 const display::ManagedDisplayInfo second_display_info = | 1367 const display::ManagedDisplayInfo second_display_info = |
1341 CreateDisplayInfo(11, 500, display::Display::ROTATE_0); | 1368 CreateDisplayInfo(11, 500, display::Display::ROTATE_0); |
1342 | 1369 |
1343 std::vector<display::ManagedDisplayInfo> display_info_list; | 1370 std::vector<display::ManagedDisplayInfo> display_info_list; |
1344 // Extended | 1371 // Extended |
1345 display_info_list.push_back(first_display_info); | 1372 display_info_list.push_back(first_display_info); |
1346 display_info_list.push_back(second_display_info); | 1373 display_info_list.push_back(second_display_info); |
1347 display_manager->OnNativeDisplaysChanged(display_info_list); | 1374 display_manager()->OnNativeDisplaysChanged(display_info_list); |
1348 aura::Window* primary_root = Shell::GetAllRootWindows()[0]; | 1375 aura::Window* primary_root = Shell::GetAllRootWindows()[0]; |
1349 | 1376 |
1350 int64_t new_display_id = 20; | 1377 int64_t new_display_id = 20; |
1351 RootWindowTestObserver test_observer; | 1378 RootWindowTestObserver test_observer; |
1352 primary_root->AddObserver(&test_observer); | 1379 primary_root->AddObserver(&test_observer); |
1353 | 1380 |
1354 display_info_list.clear(); | 1381 display_info_list.clear(); |
1355 const display::ManagedDisplayInfo new_first_display_info = | 1382 const display::ManagedDisplayInfo new_first_display_info = |
1356 CreateDisplayInfo(new_display_id, 0, display::Display::ROTATE_0); | 1383 CreateDisplayInfo(new_display_id, 0, display::Display::ROTATE_0); |
1357 | 1384 |
1358 display_info_list.push_back(new_first_display_info); | 1385 display_info_list.push_back(new_first_display_info); |
1359 display_manager->OnNativeDisplaysChanged(display_info_list); | 1386 display_manager()->OnNativeDisplaysChanged(display_info_list); |
1360 EXPECT_EQ("0,0 500x500", test_observer.shelf_display_bounds().ToString()); | 1387 EXPECT_EQ("0,0 500x500", test_observer.shelf_display_bounds().ToString()); |
1361 primary_root->RemoveObserver(&test_observer); | 1388 primary_root->RemoveObserver(&test_observer); |
1362 } | 1389 } |
1363 | 1390 |
1364 TEST_P(WindowTreeHostManagerTest, UpdateMouseLocationAfterDisplayChange) { | 1391 TEST_P(WindowTreeHostManagerTest, UpdateMouseLocationAfterDisplayChange) { |
1365 if (!SupportsMultipleDisplays()) | 1392 if (!SupportsMultipleDisplays()) |
1366 return; | 1393 return; |
1367 | 1394 |
1368 UpdateDisplay("200x200,300x300"); | 1395 UpdateDisplay("200x200,300x300"); |
1369 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1396 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1403 UpdateDisplay("300x280,200x200"); | 1430 UpdateDisplay("300x280,200x200"); |
1404 EXPECT_EQ("450,10", env->last_mouse_location().ToString()); | 1431 EXPECT_EQ("450,10", env->last_mouse_location().ToString()); |
1405 } | 1432 } |
1406 | 1433 |
1407 TEST_P(WindowTreeHostManagerTest, | 1434 TEST_P(WindowTreeHostManagerTest, |
1408 UpdateMouseLocationAfterDisplayChange_2ndOnLeft) { | 1435 UpdateMouseLocationAfterDisplayChange_2ndOnLeft) { |
1409 if (!SupportsMultipleDisplays()) | 1436 if (!SupportsMultipleDisplays()) |
1410 return; | 1437 return; |
1411 | 1438 |
1412 // Set the 2nd display on the left. | 1439 // Set the 2nd display on the left. |
1413 display::DisplayLayoutStore* layout_store = | 1440 display::DisplayLayoutStore* layout_store = display_manager()->layout_store(); |
1414 Shell::GetInstance()->display_manager()->layout_store(); | |
1415 display::DisplayPlacement new_default(display::DisplayPlacement::LEFT, 0); | 1441 display::DisplayPlacement new_default(display::DisplayPlacement::LEFT, 0); |
1416 layout_store->SetDefaultDisplayPlacement(new_default); | 1442 layout_store->SetDefaultDisplayPlacement(new_default); |
1417 | 1443 |
1418 UpdateDisplay("200x200,300x300"); | 1444 UpdateDisplay("200x200,300x300"); |
1419 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); | 1445 aura::Window::Windows root_windows = Shell::GetAllRootWindows(); |
1420 | 1446 |
1421 EXPECT_EQ("-300,0 300x300", | 1447 EXPECT_EQ("-300,0 300x300", |
1422 ScreenUtil::GetSecondaryDisplay().bounds().ToString()); | 1448 display_manager()->GetSecondaryDisplay().bounds().ToString()); |
1423 | 1449 |
1424 aura::Env* env = aura::Env::GetInstance(); | 1450 aura::Env* env = aura::Env::GetInstance(); |
1425 | 1451 |
1426 // Set the initial position. | 1452 // Set the initial position. |
1427 root_windows[0]->MoveCursorTo(gfx::Point(-150, 250)); | 1453 root_windows[0]->MoveCursorTo(gfx::Point(-150, 250)); |
1428 EXPECT_EQ("-150,250", env->last_mouse_location().ToString()); | 1454 EXPECT_EQ("-150,250", env->last_mouse_location().ToString()); |
1429 | 1455 |
1430 // A mouse pointer will stay in 2nd display. | 1456 // A mouse pointer will stay in 2nd display. |
1431 UpdateDisplay("300x300,200x300"); | 1457 UpdateDisplay("300x300,200x300"); |
1432 EXPECT_EQ("-50,150", env->last_mouse_location().ToString()); | 1458 EXPECT_EQ("-50,150", env->last_mouse_location().ToString()); |
(...skipping 24 matching lines...) Expand all Loading... |
1457 shell->window_tree_host_manager(); | 1483 shell->window_tree_host_manager(); |
1458 test::CursorManagerTestApi test_api(shell->cursor_manager()); | 1484 test::CursorManagerTestApi test_api(shell->cursor_manager()); |
1459 | 1485 |
1460 window_tree_host_manager->GetPrimaryRootWindow()->MoveCursorTo( | 1486 window_tree_host_manager->GetPrimaryRootWindow()->MoveCursorTo( |
1461 gfx::Point(20, 50)); | 1487 gfx::Point(20, 50)); |
1462 | 1488 |
1463 EXPECT_EQ("20,50", env->last_mouse_location().ToString()); | 1489 EXPECT_EQ("20,50", env->last_mouse_location().ToString()); |
1464 EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); | 1490 EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); |
1465 EXPECT_EQ(display::Display::ROTATE_0, test_api.GetCurrentCursorRotation()); | 1491 EXPECT_EQ(display::Display::ROTATE_0, test_api.GetCurrentCursorRotation()); |
1466 | 1492 |
1467 test::SwapPrimaryDisplay(); | 1493 SwapPrimaryDisplay(); |
1468 | 1494 |
1469 EXPECT_EQ("20,50", env->last_mouse_location().ToString()); | 1495 EXPECT_EQ("20,50", env->last_mouse_location().ToString()); |
1470 EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor()); | 1496 EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor()); |
1471 EXPECT_EQ(display::Display::ROTATE_90, test_api.GetCurrentCursorRotation()); | 1497 EXPECT_EQ(display::Display::ROTATE_90, test_api.GetCurrentCursorRotation()); |
1472 } | 1498 } |
1473 | 1499 |
1474 // Test that the cursor moves to the other display and that its scale factor | 1500 // Test that the cursor moves to the other display and that its scale factor |
1475 // and rotation are updated when the primary display is disconnected. | 1501 // and rotation are updated when the primary display is disconnected. |
1476 TEST_P(WindowTreeHostManagerTest, | 1502 TEST_P(WindowTreeHostManagerTest, |
1477 UpdateMouseLocationAfterDisplayChange_PrimaryDisconnected) { | 1503 UpdateMouseLocationAfterDisplayChange_PrimaryDisconnected) { |
1478 if (!SupportsMultipleDisplays()) | 1504 if (!SupportsMultipleDisplays()) |
1479 return; | 1505 return; |
1480 | 1506 |
1481 aura::Env* env = aura::Env::GetInstance(); | 1507 aura::Env* env = aura::Env::GetInstance(); |
1482 Shell* shell = Shell::GetInstance(); | 1508 Shell* shell = Shell::GetInstance(); |
1483 WindowTreeHostManager* window_tree_host_manager = | 1509 WindowTreeHostManager* window_tree_host_manager = |
1484 shell->window_tree_host_manager(); | 1510 shell->window_tree_host_manager(); |
1485 test::CursorManagerTestApi test_api(shell->cursor_manager()); | 1511 test::CursorManagerTestApi test_api(shell->cursor_manager()); |
1486 | 1512 |
1487 UpdateDisplay("300x300*2/r,200x200"); | 1513 UpdateDisplay("300x300*2/r,200x200"); |
1488 // Swap the primary display to make it possible to remove the primary display | 1514 // Swap the primary display to make it possible to remove the primary display |
1489 // via UpdateDisplay(). | 1515 // via UpdateDisplay(). |
1490 test::SwapPrimaryDisplay(); | 1516 SwapPrimaryDisplay(); |
1491 int primary_display_id = window_tree_host_manager->GetPrimaryDisplayId(); | 1517 int primary_display_id = window_tree_host_manager->GetPrimaryDisplayId(); |
1492 | 1518 |
1493 window_tree_host_manager->GetPrimaryRootWindow()->MoveCursorTo( | 1519 window_tree_host_manager->GetPrimaryRootWindow()->MoveCursorTo( |
1494 gfx::Point(20, 50)); | 1520 gfx::Point(20, 50)); |
1495 | 1521 |
1496 EXPECT_EQ("20,50", env->last_mouse_location().ToString()); | 1522 EXPECT_EQ("20,50", env->last_mouse_location().ToString()); |
1497 EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); | 1523 EXPECT_EQ(1.0f, test_api.GetCurrentCursor().device_scale_factor()); |
1498 EXPECT_EQ(display::Display::ROTATE_0, test_api.GetCurrentCursorRotation()); | 1524 EXPECT_EQ(display::Display::ROTATE_0, test_api.GetCurrentCursorRotation()); |
1499 | 1525 |
1500 UpdateDisplay("300x300*2/r"); | 1526 UpdateDisplay("300x300*2/r"); |
1501 ASSERT_NE(primary_display_id, | 1527 ASSERT_NE(primary_display_id, |
1502 window_tree_host_manager->GetPrimaryDisplayId()); | 1528 window_tree_host_manager->GetPrimaryDisplayId()); |
1503 | 1529 |
1504 // Cursor should be centered on the remaining display. | 1530 // Cursor should be centered on the remaining display. |
1505 EXPECT_EQ("75,75", env->last_mouse_location().ToString()); | 1531 EXPECT_EQ("75,75", env->last_mouse_location().ToString()); |
1506 EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor()); | 1532 EXPECT_EQ(2.0f, test_api.GetCurrentCursor().device_scale_factor()); |
1507 EXPECT_EQ(display::Display::ROTATE_90, test_api.GetCurrentCursorRotation()); | 1533 EXPECT_EQ(display::Display::ROTATE_90, test_api.GetCurrentCursorRotation()); |
1508 } | 1534 } |
1509 | 1535 |
1510 // GetRootWindowForDisplayId() for removed display::Display during | 1536 // GetRootWindowForDisplayId() for removed display::Display during |
1511 // OnDisplayRemoved() should not cause crash. See http://crbug.com/415222 | 1537 // OnDisplayRemoved() should not cause crash. See http://crbug.com/415222 |
1512 TEST_P(WindowTreeHostManagerTest, | 1538 TEST_P(WindowTreeHostManagerTest, |
1513 GetRootWindowForDisplayIdDuringDisplayDisconnection) { | 1539 GetRootWindowForDisplayIdDuringDisplayDisconnection) { |
1514 if (!SupportsMultipleDisplays()) | 1540 if (!SupportsMultipleDisplays()) |
1515 return; | 1541 return; |
1516 | 1542 |
1517 UpdateDisplay("300x300,200x200"); | 1543 UpdateDisplay("300x300,200x200"); |
1518 aura::Window* root2 = | 1544 aura::Window* root2 = Shell::GetInstance() |
1519 Shell::GetInstance() | 1545 ->window_tree_host_manager() |
1520 ->window_tree_host_manager() | 1546 ->GetRootWindowForDisplayId( |
1521 ->GetRootWindowForDisplayId(ScreenUtil::GetSecondaryDisplay().id()); | 1547 display_manager()->GetSecondaryDisplay().id()); |
1522 views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds( | 1548 views::Widget* widget = views::Widget::CreateWindowWithContextAndBounds( |
1523 nullptr, root2, gfx::Rect(350, 0, 100, 100)); | 1549 nullptr, root2, gfx::Rect(350, 0, 100, 100)); |
1524 views::View* view = new views::View(); | 1550 views::View* view = new views::View(); |
1525 widget->GetContentsView()->AddChildView(view); | 1551 widget->GetContentsView()->AddChildView(view); |
1526 view->SetBounds(0, 0, 100, 100); | 1552 view->SetBounds(0, 0, 100, 100); |
1527 widget->Show(); | 1553 widget->Show(); |
1528 | 1554 |
1529 TestMouseWatcherListener listener; | 1555 TestMouseWatcherListener listener; |
1530 views::MouseWatcher watcher( | 1556 views::MouseWatcher watcher( |
1531 new views::MouseWatcherViewHost(view, gfx::Insets()), &listener); | 1557 new views::MouseWatcherViewHost(view, gfx::Insets()), &listener); |
1532 watcher.Start(); | 1558 watcher.Start(); |
1533 | 1559 |
1534 ui::test::EventGenerator event_generator( | 1560 ui::test::EventGenerator event_generator( |
1535 widget->GetNativeWindow()->GetRootWindow()); | 1561 widget->GetNativeWindow()->GetRootWindow()); |
1536 event_generator.MoveMouseToCenterOf(widget->GetNativeWindow()); | 1562 event_generator.MoveMouseToCenterOf(widget->GetNativeWindow()); |
1537 | 1563 |
1538 UpdateDisplay("300x300"); | 1564 UpdateDisplay("300x300"); |
1539 watcher.Stop(); | 1565 watcher.Stop(); |
1540 | 1566 |
1541 widget->CloseNow(); | 1567 widget->CloseNow(); |
1542 } | 1568 } |
1543 | 1569 |
1544 } // namespace ash | 1570 } // namespace ash |
OLD | NEW |