OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/wm/maximize_mode/maximize_mode_window_manager.h" | 5 #include "ash/wm/maximize_mode/maximize_mode_window_manager.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "ash/aura/wm_window_aura.h" | 9 #include "ash/aura/wm_window_aura.h" |
10 #include "ash/common/wm/mru_window_tracker.h" | 10 #include "ash/common/wm/mru_window_tracker.h" |
(...skipping 29 matching lines...) Expand all Loading... |
40 #if !defined(OS_WIN) | 40 #if !defined(OS_WIN) |
41 | 41 |
42 class MaximizeModeWindowManagerTest : public test::AshTestBase { | 42 class MaximizeModeWindowManagerTest : public test::AshTestBase { |
43 public: | 43 public: |
44 MaximizeModeWindowManagerTest() {} | 44 MaximizeModeWindowManagerTest() {} |
45 ~MaximizeModeWindowManagerTest() override {} | 45 ~MaximizeModeWindowManagerTest() override {} |
46 | 46 |
47 // Creates a window which has a fixed size. | 47 // Creates a window which has a fixed size. |
48 aura::Window* CreateFixedSizeNonMaximizableWindow(ui::wm::WindowType type, | 48 aura::Window* CreateFixedSizeNonMaximizableWindow(ui::wm::WindowType type, |
49 const gfx::Rect& bounds) { | 49 const gfx::Rect& bounds) { |
50 return CreateWindowInWatchedContainer( | 50 return CreateWindowInWatchedContainer(type, bounds, gfx::Size(), false, |
51 type, bounds, gfx::Size(), false, false); | 51 false); |
52 } | 52 } |
53 | 53 |
54 // Creates a window which can not be maximized, but resized. |max_size| | 54 // Creates a window which can not be maximized, but resized. |max_size| |
55 // denotes the maximal possible size, if the size is empty, the window has no | 55 // denotes the maximal possible size, if the size is empty, the window has no |
56 // upper limit. Note: This function will only work with a single root window. | 56 // upper limit. Note: This function will only work with a single root window. |
57 aura::Window* CreateNonMaximizableWindow(ui::wm::WindowType type, | 57 aura::Window* CreateNonMaximizableWindow(ui::wm::WindowType type, |
58 const gfx::Rect& bounds, | 58 const gfx::Rect& bounds, |
59 const gfx::Size& max_size) { | 59 const gfx::Size& max_size) { |
60 return CreateWindowInWatchedContainer(type, bounds, max_size, false, true); | 60 return CreateWindowInWatchedContainer(type, bounds, max_size, false, true); |
61 } | 61 } |
62 | 62 |
63 // Creates a maximizable and resizable window. | 63 // Creates a maximizable and resizable window. |
64 aura::Window* CreateWindow(ui::wm::WindowType type, | 64 aura::Window* CreateWindow(ui::wm::WindowType type, const gfx::Rect bounds) { |
65 const gfx::Rect bounds) { | 65 return CreateWindowInWatchedContainer(type, bounds, gfx::Size(), true, |
66 return CreateWindowInWatchedContainer( | 66 true); |
67 type, bounds, gfx::Size(), true, true); | |
68 } | 67 } |
69 | 68 |
70 // Creates a window which also has a widget. | 69 // Creates a window which also has a widget. |
71 aura::Window* CreateWindowWithWidget(const gfx::Rect& bounds) { | 70 aura::Window* CreateWindowWithWidget(const gfx::Rect& bounds) { |
72 views::Widget* widget = new views::Widget(); | 71 views::Widget* widget = new views::Widget(); |
73 views::Widget::InitParams params; | 72 views::Widget::InitParams params; |
74 params.context = CurrentContext(); | 73 params.context = CurrentContext(); |
75 // Note: The widget will get deleted with the window. | 74 // Note: The widget will get deleted with the window. |
76 widget->Init(params); | 75 widget->Init(params); |
77 widget->Show(); | 76 widget->Show(); |
78 aura::Window* window = widget->GetNativeWindow(); | 77 aura::Window* window = widget->GetNativeWindow(); |
79 window->SetBounds(bounds); | 78 window->SetBounds(bounds); |
80 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); | 79 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); |
81 | 80 |
82 return window; | 81 return window; |
83 } | 82 } |
84 | 83 |
85 // Create the Maximized mode window manager. | 84 // Create the Maximized mode window manager. |
86 ash::MaximizeModeWindowManager* CreateMaximizeModeWindowManager() { | 85 ash::MaximizeModeWindowManager* CreateMaximizeModeWindowManager() { |
87 EXPECT_FALSE(maximize_mode_window_manager()); | 86 EXPECT_FALSE(maximize_mode_window_manager()); |
88 Shell::GetInstance()->maximize_mode_controller()-> | 87 Shell::GetInstance() |
89 EnableMaximizeModeWindowManager(true); | 88 ->maximize_mode_controller() |
| 89 ->EnableMaximizeModeWindowManager(true); |
90 return maximize_mode_window_manager(); | 90 return maximize_mode_window_manager(); |
91 } | 91 } |
92 | 92 |
93 // Destroy the maximized mode window manager. | 93 // Destroy the maximized mode window manager. |
94 void DestroyMaximizeModeWindowManager() { | 94 void DestroyMaximizeModeWindowManager() { |
95 Shell::GetInstance()->maximize_mode_controller()-> | 95 Shell::GetInstance() |
96 EnableMaximizeModeWindowManager(false); | 96 ->maximize_mode_controller() |
| 97 ->EnableMaximizeModeWindowManager(false); |
97 EXPECT_FALSE(maximize_mode_window_manager()); | 98 EXPECT_FALSE(maximize_mode_window_manager()); |
98 } | 99 } |
99 | 100 |
100 // Get the maximze window manager. | 101 // Get the maximze window manager. |
101 ash::MaximizeModeWindowManager* maximize_mode_window_manager() { | 102 ash::MaximizeModeWindowManager* maximize_mode_window_manager() { |
102 return Shell::GetInstance()->maximize_mode_controller()-> | 103 return Shell::GetInstance() |
103 maximize_mode_window_manager_.get(); | 104 ->maximize_mode_controller() |
| 105 ->maximize_mode_window_manager_.get(); |
104 } | 106 } |
105 | 107 |
106 // Resize our desktop. | 108 // Resize our desktop. |
107 void ResizeDesktop(int width_delta) { | 109 void ResizeDesktop(int width_delta) { |
108 gfx::Size size = | 110 gfx::Size size = |
109 display::Screen::GetScreen() | 111 display::Screen::GetScreen() |
110 ->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()) | 112 ->GetDisplayNearestWindow(Shell::GetPrimaryRootWindow()) |
111 .size(); | 113 .size(); |
112 size.Enlarge(0, width_delta); | 114 size.Enlarge(0, width_delta); |
113 UpdateDisplay(size.ToString()); | 115 UpdateDisplay(size.ToString()); |
(...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
312 CreateNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect, max_size)); | 314 CreateNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect, max_size)); |
313 std::unique_ptr<aura::Window> fixed_window( | 315 std::unique_ptr<aura::Window> fixed_window( |
314 CreateFixedSizeNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); | 316 CreateFixedSizeNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); |
315 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); | 317 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); |
316 EXPECT_EQ(rect.ToString(), unlimited_window->bounds().ToString()); | 318 EXPECT_EQ(rect.ToString(), unlimited_window->bounds().ToString()); |
317 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); | 319 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); |
318 EXPECT_EQ(rect.ToString(), limited_window->bounds().ToString()); | 320 EXPECT_EQ(rect.ToString(), limited_window->bounds().ToString()); |
319 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); | 321 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); |
320 EXPECT_EQ(rect.ToString(), fixed_window->bounds().ToString()); | 322 EXPECT_EQ(rect.ToString(), fixed_window->bounds().ToString()); |
321 | 323 |
322 gfx::Size workspace_size = ScreenUtil::GetMaximizedWindowBoundsInParent( | 324 gfx::Size workspace_size = |
323 unlimited_window.get()).size(); | 325 ScreenUtil::GetMaximizedWindowBoundsInParent(unlimited_window.get()) |
| 326 .size(); |
324 | 327 |
325 // Create the manager and make sure that all qualifying windows were detected | 328 // Create the manager and make sure that all qualifying windows were detected |
326 // and changed. | 329 // and changed. |
327 ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager(); | 330 ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager(); |
328 ASSERT_TRUE(manager); | 331 ASSERT_TRUE(manager); |
329 EXPECT_EQ(3, manager->GetNumberOfManagedWindows()); | 332 EXPECT_EQ(3, manager->GetNumberOfManagedWindows()); |
330 // The unlimited window should have the size of the workspace / parent window. | 333 // The unlimited window should have the size of the workspace / parent window. |
331 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); | 334 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); |
332 EXPECT_EQ("0,0", unlimited_window->bounds().origin().ToString()); | 335 EXPECT_EQ("0,0", unlimited_window->bounds().origin().ToString()); |
333 EXPECT_EQ(workspace_size.ToString(), | 336 EXPECT_EQ(workspace_size.ToString(), |
334 unlimited_window->bounds().size().ToString()); | 337 unlimited_window->bounds().size().ToString()); |
335 // The limited window should have the size of the upper possible bounds. | 338 // The limited window should have the size of the upper possible bounds. |
336 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); | 339 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); |
337 EXPECT_NE(rect.origin().ToString(), | 340 EXPECT_NE(rect.origin().ToString(), |
338 limited_window->bounds().origin().ToString()); | 341 limited_window->bounds().origin().ToString()); |
339 EXPECT_EQ(max_size.ToString(), | 342 EXPECT_EQ(max_size.ToString(), limited_window->bounds().size().ToString()); |
340 limited_window->bounds().size().ToString()); | |
341 // The fixed size window should have the size of the original window. | 343 // The fixed size window should have the size of the original window. |
342 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); | 344 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); |
343 EXPECT_NE(rect.origin().ToString(), | 345 EXPECT_NE(rect.origin().ToString(), |
344 fixed_window->bounds().origin().ToString()); | 346 fixed_window->bounds().origin().ToString()); |
345 EXPECT_EQ(rect.size().ToString(), | 347 EXPECT_EQ(rect.size().ToString(), fixed_window->bounds().size().ToString()); |
346 fixed_window->bounds().size().ToString()); | |
347 | 348 |
348 // Destroy the manager again and check that the windows return to their | 349 // Destroy the manager again and check that the windows return to their |
349 // previous state. | 350 // previous state. |
350 DestroyMaximizeModeWindowManager(); | 351 DestroyMaximizeModeWindowManager(); |
351 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); | 352 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); |
352 EXPECT_EQ(rect.ToString(), unlimited_window->bounds().ToString()); | 353 EXPECT_EQ(rect.ToString(), unlimited_window->bounds().ToString()); |
353 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); | 354 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); |
354 EXPECT_EQ(rect.ToString(), limited_window->bounds().ToString()); | 355 EXPECT_EQ(rect.ToString(), limited_window->bounds().ToString()); |
355 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); | 356 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); |
356 EXPECT_EQ(rect.ToString(), fixed_window->bounds().ToString()); | 357 EXPECT_EQ(rect.ToString(), fixed_window->bounds().ToString()); |
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
448 // Destroy the maximize mode and check that the resulting size of the window | 449 // Destroy the maximize mode and check that the resulting size of the window |
449 // is remaining as it is (but not maximized). | 450 // is remaining as it is (but not maximized). |
450 DestroyMaximizeModeWindowManager(); | 451 DestroyMaximizeModeWindowManager(); |
451 | 452 |
452 EXPECT_FALSE(wm::GetWindowState(window.get())->IsMaximized()); | 453 EXPECT_FALSE(wm::GetWindowState(window.get())->IsMaximized()); |
453 EXPECT_EQ(maximized_size.ToString(), window->bounds().ToString()); | 454 EXPECT_EQ(maximized_size.ToString(), window->bounds().ToString()); |
454 } | 455 } |
455 | 456 |
456 // Test that non-maximizable windows get properly handled when created in | 457 // Test that non-maximizable windows get properly handled when created in |
457 // maximized mode. | 458 // maximized mode. |
458 TEST_F(MaximizeModeWindowManagerTest, | 459 TEST_F(MaximizeModeWindowManagerTest, CreateNonMaximizableButResizableWindows) { |
459 CreateNonMaximizableButResizableWindows) { | |
460 // Create the manager and make sure that all qualifying windows were detected | 460 // Create the manager and make sure that all qualifying windows were detected |
461 // and changed. | 461 // and changed. |
462 ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager(); | 462 ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager(); |
463 ASSERT_TRUE(manager); | 463 ASSERT_TRUE(manager); |
464 | 464 |
465 gfx::Rect rect(10, 10, 200, 50); | 465 gfx::Rect rect(10, 10, 200, 50); |
466 gfx::Size max_size(300, 200); | 466 gfx::Size max_size(300, 200); |
467 gfx::Size empty_size; | 467 gfx::Size empty_size; |
468 std::unique_ptr<aura::Window> unlimited_window( | 468 std::unique_ptr<aura::Window> unlimited_window( |
469 CreateNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect, empty_size)); | 469 CreateNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect, empty_size)); |
470 std::unique_ptr<aura::Window> limited_window( | 470 std::unique_ptr<aura::Window> limited_window( |
471 CreateNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect, max_size)); | 471 CreateNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect, max_size)); |
472 std::unique_ptr<aura::Window> fixed_window( | 472 std::unique_ptr<aura::Window> fixed_window( |
473 CreateFixedSizeNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); | 473 CreateFixedSizeNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); |
474 | 474 |
475 gfx::Size workspace_size = ScreenUtil::GetMaximizedWindowBoundsInParent( | 475 gfx::Size workspace_size = |
476 unlimited_window.get()).size(); | 476 ScreenUtil::GetMaximizedWindowBoundsInParent(unlimited_window.get()) |
| 477 .size(); |
477 | 478 |
478 // All windows should be sized now as big as possible and be centered. | 479 // All windows should be sized now as big as possible and be centered. |
479 EXPECT_EQ(3, manager->GetNumberOfManagedWindows()); | 480 EXPECT_EQ(3, manager->GetNumberOfManagedWindows()); |
480 // The unlimited window should have the size of the workspace / parent window. | 481 // The unlimited window should have the size of the workspace / parent window. |
481 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); | 482 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); |
482 EXPECT_EQ("0,0", unlimited_window->bounds().origin().ToString()); | 483 EXPECT_EQ("0,0", unlimited_window->bounds().origin().ToString()); |
483 EXPECT_EQ(workspace_size.ToString(), | 484 EXPECT_EQ(workspace_size.ToString(), |
484 unlimited_window->bounds().size().ToString()); | 485 unlimited_window->bounds().size().ToString()); |
485 // The limited window should have the size of the upper possible bounds. | 486 // The limited window should have the size of the upper possible bounds. |
486 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); | 487 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); |
487 EXPECT_NE(rect.origin().ToString(), | 488 EXPECT_NE(rect.origin().ToString(), |
488 limited_window->bounds().origin().ToString()); | 489 limited_window->bounds().origin().ToString()); |
489 EXPECT_EQ(max_size.ToString(), | 490 EXPECT_EQ(max_size.ToString(), limited_window->bounds().size().ToString()); |
490 limited_window->bounds().size().ToString()); | |
491 // The fixed size window should have the size of the original window. | 491 // The fixed size window should have the size of the original window. |
492 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); | 492 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); |
493 EXPECT_NE(rect.origin().ToString(), | 493 EXPECT_NE(rect.origin().ToString(), |
494 fixed_window->bounds().origin().ToString()); | 494 fixed_window->bounds().origin().ToString()); |
495 EXPECT_EQ(rect.size().ToString(), | 495 EXPECT_EQ(rect.size().ToString(), fixed_window->bounds().size().ToString()); |
496 fixed_window->bounds().size().ToString()); | |
497 | 496 |
498 // Destroy the manager again and check that the windows return to their | 497 // Destroy the manager again and check that the windows return to their |
499 // creation state. | 498 // creation state. |
500 DestroyMaximizeModeWindowManager(); | 499 DestroyMaximizeModeWindowManager(); |
501 | 500 |
502 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); | 501 EXPECT_FALSE(wm::GetWindowState(unlimited_window.get())->IsMaximized()); |
503 EXPECT_EQ(rect.ToString(), unlimited_window->bounds().ToString()); | 502 EXPECT_EQ(rect.ToString(), unlimited_window->bounds().ToString()); |
504 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); | 503 EXPECT_FALSE(wm::GetWindowState(limited_window.get())->IsMaximized()); |
505 EXPECT_EQ(rect.ToString(), limited_window->bounds().ToString()); | 504 EXPECT_EQ(rect.ToString(), limited_window->bounds().ToString()); |
506 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); | 505 EXPECT_FALSE(wm::GetWindowState(fixed_window.get())->IsMaximized()); |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
656 CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); | 655 CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); |
657 std::unique_ptr<aura::Window> initially_maximized_window( | 656 std::unique_ptr<aura::Window> initially_maximized_window( |
658 CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); | 657 CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); |
659 wm::GetWindowState(initially_minimized_window.get())->Minimize(); | 658 wm::GetWindowState(initially_minimized_window.get())->Minimize(); |
660 wm::GetWindowState(initially_maximized_window.get())->Maximize(); | 659 wm::GetWindowState(initially_maximized_window.get())->Maximize(); |
661 | 660 |
662 // Create the manager and make sure that the window gets detected. | 661 // Create the manager and make sure that the window gets detected. |
663 ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager(); | 662 ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager(); |
664 ASSERT_TRUE(manager); | 663 ASSERT_TRUE(manager); |
665 EXPECT_EQ(3, manager->GetNumberOfManagedWindows()); | 664 EXPECT_EQ(3, manager->GetNumberOfManagedWindows()); |
666 EXPECT_TRUE(wm::GetWindowState( | 665 EXPECT_TRUE( |
667 initially_minimized_window.get())->IsMinimized()); | 666 wm::GetWindowState(initially_minimized_window.get())->IsMinimized()); |
668 EXPECT_TRUE(wm::GetWindowState(initially_normal_window.get())->IsMaximized()); | 667 EXPECT_TRUE(wm::GetWindowState(initially_normal_window.get())->IsMaximized()); |
669 EXPECT_TRUE(wm::GetWindowState( | 668 EXPECT_TRUE( |
670 initially_maximized_window.get())->IsMaximized()); | 669 wm::GetWindowState(initially_maximized_window.get())->IsMaximized()); |
671 // Now minimize the second window to check that upon leaving the window | 670 // Now minimize the second window to check that upon leaving the window |
672 // will get restored to its minimized state. | 671 // will get restored to its minimized state. |
673 wm::GetWindowState(initially_normal_window.get())->Minimize(); | 672 wm::GetWindowState(initially_normal_window.get())->Minimize(); |
674 wm::GetWindowState(initially_maximized_window.get())->Minimize(); | 673 wm::GetWindowState(initially_maximized_window.get())->Minimize(); |
675 EXPECT_TRUE(wm::GetWindowState( | 674 EXPECT_TRUE( |
676 initially_minimized_window.get())->IsMinimized()); | 675 wm::GetWindowState(initially_minimized_window.get())->IsMinimized()); |
677 EXPECT_TRUE(wm::GetWindowState( | 676 EXPECT_TRUE(wm::GetWindowState(initially_normal_window.get())->IsMinimized()); |
678 initially_normal_window.get())->IsMinimized()); | 677 EXPECT_TRUE( |
679 EXPECT_TRUE(wm::GetWindowState( | 678 wm::GetWindowState(initially_maximized_window.get())->IsMinimized()); |
680 initially_maximized_window.get())->IsMinimized()); | |
681 | 679 |
682 // Destroy the manager again and check that the window will get minimized. | 680 // Destroy the manager again and check that the window will get minimized. |
683 DestroyMaximizeModeWindowManager(); | 681 DestroyMaximizeModeWindowManager(); |
684 EXPECT_TRUE(wm::GetWindowState( | 682 EXPECT_TRUE( |
685 initially_minimized_window.get())->IsMinimized()); | 683 wm::GetWindowState(initially_minimized_window.get())->IsMinimized()); |
686 EXPECT_FALSE(wm::GetWindowState( | 684 EXPECT_FALSE( |
687 initially_normal_window.get())->IsMinimized()); | 685 wm::GetWindowState(initially_normal_window.get())->IsMinimized()); |
688 EXPECT_TRUE(wm::GetWindowState( | 686 EXPECT_TRUE( |
689 initially_maximized_window.get())->IsMaximized()); | 687 wm::GetWindowState(initially_maximized_window.get())->IsMaximized()); |
690 } | 688 } |
691 | 689 |
692 // Check that resizing the desktop does reposition unmaximizable, unresizable & | 690 // Check that resizing the desktop does reposition unmaximizable, unresizable & |
693 // managed windows. | 691 // managed windows. |
694 TEST_F(MaximizeModeWindowManagerTest, DesktopSizeChangeMovesUnmaximizable) { | 692 TEST_F(MaximizeModeWindowManagerTest, DesktopSizeChangeMovesUnmaximizable) { |
695 UpdateDisplay("400x400"); | 693 UpdateDisplay("400x400"); |
696 // This window will move because it does not fit the new bounds. | 694 // This window will move because it does not fit the new bounds. |
697 gfx::Rect rect(20, 300, 100, 100); | 695 gfx::Rect rect(20, 300, 100, 100); |
698 std::unique_ptr<aura::Window> window1( | 696 std::unique_ptr<aura::Window> window1( |
699 CreateFixedSizeNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); | 697 CreateFixedSizeNonMaximizableWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); |
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
828 DestroyMaximizeModeWindowManager(); | 826 DestroyMaximizeModeWindowManager(); |
829 } | 827 } |
830 | 828 |
831 // Check that minimize and restore do the right thing. | 829 // Check that minimize and restore do the right thing. |
832 TEST_F(MaximizeModeWindowManagerTest, TestMinimize) { | 830 TEST_F(MaximizeModeWindowManagerTest, TestMinimize) { |
833 gfx::Rect rect(10, 10, 100, 100); | 831 gfx::Rect rect(10, 10, 100, 100); |
834 std::unique_ptr<aura::Window> window( | 832 std::unique_ptr<aura::Window> window( |
835 CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); | 833 CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, rect)); |
836 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 834 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
837 EXPECT_EQ(rect.ToString(), window->bounds().ToString()); | 835 EXPECT_EQ(rect.ToString(), window->bounds().ToString()); |
838 ash::Shell::GetInstance()->maximize_mode_controller()-> | 836 ash::Shell::GetInstance() |
839 EnableMaximizeModeWindowManager(true); | 837 ->maximize_mode_controller() |
| 838 ->EnableMaximizeModeWindowManager(true); |
840 EXPECT_TRUE(window_state->IsMaximized()); | 839 EXPECT_TRUE(window_state->IsMaximized()); |
841 EXPECT_FALSE(window_state->IsMinimized()); | 840 EXPECT_FALSE(window_state->IsMinimized()); |
842 EXPECT_TRUE(window->IsVisible()); | 841 EXPECT_TRUE(window->IsVisible()); |
843 | 842 |
844 window_state->Minimize(); | 843 window_state->Minimize(); |
845 EXPECT_FALSE(window_state->IsMaximized()); | 844 EXPECT_FALSE(window_state->IsMaximized()); |
846 EXPECT_TRUE(window_state->IsMinimized()); | 845 EXPECT_TRUE(window_state->IsMinimized()); |
847 EXPECT_FALSE(window->IsVisible()); | 846 EXPECT_FALSE(window->IsVisible()); |
848 | 847 |
849 window_state->Maximize(); | 848 window_state->Maximize(); |
850 EXPECT_TRUE(window_state->IsMaximized()); | 849 EXPECT_TRUE(window_state->IsMaximized()); |
851 EXPECT_FALSE(window_state->IsMinimized()); | 850 EXPECT_FALSE(window_state->IsMinimized()); |
852 EXPECT_TRUE(window->IsVisible()); | 851 EXPECT_TRUE(window->IsVisible()); |
853 | 852 |
854 ash::Shell::GetInstance()->maximize_mode_controller()-> | 853 ash::Shell::GetInstance() |
855 EnableMaximizeModeWindowManager(false); | 854 ->maximize_mode_controller() |
| 855 ->EnableMaximizeModeWindowManager(false); |
856 EXPECT_FALSE(window_state->IsMaximized()); | 856 EXPECT_FALSE(window_state->IsMaximized()); |
857 EXPECT_FALSE(window_state->IsMinimized()); | 857 EXPECT_FALSE(window_state->IsMinimized()); |
858 EXPECT_TRUE(window->IsVisible()); | 858 EXPECT_TRUE(window->IsVisible()); |
859 } | 859 } |
860 | 860 |
861 // Check that a full screen window remains full screen upon entering maximize | 861 // Check that a full screen window remains full screen upon entering maximize |
862 // mode. Furthermore, checks that this window is not full screen upon exiting | 862 // mode. Furthermore, checks that this window is not full screen upon exiting |
863 // maximize mode if it was un-full-screened while in maximize mode. | 863 // maximize mode if it was un-full-screened while in maximize mode. |
864 TEST_F(MaximizeModeWindowManagerTest, KeepFullScreenModeOn) { | 864 TEST_F(MaximizeModeWindowManagerTest, KeepFullScreenModeOn) { |
865 gfx::Rect rect(20, 140, 100, 100); | 865 gfx::Rect rect(20, 140, 100, 100); |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1080 generator.PressLeftButton(); | 1080 generator.PressLeftButton(); |
1081 generator.MoveMouseBy(10, 5); | 1081 generator.MoveMouseBy(10, 5); |
1082 RunAllPendingInMessageLoop(); | 1082 RunAllPendingInMessageLoop(); |
1083 generator.ReleaseLeftButton(); | 1083 generator.ReleaseLeftButton(); |
1084 gfx::Point first_dragged_origin = window->bounds().origin(); | 1084 gfx::Point first_dragged_origin = window->bounds().origin(); |
1085 EXPECT_EQ(rect.x() + 10, first_dragged_origin.x()); | 1085 EXPECT_EQ(rect.x() + 10, first_dragged_origin.x()); |
1086 EXPECT_EQ(rect.y() + 5, first_dragged_origin.y()); | 1086 EXPECT_EQ(rect.y() + 5, first_dragged_origin.y()); |
1087 | 1087 |
1088 // 2. Check that turning on the manager will stop allowing the window from | 1088 // 2. Check that turning on the manager will stop allowing the window from |
1089 // dragging. | 1089 // dragging. |
1090 ash::Shell::GetInstance()->maximize_mode_controller()-> | 1090 ash::Shell::GetInstance() |
1091 EnableMaximizeModeWindowManager(true); | 1091 ->maximize_mode_controller() |
| 1092 ->EnableMaximizeModeWindowManager(true); |
1092 gfx::Rect center_bounds(window->bounds()); | 1093 gfx::Rect center_bounds(window->bounds()); |
1093 EXPECT_NE(rect.origin().ToString(), center_bounds.origin().ToString()); | 1094 EXPECT_NE(rect.origin().ToString(), center_bounds.origin().ToString()); |
1094 generator.MoveMouseTo(gfx::Point(center_bounds.x() + 1, | 1095 generator.MoveMouseTo( |
1095 center_bounds.y() + 1)); | 1096 gfx::Point(center_bounds.x() + 1, center_bounds.y() + 1)); |
1096 generator.PressLeftButton(); | 1097 generator.PressLeftButton(); |
1097 generator.MoveMouseBy(10, 5); | 1098 generator.MoveMouseBy(10, 5); |
1098 RunAllPendingInMessageLoop(); | 1099 RunAllPendingInMessageLoop(); |
1099 generator.ReleaseLeftButton(); | 1100 generator.ReleaseLeftButton(); |
1100 EXPECT_EQ(center_bounds.x(), window->bounds().x()); | 1101 EXPECT_EQ(center_bounds.x(), window->bounds().x()); |
1101 EXPECT_EQ(center_bounds.y(), window->bounds().y()); | 1102 EXPECT_EQ(center_bounds.y(), window->bounds().y()); |
1102 ash::Shell::GetInstance()->maximize_mode_controller()-> | 1103 ash::Shell::GetInstance() |
1103 EnableMaximizeModeWindowManager(false); | 1104 ->maximize_mode_controller() |
| 1105 ->EnableMaximizeModeWindowManager(false); |
1104 | 1106 |
1105 // 3. Releasing the mazimize manager again will restore the window to its | 1107 // 3. Releasing the mazimize manager again will restore the window to its |
1106 // previous bounds and | 1108 // previous bounds and |
1107 generator.MoveMouseTo(gfx::Point(first_dragged_origin.x() + 1, | 1109 generator.MoveMouseTo( |
1108 first_dragged_origin.y() + 1)); | 1110 gfx::Point(first_dragged_origin.x() + 1, first_dragged_origin.y() + 1)); |
1109 generator.PressLeftButton(); | 1111 generator.PressLeftButton(); |
1110 generator.MoveMouseBy(10, 5); | 1112 generator.MoveMouseBy(10, 5); |
1111 RunAllPendingInMessageLoop(); | 1113 RunAllPendingInMessageLoop(); |
1112 generator.ReleaseLeftButton(); | 1114 generator.ReleaseLeftButton(); |
1113 EXPECT_EQ(first_dragged_origin.x() + 10, window->bounds().x()); | 1115 EXPECT_EQ(first_dragged_origin.x() + 10, window->bounds().x()); |
1114 EXPECT_EQ(first_dragged_origin.y() + 5, window->bounds().y()); | 1116 EXPECT_EQ(first_dragged_origin.y() + 5, window->bounds().y()); |
1115 } | 1117 } |
1116 | 1118 |
1117 // Test that overview is exited before entering / exiting maximize mode so that | 1119 // Test that overview is exited before entering / exiting maximize mode so that |
1118 // the window changes made by MaximizeModeWindowManager do not conflict with | 1120 // the window changes made by MaximizeModeWindowManager do not conflict with |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1159 // Fullscreen both windows. | 1161 // Fullscreen both windows. |
1160 wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN); | 1162 wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN); |
1161 background_window_state->OnWMEvent(&event); | 1163 background_window_state->OnWMEvent(&event); |
1162 foreground_window_state->OnWMEvent(&event); | 1164 foreground_window_state->OnWMEvent(&event); |
1163 EXPECT_TRUE(background_window_state->IsFullscreen()); | 1165 EXPECT_TRUE(background_window_state->IsFullscreen()); |
1164 EXPECT_TRUE(foreground_window_state->IsFullscreen()); | 1166 EXPECT_TRUE(foreground_window_state->IsFullscreen()); |
1165 EXPECT_EQ(foreground_window.get(), wm::GetActiveWindow()); | 1167 EXPECT_EQ(foreground_window.get(), wm::GetActiveWindow()); |
1166 | 1168 |
1167 // Do an edge swipe top into screen. | 1169 // Do an edge swipe top into screen. |
1168 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); | 1170 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
1169 generator.GestureScrollSequence(gfx::Point(50, 0), | 1171 generator.GestureScrollSequence(gfx::Point(50, 0), gfx::Point(50, 100), |
1170 gfx::Point(50, 100), | 1172 base::TimeDelta::FromMilliseconds(20), 10); |
1171 base::TimeDelta::FromMilliseconds(20), | |
1172 10); | |
1173 | 1173 |
1174 EXPECT_FALSE(foreground_window_state->IsFullscreen()); | 1174 EXPECT_FALSE(foreground_window_state->IsFullscreen()); |
1175 EXPECT_TRUE(background_window_state->IsFullscreen()); | 1175 EXPECT_TRUE(background_window_state->IsFullscreen()); |
1176 | 1176 |
1177 // Do a second edge swipe top into screen. | 1177 // Do a second edge swipe top into screen. |
1178 generator.GestureScrollSequence(gfx::Point(50, 0), | 1178 generator.GestureScrollSequence(gfx::Point(50, 0), gfx::Point(50, 100), |
1179 gfx::Point(50, 100), | 1179 base::TimeDelta::FromMilliseconds(20), 10); |
1180 base::TimeDelta::FromMilliseconds(20), | |
1181 10); | |
1182 | 1180 |
1183 EXPECT_FALSE(foreground_window_state->IsFullscreen()); | 1181 EXPECT_FALSE(foreground_window_state->IsFullscreen()); |
1184 EXPECT_TRUE(background_window_state->IsFullscreen()); | 1182 EXPECT_TRUE(background_window_state->IsFullscreen()); |
1185 | 1183 |
1186 DestroyMaximizeModeWindowManager(); | 1184 DestroyMaximizeModeWindowManager(); |
1187 } | 1185 } |
1188 | 1186 |
1189 // Test that an edge swipe from the bottom will end full screen mode. | 1187 // Test that an edge swipe from the bottom will end full screen mode. |
1190 TEST_F(MaximizeModeWindowManagerTest, ExitFullScreenWithEdgeSwipeFromBottom) { | 1188 TEST_F(MaximizeModeWindowManagerTest, ExitFullScreenWithEdgeSwipeFromBottom) { |
1191 gfx::Rect rect(10, 10, 200, 50); | 1189 gfx::Rect rect(10, 10, 200, 50); |
(...skipping 12 matching lines...) Expand all Loading... |
1204 wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN); | 1202 wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN); |
1205 background_window_state->OnWMEvent(&event); | 1203 background_window_state->OnWMEvent(&event); |
1206 foreground_window_state->OnWMEvent(&event); | 1204 foreground_window_state->OnWMEvent(&event); |
1207 EXPECT_TRUE(background_window_state->IsFullscreen()); | 1205 EXPECT_TRUE(background_window_state->IsFullscreen()); |
1208 EXPECT_TRUE(foreground_window_state->IsFullscreen()); | 1206 EXPECT_TRUE(foreground_window_state->IsFullscreen()); |
1209 EXPECT_EQ(foreground_window.get(), wm::GetActiveWindow()); | 1207 EXPECT_EQ(foreground_window.get(), wm::GetActiveWindow()); |
1210 | 1208 |
1211 // Do an edge swipe bottom into screen. | 1209 // Do an edge swipe bottom into screen. |
1212 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); | 1210 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
1213 int y = Shell::GetPrimaryRootWindow()->bounds().bottom(); | 1211 int y = Shell::GetPrimaryRootWindow()->bounds().bottom(); |
1214 generator.GestureScrollSequence(gfx::Point(50, y), | 1212 generator.GestureScrollSequence(gfx::Point(50, y), gfx::Point(50, y - 100), |
1215 gfx::Point(50, y - 100), | 1213 base::TimeDelta::FromMilliseconds(20), 10); |
1216 base::TimeDelta::FromMilliseconds(20), | |
1217 10); | |
1218 | 1214 |
1219 EXPECT_FALSE(foreground_window_state->IsFullscreen()); | 1215 EXPECT_FALSE(foreground_window_state->IsFullscreen()); |
1220 EXPECT_TRUE(background_window_state->IsFullscreen()); | 1216 EXPECT_TRUE(background_window_state->IsFullscreen()); |
1221 | 1217 |
1222 DestroyMaximizeModeWindowManager(); | 1218 DestroyMaximizeModeWindowManager(); |
1223 } | 1219 } |
1224 | 1220 |
1225 // Test that an edge touch press at the top will end full screen mode. | 1221 // Test that an edge touch press at the top will end full screen mode. |
1226 TEST_F(MaximizeModeWindowManagerTest, ExitFullScreenWithEdgeTouchAtTop) { | 1222 TEST_F(MaximizeModeWindowManagerTest, ExitFullScreenWithEdgeTouchAtTop) { |
1227 gfx::Rect rect(10, 10, 200, 50); | 1223 gfx::Rect rect(10, 10, 200, 50); |
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1309 wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN); | 1305 wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN); |
1310 window_state->OnWMEvent(&event); | 1306 window_state->OnWMEvent(&event); |
1311 EXPECT_TRUE(window_state->IsFullscreen()); | 1307 EXPECT_TRUE(window_state->IsFullscreen()); |
1312 EXPECT_FALSE(window_state->in_immersive_fullscreen()); | 1308 EXPECT_FALSE(window_state->in_immersive_fullscreen()); |
1313 EXPECT_EQ(window.get(), wm::GetActiveWindow()); | 1309 EXPECT_EQ(window.get(), wm::GetActiveWindow()); |
1314 | 1310 |
1315 window_state->set_in_immersive_fullscreen(true); | 1311 window_state->set_in_immersive_fullscreen(true); |
1316 | 1312 |
1317 // Do an edge swipe top into screen. | 1313 // Do an edge swipe top into screen. |
1318 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); | 1314 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
1319 generator.GestureScrollSequence(gfx::Point(50, 0), | 1315 generator.GestureScrollSequence(gfx::Point(50, 0), gfx::Point(50, 100), |
1320 gfx::Point(50, 100), | 1316 base::TimeDelta::FromMilliseconds(20), 10); |
1321 base::TimeDelta::FromMilliseconds(20), | |
1322 10); | |
1323 | 1317 |
1324 // It should have not exited full screen or immersive mode. | 1318 // It should have not exited full screen or immersive mode. |
1325 EXPECT_TRUE(window_state->IsFullscreen()); | 1319 EXPECT_TRUE(window_state->IsFullscreen()); |
1326 EXPECT_TRUE(window_state->in_immersive_fullscreen()); | 1320 EXPECT_TRUE(window_state->in_immersive_fullscreen()); |
1327 | 1321 |
1328 DestroyMaximizeModeWindowManager(); | 1322 DestroyMaximizeModeWindowManager(); |
1329 } | 1323 } |
1330 | 1324 |
1331 // Test that an edge swipe from the bottom will not end immersive mode. | 1325 // Test that an edge swipe from the bottom will not end immersive mode. |
1332 TEST_F(MaximizeModeWindowManagerTest, | 1326 TEST_F(MaximizeModeWindowManagerTest, |
1333 NoExitImmersiveModeWithEdgeSwipeFromBottom) { | 1327 NoExitImmersiveModeWithEdgeSwipeFromBottom) { |
1334 std::unique_ptr<aura::Window> window( | 1328 std::unique_ptr<aura::Window> window( |
1335 CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, gfx::Rect(10, 10, 200, 50))); | 1329 CreateWindow(ui::wm::WINDOW_TYPE_NORMAL, gfx::Rect(10, 10, 200, 50))); |
1336 wm::WindowState* window_state = wm::GetWindowState(window.get()); | 1330 wm::WindowState* window_state = wm::GetWindowState(window.get()); |
1337 wm::ActivateWindow(window.get()); | 1331 wm::ActivateWindow(window.get()); |
1338 CreateMaximizeModeWindowManager(); | 1332 CreateMaximizeModeWindowManager(); |
1339 | 1333 |
1340 // Fullscreen the window. | 1334 // Fullscreen the window. |
1341 wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN); | 1335 wm::WMEvent event(wm::WM_EVENT_TOGGLE_FULLSCREEN); |
1342 window_state->OnWMEvent(&event); | 1336 window_state->OnWMEvent(&event); |
1343 EXPECT_TRUE(window_state->IsFullscreen()); | 1337 EXPECT_TRUE(window_state->IsFullscreen()); |
1344 EXPECT_FALSE(window_state->in_immersive_fullscreen()); | 1338 EXPECT_FALSE(window_state->in_immersive_fullscreen()); |
1345 EXPECT_EQ(window.get(), wm::GetActiveWindow()); | 1339 EXPECT_EQ(window.get(), wm::GetActiveWindow()); |
1346 window_state->set_in_immersive_fullscreen(true); | 1340 window_state->set_in_immersive_fullscreen(true); |
1347 EXPECT_TRUE(window_state->in_immersive_fullscreen()); | 1341 EXPECT_TRUE(window_state->in_immersive_fullscreen()); |
1348 | 1342 |
1349 // Do an edge swipe bottom into screen. | 1343 // Do an edge swipe bottom into screen. |
1350 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); | 1344 ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow()); |
1351 int y = Shell::GetPrimaryRootWindow()->bounds().bottom(); | 1345 int y = Shell::GetPrimaryRootWindow()->bounds().bottom(); |
1352 generator.GestureScrollSequence(gfx::Point(50, y), | 1346 generator.GestureScrollSequence(gfx::Point(50, y), gfx::Point(50, y - 100), |
1353 gfx::Point(50, y - 100), | 1347 base::TimeDelta::FromMilliseconds(20), 10); |
1354 base::TimeDelta::FromMilliseconds(20), | |
1355 10); | |
1356 | 1348 |
1357 // The window should still be full screen and immersive. | 1349 // The window should still be full screen and immersive. |
1358 EXPECT_TRUE(window_state->IsFullscreen()); | 1350 EXPECT_TRUE(window_state->IsFullscreen()); |
1359 EXPECT_TRUE(window_state->in_immersive_fullscreen()); | 1351 EXPECT_TRUE(window_state->in_immersive_fullscreen()); |
1360 | 1352 |
1361 DestroyMaximizeModeWindowManager(); | 1353 DestroyMaximizeModeWindowManager(); |
1362 } | 1354 } |
1363 | 1355 |
1364 // Tests that windows with the always-on-top property are not managed by | 1356 // Tests that windows with the always-on-top property are not managed by |
1365 // the MaximizeModeWindowManager while maximize mode is engaged (i.e., | 1357 // the MaximizeModeWindowManager while maximize mode is engaged (i.e., |
(...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1446 | 1438 |
1447 ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager(); | 1439 ash::MaximizeModeWindowManager* manager = CreateMaximizeModeWindowManager(); |
1448 EXPECT_TRUE(wm::GetWindowState(window.get())->IsDocked()); | 1440 EXPECT_TRUE(wm::GetWindowState(window.get())->IsDocked()); |
1449 EXPECT_FALSE(wm::GetWindowState(window.get())->IsMaximized()); | 1441 EXPECT_FALSE(wm::GetWindowState(window.get())->IsMaximized()); |
1450 EXPECT_EQ(0, manager->GetNumberOfManagedWindows()); | 1442 EXPECT_EQ(0, manager->GetNumberOfManagedWindows()); |
1451 } | 1443 } |
1452 | 1444 |
1453 #endif // OS_WIN | 1445 #endif // OS_WIN |
1454 | 1446 |
1455 } // namespace ash | 1447 } // namespace ash |
OLD | NEW |