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/common/wm/window_state.h" | 5 #include "ash/common/wm/window_state.h" |
6 | 6 |
7 #include <utility> | 7 #include <utility> |
8 | 8 |
| 9 #include "ash/common/material_design/material_design_controller.h" |
9 #include "ash/common/wm/window_state.h" | 10 #include "ash/common/wm/window_state.h" |
10 #include "ash/common/wm/wm_event.h" | 11 #include "ash/common/wm/wm_event.h" |
11 #include "ash/screen_util.h" | 12 #include "ash/screen_util.h" |
12 #include "ash/test/ash_test_base.h" | 13 #include "ash/test/ash_md_test_base.h" |
13 #include "ash/wm/window_state_aura.h" | 14 #include "ash/wm/window_state_aura.h" |
14 #include "ui/aura/client/aura_constants.h" | 15 #include "ui/aura/client/aura_constants.h" |
15 #include "ui/aura/test/test_window_delegate.h" | 16 #include "ui/aura/test/test_window_delegate.h" |
16 #include "ui/aura/window.h" | 17 #include "ui/aura/window.h" |
17 #include "ui/display/screen.h" | 18 #include "ui/display/screen.h" |
18 | 19 |
19 namespace ash { | 20 namespace ash { |
20 namespace wm { | 21 namespace wm { |
21 namespace { | 22 namespace { |
22 | 23 |
(...skipping 19 matching lines...) Expand all Loading... |
42 void DetachState(WindowState* window_state) override {} | 43 void DetachState(WindowState* window_state) override {} |
43 | 44 |
44 private: | 45 private: |
45 WindowStateType state_type_; | 46 WindowStateType state_type_; |
46 | 47 |
47 DISALLOW_COPY_AND_ASSIGN(AlwaysMaximizeTestState); | 48 DISALLOW_COPY_AND_ASSIGN(AlwaysMaximizeTestState); |
48 }; | 49 }; |
49 | 50 |
50 } // namespace | 51 } // namespace |
51 | 52 |
52 typedef test::AshTestBase WindowStateTest; | 53 using WindowStateTest = test::AshMDTestBase; |
| 54 |
| 55 INSTANTIATE_TEST_CASE_P( |
| 56 /* prefix intentionally left blank due to only one parameterization */, |
| 57 WindowStateTest, |
| 58 testing::Values(MaterialDesignController::NON_MATERIAL, |
| 59 MaterialDesignController::MATERIAL_NORMAL, |
| 60 MaterialDesignController::MATERIAL_EXPERIMENTAL)); |
53 | 61 |
54 // Test that a window gets properly snapped to the display's edges in a | 62 // Test that a window gets properly snapped to the display's edges in a |
55 // multi monitor environment. | 63 // multi monitor environment. |
56 TEST_F(WindowStateTest, SnapWindowBasic) { | 64 TEST_P(WindowStateTest, SnapWindowBasic) { |
57 if (!SupportsMultipleDisplays()) | 65 if (!SupportsMultipleDisplays()) |
58 return; | 66 return; |
59 | 67 |
60 UpdateDisplay("0+0-500x400, 0+500-600x400"); | 68 UpdateDisplay("0+0-500x400, 0+500-600x400"); |
61 const gfx::Rect kPrimaryDisplayWorkAreaBounds = | 69 const gfx::Rect kPrimaryDisplayWorkAreaBounds = |
62 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | 70 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); |
63 const gfx::Rect kSecondaryDisplayWorkAreaBounds = | 71 const gfx::Rect kSecondaryDisplayWorkAreaBounds = |
64 ScreenUtil::GetSecondaryDisplay().work_area(); | 72 ScreenUtil::GetSecondaryDisplay().work_area(); |
65 | 73 |
66 std::unique_ptr<aura::Window> window( | 74 std::unique_ptr<aura::Window> window( |
(...skipping 26 matching lines...) Expand all Loading... |
93 kSecondaryDisplayWorkAreaBounds.height()); | 101 kSecondaryDisplayWorkAreaBounds.height()); |
94 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 102 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
95 | 103 |
96 window_state->OnWMEvent(&snap_left); | 104 window_state->OnWMEvent(&snap_left); |
97 expected.set_x(kSecondaryDisplayWorkAreaBounds.x()); | 105 expected.set_x(kSecondaryDisplayWorkAreaBounds.x()); |
98 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 106 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
99 } | 107 } |
100 | 108 |
101 // Test how the minimum and maximum size specified by the aura::WindowDelegate | 109 // Test how the minimum and maximum size specified by the aura::WindowDelegate |
102 // affect snapping. | 110 // affect snapping. |
103 TEST_F(WindowStateTest, SnapWindowMinimumSize) { | 111 TEST_P(WindowStateTest, SnapWindowMinimumSize) { |
104 if (!SupportsHostWindowResize()) | 112 if (!SupportsHostWindowResize()) |
105 return; | 113 return; |
106 | 114 |
107 UpdateDisplay("0+0-600x900"); | 115 UpdateDisplay("0+0-600x900"); |
108 const gfx::Rect kWorkAreaBounds = | 116 const gfx::Rect kWorkAreaBounds = |
109 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | 117 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); |
110 | 118 |
111 aura::test::TestWindowDelegate delegate; | 119 aura::test::TestWindowDelegate delegate; |
112 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate( | 120 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate( |
113 &delegate, -1, gfx::Rect(0, 100, kWorkAreaBounds.width() - 1, 100))); | 121 &delegate, -1, gfx::Rect(0, 100, kWorkAreaBounds.width() - 1, 100))); |
(...skipping 15 matching lines...) Expand all Loading... |
129 delegate.set_maximum_size(gfx::Size(kWorkAreaBounds.width() - 1, 0)); | 137 delegate.set_maximum_size(gfx::Size(kWorkAreaBounds.width() - 1, 0)); |
130 EXPECT_FALSE(window_state->CanSnap()); | 138 EXPECT_FALSE(window_state->CanSnap()); |
131 delegate.set_maximum_size(gfx::Size(0, kWorkAreaBounds.height() - 1)); | 139 delegate.set_maximum_size(gfx::Size(0, kWorkAreaBounds.height() - 1)); |
132 EXPECT_FALSE(window_state->CanSnap()); | 140 EXPECT_FALSE(window_state->CanSnap()); |
133 delegate.set_maximum_size(gfx::Size()); | 141 delegate.set_maximum_size(gfx::Size()); |
134 window->SetProperty(aura::client::kCanMaximizeKey, false); | 142 window->SetProperty(aura::client::kCanMaximizeKey, false); |
135 EXPECT_FALSE(window_state->CanSnap()); | 143 EXPECT_FALSE(window_state->CanSnap()); |
136 } | 144 } |
137 | 145 |
138 // Test that the minimum size specified by aura::WindowDelegate gets respected. | 146 // Test that the minimum size specified by aura::WindowDelegate gets respected. |
139 TEST_F(WindowStateTest, TestRespectMinimumSize) { | 147 TEST_P(WindowStateTest, TestRespectMinimumSize) { |
140 if (!SupportsHostWindowResize()) | 148 if (!SupportsHostWindowResize()) |
141 return; | 149 return; |
142 | 150 |
143 UpdateDisplay("0+0-1024x768"); | 151 UpdateDisplay("0+0-1024x768"); |
144 | 152 |
145 aura::test::TestWindowDelegate delegate; | 153 aura::test::TestWindowDelegate delegate; |
146 const gfx::Size minimum_size(gfx::Size(500, 300)); | 154 const gfx::Size minimum_size(gfx::Size(500, 300)); |
147 delegate.set_minimum_size(minimum_size); | 155 delegate.set_minimum_size(minimum_size); |
148 | 156 |
149 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate( | 157 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithDelegate( |
150 &delegate, -1, gfx::Rect(0, 100, 100, 100))); | 158 &delegate, -1, gfx::Rect(0, 100, 100, 100))); |
151 | 159 |
152 // Check that the window has the correct minimum size. | 160 // Check that the window has the correct minimum size. |
153 EXPECT_EQ(minimum_size.ToString(), window->bounds().size().ToString()); | 161 EXPECT_EQ(minimum_size.ToString(), window->bounds().size().ToString()); |
154 | 162 |
155 // Set the size to something bigger - that should work. | 163 // Set the size to something bigger - that should work. |
156 gfx::Rect bigger_bounds(700, 500, 700, 500); | 164 gfx::Rect bigger_bounds(700, 500, 700, 500); |
157 window->SetBounds(bigger_bounds); | 165 window->SetBounds(bigger_bounds); |
158 EXPECT_EQ(bigger_bounds.ToString(), window->bounds().ToString()); | 166 EXPECT_EQ(bigger_bounds.ToString(), window->bounds().ToString()); |
159 | 167 |
160 // Set the size to something smaller - that should only resize to the smallest | 168 // Set the size to something smaller - that should only resize to the smallest |
161 // possible size. | 169 // possible size. |
162 gfx::Rect smaller_bounds(700, 500, 100, 100); | 170 gfx::Rect smaller_bounds(700, 500, 100, 100); |
163 window->SetBounds(smaller_bounds); | 171 window->SetBounds(smaller_bounds); |
164 EXPECT_EQ(minimum_size.ToString(), window->bounds().size().ToString()); | 172 EXPECT_EQ(minimum_size.ToString(), window->bounds().size().ToString()); |
165 } | 173 } |
166 | 174 |
167 // Test that the minimum window size specified by aura::WindowDelegate does not | 175 // Test that the minimum window size specified by aura::WindowDelegate does not |
168 // exceed the screen size. | 176 // exceed the screen size. |
169 TEST_F(WindowStateTest, TestIgnoreTooBigMinimumSize) { | 177 TEST_P(WindowStateTest, TestIgnoreTooBigMinimumSize) { |
170 if (!SupportsHostWindowResize()) | 178 if (!SupportsHostWindowResize()) |
171 return; | 179 return; |
172 | 180 |
173 UpdateDisplay("0+0-1024x768"); | 181 UpdateDisplay("0+0-1024x768"); |
174 const gfx::Size work_area_size = | 182 const gfx::Size work_area_size = |
175 display::Screen::GetScreen()->GetPrimaryDisplay().work_area().size(); | 183 display::Screen::GetScreen()->GetPrimaryDisplay().work_area().size(); |
176 const gfx::Size illegal_size(1280, 960); | 184 const gfx::Size illegal_size(1280, 960); |
177 const gfx::Rect illegal_bounds(gfx::Point(0, 0), illegal_size); | 185 const gfx::Rect illegal_bounds(gfx::Point(0, 0), illegal_size); |
178 | 186 |
179 aura::test::TestWindowDelegate delegate; | 187 aura::test::TestWindowDelegate delegate; |
(...skipping 10 matching lines...) Expand all Loading... |
190 window->SetBounds(illegal_bounds); | 198 window->SetBounds(illegal_bounds); |
191 EXPECT_EQ(work_area_size.ToString(), window->bounds().size().ToString()); | 199 EXPECT_EQ(work_area_size.ToString(), window->bounds().size().ToString()); |
192 | 200 |
193 // Maximizing the window should not allow it to go bigger than that either. | 201 // Maximizing the window should not allow it to go bigger than that either. |
194 WindowState* window_state = GetWindowState(window.get()); | 202 WindowState* window_state = GetWindowState(window.get()); |
195 window_state->Maximize(); | 203 window_state->Maximize(); |
196 EXPECT_EQ(work_area_size.ToString(), window->bounds().size().ToString()); | 204 EXPECT_EQ(work_area_size.ToString(), window->bounds().size().ToString()); |
197 } | 205 } |
198 | 206 |
199 // Test that setting the bounds of a snapped window keeps its snapped. | 207 // Test that setting the bounds of a snapped window keeps its snapped. |
200 TEST_F(WindowStateTest, SnapWindowSetBounds) { | 208 TEST_P(WindowStateTest, SnapWindowSetBounds) { |
201 if (!SupportsHostWindowResize()) | 209 if (!SupportsHostWindowResize()) |
202 return; | 210 return; |
203 | 211 |
204 UpdateDisplay("0+0-900x600"); | 212 UpdateDisplay("0+0-900x600"); |
205 const gfx::Rect kWorkAreaBounds = | 213 const gfx::Rect kWorkAreaBounds = |
206 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | 214 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); |
207 | 215 |
208 std::unique_ptr<aura::Window> window( | 216 std::unique_ptr<aura::Window> window( |
209 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); | 217 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); |
210 WindowState* window_state = GetWindowState(window.get()); | 218 WindowState* window_state = GetWindowState(window.get()); |
211 const WMEvent snap_left(WM_EVENT_SNAP_LEFT); | 219 const WMEvent snap_left(WM_EVENT_SNAP_LEFT); |
212 window_state->OnWMEvent(&snap_left); | 220 window_state->OnWMEvent(&snap_left); |
213 EXPECT_EQ(WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); | 221 EXPECT_EQ(WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); |
214 gfx::Rect expected = gfx::Rect(kWorkAreaBounds.x(), | 222 gfx::Rect expected = gfx::Rect(kWorkAreaBounds.x(), |
215 kWorkAreaBounds.y(), | 223 kWorkAreaBounds.y(), |
216 kWorkAreaBounds.width() / 2, | 224 kWorkAreaBounds.width() / 2, |
217 kWorkAreaBounds.height()); | 225 kWorkAreaBounds.height()); |
218 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 226 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
219 | 227 |
220 // Snapped windows can have any width. | 228 // Snapped windows can have any width. |
221 expected.set_width(500); | 229 expected.set_width(500); |
222 window->SetBounds(gfx::Rect(10, 10, 500, 300)); | 230 window->SetBounds(gfx::Rect(10, 10, 500, 300)); |
223 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); | 231 EXPECT_EQ(expected.ToString(), window->GetBoundsInScreen().ToString()); |
224 EXPECT_EQ(WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); | 232 EXPECT_EQ(WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); |
225 } | 233 } |
226 | 234 |
227 // Test that snapping left/right preserves the restore bounds. | 235 // Test that snapping left/right preserves the restore bounds. |
228 TEST_F(WindowStateTest, RestoreBounds) { | 236 TEST_P(WindowStateTest, RestoreBounds) { |
229 std::unique_ptr<aura::Window> window( | 237 std::unique_ptr<aura::Window> window( |
230 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); | 238 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); |
231 WindowState* window_state = GetWindowState(window.get()); | 239 WindowState* window_state = GetWindowState(window.get()); |
232 | 240 |
233 EXPECT_TRUE(window_state->IsNormalStateType()); | 241 EXPECT_TRUE(window_state->IsNormalStateType()); |
234 | 242 |
235 // 1) Start with restored window with restore bounds set. | 243 // 1) Start with restored window with restore bounds set. |
236 gfx::Rect restore_bounds = window->GetBoundsInScreen(); | 244 gfx::Rect restore_bounds = window->GetBoundsInScreen(); |
237 restore_bounds.set_width(restore_bounds.width() + 1); | 245 restore_bounds.set_width(restore_bounds.width() + 1); |
238 window_state->SetRestoreBoundsInScreen(restore_bounds); | 246 window_state->SetRestoreBoundsInScreen(restore_bounds); |
(...skipping 20 matching lines...) Expand all Loading... |
259 window->GetBoundsInScreen().ToString()); | 267 window->GetBoundsInScreen().ToString()); |
260 EXPECT_EQ(restore_bounds.ToString(), | 268 EXPECT_EQ(restore_bounds.ToString(), |
261 window_state->GetRestoreBoundsInScreen().ToString()); | 269 window_state->GetRestoreBoundsInScreen().ToString()); |
262 | 270 |
263 window_state->Restore(); | 271 window_state->Restore(); |
264 EXPECT_EQ(restore_bounds.ToString(), window->GetBoundsInScreen().ToString()); | 272 EXPECT_EQ(restore_bounds.ToString(), window->GetBoundsInScreen().ToString()); |
265 } | 273 } |
266 | 274 |
267 // Test that maximizing an auto managed window, then snapping it puts the window | 275 // Test that maximizing an auto managed window, then snapping it puts the window |
268 // at the snapped bounds and not at the auto-managed (centered) bounds. | 276 // at the snapped bounds and not at the auto-managed (centered) bounds. |
269 TEST_F(WindowStateTest, AutoManaged) { | 277 TEST_P(WindowStateTest, AutoManaged) { |
270 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 278 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
271 WindowState* window_state = GetWindowState(window.get()); | 279 WindowState* window_state = GetWindowState(window.get()); |
272 window_state->set_window_position_managed(true); | 280 window_state->set_window_position_managed(true); |
273 window->Hide(); | 281 window->Hide(); |
274 window->SetBounds(gfx::Rect(100, 100, 100, 100)); | 282 window->SetBounds(gfx::Rect(100, 100, 100, 100)); |
275 window->Show(); | 283 window->Show(); |
276 | 284 |
277 window_state->Maximize(); | 285 window_state->Maximize(); |
278 const WMEvent snap_right(WM_EVENT_SNAP_RIGHT); | 286 const WMEvent snap_right(WM_EVENT_SNAP_RIGHT); |
279 window_state->OnWMEvent(&snap_right); | 287 window_state->OnWMEvent(&snap_right); |
280 | 288 |
281 const gfx::Rect kWorkAreaBounds = | 289 const gfx::Rect kWorkAreaBounds = |
282 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | 290 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); |
283 gfx::Rect expected_snapped_bounds( | 291 gfx::Rect expected_snapped_bounds( |
284 kWorkAreaBounds.x() + kWorkAreaBounds.width() / 2, | 292 kWorkAreaBounds.x() + kWorkAreaBounds.width() / 2, |
285 kWorkAreaBounds.y(), | 293 kWorkAreaBounds.y(), |
286 kWorkAreaBounds.width() / 2, | 294 kWorkAreaBounds.width() / 2, |
287 kWorkAreaBounds.height()); | 295 kWorkAreaBounds.height()); |
288 EXPECT_EQ(expected_snapped_bounds.ToString(), | 296 EXPECT_EQ(expected_snapped_bounds.ToString(), |
289 window->GetBoundsInScreen().ToString()); | 297 window->GetBoundsInScreen().ToString()); |
290 | 298 |
291 // The window should still be auto managed despite being right maximized. | 299 // The window should still be auto managed despite being right maximized. |
292 EXPECT_TRUE(window_state->window_position_managed()); | 300 EXPECT_TRUE(window_state->window_position_managed()); |
293 } | 301 } |
294 | 302 |
295 // Test that the replacement of a State object works as expected. | 303 // Test that the replacement of a State object works as expected. |
296 TEST_F(WindowStateTest, SimpleStateSwap) { | 304 TEST_P(WindowStateTest, SimpleStateSwap) { |
297 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 305 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
298 WindowState* window_state = GetWindowState(window.get()); | 306 WindowState* window_state = GetWindowState(window.get()); |
299 EXPECT_FALSE(window_state->IsMaximized()); | 307 EXPECT_FALSE(window_state->IsMaximized()); |
300 window_state->SetStateObject(std::unique_ptr<WindowState::State>( | 308 window_state->SetStateObject(std::unique_ptr<WindowState::State>( |
301 new AlwaysMaximizeTestState(window_state->GetStateType()))); | 309 new AlwaysMaximizeTestState(window_state->GetStateType()))); |
302 EXPECT_TRUE(window_state->IsMaximized()); | 310 EXPECT_TRUE(window_state->IsMaximized()); |
303 } | 311 } |
304 | 312 |
305 // Test that the replacement of a state object, following a restore with the | 313 // Test that the replacement of a state object, following a restore with the |
306 // original one restores the window to its original state. | 314 // original one restores the window to its original state. |
307 TEST_F(WindowStateTest, StateSwapRestore) { | 315 TEST_P(WindowStateTest, StateSwapRestore) { |
308 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 316 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
309 WindowState* window_state = GetWindowState(window.get()); | 317 WindowState* window_state = GetWindowState(window.get()); |
310 EXPECT_FALSE(window_state->IsMaximized()); | 318 EXPECT_FALSE(window_state->IsMaximized()); |
311 std::unique_ptr<WindowState::State> old( | 319 std::unique_ptr<WindowState::State> old( |
312 window_state->SetStateObject(std::unique_ptr<WindowState::State>( | 320 window_state->SetStateObject(std::unique_ptr<WindowState::State>( |
313 new AlwaysMaximizeTestState(window_state->GetStateType())))); | 321 new AlwaysMaximizeTestState(window_state->GetStateType())))); |
314 EXPECT_TRUE(window_state->IsMaximized()); | 322 EXPECT_TRUE(window_state->IsMaximized()); |
315 window_state->SetStateObject(std::move(old)); | 323 window_state->SetStateObject(std::move(old)); |
316 EXPECT_FALSE(window_state->IsMaximized()); | 324 EXPECT_FALSE(window_state->IsMaximized()); |
317 } | 325 } |
318 | 326 |
319 // Tests that a window that had same bounds as the work area shrinks after the | 327 // Tests that a window that had same bounds as the work area shrinks after the |
320 // window is maximized and then restored. | 328 // window is maximized and then restored. |
321 TEST_F(WindowStateTest, RestoredWindowBoundsShrink) { | 329 TEST_P(WindowStateTest, RestoredWindowBoundsShrink) { |
| 330 if (!SupportsHostWindowResize()) |
| 331 return; |
| 332 |
| 333 UpdateDisplay("0+0-600x900"); |
322 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); | 334 std::unique_ptr<aura::Window> window(CreateTestWindowInShellWithId(0)); |
323 WindowState* window_state = GetWindowState(window.get()); | 335 WindowState* window_state = GetWindowState(window.get()); |
324 EXPECT_FALSE(window_state->IsMaximized()); | 336 EXPECT_FALSE(window_state->IsMaximized()); |
325 gfx::Rect work_area = | 337 gfx::Rect work_area = |
326 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); | 338 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); |
327 | 339 |
328 window->SetBounds(work_area); | 340 window->SetBounds(work_area); |
329 window_state->Maximize(); | 341 window_state->Maximize(); |
330 EXPECT_TRUE(window_state->IsMaximized()); | 342 EXPECT_TRUE(window_state->IsMaximized()); |
331 EXPECT_EQ(work_area.ToString(), window->bounds().ToString()); | 343 EXPECT_EQ(work_area.ToString(), window->bounds().ToString()); |
332 | 344 |
333 window_state->Restore(); | 345 window_state->Restore(); |
334 EXPECT_FALSE(window_state->IsMaximized()); | 346 EXPECT_FALSE(window_state->IsMaximized()); |
335 EXPECT_NE(work_area.ToString(), window->bounds().ToString()); | 347 EXPECT_NE(work_area.ToString(), window->bounds().ToString()); |
336 EXPECT_TRUE(work_area.Contains(window->bounds())); | 348 EXPECT_TRUE(work_area.Contains(window->bounds())); |
337 } | 349 } |
338 | 350 |
339 TEST_F(WindowStateTest, DoNotResizeMaximizedWindowInFullscreen) { | 351 TEST_P(WindowStateTest, DoNotResizeMaximizedWindowInFullscreen) { |
340 if (!SupportsHostWindowResize()) | 352 if (!SupportsHostWindowResize()) |
341 return; | 353 return; |
| 354 const int height_offset = GetMdMaximizedWindowHeightOffset(); |
342 | 355 |
343 std::unique_ptr<aura::Window> maximized(CreateTestWindowInShellWithId(0)); | 356 std::unique_ptr<aura::Window> maximized(CreateTestWindowInShellWithId(0)); |
344 std::unique_ptr<aura::Window> fullscreen(CreateTestWindowInShellWithId(1)); | 357 std::unique_ptr<aura::Window> fullscreen(CreateTestWindowInShellWithId(1)); |
345 WindowState* maximized_state = GetWindowState(maximized.get()); | 358 WindowState* maximized_state = GetWindowState(maximized.get()); |
346 maximized_state->Maximize(); | 359 maximized_state->Maximize(); |
347 ASSERT_TRUE(maximized_state->IsMaximized()); | 360 ASSERT_TRUE(maximized_state->IsMaximized()); |
348 EXPECT_EQ("0,0 800x553", maximized->GetBoundsInScreen().ToString()); | 361 EXPECT_EQ(gfx::Rect(0, 0, 800, 553 + height_offset).ToString(), |
| 362 maximized->GetBoundsInScreen().ToString()); |
349 | 363 |
350 // Entering fullscreen mode will not update the maximized window's size | 364 // Entering fullscreen mode will not update the maximized window's size |
351 // under fullscreen. | 365 // under fullscreen. |
352 WMEvent fullscreen_event(WM_EVENT_FULLSCREEN); | 366 WMEvent fullscreen_event(WM_EVENT_FULLSCREEN); |
353 WindowState* fullscreen_state = GetWindowState(fullscreen.get()); | 367 WindowState* fullscreen_state = GetWindowState(fullscreen.get()); |
354 fullscreen_state->OnWMEvent(&fullscreen_event); | 368 fullscreen_state->OnWMEvent(&fullscreen_event); |
355 ASSERT_TRUE(fullscreen_state->IsFullscreen()); | 369 ASSERT_TRUE(fullscreen_state->IsFullscreen()); |
356 ASSERT_TRUE(maximized_state->IsMaximized()); | 370 ASSERT_TRUE(maximized_state->IsMaximized()); |
357 EXPECT_EQ("0,0 800x553", maximized->GetBoundsInScreen().ToString()); | 371 EXPECT_EQ(gfx::Rect(0, 0, 800, 553 + height_offset).ToString(), |
| 372 maximized->GetBoundsInScreen().ToString()); |
358 | 373 |
359 // Updating display size will update the maximum window size. | 374 // Updating display size will update the maximum window size. |
360 UpdateDisplay("900x700"); | 375 UpdateDisplay("900x700"); |
361 EXPECT_EQ("0,0 900x700", maximized->GetBoundsInScreen().ToString()); | 376 EXPECT_EQ("0,0 900x700", maximized->GetBoundsInScreen().ToString()); |
362 fullscreen.reset(); | 377 fullscreen.reset(); |
363 | 378 |
364 // Exitting fullscreen will update the maximized widnow to the work area. | 379 // Exiting fullscreen will update the maximized window to the work area. |
365 EXPECT_EQ("0,0 900x653", maximized->GetBoundsInScreen().ToString()); | 380 EXPECT_EQ(gfx::Rect(0, 0, 900, 653 + height_offset).ToString(), |
| 381 maximized->GetBoundsInScreen().ToString()); |
366 } | 382 } |
367 | 383 |
368 // TODO(skuhne): Add more unit test to verify the correctness for the restore | 384 // TODO(skuhne): Add more unit test to verify the correctness for the restore |
369 // operation. | 385 // operation. |
370 | 386 |
371 } // namespace wm | 387 } // namespace wm |
372 } // namespace ash | 388 } // namespace ash |
OLD | NEW |