Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(90)

Side by Side Diff: ash/wm/window_positioner_unittest.cc

Issue 2692663002: Gut ash::MaterialDesignController, and remove the about:flags entry. (Closed)
Patch Set: terry review Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/common/wm/window_positioner.h" 5 #include "ash/common/wm/window_positioner.h"
6 6
7 #include <string> 7 #include <string>
8 8
9 #include "ash/common/material_design/material_design_controller.h"
10 #include "ash/common/scoped_root_window_for_new_windows.h" 9 #include "ash/common/scoped_root_window_for_new_windows.h"
11 #include "ash/common/wm/window_positioner.h" 10 #include "ash/common/wm/window_positioner.h"
12 #include "ash/common/wm/window_state.h" 11 #include "ash/common/wm/window_state.h"
13 #include "ash/common/wm_shell.h" 12 #include "ash/common/wm_shell.h"
14 #include "ash/common/wm_window.h" 13 #include "ash/common/wm_window.h"
15 #include "ash/shell.h" 14 #include "ash/shell.h"
16 #include "ash/shell/toplevel_window.h" 15 #include "ash/shell/toplevel_window.h"
17 #include "ash/test/ash_md_test_base.h" 16 #include "ash/test/ash_test_base.h"
18 #include "ash/test/test_shell_delegate.h" 17 #include "ash/test/test_shell_delegate.h"
19 #include "ash/wm/window_state_aura.h" 18 #include "ash/wm/window_state_aura.h"
20 #include "base/strings/string_number_conversions.h" 19 #include "base/strings/string_number_conversions.h"
21 #include "ui/display/screen.h" 20 #include "ui/display/screen.h"
22 #include "ui/views/widget/widget.h" 21 #include "ui/views/widget/widget.h"
23 #include "ui/views/widget/widget_delegate.h" 22 #include "ui/views/widget/widget_delegate.h"
24 23
25 namespace ash { 24 namespace ash {
26 25
27 using WindowPositionerTest = test::AshMDTestBase; 26 using WindowPositionerTest = test::AshTestBase;
28 27
29 INSTANTIATE_TEST_CASE_P( 28 TEST_F(WindowPositionerTest, OpenMaximizedWindowOnSecondDisplay) {
30 /* prefix intentionally left blank due to only one parameterization */,
31 WindowPositionerTest,
32 testing::Values(MaterialDesignController::NON_MATERIAL,
33 MaterialDesignController::MATERIAL_NORMAL,
34 MaterialDesignController::MATERIAL_EXPERIMENTAL));
35
36 TEST_P(WindowPositionerTest, OpenMaximizedWindowOnSecondDisplay) {
37 const int height_offset = GetMdMaximizedWindowHeightOffset();
38 // Tests that for a screen that is narrower than kForceMaximizeWidthLimit 29 // Tests that for a screen that is narrower than kForceMaximizeWidthLimit
39 // a new window gets maximized. 30 // a new window gets maximized.
40 UpdateDisplay("400x400,500x500"); 31 UpdateDisplay("400x400,500x500");
41 ScopedRootWindowForNewWindows root_for_new_windows( 32 ScopedRootWindowForNewWindows root_for_new_windows(
42 WmShell::Get()->GetAllRootWindows()[1]); 33 WmShell::Get()->GetAllRootWindows()[1]);
43 shell::ToplevelWindow::CreateParams params; 34 shell::ToplevelWindow::CreateParams params;
44 params.can_resize = true; 35 params.can_resize = true;
45 params.can_maximize = true; 36 params.can_maximize = true;
46 views::Widget* widget = shell::ToplevelWindow::CreateToplevelWindow(params); 37 views::Widget* widget = shell::ToplevelWindow::CreateToplevelWindow(params);
47 EXPECT_EQ(gfx::Rect(400, 0, 500, 453 + height_offset).ToString(), 38 EXPECT_EQ(gfx::Rect(400, 0, 500, 452).ToString(),
48 widget->GetWindowBoundsInScreen().ToString()); 39 widget->GetWindowBoundsInScreen().ToString());
49 } 40 }
50 41
51 TEST_P(WindowPositionerTest, OpenDefaultWindowOnSecondDisplay) { 42 TEST_F(WindowPositionerTest, OpenDefaultWindowOnSecondDisplay) {
52 UpdateDisplay("400x400,1400x900"); 43 UpdateDisplay("400x400,1400x900");
53 WmWindow* second_root_window = WmShell::Get()->GetAllRootWindows()[1]; 44 WmWindow* second_root_window = WmShell::Get()->GetAllRootWindows()[1];
54 ScopedRootWindowForNewWindows root_for_new_windows(second_root_window); 45 ScopedRootWindowForNewWindows root_for_new_windows(second_root_window);
55 shell::ToplevelWindow::CreateParams params; 46 shell::ToplevelWindow::CreateParams params;
56 params.can_resize = true; 47 params.can_resize = true;
57 params.can_maximize = true; 48 params.can_maximize = true;
58 views::Widget* widget = shell::ToplevelWindow::CreateToplevelWindow(params); 49 views::Widget* widget = shell::ToplevelWindow::CreateToplevelWindow(params);
59 gfx::Rect bounds = widget->GetWindowBoundsInScreen(); 50 gfx::Rect bounds = widget->GetWindowBoundsInScreen();
60 51
61 // The window should be in the 2nd display with the default size. 52 // The window should be in the 2nd display with the default size.
62 EXPECT_EQ("300x300", bounds.size().ToString()); 53 EXPECT_EQ("300x300", bounds.size().ToString());
63 EXPECT_TRUE( 54 EXPECT_TRUE(
64 second_root_window->GetDisplayNearestWindow().bounds().Contains(bounds)); 55 second_root_window->GetDisplayNearestWindow().bounds().Contains(bounds));
65 } 56 }
66 57
67 // Tests that second window inherits first window's maximized state as well as 58 // Tests that second window inherits first window's maximized state as well as
68 // its restore bounds. 59 // its restore bounds.
69 TEST_P(WindowPositionerTest, SecondMaximizedWindowHasProperRestoreSize) { 60 TEST_F(WindowPositionerTest, SecondMaximizedWindowHasProperRestoreSize) {
70 const int height_offset = GetMdMaximizedWindowHeightOffset();
71 UpdateDisplay("1400x900"); 61 UpdateDisplay("1400x900");
72 shell::ToplevelWindow::CreateParams params; 62 shell::ToplevelWindow::CreateParams params;
73 params.can_resize = true; 63 params.can_resize = true;
74 params.can_maximize = true; 64 params.can_maximize = true;
75 views::Widget* widget1 = shell::ToplevelWindow::CreateToplevelWindow(params); 65 views::Widget* widget1 = shell::ToplevelWindow::CreateToplevelWindow(params);
76 gfx::Rect bounds = widget1->GetWindowBoundsInScreen(); 66 gfx::Rect bounds = widget1->GetWindowBoundsInScreen();
77 67
78 // The window should have default size. 68 // The window should have default size.
79 EXPECT_FALSE(widget1->IsMaximized()); 69 EXPECT_FALSE(widget1->IsMaximized());
80 EXPECT_EQ("300x300", bounds.size().ToString()); 70 EXPECT_EQ("300x300", bounds.size().ToString());
81 widget1->Maximize(); 71 widget1->Maximize();
82 72
83 // The window should be maximized. 73 // The window should be maximized.
84 bounds = widget1->GetWindowBoundsInScreen(); 74 bounds = widget1->GetWindowBoundsInScreen();
85 EXPECT_TRUE(widget1->IsMaximized()); 75 EXPECT_TRUE(widget1->IsMaximized());
86 EXPECT_EQ(gfx::Rect(0, 0, 1400, 853 + height_offset).ToString(), 76 EXPECT_EQ(gfx::Rect(0, 0, 1400, 852).ToString(), bounds.ToString());
87 bounds.ToString());
88 77
89 // Create another window 78 // Create another window
90 views::Widget* widget2 = shell::ToplevelWindow::CreateToplevelWindow(params); 79 views::Widget* widget2 = shell::ToplevelWindow::CreateToplevelWindow(params);
91 80
92 // The second window should be maximized. 81 // The second window should be maximized.
93 bounds = widget2->GetWindowBoundsInScreen(); 82 bounds = widget2->GetWindowBoundsInScreen();
94 EXPECT_TRUE(widget2->IsMaximized()); 83 EXPECT_TRUE(widget2->IsMaximized());
95 EXPECT_EQ(gfx::Rect(0, 0, 1400, 853 + height_offset).ToString(), 84 EXPECT_EQ(gfx::Rect(0, 0, 1400, 852).ToString(), bounds.ToString());
96 bounds.ToString());
97 85
98 widget2->Restore(); 86 widget2->Restore();
99 // Second window's restored size should be set to default size. 87 // Second window's restored size should be set to default size.
100 bounds = widget2->GetWindowBoundsInScreen(); 88 bounds = widget2->GetWindowBoundsInScreen();
101 EXPECT_EQ("300x300", bounds.size().ToString()); 89 EXPECT_EQ("300x300", bounds.size().ToString());
102 } 90 }
103 91
104 namespace { 92 namespace {
105 93
106 // A WidgetDelegate that returns the out of display saved bounds. 94 // A WidgetDelegate that returns the out of display saved bounds.
(...skipping 15 matching lines...) Expand all
122 } 110 }
123 111
124 private: 112 private:
125 views::Widget* widget_; 113 views::Widget* widget_;
126 114
127 DISALLOW_COPY_AND_ASSIGN(OutOfDisplayDelegate); 115 DISALLOW_COPY_AND_ASSIGN(OutOfDisplayDelegate);
128 }; 116 };
129 117
130 } // namespace 118 } // namespace
131 119
132 TEST_P(WindowPositionerTest, EnsureMinimumVisibility) { 120 TEST_F(WindowPositionerTest, EnsureMinimumVisibility) {
133 UpdateDisplay("400x400"); 121 UpdateDisplay("400x400");
134 views::Widget* widget = new views::Widget(); 122 views::Widget* widget = new views::Widget();
135 views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW); 123 views::Widget::InitParams params(views::Widget::InitParams::TYPE_WINDOW);
136 params.delegate = new OutOfDisplayDelegate(widget); 124 params.delegate = new OutOfDisplayDelegate(widget);
137 params.context = Shell::GetPrimaryRootWindow(); 125 params.context = Shell::GetPrimaryRootWindow();
138 widget->Init(params); 126 widget->Init(params);
139 widget->SetBounds(gfx::Rect(450, 10, 100, 100)); 127 widget->SetBounds(gfx::Rect(450, 10, 100, 100));
140 wm::GetWindowState(widget->GetNativeView())->set_minimum_visibility(true); 128 wm::GetWindowState(widget->GetNativeView())->set_minimum_visibility(true);
141 widget->Show(); 129 widget->Show();
142 // Make sure the bounds is adjusted to be inside the work area. 130 // Make sure the bounds is adjusted to be inside the work area.
143 EXPECT_EQ("375,10 100x100", widget->GetWindowBoundsInScreen().ToString()); 131 EXPECT_EQ("375,10 100x100", widget->GetWindowBoundsInScreen().ToString());
144 widget->CloseNow(); 132 widget->CloseNow();
145 } 133 }
146 134
147 // In general case on first run the browser window will be maximized only for 135 // In general case on first run the browser window will be maximized only for
148 // low resolution screens (width < 1366). In case of big screens the browser is 136 // low resolution screens (width < 1366). In case of big screens the browser is
149 // opened being not maximized. To enforce maximization for all screen 137 // opened being not maximized. To enforce maximization for all screen
150 // resolutions, one can set "ForceMaximizeBrowserWindowOnFirstRun" 138 // resolutions, one can set "ForceMaximizeBrowserWindowOnFirstRun"
151 // policy. In the following tests we check if the window will be opened in 139 // policy. In the following tests we check if the window will be opened in
152 // maximized mode for low and high resolution when this policy is set. 140 // maximized mode for low and high resolution when this policy is set.
153 TEST_P(WindowPositionerTest, FirstRunMaximizeWindowHighResloution) { 141 TEST_F(WindowPositionerTest, FirstRunMaximizeWindowHighResloution) {
154 const int width = ash::WindowPositioner::GetForceMaximizedWidthLimit() + 100; 142 const int width = ash::WindowPositioner::GetForceMaximizedWidthLimit() + 100;
155 // Set resolution to 1466x300. 143 // Set resolution to 1466x300.
156 const std::string resolution = base::IntToString(width) + "x300"; 144 const std::string resolution = base::IntToString(width) + "x300";
157 UpdateDisplay(resolution); 145 UpdateDisplay(resolution);
158 gfx::Rect bounds_in_out(0, 0, 320, 240); // Random bounds. 146 gfx::Rect bounds_in_out(0, 0, 320, 240); // Random bounds.
159 ui::WindowShowState show_state_out = ui::SHOW_STATE_DEFAULT; 147 ui::WindowShowState show_state_out = ui::SHOW_STATE_DEFAULT;
160 148
161 test::TestShellDelegate* const delegate = 149 test::TestShellDelegate* const delegate =
162 static_cast<test::TestShellDelegate*>(WmShell::Get()->delegate()); 150 static_cast<test::TestShellDelegate*>(WmShell::Get()->delegate());
163 delegate->SetForceMaximizeOnFirstRun(true); 151 delegate->SetForceMaximizeOnFirstRun(true);
164 152
165 WindowPositioner::GetBoundsAndShowStateForNewWindow( 153 WindowPositioner::GetBoundsAndShowStateForNewWindow(
166 nullptr, false, ui::SHOW_STATE_DEFAULT, &bounds_in_out, &show_state_out); 154 nullptr, false, ui::SHOW_STATE_DEFAULT, &bounds_in_out, &show_state_out);
167 155
168 EXPECT_EQ(show_state_out, ui::SHOW_STATE_MAXIMIZED); 156 EXPECT_EQ(show_state_out, ui::SHOW_STATE_MAXIMIZED);
169 } 157 }
170 158
171 // For detail see description of FirstRunMaximizeWindowHighResloution. 159 // For detail see description of FirstRunMaximizeWindowHighResloution.
172 TEST_P(WindowPositionerTest, FirstRunMaximizeWindowLowResolution) { 160 TEST_F(WindowPositionerTest, FirstRunMaximizeWindowLowResolution) {
173 const int width = ash::WindowPositioner::GetForceMaximizedWidthLimit() - 100; 161 const int width = ash::WindowPositioner::GetForceMaximizedWidthLimit() - 100;
174 // Set resolution to 1266x300. 162 // Set resolution to 1266x300.
175 const std::string resolution = base::IntToString(width) + "x300"; 163 const std::string resolution = base::IntToString(width) + "x300";
176 UpdateDisplay(resolution); 164 UpdateDisplay(resolution);
177 gfx::Rect bounds_in_out(0, 0, 320, 240); // Random bounds. 165 gfx::Rect bounds_in_out(0, 0, 320, 240); // Random bounds.
178 ui::WindowShowState show_state_out = ui::SHOW_STATE_DEFAULT; 166 ui::WindowShowState show_state_out = ui::SHOW_STATE_DEFAULT;
179 167
180 test::TestShellDelegate* const delegate = 168 test::TestShellDelegate* const delegate =
181 static_cast<test::TestShellDelegate*>(WmShell::Get()->delegate()); 169 static_cast<test::TestShellDelegate*>(WmShell::Get()->delegate());
182 delegate->SetForceMaximizeOnFirstRun(true); 170 delegate->SetForceMaximizeOnFirstRun(true);
183 171
184 WindowPositioner::GetBoundsAndShowStateForNewWindow( 172 WindowPositioner::GetBoundsAndShowStateForNewWindow(
185 nullptr, false, ui::SHOW_STATE_DEFAULT, &bounds_in_out, &show_state_out); 173 nullptr, false, ui::SHOW_STATE_DEFAULT, &bounds_in_out, &show_state_out);
186 174
187 EXPECT_EQ(show_state_out, ui::SHOW_STATE_MAXIMIZED); 175 EXPECT_EQ(show_state_out, ui::SHOW_STATE_MAXIMIZED);
188 } 176 }
189 177
190 TEST_P(WindowPositionerTest, IgnoreFullscreenInAutoRearrange) { 178 TEST_F(WindowPositionerTest, IgnoreFullscreenInAutoRearrange) {
191 // Set bigger than 1366 so that the new window is opened in normal state. 179 // Set bigger than 1366 so that the new window is opened in normal state.
192 UpdateDisplay("1400x800"); 180 UpdateDisplay("1400x800");
193 181
194 // 1st window mimics fullscreen browser window behavior. 182 // 1st window mimics fullscreen browser window behavior.
195 shell::ToplevelWindow::CreateParams params; 183 shell::ToplevelWindow::CreateParams params;
196 params.can_resize = true; 184 params.can_resize = true;
197 params.can_maximize = true; 185 params.can_maximize = true;
198 views::Widget* widget1 = shell::ToplevelWindow::CreateToplevelWindow(params); 186 views::Widget* widget1 = shell::ToplevelWindow::CreateToplevelWindow(params);
199 wm::WindowState* managed_state = 187 wm::WindowState* managed_state =
200 wm::GetWindowState(widget1->GetNativeWindow()); 188 wm::GetWindowState(widget1->GetNativeWindow());
(...skipping 13 matching lines...) Expand all
214 widget1->SetFullscreen(false); 202 widget1->SetFullscreen(false);
215 ASSERT_EQ("300x300", widget1->GetWindowBoundsInScreen().size().ToString()); 203 ASSERT_EQ("300x300", widget1->GetWindowBoundsInScreen().size().ToString());
216 204
217 // Closing 2nd widget triggers the rearrange logic but the 1st 205 // Closing 2nd widget triggers the rearrange logic but the 1st
218 // widget should stay in the current size. 206 // widget should stay in the current size.
219 widget2->CloseNow(); 207 widget2->CloseNow();
220 ASSERT_EQ("300x300", widget1->GetWindowBoundsInScreen().size().ToString()); 208 ASSERT_EQ("300x300", widget1->GetWindowBoundsInScreen().size().ToString());
221 } 209 }
222 210
223 } // namespace ash 211 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698