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

Side by Side Diff: ash/wm/workspace/workspace_manager_unittest.cc

Issue 9764008: Makes the launcher auto-hide for maximized windows. This turned out to (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add null checks and cleanup Created 8 years, 9 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 | Annotate | Revision Log
OLDNEW
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/wm/workspace/workspace_manager.h" 5 #include "ash/wm/workspace/workspace_manager.h"
6 6
7 #include "ash/screen_ash.h" 7 #include "ash/screen_ash.h"
8 #include "ash/shell.h" 8 #include "ash/shell.h"
9 #include "ash/shell_window_ids.h" 9 #include "ash/shell_window_ids.h"
10 #include "ash/test/ash_test_base.h" 10 #include "ash/test/ash_test_base.h"
11 #include "ash/wm/activation_controller.h" 11 #include "ash/wm/activation_controller.h"
12 #include "ash/wm/property_util.h" 12 #include "ash/wm/property_util.h"
13 #include "ash/wm/shelf_layout_manager.h"
13 #include "ash/wm/window_util.h" 14 #include "ash/wm/window_util.h"
14 #include "ash/wm/workspace_controller.h" 15 #include "ash/wm/workspace_controller.h"
15 #include "ash/wm/workspace/workspace.h" 16 #include "ash/wm/workspace/workspace.h"
16 #include "ash/wm/workspace/workspace_layout_manager.h" 17 #include "ash/wm/workspace/workspace_layout_manager.h"
17 #include "ui/aura/client/aura_constants.h" 18 #include "ui/aura/client/aura_constants.h"
18 #include "ui/aura/root_window.h" 19 #include "ui/aura/root_window.h"
19 #include "ui/aura/window.h" 20 #include "ui/aura/window.h"
20 #include "ui/base/ui_base_types.h" 21 #include "ui/base/ui_base_types.h"
21 #include "ui/gfx/screen.h" 22 #include "ui/gfx/screen.h"
22 23
(...skipping 26 matching lines...) Expand all
49 50
50 aura::Window* GetViewport() { 51 aura::Window* GetViewport() {
51 return Shell::GetInstance()->GetContainer( 52 return Shell::GetInstance()->GetContainer(
52 internal::kShellWindowId_DefaultContainer); 53 internal::kShellWindowId_DefaultContainer);
53 } 54 }
54 55
55 const std::vector<Workspace*>& workspaces() const { 56 const std::vector<Workspace*>& workspaces() const {
56 return manager_->workspaces_; 57 return manager_->workspaces_;
57 } 58 }
58 59
59 gfx::Rect GetWorkAreaBounds() {
60 return manager_->GetWorkAreaBounds();
61 }
62
63 gfx::Rect GetFullscreenBounds(aura::Window* window) { 60 gfx::Rect GetFullscreenBounds(aura::Window* window) {
64 return gfx::Screen::GetMonitorAreaNearestWindow(window); 61 return gfx::Screen::GetMonitorAreaNearestWindow(window);
65 } 62 }
66 63
67 Workspace* active_workspace() { 64 Workspace* active_workspace() {
68 return manager_->active_workspace_; 65 return manager_->active_workspace_;
69 } 66 }
70 67
71 Workspace* FindBy(aura::Window* window) const { 68 Workspace* FindBy(aura::Window* window) const {
72 return manager_->FindBy(window); 69 return manager_->FindBy(window);
(...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after
136 EXPECT_EQ(251, w1->bounds().height()); 133 EXPECT_EQ(251, w1->bounds().height());
137 134
138 // Maximize the window. 135 // Maximize the window.
139 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED); 136 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
140 137
141 // Should be 2 workspaces, the second TYPE_MAXIMIZED with w1. 138 // Should be 2 workspaces, the second TYPE_MAXIMIZED with w1.
142 ASSERT_EQ(2u, workspaces().size()); 139 ASSERT_EQ(2u, workspaces().size());
143 EXPECT_EQ(Workspace::TYPE_MAXIMIZED, workspaces()[1]->type()); 140 EXPECT_EQ(Workspace::TYPE_MAXIMIZED, workspaces()[1]->type());
144 ASSERT_EQ(1u, workspaces()[1]->windows().size()); 141 ASSERT_EQ(1u, workspaces()[1]->windows().size());
145 EXPECT_EQ(w1.get(), workspaces()[1]->windows()[0]); 142 EXPECT_EQ(w1.get(), workspaces()[1]->windows()[0]);
146 EXPECT_EQ(GetWorkAreaBounds().width(), w1->bounds().width()); 143 EXPECT_EQ(ScreenAsh::GetMaximizedWindowBounds(w1.get()).width(),
147 EXPECT_EQ(GetWorkAreaBounds().height(), w1->bounds().height()); 144 w1->bounds().width());
145 EXPECT_EQ(ScreenAsh::GetMaximizedWindowBounds(w1.get()).height(),
146 w1->bounds().height());
148 147
149 // Restore the window. 148 // Restore the window.
150 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); 149 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
151 150
152 // Should be 1 workspace, TYPE_MANAGED with w1. 151 // Should be 1 workspace, TYPE_MANAGED with w1.
153 ASSERT_EQ(1u, workspaces().size()); 152 ASSERT_EQ(1u, workspaces().size());
154 EXPECT_EQ(Workspace::TYPE_MANAGED, workspaces()[0]->type()); 153 EXPECT_EQ(Workspace::TYPE_MANAGED, workspaces()[0]->type());
155 ASSERT_EQ(1u, workspaces()[0]->windows().size()); 154 ASSERT_EQ(1u, workspaces()[0]->windows().size());
156 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]); 155 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]);
157 EXPECT_EQ(250, w1->bounds().width()); 156 EXPECT_EQ(250, w1->bounds().width());
158 EXPECT_EQ(251, w1->bounds().height()); 157 EXPECT_EQ(251, w1->bounds().height());
159 } 158 }
160 159
161 // Assertions around maximized window resizing on work area insets change.
162 TEST_F(WorkspaceManagerTest, ResizeMaximizedWindowOnWorkAreaInsetsChange) {
163 scoped_ptr<Window> w1(CreateTestWindow());
164 w1->SetBounds(gfx::Rect(0, 0, 250, 251));
165
166 ASSERT_TRUE(manager_->IsManagedWindow(w1.get()));
167
168 w1->Show();
169
170 ASSERT_TRUE(w1->layer() != NULL);
171 EXPECT_TRUE(w1->layer()->visible());
172
173 EXPECT_EQ(250, w1->bounds().width());
174 EXPECT_EQ(251, w1->bounds().height());
175
176 // Maximize the window.
177 Shell::GetInstance()->SetMonitorWorkAreaInsets(
178 Shell::GetRootWindow(),
179 gfx::Insets(0, 0, 30, 0));
180 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
181
182 // Should be 2 workspaces, the second TYPE_MAXIMIZED with w1, fills the work
183 // area bounds.
184 ASSERT_EQ(2u, workspaces().size());
185 EXPECT_EQ(Workspace::TYPE_MAXIMIZED, workspaces()[1]->type());
186 ASSERT_EQ(1u, workspaces()[1]->windows().size());
187 EXPECT_EQ(w1.get(), workspaces()[1]->windows()[0]);
188 EXPECT_EQ(GetWorkAreaBounds().width(), w1->bounds().width());
189 EXPECT_EQ(GetWorkAreaBounds().height(), w1->bounds().height());
190
191 // Change work area insets.
192 Shell::GetInstance()->SetMonitorWorkAreaInsets(
193 Shell::GetRootWindow(),
194 gfx::Insets(0, 0, 60, 0));
195
196 // Should be 2 workspaces, the second TYPE_MAXIMIZED with w1, fills the
197 // changed work area bounds.
198 ASSERT_EQ(2u, workspaces().size());
199 EXPECT_EQ(Workspace::TYPE_MAXIMIZED, workspaces()[1]->type());
200 ASSERT_EQ(1u, workspaces()[1]->windows().size());
201 EXPECT_EQ(w1.get(), workspaces()[1]->windows()[0]);
202 EXPECT_EQ(GetWorkAreaBounds().width(), w1->bounds().width());
203 EXPECT_EQ(GetWorkAreaBounds().height(), w1->bounds().height());
204 }
205
206 // Assertions around closing the last window in a workspace. 160 // Assertions around closing the last window in a workspace.
207 TEST_F(WorkspaceManagerTest, CloseLastWindowInWorkspace) { 161 TEST_F(WorkspaceManagerTest, CloseLastWindowInWorkspace) {
208 scoped_ptr<Window> w1(CreateTestWindow()); 162 scoped_ptr<Window> w1(CreateTestWindow());
209 scoped_ptr<Window> w2(CreateTestWindow()); 163 scoped_ptr<Window> w2(CreateTestWindow());
210 w1->SetBounds(gfx::Rect(0, 0, 250, 251)); 164 w1->SetBounds(gfx::Rect(0, 0, 250, 251));
211 w1->Show(); 165 w1->Show();
212 w2->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED); 166 w2->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
213 w2->Show(); 167 w2->Show();
214 168
215 // Should be 2 workspaces, TYPE_NORMAL with w1, and TYPE_MAXIMIZED with w2. 169 // Should be 2 workspaces, TYPE_NORMAL with w1, and TYPE_MAXIMIZED with w2.
(...skipping 23 matching lines...) Expand all
239 193
240 // Assertions around adding a maximized window when empty. 194 // Assertions around adding a maximized window when empty.
241 TEST_F(WorkspaceManagerTest, AddMaximizedWindowWhenEmpty) { 195 TEST_F(WorkspaceManagerTest, AddMaximizedWindowWhenEmpty) {
242 scoped_ptr<Window> w1(CreateTestWindow()); 196 scoped_ptr<Window> w1(CreateTestWindow());
243 w1->SetBounds(gfx::Rect(0, 0, 250, 251)); 197 w1->SetBounds(gfx::Rect(0, 0, 250, 251));
244 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED); 198 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
245 w1->Show(); 199 w1->Show();
246 200
247 ASSERT_TRUE(w1->layer() != NULL); 201 ASSERT_TRUE(w1->layer() != NULL);
248 EXPECT_TRUE(w1->layer()->visible()); 202 EXPECT_TRUE(w1->layer()->visible());
249 gfx::Rect work_area( 203 gfx::Rect work_area(ScreenAsh::GetMaximizedWindowBounds(w1.get()));
250 gfx::Screen::GetMonitorWorkAreaNearestWindow(w1.get()));
251 EXPECT_EQ(work_area.width(), w1->bounds().width()); 204 EXPECT_EQ(work_area.width(), w1->bounds().width());
252 EXPECT_EQ(work_area.height(), w1->bounds().height()); 205 EXPECT_EQ(work_area.height(), w1->bounds().height());
253 206
254 // Should be 1 workspace, TYPE_NORNMAL with w1. 207 // Should be 1 workspace, TYPE_NORNMAL with w1.
255 ASSERT_EQ(1u, workspaces().size()); 208 ASSERT_EQ(1u, workspaces().size());
256 EXPECT_EQ(Workspace::TYPE_MAXIMIZED, workspaces()[0]->type()); 209 EXPECT_EQ(Workspace::TYPE_MAXIMIZED, workspaces()[0]->type());
257 ASSERT_EQ(1u, workspaces()[0]->windows().size()); 210 ASSERT_EQ(1u, workspaces()[0]->windows().size());
258 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]); 211 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]);
259 } 212 }
260 213
(...skipping 17 matching lines...) Expand all
278 ASSERT_EQ(1u, workspaces()[0]->windows().size()); 231 ASSERT_EQ(1u, workspaces()[0]->windows().size());
279 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]); 232 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]);
280 EXPECT_EQ(Workspace::TYPE_MAXIMIZED, workspaces()[1]->type()); 233 EXPECT_EQ(Workspace::TYPE_MAXIMIZED, workspaces()[1]->type());
281 ASSERT_EQ(1u, workspaces()[1]->windows().size()); 234 ASSERT_EQ(1u, workspaces()[1]->windows().size());
282 EXPECT_EQ(w2.get(), workspaces()[1]->windows()[0]); 235 EXPECT_EQ(w2.get(), workspaces()[1]->windows()[0]);
283 ASSERT_TRUE(w1->layer() != NULL); 236 ASSERT_TRUE(w1->layer() != NULL);
284 EXPECT_FALSE(w1->layer()->visible()); 237 EXPECT_FALSE(w1->layer()->visible());
285 ASSERT_TRUE(w2->layer() != NULL); 238 ASSERT_TRUE(w2->layer() != NULL);
286 EXPECT_TRUE(w2->layer()->visible()); 239 EXPECT_TRUE(w2->layer()->visible());
287 240
288 gfx::Rect work_area( 241 gfx::Rect work_area(ScreenAsh::GetMaximizedWindowBounds(w1.get()));
289 gfx::Screen::GetMonitorWorkAreaNearestWindow(w1.get()));
290 EXPECT_EQ(work_area.width(), w2->bounds().width()); 242 EXPECT_EQ(work_area.width(), w2->bounds().width());
291 EXPECT_EQ(work_area.height(), w2->bounds().height()); 243 EXPECT_EQ(work_area.height(), w2->bounds().height());
292 244
293 // Restore w2, which should then go back to one workspace. 245 // Restore w2, which should then go back to one workspace.
294 w2->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); 246 w2->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
295 ASSERT_EQ(1u, workspaces().size()); 247 ASSERT_EQ(1u, workspaces().size());
296 EXPECT_EQ(Workspace::TYPE_MANAGED, workspaces()[0]->type()); 248 EXPECT_EQ(Workspace::TYPE_MANAGED, workspaces()[0]->type());
297 ASSERT_EQ(2u, workspaces()[0]->windows().size()); 249 ASSERT_EQ(2u, workspaces()[0]->windows().size());
298 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]); 250 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]);
299 EXPECT_EQ(w2.get(), workspaces()[0]->windows()[1]); 251 EXPECT_EQ(w2.get(), workspaces()[0]->windows()[1]);
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
481 // Make the window normal. 433 // Make the window normal.
482 w2->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL); 434 w2->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
483 ASSERT_EQ(1u, workspaces().size()); 435 ASSERT_EQ(1u, workspaces().size());
484 EXPECT_EQ(Workspace::TYPE_MANAGED, workspaces()[0]->type()); 436 EXPECT_EQ(Workspace::TYPE_MANAGED, workspaces()[0]->type());
485 ASSERT_EQ(2u, workspaces()[0]->windows().size()); 437 ASSERT_EQ(2u, workspaces()[0]->windows().size());
486 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]); 438 EXPECT_EQ(w1.get(), workspaces()[0]->windows()[0]);
487 EXPECT_EQ(w2.get(), workspaces()[0]->windows()[1]); 439 EXPECT_EQ(w2.get(), workspaces()[0]->windows()[1]);
488 EXPECT_TRUE(w2->layer()->IsDrawn()); 440 EXPECT_TRUE(w2->layer()->IsDrawn());
489 } 441 }
490 442
443 // Verifies ShelfLayoutManager's visibility/auto-hide state is correctly
444 // updated.
445 TEST_F(WorkspaceManagerTest, ShelfStateUpdated) {
446 // Two windows, w1 normal, w2 maximized.
447 scoped_ptr<Window> w1(CreateTestWindow());
448 w1->SetBounds(gfx::Rect(0, 1, 101, 102));
449 w1->Show();
450
451 ShelfLayoutManager* shelf = Shell::GetInstance()->shelf();
452
453 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state());
454
455 // Maximize the window.
456 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
457 EXPECT_EQ(ShelfLayoutManager::AUTO_HIDE, shelf->visibility_state());
458 EXPECT_EQ(ShelfLayoutManager::AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
459
460 // Restore.
461 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
462 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state());
463 EXPECT_EQ("0,1 101x102", w1->bounds().ToString());
464
465 // Fullscreen.
466 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN);
467 EXPECT_EQ(ShelfLayoutManager::HIDDEN, shelf->visibility_state());
468
469 // Normal.
470 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
471 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state());
472 EXPECT_EQ("0,1 101x102", w1->bounds().ToString());
473
474 // Maximize again.
475 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
476 EXPECT_EQ(ShelfLayoutManager::AUTO_HIDE, shelf->visibility_state());
477 EXPECT_EQ(ShelfLayoutManager::AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
478
479 // Minimize.
480 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MINIMIZED);
481 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state());
482
483 // Restore.
484 w1->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
485 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state());
486 EXPECT_EQ("0,1 101x102", w1->bounds().ToString());
487
488 // Create another window, maximized.
489 scoped_ptr<Window> w2(CreateTestWindow());
490 w2->SetBounds(gfx::Rect(10, 11, 250, 251));
491 w2->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
492 w2->Show();
493 EXPECT_EQ(ShelfLayoutManager::AUTO_HIDE, shelf->visibility_state());
494 EXPECT_EQ(ShelfLayoutManager::AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
495 EXPECT_EQ("0,1 101x102", w1->bounds().ToString());
496
497 // Switch to w1.
498 w1->Show();
499 EXPECT_EQ(ShelfLayoutManager::VISIBLE, shelf->visibility_state());
500 EXPECT_EQ("0,1 101x102", w1->bounds().ToString());
501 EXPECT_EQ(ScreenAsh::GetMaximizedWindowBounds(w2.get()).ToString(),
502 w2->bounds().ToString());
503
504 // Switch to w2.
505 w2->Show();
506 EXPECT_EQ(ShelfLayoutManager::AUTO_HIDE, shelf->visibility_state());
507 EXPECT_EQ(ShelfLayoutManager::AUTO_HIDE_HIDDEN, shelf->auto_hide_state());
508 EXPECT_EQ("0,1 101x102", w1->bounds().ToString());
509 EXPECT_EQ(ScreenAsh::GetMaximizedWindowBounds(w2.get()).ToString(),
510 w2->bounds().ToString());
511 }
512
491 } // namespace internal 513 } // namespace internal
492 } // namespace ash 514 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698