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

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

Issue 2847283002: chromeos: convert remaining AshTest usage to AshTestBase (Closed)
Patch Set: cleanup Created 3 years, 7 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 (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_layout_manager.h" 5 #include "ash/wm/workspace/workspace_layout_manager.h"
6 6
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 9
10 #include "ash/public/cpp/config.h" 10 #include "ash/public/cpp/config.h"
11 #include "ash/public/cpp/shell_window_ids.h" 11 #include "ash/public/cpp/shell_window_ids.h"
12 #include "ash/root_window_controller.h" 12 #include "ash/root_window_controller.h"
13 #include "ash/screen_util.h"
13 #include "ash/session/session_controller.h" 14 #include "ash/session/session_controller.h"
14 #include "ash/shelf/shelf_constants.h" 15 #include "ash/shelf/shelf_constants.h"
15 #include "ash/shelf/shelf_layout_manager.h" 16 #include "ash/shelf/shelf_layout_manager.h"
16 #include "ash/shelf/wm_shelf.h" 17 #include "ash/shelf/wm_shelf.h"
17 #include "ash/shell.h" 18 #include "ash/shell.h"
18 #include "ash/shell_observer.h" 19 #include "ash/shell_observer.h"
19 #include "ash/shell_port.h" 20 #include "ash/shell_port.h"
20 #include "ash/test/ash_test.h"
21 #include "ash/test/ash_test_base.h" 21 #include "ash/test/ash_test_base.h"
22 #include "ash/test/test_session_controller_client.h" 22 #include "ash/test/test_session_controller_client.h"
23 #include "ash/test/wm_window_test_api.h"
23 #include "ash/wm/fullscreen_window_finder.h" 24 #include "ash/wm/fullscreen_window_finder.h"
24 #include "ash/wm/maximize_mode/workspace_backdrop_delegate.h" 25 #include "ash/wm/maximize_mode/workspace_backdrop_delegate.h"
25 #include "ash/wm/window_state.h" 26 #include "ash/wm/window_state.h"
26 #include "ash/wm/window_state_aura.h" 27 #include "ash/wm/window_state_aura.h"
27 #include "ash/wm/window_util.h" 28 #include "ash/wm/window_util.h"
28 #include "ash/wm/wm_event.h" 29 #include "ash/wm/wm_event.h"
29 #include "ash/wm/wm_screen_util.h" 30 #include "ash/wm/wm_screen_util.h"
30 #include "ash/wm/workspace/workspace_window_resizer.h" 31 #include "ash/wm/workspace/workspace_window_resizer.h"
31 #include "ash/wm_window.h" 32 #include "ash/wm_window.h"
32 #include "base/command_line.h" 33 #include "base/command_line.h"
33 #include "base/run_loop.h" 34 #include "base/run_loop.h"
35 #include "ui/aura/client/aura_constants.h"
36 #include "ui/aura/client/focus_client.h"
34 #include "ui/aura/window.h" 37 #include "ui/aura/window.h"
35 #include "ui/base/ui_base_switches.h" 38 #include "ui/base/ui_base_switches.h"
36 #include "ui/base/ui_base_types.h" 39 #include "ui/base/ui_base_types.h"
37 #include "ui/compositor/layer_type.h" 40 #include "ui/compositor/layer_type.h"
38 #include "ui/compositor/scoped_animation_duration_scale_mode.h" 41 #include "ui/compositor/scoped_animation_duration_scale_mode.h"
39 #include "ui/display/display.h" 42 #include "ui/display/display.h"
43 #include "ui/display/manager/display_manager.h"
40 #include "ui/display/screen.h" 44 #include "ui/display/screen.h"
45 #include "ui/display/test/display_manager_test_api.h"
41 #include "ui/gfx/geometry/insets.h" 46 #include "ui/gfx/geometry/insets.h"
42 #include "ui/views/widget/widget.h" 47 #include "ui/views/widget/widget.h"
43 #include "ui/views/widget/widget_delegate.h" 48 #include "ui/views/widget/widget_delegate.h"
49 #include "ui/wm/core/window_util.h"
44 50
45 namespace ash { 51 namespace ash {
46 namespace { 52 namespace {
47 53
48 class MaximizeDelegateView : public views::WidgetDelegateView { 54 class MaximizeDelegateView : public views::WidgetDelegateView {
49 public: 55 public:
50 explicit MaximizeDelegateView(const gfx::Rect& initial_bounds) 56 explicit MaximizeDelegateView(const gfx::Rect& initial_bounds)
51 : initial_bounds_(initial_bounds) {} 57 : initial_bounds_(initial_bounds) {}
52 ~MaximizeDelegateView() override {} 58 ~MaximizeDelegateView() override {}
53 59
(...skipping 29 matching lines...) Expand all
83 89
84 bool is_fullscreen() const { return is_fullscreen_; } 90 bool is_fullscreen() const { return is_fullscreen_; }
85 91
86 private: 92 private:
87 int call_count_; 93 int call_count_;
88 bool is_fullscreen_; 94 bool is_fullscreen_;
89 95
90 DISALLOW_COPY_AND_ASSIGN(TestShellObserver); 96 DISALLOW_COPY_AND_ASSIGN(TestShellObserver);
91 }; 97 };
92 98
99 display::Display GetDisplayNearestWindow(aura::Window* window) {
100 return display::Screen::GetScreen()->GetDisplayNearestWindow(window);
101 }
102
93 } // namespace 103 } // namespace
94 104
95 using WorkspaceLayoutManagerTest = AshTest; 105 using WorkspaceLayoutManagerTest = test::AshTestBase;
96 106
97 // Verifies that a window containing a restore coordinate will be restored to 107 // Verifies that a window containing a restore coordinate will be restored to
98 // to the size prior to minimize, keeping the restore rectangle in tact (if 108 // to the size prior to minimize, keeping the restore rectangle in tact (if
99 // there is one). 109 // there is one).
100 TEST_F(WorkspaceLayoutManagerTest, RestoreFromMinimizeKeepsRestore) { 110 TEST_F(WorkspaceLayoutManagerTest, RestoreFromMinimizeKeepsRestore) {
101 std::unique_ptr<WindowOwner> window_owner( 111 WmWindowTestApi::GlobalMinimumSizeLock min_size_lock;
102 CreateTestWindow(gfx::Rect(1, 2, 3, 4))); 112 std::unique_ptr<aura::Window> window(CreateTestWindow(gfx::Rect(1, 2, 3, 4)));
103 WmWindow* window = window_owner->window();
104 gfx::Rect bounds(10, 15, 25, 35); 113 gfx::Rect bounds(10, 15, 25, 35);
105 window->SetBounds(bounds); 114 window->SetBounds(bounds);
106 115
107 wm::WindowState* window_state = window->GetWindowState(); 116 wm::WindowState* window_state = wm::GetWindowState(window.get());
108 117
109 // This will not be used for un-minimizing window. 118 // This will not be used for un-minimizing window.
110 window_state->SetRestoreBoundsInScreen(gfx::Rect(0, 0, 100, 100)); 119 window_state->SetRestoreBoundsInScreen(gfx::Rect(0, 0, 100, 100));
111 window_state->Minimize(); 120 window_state->Minimize();
112 window_state->Restore(); 121 window_state->Restore();
113 EXPECT_EQ("0,0 100x100", window_state->GetRestoreBoundsInScreen().ToString()); 122 EXPECT_EQ("0,0 100x100", window_state->GetRestoreBoundsInScreen().ToString());
114 EXPECT_EQ("10,15 25x35", window->GetBounds().ToString()); 123 EXPECT_EQ("10,15 25x35", window->bounds().ToString());
115 124
116 UpdateDisplay("400x300,500x400"); 125 UpdateDisplay("400x300,500x400");
117 window->SetBoundsInScreen(gfx::Rect(600, 0, 100, 100), GetSecondaryDisplay()); 126 window->SetBoundsInScreen(gfx::Rect(600, 0, 100, 100), GetSecondaryDisplay());
118 EXPECT_EQ(ShellPort::Get()->GetAllRootWindows()[1], window->GetRootWindow()); 127 EXPECT_EQ(Shell::Get()->GetAllRootWindows()[1], window->GetRootWindow());
119 window_state->Minimize(); 128 window_state->Minimize();
120 // This will not be used for un-minimizing window. 129 // This will not be used for un-minimizing window.
121 window_state->SetRestoreBoundsInScreen(gfx::Rect(0, 0, 100, 100)); 130 window_state->SetRestoreBoundsInScreen(gfx::Rect(0, 0, 100, 100));
122 window_state->Restore(); 131 window_state->Restore();
123 EXPECT_EQ("600,0 100x100", window->GetBoundsInScreen().ToString()); 132 EXPECT_EQ("600,0 100x100", window->GetBoundsInScreen().ToString());
124 133
125 // Make sure the unminimized window moves inside the display when 134 // Make sure the unminimized window moves inside the display when
126 // 2nd display is disconnected. 135 // 2nd display is disconnected.
127 window_state->Minimize(); 136 window_state->Minimize();
128 UpdateDisplay("400x300"); 137 UpdateDisplay("400x300");
129 window_state->Restore(); 138 window_state->Restore();
130 EXPECT_EQ(ShellPort::Get()->GetPrimaryRootWindow(), window->GetRootWindow()); 139 EXPECT_EQ(Shell::GetPrimaryRootWindow(), window->GetRootWindow());
131 EXPECT_TRUE(ShellPort::Get()->GetPrimaryRootWindow()->GetBounds().Intersects( 140 EXPECT_TRUE(
132 window->GetBounds())); 141 Shell::GetPrimaryRootWindow()->bounds().Intersects(window->bounds()));
133 } 142 }
134 143
135 TEST_F(WorkspaceLayoutManagerTest, KeepMinimumVisibilityInDisplays) { 144 TEST_F(WorkspaceLayoutManagerTest, KeepMinimumVisibilityInDisplays) {
136 UpdateDisplay("300x400,400x500"); 145 UpdateDisplay("300x400,400x500");
137 WmWindow::Windows root_windows = ShellPort::Get()->GetAllRootWindows(); 146 aura::Window::Windows root_windows = Shell::Get()->GetAllRootWindows();
138 147
139 if (!SetSecondaryDisplayPlacement(display::DisplayPlacement::TOP, 0)) 148 if (Shell::GetAshConfig() != Config::CLASSIC) {
149 // TODO(sky): should work for mus/mash once http://crbug.com/706589 is
150 // fixed.
140 return; 151 return;
152 }
153 Shell::Get()->display_manager()->SetLayoutForCurrentDisplays(
154 display::test::CreateDisplayLayout(Shell::Get()->display_manager(),
155 display::DisplayPlacement::TOP, 0));
141 156
142 EXPECT_EQ("0,-500 400x500", root_windows[1]->GetBoundsInScreen().ToString()); 157 EXPECT_EQ("0,-500 400x500", root_windows[1]->GetBoundsInScreen().ToString());
143 158
144 std::unique_ptr<WindowOwner> window1_owner( 159 std::unique_ptr<aura::Window> window1(
145 CreateTestWindow(gfx::Rect(10, -400, 200, 200))); 160 CreateTestWindow(gfx::Rect(10, -400, 200, 200)));
146 EXPECT_EQ("10,-400 200x200", 161 EXPECT_EQ("10,-400 200x200", window1->GetBoundsInScreen().ToString());
147 window1_owner->window()->GetBoundsInScreen().ToString());
148 162
149 // Make sure the caption is visible. 163 // Make sure the caption is visible.
150 std::unique_ptr<WindowOwner> window2_owner( 164 std::unique_ptr<aura::Window> window2(
151 CreateTestWindow(gfx::Rect(10, -600, 200, 200))); 165 CreateTestWindow(gfx::Rect(10, -600, 200, 200)));
152 EXPECT_EQ("10,-500 200x200", 166 EXPECT_EQ("10,-500 200x200", window2->GetBoundsInScreen().ToString());
153 window2_owner->window()->GetBoundsInScreen().ToString());
154 } 167 }
155 168
156 TEST_F(WorkspaceLayoutManagerTest, NoMinimumVisibilityForPopupWindows) { 169 TEST_F(WorkspaceLayoutManagerTest, NoMinimumVisibilityForPopupWindows) {
157 UpdateDisplay("300x400"); 170 UpdateDisplay("300x400");
158 171
159 // Create a popup window out of display boundaries and make sure it is not 172 // Create a popup window out of display boundaries and make sure it is not
160 // moved to have minimum visibility. 173 // moved to have minimum visibility.
161 std::unique_ptr<WindowOwner> window_owner( 174 std::unique_ptr<aura::Window> window(
162 CreateTestWindow(gfx::Rect(400, 100, 50, 50), ui::wm::WINDOW_TYPE_POPUP)); 175 CreateTestWindow(gfx::Rect(400, 100, 50, 50), ui::wm::WINDOW_TYPE_POPUP));
163 EXPECT_EQ("400,100 50x50", 176 EXPECT_EQ("400,100 50x50", window->GetBoundsInScreen().ToString());
164 window_owner->window()->GetBoundsInScreen().ToString());
165 } 177 }
166 178
167 TEST_F(WorkspaceLayoutManagerTest, KeepRestoredWindowInDisplay) { 179 TEST_F(WorkspaceLayoutManagerTest, KeepRestoredWindowInDisplay) {
168 std::unique_ptr<WindowOwner> window_owner( 180 WmWindowTestApi::GlobalMinimumSizeLock min_size_lock;
181 std::unique_ptr<aura::Window> window(
169 CreateTestWindow(gfx::Rect(1, 2, 30, 40))); 182 CreateTestWindow(gfx::Rect(1, 2, 30, 40)));
170 WmWindow* window = window_owner->window(); 183 wm::WindowState* window_state = wm::GetWindowState(window.get());
171 wm::WindowState* window_state = window->GetWindowState();
172 184
173 // Maximized -> Normal transition. 185 // Maximized -> Normal transition.
174 window_state->Maximize(); 186 window_state->Maximize();
175 window_state->SetRestoreBoundsInScreen(gfx::Rect(-100, -100, 30, 40)); 187 window_state->SetRestoreBoundsInScreen(gfx::Rect(-100, -100, 30, 40));
176 window_state->Restore(); 188 window_state->Restore();
177 EXPECT_TRUE(ShellPort::Get()->GetPrimaryRootWindow()->GetBounds().Intersects( 189 EXPECT_TRUE(
178 window->GetBounds())); 190 Shell::GetPrimaryRootWindow()->bounds().Intersects(window->bounds()));
179 // Y bounds should not be negative. 191 // Y bounds should not be negative.
180 EXPECT_EQ("-5,0 30x40", window->GetBounds().ToString()); 192 EXPECT_EQ("-5,0 30x40", window->bounds().ToString());
181 193
182 // Minimized -> Normal transition. 194 // Minimized -> Normal transition.
183 window->SetBounds(gfx::Rect(-100, -100, 30, 40)); 195 window->SetBounds(gfx::Rect(-100, -100, 30, 40));
184 window_state->Minimize(); 196 window_state->Minimize();
185 EXPECT_FALSE(ShellPort::Get()->GetPrimaryRootWindow()->GetBounds().Intersects( 197 EXPECT_FALSE(
186 window->GetBounds())); 198 Shell::GetPrimaryRootWindow()->bounds().Intersects(window->bounds()));
187 EXPECT_EQ("-100,-100 30x40", window->GetBounds().ToString()); 199 EXPECT_EQ("-100,-100 30x40", window->bounds().ToString());
188 window->Show(); 200 window->Show();
189 EXPECT_TRUE(ShellPort::Get()->GetPrimaryRootWindow()->GetBounds().Intersects( 201 EXPECT_TRUE(
190 window->GetBounds())); 202 Shell::GetPrimaryRootWindow()->bounds().Intersects(window->bounds()));
191 // Y bounds should not be negative. 203 // Y bounds should not be negative.
192 EXPECT_EQ("-5,0 30x40", window->GetBounds().ToString()); 204 EXPECT_EQ("-5,0 30x40", window->bounds().ToString());
193 205
194 // Fullscreen -> Normal transition. 206 // Fullscreen -> Normal transition.
195 window->SetBounds(gfx::Rect(0, 0, 30, 40)); // reset bounds. 207 window->SetBounds(gfx::Rect(0, 0, 30, 40)); // reset bounds.
196 ASSERT_EQ("0,0 30x40", window->GetBounds().ToString()); 208 ASSERT_EQ("0,0 30x40", window->bounds().ToString());
197 window->SetShowState(ui::SHOW_STATE_FULLSCREEN); 209 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN);
198 EXPECT_EQ(window->GetBounds(), window->GetRootWindow()->GetBounds()); 210 EXPECT_EQ(window->bounds(), window->GetRootWindow()->bounds());
199 window_state->SetRestoreBoundsInScreen(gfx::Rect(-100, -100, 30, 40)); 211 window_state->SetRestoreBoundsInScreen(gfx::Rect(-100, -100, 30, 40));
200 window_state->Restore(); 212 window_state->Restore();
201 EXPECT_TRUE(ShellPort::Get()->GetPrimaryRootWindow()->GetBounds().Intersects( 213 EXPECT_TRUE(
202 window->GetBounds())); 214 Shell::GetPrimaryRootWindow()->bounds().Intersects(window->bounds()));
203 // Y bounds should not be negative. 215 // Y bounds should not be negative.
204 EXPECT_EQ("-5,0 30x40", window->GetBounds().ToString()); 216 EXPECT_EQ("-5,0 30x40", window->bounds().ToString());
205 } 217 }
206 218
207 TEST_F(WorkspaceLayoutManagerTest, MaximizeInDisplayToBeRestored) { 219 TEST_F(WorkspaceLayoutManagerTest, MaximizeInDisplayToBeRestored) {
208 UpdateDisplay("300x400,400x500"); 220 UpdateDisplay("300x400,400x500");
209 221
210 WmWindow::Windows root_windows = ShellPort::Get()->GetAllRootWindows(); 222 aura::Window::Windows root_windows = Shell::Get()->GetAllRootWindows();
211 223
212 std::unique_ptr<WindowOwner> window_owner( 224 std::unique_ptr<aura::Window> window(
213 CreateTestWindow(gfx::Rect(1, 2, 30, 40))); 225 CreateTestWindow(gfx::Rect(1, 2, 30, 40)));
214 WmWindow* window = window_owner->window();
215 EXPECT_EQ(root_windows[0], window->GetRootWindow()); 226 EXPECT_EQ(root_windows[0], window->GetRootWindow());
216 227
217 wm::WindowState* window_state = window->GetWindowState(); 228 wm::WindowState* window_state = wm::GetWindowState(window.get());
218 window_state->SetRestoreBoundsInScreen(gfx::Rect(400, 0, 30, 40)); 229 window_state->SetRestoreBoundsInScreen(gfx::Rect(400, 0, 30, 40));
219 // Maximize the window in 2nd display as the restore bounds 230 // Maximize the window in 2nd display as the restore bounds
220 // is inside 2nd display. 231 // is inside 2nd display.
221 window_state->Maximize(); 232 window_state->Maximize();
222 EXPECT_EQ(root_windows[1], window->GetRootWindow()); 233 EXPECT_EQ(root_windows[1], window->GetRootWindow());
223 EXPECT_EQ(gfx::Rect(300, 0, 400, 500 - kShelfSize).ToString(), 234 EXPECT_EQ(gfx::Rect(300, 0, 400, 500 - kShelfSize).ToString(),
224 window->GetBoundsInScreen().ToString()); 235 window->GetBoundsInScreen().ToString());
225 236
226 window_state->Restore(); 237 window_state->Restore();
227 EXPECT_EQ(root_windows[1], window->GetRootWindow()); 238 EXPECT_EQ(root_windows[1], window->GetRootWindow());
228 EXPECT_EQ("400,0 30x40", window->GetBoundsInScreen().ToString()); 239 EXPECT_EQ("400,0 30x40", window->GetBoundsInScreen().ToString());
229 240
230 // If the restore bounds intersects with the current display, 241 // If the restore bounds intersects with the current display,
231 // don't move. 242 // don't move.
232 window_state->SetRestoreBoundsInScreen(gfx::Rect(295, 0, 30, 40)); 243 window_state->SetRestoreBoundsInScreen(gfx::Rect(295, 0, 30, 40));
233 window_state->Maximize(); 244 window_state->Maximize();
234 EXPECT_EQ(root_windows[1], window->GetRootWindow()); 245 EXPECT_EQ(root_windows[1], window->GetRootWindow());
235 EXPECT_EQ(gfx::Rect(300, 0, 400, 500 - kShelfSize).ToString(), 246 EXPECT_EQ(gfx::Rect(300, 0, 400, 500 - kShelfSize).ToString(),
236 window->GetBoundsInScreen().ToString()); 247 window->GetBoundsInScreen().ToString());
237 248
238 window_state->Restore(); 249 window_state->Restore();
239 EXPECT_EQ(root_windows[1], window->GetRootWindow()); 250 EXPECT_EQ(root_windows[1], window->GetRootWindow());
240 EXPECT_EQ("295,0 30x40", window->GetBoundsInScreen().ToString()); 251 EXPECT_EQ("295,0 30x40", window->GetBoundsInScreen().ToString());
241 252
242 // Restoring widget state. 253 // Restoring widget state.
243 std::unique_ptr<views::Widget> w1(new views::Widget); 254 std::unique_ptr<views::Widget> w1(new views::Widget);
244 views::Widget::InitParams params; 255 views::Widget::InitParams params;
245 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 256 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
246 params.delegate = new MaximizeDelegateView(gfx::Rect(400, 0, 30, 40)); 257 params.delegate = new MaximizeDelegateView(gfx::Rect(400, 0, 30, 40));
247 ConfigureWidgetInitParamsForDisplay(root_windows[0], &params); 258 params.context = root_windows[0];
248 w1->Init(params); 259 w1->Init(params);
249 EXPECT_EQ(root_windows[0], 260 EXPECT_EQ(root_windows[0], w1->GetNativeWindow()->GetRootWindow());
250 WmWindow::Get(w1->GetNativeWindow())->GetRootWindow());
251 w1->Show(); 261 w1->Show();
252 EXPECT_TRUE(w1->IsMaximized()); 262 EXPECT_TRUE(w1->IsMaximized());
253 EXPECT_EQ(root_windows[1], 263 EXPECT_EQ(root_windows[1], w1->GetNativeWindow()->GetRootWindow());
254 WmWindow::Get(w1->GetNativeWindow())->GetRootWindow());
255 EXPECT_EQ(gfx::Rect(300, 0, 400, 500 - kShelfSize).ToString(), 264 EXPECT_EQ(gfx::Rect(300, 0, 400, 500 - kShelfSize).ToString(),
256 w1->GetWindowBoundsInScreen().ToString()); 265 w1->GetWindowBoundsInScreen().ToString());
257 w1->Restore(); 266 w1->Restore();
258 EXPECT_EQ(root_windows[1], 267 EXPECT_EQ(root_windows[1], w1->GetNativeWindow()->GetRootWindow());
259 WmWindow::Get(w1->GetNativeWindow())->GetRootWindow());
260 EXPECT_EQ("400,0 30x40", w1->GetWindowBoundsInScreen().ToString()); 268 EXPECT_EQ("400,0 30x40", w1->GetWindowBoundsInScreen().ToString());
261 } 269 }
262 270
263 TEST_F(WorkspaceLayoutManagerTest, FullscreenInDisplayToBeRestored) { 271 TEST_F(WorkspaceLayoutManagerTest, FullscreenInDisplayToBeRestored) {
264 UpdateDisplay("300x400,400x500"); 272 UpdateDisplay("300x400,400x500");
265 273
266 WmWindow::Windows root_windows = ShellPort::Get()->GetAllRootWindows(); 274 aura::Window::Windows root_windows = Shell::Get()->GetAllRootWindows();
267 275
268 std::unique_ptr<WindowOwner> window_owner( 276 std::unique_ptr<aura::Window> window(
269 CreateTestWindow(gfx::Rect(1, 2, 30, 40))); 277 CreateTestWindow(gfx::Rect(1, 2, 30, 40)));
270 WmWindow* window = window_owner->window();
271 EXPECT_EQ(root_windows[0], window->GetRootWindow()); 278 EXPECT_EQ(root_windows[0], window->GetRootWindow());
272 279
273 wm::WindowState* window_state = window->GetWindowState(); 280 wm::WindowState* window_state = wm::GetWindowState(window.get());
274 window_state->SetRestoreBoundsInScreen(gfx::Rect(400, 0, 30, 40)); 281 window_state->SetRestoreBoundsInScreen(gfx::Rect(400, 0, 30, 40));
275 // Maximize the window in 2nd display as the restore bounds 282 // Maximize the window in 2nd display as the restore bounds
276 // is inside 2nd display. 283 // is inside 2nd display.
277 window->SetShowState(ui::SHOW_STATE_FULLSCREEN); 284 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN);
278 EXPECT_EQ(root_windows[1], window->GetRootWindow()); 285 EXPECT_EQ(root_windows[1], window->GetRootWindow());
279 EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString()); 286 EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString());
280 287
281 window_state->Restore(); 288 window_state->Restore();
282 EXPECT_EQ(root_windows[1], window->GetRootWindow()); 289 EXPECT_EQ(root_windows[1], window->GetRootWindow());
283 EXPECT_EQ("400,0 30x40", window->GetBoundsInScreen().ToString()); 290 EXPECT_EQ("400,0 30x40", window->GetBoundsInScreen().ToString());
284 291
285 // If the restore bounds intersects with the current display, 292 // If the restore bounds intersects with the current display,
286 // don't move. 293 // don't move.
287 window_state->SetRestoreBoundsInScreen(gfx::Rect(295, 0, 30, 40)); 294 window_state->SetRestoreBoundsInScreen(gfx::Rect(295, 0, 30, 40));
288 window->SetShowState(ui::SHOW_STATE_FULLSCREEN); 295 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN);
289 EXPECT_EQ(root_windows[1], window->GetRootWindow()); 296 EXPECT_EQ(root_windows[1], window->GetRootWindow());
290 EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString()); 297 EXPECT_EQ("300,0 400x500", window->GetBoundsInScreen().ToString());
291 298
292 window_state->Restore(); 299 window_state->Restore();
293 EXPECT_EQ(root_windows[1], window->GetRootWindow()); 300 EXPECT_EQ(root_windows[1], window->GetRootWindow());
294 EXPECT_EQ("295,0 30x40", window->GetBoundsInScreen().ToString()); 301 EXPECT_EQ("295,0 30x40", window->GetBoundsInScreen().ToString());
295 } 302 }
296 303
297 // aura::WindowObserver implementation used by 304 // aura::WindowObserver implementation used by
298 // DontClobberRestoreBoundsWindowObserver. This code mirrors what 305 // DontClobberRestoreBoundsWindowObserver. This code mirrors what
299 // BrowserFrameAsh does. In particular when this code sees the window was 306 // BrowserFrameAsh does. In particular when this code sees the window was
300 // maximized it changes the bounds of a secondary window. The secondary window 307 // maximized it changes the bounds of a secondary window. The secondary window
301 // mirrors the status window. 308 // mirrors the status window.
302 class DontClobberRestoreBoundsWindowObserver : public aura::WindowObserver { 309 class DontClobberRestoreBoundsWindowObserver : public aura::WindowObserver {
303 public: 310 public:
304 DontClobberRestoreBoundsWindowObserver() : window_(nullptr) {} 311 DontClobberRestoreBoundsWindowObserver() : window_(nullptr) {}
305 312
306 void set_window(WmWindow* window) { window_ = window; } 313 void set_window(aura::Window* window) { window_ = window; }
307 314
308 // aura::WindowObserver: 315 // aura::WindowObserver:
309 void OnWindowPropertyChanged(aura::Window* window, 316 void OnWindowPropertyChanged(aura::Window* window,
310 const void* key, 317 const void* key,
311 intptr_t old) override { 318 intptr_t old) override {
312 if (!window_) 319 if (!window_)
313 return; 320 return;
314 321
315 if (wm::GetWindowState(window)->IsMaximized()) { 322 if (wm::GetWindowState(window)->IsMaximized()) {
316 WmWindow* w = window_; 323 aura::Window* w = window_;
317 window_ = nullptr; 324 window_ = nullptr;
318 325
319 gfx::Rect shelf_bounds(AshTest::GetPrimaryShelf()->GetIdealBounds()); 326 gfx::Rect shelf_bounds(
320 const gfx::Rect& window_bounds(w->GetBounds()); 327 test::AshTestBase::GetPrimaryShelf()->GetIdealBounds());
328 const gfx::Rect& window_bounds(w->bounds());
321 w->SetBounds(gfx::Rect(window_bounds.x(), shelf_bounds.y() - 1, 329 w->SetBounds(gfx::Rect(window_bounds.x(), shelf_bounds.y() - 1,
322 window_bounds.width(), window_bounds.height())); 330 window_bounds.width(), window_bounds.height()));
323 } 331 }
324 } 332 }
325 333
326 private: 334 private:
327 WmWindow* window_; 335 aura::Window* window_;
328 336
329 DISALLOW_COPY_AND_ASSIGN(DontClobberRestoreBoundsWindowObserver); 337 DISALLOW_COPY_AND_ASSIGN(DontClobberRestoreBoundsWindowObserver);
330 }; 338 };
331 339
332 // Creates a window, maximized the window and from within the maximized 340 // Creates a window, maximized the window and from within the maximized
333 // notification sets the bounds of a window to overlap the shelf. Verifies this 341 // notification sets the bounds of a window to overlap the shelf. Verifies this
334 // doesn't effect the restore bounds. 342 // doesn't effect the restore bounds.
335 TEST_F(WorkspaceLayoutManagerTest, DontClobberRestoreBounds) { 343 TEST_F(WorkspaceLayoutManagerTest, DontClobberRestoreBounds) {
336 DontClobberRestoreBoundsWindowObserver window_observer; 344 DontClobberRestoreBoundsWindowObserver window_observer;
337 std::unique_ptr<aura::Window> window( 345 std::unique_ptr<aura::Window> window(
338 base::MakeUnique<aura::Window>(nullptr, ui::wm::WINDOW_TYPE_NORMAL)); 346 base::MakeUnique<aura::Window>(nullptr, ui::wm::WINDOW_TYPE_NORMAL));
339 window->Init(ui::LAYER_TEXTURED); 347 window->Init(ui::LAYER_TEXTURED);
340 window->SetBounds(gfx::Rect(10, 20, 30, 40)); 348 window->SetBounds(gfx::Rect(10, 20, 30, 40));
341 // NOTE: for this test to exercise the failure the observer needs to be added 349 // NOTE: for this test to exercise the failure the observer needs to be added
342 // before the parent set. This mimics what BrowserFrameAsh does. 350 // before the parent set. This mimics what BrowserFrameAsh does.
343 window->AddObserver(&window_observer); 351 window->AddObserver(&window_observer);
344 ParentWindowInPrimaryRootWindow(WmWindow::Get(window.get())); 352 ParentWindowInPrimaryRootWindow(window.get());
345 window->Show(); 353 window->Show();
346 354
347 wm::WindowState* window_state = wm::GetWindowState(window.get()); 355 wm::WindowState* window_state = wm::GetWindowState(window.get());
348 window_state->Activate(); 356 window_state->Activate();
349 357
350 std::unique_ptr<WindowOwner> window2_owner( 358 std::unique_ptr<aura::Window> window2(
351 CreateTestWindow(gfx::Rect(12, 20, 30, 40))); 359 CreateTestWindow(gfx::Rect(12, 20, 30, 40)));
352 WmWindow* window2 = window2_owner->window(); 360 ::wm::AddTransientChild(window.get(), window2.get());
353 AddTransientChild(WmWindow::Get(window.get()), window2);
354 window2->Show(); 361 window2->Show();
355 362
356 window_observer.set_window(window2); 363 window_observer.set_window(window2.get());
357 window_state->Maximize(); 364 window_state->Maximize();
358 EXPECT_EQ("10,20 30x40", window_state->GetRestoreBoundsInScreen().ToString()); 365 EXPECT_EQ("10,20 30x40", window_state->GetRestoreBoundsInScreen().ToString());
359 window->RemoveObserver(&window_observer); 366 window->RemoveObserver(&window_observer);
360 } 367 }
361 368
362 // Verifies when a window is maximized all descendant windows have a size. 369 // Verifies when a window is maximized all descendant windows have a size.
363 TEST_F(WorkspaceLayoutManagerTest, ChildBoundsResetOnMaximize) { 370 TEST_F(WorkspaceLayoutManagerTest, ChildBoundsResetOnMaximize) {
364 std::unique_ptr<WindowOwner> window_owner( 371 std::unique_ptr<aura::Window> window(
365 CreateTestWindow(gfx::Rect(10, 20, 30, 40))); 372 CreateTestWindow(gfx::Rect(10, 20, 30, 40)));
366 WmWindow* window = window_owner->window();
367 window->Show(); 373 window->Show();
368 wm::WindowState* window_state = window->GetWindowState(); 374 wm::WindowState* window_state = wm::GetWindowState(window.get());
369 window_state->Activate(); 375 window_state->Activate();
370 std::unique_ptr<WindowOwner> child_window_owner( 376 std::unique_ptr<aura::Window> child_window(
371 CreateChildWindow(window, gfx::Rect(5, 6, 7, 8))); 377 CreateChildWindow(window.get(), gfx::Rect(5, 6, 7, 8)));
372 WmWindow* child_window = child_window_owner->window();
373 window_state->Maximize(); 378 window_state->Maximize();
374 EXPECT_EQ("5,6 7x8", child_window->GetBounds().ToString()); 379 EXPECT_EQ("5,6 7x8", child_window->bounds().ToString());
375 } 380 }
376 381
377 // Verifies a window created with maximized state has the maximized 382 // Verifies a window created with maximized state has the maximized
378 // bounds. 383 // bounds.
379 TEST_F(WorkspaceLayoutManagerTest, MaximizeWithEmptySize) { 384 TEST_F(WorkspaceLayoutManagerTest, MaximizeWithEmptySize) {
380 std::unique_ptr<aura::Window> window( 385 std::unique_ptr<aura::Window> window(
381 base::MakeUnique<aura::Window>(nullptr, ui::wm::WINDOW_TYPE_NORMAL)); 386 base::MakeUnique<aura::Window>(nullptr, ui::wm::WINDOW_TYPE_NORMAL));
382 window->Init(ui::LAYER_TEXTURED); 387 window->Init(ui::LAYER_TEXTURED);
383 wm::GetWindowState(window.get())->Maximize(); 388 wm::GetWindowState(window.get())->Maximize();
384 WmWindow* default_container = 389 WmWindow* default_container =
385 ShellPort::Get()->GetPrimaryRootWindowController()->GetWmContainer( 390 Shell::GetPrimaryRootWindowController()->GetWmContainer(
386 kShellWindowId_DefaultContainer); 391 kShellWindowId_DefaultContainer);
387 default_container->aura_window()->AddChild(window.get()); 392 default_container->aura_window()->AddChild(window.get());
388 window->Show(); 393 window->Show();
389 gfx::Rect work_area( 394 gfx::Rect work_area(
390 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); 395 display::Screen::GetScreen()->GetPrimaryDisplay().work_area());
391 EXPECT_EQ(work_area.ToString(), window->GetBoundsInScreen().ToString()); 396 EXPECT_EQ(work_area.ToString(), window->GetBoundsInScreen().ToString());
392 } 397 }
393 398
394 TEST_F(WorkspaceLayoutManagerTest, WindowShouldBeOnScreenWhenAdded) { 399 TEST_F(WorkspaceLayoutManagerTest, WindowShouldBeOnScreenWhenAdded) {
395 // TODO: fix. This test verifies that when a window is added the bounds are 400 // TODO: fix. This test verifies that when a window is added the bounds are
396 // adjusted. CreateTestWindow() for mus adds, then sets the bounds (this comes 401 // adjusted. CreateTestWindow() for mus adds, then sets the bounds (this comes
397 // from NativeWidgetAura), which means this test now fails for aura-mus. 402 // from NativeWidgetAura), which means this test now fails for aura-mus.
398 if (Shell::GetAshConfig() == Config::MASH) 403 if (Shell::GetAshConfig() == Config::MASH)
399 return; 404 return;
400 405
401 // Normal window bounds shouldn't be changed. 406 // Normal window bounds shouldn't be changed.
402 gfx::Rect window_bounds(100, 100, 200, 200); 407 gfx::Rect window_bounds(100, 100, 200, 200);
403 std::unique_ptr<WindowOwner> window_owner(CreateTestWindow(window_bounds)); 408 std::unique_ptr<aura::Window> window(CreateTestWindow(window_bounds));
404 WmWindow* window = window_owner->window(); 409 EXPECT_EQ(window_bounds, window->bounds());
405 EXPECT_EQ(window_bounds, window->GetBounds());
406 410
407 // If the window is out of the workspace, it would be moved on screen. 411 // If the window is out of the workspace, it would be moved on screen.
408 gfx::Rect root_window_bounds = 412 gfx::Rect root_window_bounds = Shell::GetPrimaryRootWindow()->bounds();
409 ShellPort::Get()->GetPrimaryRootWindow()->GetBounds();
410 window_bounds.Offset(root_window_bounds.width(), root_window_bounds.height()); 413 window_bounds.Offset(root_window_bounds.width(), root_window_bounds.height());
411 ASSERT_FALSE(window_bounds.Intersects(root_window_bounds)); 414 ASSERT_FALSE(window_bounds.Intersects(root_window_bounds));
412 std::unique_ptr<WindowOwner> out_window_owner( 415 std::unique_ptr<aura::Window> out_window(CreateTestWindow(window_bounds));
413 CreateTestWindow(window_bounds)); 416 EXPECT_EQ(window_bounds.size(), out_window->bounds().size());
414 WmWindow* out_window = out_window_owner->window(); 417 gfx::Rect bounds = out_window->bounds();
415 EXPECT_EQ(window_bounds.size(), out_window->GetBounds().size());
416 gfx::Rect bounds = out_window->GetBounds();
417 bounds.Intersect(root_window_bounds); 418 bounds.Intersect(root_window_bounds);
418 419
419 // 30% of the window edge must be visible. 420 // 30% of the window edge must be visible.
420 EXPECT_GT(bounds.width(), out_window->GetBounds().width() * 0.29); 421 EXPECT_GT(bounds.width(), out_window->bounds().width() * 0.29);
421 EXPECT_GT(bounds.height(), out_window->GetBounds().height() * 0.29); 422 EXPECT_GT(bounds.height(), out_window->bounds().height() * 0.29);
422 423
423 WmWindow* parent = out_window->GetParent(); 424 aura::Window* parent = out_window->parent();
424 parent->RemoveChild(out_window); 425 parent->RemoveChild(out_window.get());
425 out_window->SetBounds(gfx::Rect(-200, -200, 200, 200)); 426 out_window->SetBounds(gfx::Rect(-200, -200, 200, 200));
426 // UserHasChangedWindowPositionOrSize flag shouldn't turn off this behavior. 427 // UserHasChangedWindowPositionOrSize flag shouldn't turn off this behavior.
427 window->GetWindowState()->set_bounds_changed_by_user(true); 428 wm::GetWindowState(window.get())->set_bounds_changed_by_user(true);
428 parent->AddChild(out_window); 429 parent->AddChild(out_window.get());
429 EXPECT_GT(bounds.width(), out_window->GetBounds().width() * 0.29); 430 EXPECT_GT(bounds.width(), out_window->bounds().width() * 0.29);
430 EXPECT_GT(bounds.height(), out_window->GetBounds().height() * 0.29); 431 EXPECT_GT(bounds.height(), out_window->bounds().height() * 0.29);
431 432
432 // Make sure we always make more than 1/3 of the window edge visible even 433 // Make sure we always make more than 1/3 of the window edge visible even
433 // if the initial bounds intersects with display. 434 // if the initial bounds intersects with display.
434 window_bounds.SetRect(-150, -150, 200, 200); 435 window_bounds.SetRect(-150, -150, 200, 200);
435 bounds = window_bounds; 436 bounds = window_bounds;
436 bounds.Intersect(root_window_bounds); 437 bounds.Intersect(root_window_bounds);
437 438
438 // Make sure that the initial bounds' visible area is less than 26% 439 // Make sure that the initial bounds' visible area is less than 26%
439 // so that the auto adjustment logic kicks in. 440 // so that the auto adjustment logic kicks in.
440 ASSERT_LT(bounds.width(), out_window->GetBounds().width() * 0.26); 441 ASSERT_LT(bounds.width(), out_window->bounds().width() * 0.26);
441 ASSERT_LT(bounds.height(), out_window->GetBounds().height() * 0.26); 442 ASSERT_LT(bounds.height(), out_window->bounds().height() * 0.26);
442 ASSERT_TRUE(window_bounds.Intersects(root_window_bounds)); 443 ASSERT_TRUE(window_bounds.Intersects(root_window_bounds));
443 444
444 std::unique_ptr<WindowOwner> partially_out_window_owner( 445 std::unique_ptr<aura::Window> partially_out_window(
445 CreateTestWindow(window_bounds)); 446 CreateTestWindow(window_bounds));
446 WmWindow* partially_out_window = partially_out_window_owner->window(); 447 EXPECT_EQ(window_bounds.size(), partially_out_window->bounds().size());
447 EXPECT_EQ(window_bounds.size(), partially_out_window->GetBounds().size()); 448 bounds = partially_out_window->bounds();
448 bounds = partially_out_window->GetBounds();
449 bounds.Intersect(root_window_bounds); 449 bounds.Intersect(root_window_bounds);
450 EXPECT_GT(bounds.width(), out_window->GetBounds().width() * 0.29); 450 EXPECT_GT(bounds.width(), out_window->bounds().width() * 0.29);
451 EXPECT_GT(bounds.height(), out_window->GetBounds().height() * 0.29); 451 EXPECT_GT(bounds.height(), out_window->bounds().height() * 0.29);
452 452
453 // Make sure the window whose 30% width/height is bigger than display 453 // Make sure the window whose 30% width/height is bigger than display
454 // will be placed correctly. 454 // will be placed correctly.
455 window_bounds.SetRect(-1900, -1900, 3000, 3000); 455 window_bounds.SetRect(-1900, -1900, 3000, 3000);
456 std::unique_ptr<WindowOwner> window_bigger_than_display_owner( 456 std::unique_ptr<aura::Window> window_bigger_than_display(
457 CreateTestWindow(window_bounds)); 457 CreateTestWindow(window_bounds));
458 WmWindow* window_bigger_than_display =
459 window_bigger_than_display_owner->window();
460 EXPECT_GE(root_window_bounds.width(), 458 EXPECT_GE(root_window_bounds.width(),
461 window_bigger_than_display->GetBounds().width()); 459 window_bigger_than_display->bounds().width());
462 EXPECT_GE(root_window_bounds.height(), 460 EXPECT_GE(root_window_bounds.height(),
463 window_bigger_than_display->GetBounds().height()); 461 window_bigger_than_display->bounds().height());
464 462
465 bounds = window_bigger_than_display->GetBounds(); 463 bounds = window_bigger_than_display->bounds();
466 bounds.Intersect(root_window_bounds); 464 bounds.Intersect(root_window_bounds);
467 EXPECT_GT(bounds.width(), out_window->GetBounds().width() * 0.29); 465 EXPECT_GT(bounds.width(), out_window->bounds().width() * 0.29);
468 EXPECT_GT(bounds.height(), out_window->GetBounds().height() * 0.29); 466 EXPECT_GT(bounds.height(), out_window->bounds().height() * 0.29);
469 } 467 }
470 468
471 // Verifies the size of a window is enforced to be smaller than the work area. 469 // Verifies the size of a window is enforced to be smaller than the work area.
472 TEST_F(WorkspaceLayoutManagerTest, SizeToWorkArea) { 470 TEST_F(WorkspaceLayoutManagerTest, SizeToWorkArea) {
473 // Normal window bounds shouldn't be changed. 471 // Normal window bounds shouldn't be changed.
474 gfx::Size work_area( 472 gfx::Size work_area(
475 display::Screen::GetScreen()->GetPrimaryDisplay().work_area().size()); 473 display::Screen::GetScreen()->GetPrimaryDisplay().work_area().size());
476 const gfx::Rect window_bounds(100, 101, work_area.width() + 1, 474 const gfx::Rect window_bounds(100, 101, work_area.width() + 1,
477 work_area.height() + 2); 475 work_area.height() + 2);
478 std::unique_ptr<WindowOwner> window_owner(CreateTestWindow(window_bounds)); 476 std::unique_ptr<aura::Window> window(CreateTestWindow(window_bounds));
479 WmWindow* window = window_owner->window();
480 // TODO: fix. This test verifies that when a window is added the bounds are 477 // TODO: fix. This test verifies that when a window is added the bounds are
481 // adjusted. CreateTestWindow() for mus adds, then sets the bounds (this comes 478 // adjusted. CreateTestWindow() for mus adds, then sets the bounds (this comes
482 // from NativeWidgetAura), which means this test now fails for aura-mus. 479 // from NativeWidgetAura), which means this test now fails for aura-mus.
483 if (Shell::GetAshConfig() == Config::CLASSIC) { 480 if (Shell::GetAshConfig() == Config::CLASSIC) {
484 EXPECT_EQ(gfx::Rect(gfx::Point(100, 101), work_area).ToString(), 481 EXPECT_EQ(gfx::Rect(gfx::Point(100, 101), work_area).ToString(),
485 window->GetBounds().ToString()); 482 window->bounds().ToString());
486 } 483 }
487 484
488 // Directly setting the bounds triggers a slightly different code path. Verify 485 // Directly setting the bounds triggers a slightly different code path. Verify
489 // that too. 486 // that too.
490 window->SetBounds(window_bounds); 487 window->SetBounds(window_bounds);
491 EXPECT_EQ(gfx::Rect(gfx::Point(100, 101), work_area).ToString(), 488 EXPECT_EQ(gfx::Rect(gfx::Point(100, 101), work_area).ToString(),
492 window->GetBounds().ToString()); 489 window->bounds().ToString());
493 } 490 }
494 491
495 TEST_F(WorkspaceLayoutManagerTest, NotifyFullscreenChanges) { 492 TEST_F(WorkspaceLayoutManagerTest, NotifyFullscreenChanges) {
496 TestShellObserver observer; 493 TestShellObserver observer;
497 std::unique_ptr<WindowOwner> window1_owner( 494 std::unique_ptr<aura::Window> window1(
498 CreateTestWindow(gfx::Rect(1, 2, 30, 40))); 495 CreateTestWindow(gfx::Rect(1, 2, 30, 40)));
499 WmWindow* window1 = window1_owner->window(); 496 std::unique_ptr<aura::Window> window2(
500 std::unique_ptr<WindowOwner> window2_owner(
501 CreateTestWindow(gfx::Rect(1, 2, 30, 40))); 497 CreateTestWindow(gfx::Rect(1, 2, 30, 40)));
502 WmWindow* window2 = window2_owner->window(); 498 wm::WindowState* window_state1 = wm::GetWindowState(window1.get());
503 wm::WindowState* window_state1 = window1->GetWindowState(); 499 wm::WindowState* window_state2 = wm::GetWindowState(window2.get());
504 wm::WindowState* window_state2 = window2->GetWindowState();
505 window_state2->Activate(); 500 window_state2->Activate();
506 501
507 const wm::WMEvent toggle_fullscreen_event(wm::WM_EVENT_TOGGLE_FULLSCREEN); 502 const wm::WMEvent toggle_fullscreen_event(wm::WM_EVENT_TOGGLE_FULLSCREEN);
508 window_state2->OnWMEvent(&toggle_fullscreen_event); 503 window_state2->OnWMEvent(&toggle_fullscreen_event);
509 EXPECT_EQ(1, observer.call_count()); 504 EXPECT_EQ(1, observer.call_count());
510 EXPECT_TRUE(observer.is_fullscreen()); 505 EXPECT_TRUE(observer.is_fullscreen());
511 506
512 // When window1 moves to the front the fullscreen state should change. 507 // When window1 moves to the front the fullscreen state should change.
513 window_state1->Activate(); 508 window_state1->Activate();
514 EXPECT_EQ(2, observer.call_count()); 509 EXPECT_EQ(2, observer.call_count());
515 EXPECT_FALSE(observer.is_fullscreen()); 510 EXPECT_FALSE(observer.is_fullscreen());
516 511
517 // It should change back if window2 becomes active again. 512 // It should change back if window2 becomes active again.
518 window_state2->Activate(); 513 window_state2->Activate();
519 EXPECT_EQ(3, observer.call_count()); 514 EXPECT_EQ(3, observer.call_count());
520 EXPECT_TRUE(observer.is_fullscreen()); 515 EXPECT_TRUE(observer.is_fullscreen());
521 516
522 window_state2->OnWMEvent(&toggle_fullscreen_event); 517 window_state2->OnWMEvent(&toggle_fullscreen_event);
523 EXPECT_EQ(4, observer.call_count()); 518 EXPECT_EQ(4, observer.call_count());
524 EXPECT_FALSE(observer.is_fullscreen()); 519 EXPECT_FALSE(observer.is_fullscreen());
525 520
526 window_state2->OnWMEvent(&toggle_fullscreen_event); 521 window_state2->OnWMEvent(&toggle_fullscreen_event);
527 EXPECT_EQ(5, observer.call_count()); 522 EXPECT_EQ(5, observer.call_count());
528 EXPECT_TRUE(observer.is_fullscreen()); 523 EXPECT_TRUE(observer.is_fullscreen());
529 524
530 // Closing the window should change the fullscreen state. 525 // Closing the window should change the fullscreen state.
531 window2_owner.reset(); 526 window2.reset();
532 EXPECT_EQ(6, observer.call_count()); 527 EXPECT_EQ(6, observer.call_count());
533 EXPECT_FALSE(observer.is_fullscreen()); 528 EXPECT_FALSE(observer.is_fullscreen());
534 } 529 }
535 530
536 // For crbug.com/673803, snapped window may not adjust snapped bounds on work 531 // For crbug.com/673803, snapped window may not adjust snapped bounds on work
537 // area changed properly if window's layer is doing animation. We should use 532 // area changed properly if window's layer is doing animation. We should use
538 // GetTargetBounds to check if snapped bounds need to be changed. 533 // GetTargetBounds to check if snapped bounds need to be changed.
539 TEST_F(WorkspaceLayoutManagerTest, 534 TEST_F(WorkspaceLayoutManagerTest,
540 SnappedWindowMayNotAdjustBoundsOnWorkAreaChanged) { 535 SnappedWindowMayNotAdjustBoundsOnWorkAreaChanged) {
541 UpdateDisplay("300x400"); 536 UpdateDisplay("300x400");
542 std::unique_ptr<WindowOwner> window_owner( 537 std::unique_ptr<aura::Window> window(
543 CreateTestWindow(gfx::Rect(10, 20, 100, 200))); 538 CreateTestWindow(gfx::Rect(10, 20, 100, 200)));
544 WmWindow* window = window_owner->window(); 539 wm::WindowState* window_state = wm::GetWindowState(window.get());
545 wm::WindowState* window_state = window->GetWindowState();
546 gfx::Insets insets(0, 0, 50, 0); 540 gfx::Insets insets(0, 0, 50, 0);
547 ShellPort::Get()->SetDisplayWorkAreaInsets(window, insets); 541 ShellPort::Get()->SetDisplayWorkAreaInsets(WmWindow::Get(window.get()),
542 insets);
548 const wm::WMEvent snap_left(wm::WM_EVENT_SNAP_LEFT); 543 const wm::WMEvent snap_left(wm::WM_EVENT_SNAP_LEFT);
549 window_state->OnWMEvent(&snap_left); 544 window_state->OnWMEvent(&snap_left);
550 EXPECT_EQ(wm::WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType()); 545 EXPECT_EQ(wm::WINDOW_STATE_TYPE_LEFT_SNAPPED, window_state->GetStateType());
551 const gfx::Rect kWorkAreaBounds = 546 const gfx::Rect kWorkAreaBounds =
552 display::Screen::GetScreen()->GetPrimaryDisplay().work_area(); 547 display::Screen::GetScreen()->GetPrimaryDisplay().work_area();
553 gfx::Rect expected_bounds = 548 gfx::Rect expected_bounds =
554 gfx::Rect(kWorkAreaBounds.x(), kWorkAreaBounds.y(), 549 gfx::Rect(kWorkAreaBounds.x(), kWorkAreaBounds.y(),
555 kWorkAreaBounds.width() / 2, kWorkAreaBounds.height()); 550 kWorkAreaBounds.width() / 2, kWorkAreaBounds.height());
556 EXPECT_EQ(expected_bounds.ToString(), window->GetBounds().ToString()); 551 EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString());
557 552
558 ui::ScopedAnimationDurationScaleMode test_duration_mode( 553 ui::ScopedAnimationDurationScaleMode test_duration_mode(
559 ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION); 554 ui::ScopedAnimationDurationScaleMode::NON_ZERO_DURATION);
560 // The following two SetDisplayWorkAreaInsets calls simulate the case of 555 // The following two SetDisplayWorkAreaInsets calls simulate the case of
561 // crbug.com/673803 that work area first becomes fullscreen and then returns 556 // crbug.com/673803 that work area first becomes fullscreen and then returns
562 // to the original state. 557 // to the original state.
563 ShellPort::Get()->SetDisplayWorkAreaInsets(window, gfx::Insets(0, 0, 0, 0)); 558 ShellPort::Get()->SetDisplayWorkAreaInsets(WmWindow::Get(window.get()),
564 ui::LayerAnimator* animator = window->GetLayer()->GetAnimator(); 559 gfx::Insets(0, 0, 0, 0));
560 ui::LayerAnimator* animator = window->layer()->GetAnimator();
565 EXPECT_TRUE(animator->is_animating()); 561 EXPECT_TRUE(animator->is_animating());
566 ShellPort::Get()->SetDisplayWorkAreaInsets(window, insets); 562 ShellPort::Get()->SetDisplayWorkAreaInsets(WmWindow::Get(window.get()),
563 insets);
567 animator->StopAnimating(); 564 animator->StopAnimating();
568 EXPECT_FALSE(animator->is_animating()); 565 EXPECT_FALSE(animator->is_animating());
569 EXPECT_EQ(expected_bounds.ToString(), window->GetBounds().ToString()); 566 EXPECT_EQ(expected_bounds.ToString(), window->bounds().ToString());
570 } 567 }
571 568
572 // Do not adjust window bounds to ensure minimum visibility for transient 569 // Do not adjust window bounds to ensure minimum visibility for transient
573 // windows (crbug.com/624806). 570 // windows (crbug.com/624806).
574 TEST_F(WorkspaceLayoutManagerTest, 571 TEST_F(WorkspaceLayoutManagerTest,
575 DoNotAdjustTransientWindowBoundsToEnsureMinimumVisibility) { 572 DoNotAdjustTransientWindowBoundsToEnsureMinimumVisibility) {
576 UpdateDisplay("300x400"); 573 UpdateDisplay("300x400");
577 std::unique_ptr<aura::Window> window( 574 std::unique_ptr<aura::Window> window(
578 base::MakeUnique<aura::Window>(nullptr, ui::wm::WINDOW_TYPE_NORMAL)); 575 base::MakeUnique<aura::Window>(nullptr, ui::wm::WINDOW_TYPE_NORMAL));
579 window->Init(ui::LAYER_TEXTURED); 576 window->Init(ui::LAYER_TEXTURED);
580 window->SetBounds(gfx::Rect(10, 0, 100, 200)); 577 window->SetBounds(gfx::Rect(10, 0, 100, 200));
581 ParentWindowInPrimaryRootWindow(WmWindow::Get(window.get())); 578 ParentWindowInPrimaryRootWindow(window.get());
582 window->Show(); 579 window->Show();
583 580
584 std::unique_ptr<WindowOwner> window2_owner( 581 std::unique_ptr<aura::Window> window2(
585 CreateTestWindow(gfx::Rect(10, 0, 40, 20))); 582 CreateTestWindow(gfx::Rect(10, 0, 40, 20)));
586 WmWindow* window2 = window2_owner->window(); 583 ::wm::AddTransientChild(window.get(), window2.get());
587 AddTransientChild(WmWindow::Get(window.get()), window2);
588 window2->Show(); 584 window2->Show();
589 585
590 gfx::Rect expected_bounds = window2->GetBounds(); 586 gfx::Rect expected_bounds = window2->bounds();
591 ShellPort::Get()->SetDisplayWorkAreaInsets(WmWindow::Get(window.get()), 587 ShellPort::Get()->SetDisplayWorkAreaInsets(WmWindow::Get(window.get()),
592 gfx::Insets(50, 0, 0, 0)); 588 gfx::Insets(50, 0, 0, 0));
593 EXPECT_EQ(expected_bounds.ToString(), window2->GetBounds().ToString()); 589 EXPECT_EQ(expected_bounds.ToString(), window2->bounds().ToString());
594 } 590 }
595 591
596 // Following "Solo" tests were originally written for BaseLayoutManager. 592 // Following "Solo" tests were originally written for BaseLayoutManager.
597 using WorkspaceLayoutManagerSoloTest = test::AshTestBase; 593 using WorkspaceLayoutManagerSoloTest = test::AshTestBase;
598 594
599 // Tests normal->maximize->normal. 595 // Tests normal->maximize->normal.
600 TEST_F(WorkspaceLayoutManagerSoloTest, Maximize) { 596 TEST_F(WorkspaceLayoutManagerSoloTest, Maximize) {
601 gfx::Rect bounds(100, 100, 200, 200); 597 gfx::Rect bounds(100, 100, 200, 200);
602 std::unique_ptr<aura::Window> window_owner( 598 std::unique_ptr<aura::Window> window(
603 CreateTestWindowInShellWithBounds(bounds)); 599 CreateTestWindowInShellWithBounds(bounds));
604 WmWindow* window = WmWindow::Get(window_owner.get()); 600 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
605 window->SetShowState(ui::SHOW_STATE_MAXIMIZED);
606 // Maximized window fills the work area, not the whole display. 601 // Maximized window fills the work area, not the whole display.
607 EXPECT_EQ(wm::GetMaximizedWindowBoundsInParent(window).ToString(), 602 EXPECT_EQ(
608 window->GetBounds().ToString()); 603 ScreenUtil::GetMaximizedWindowBoundsInParent(window.get()).ToString(),
609 window->SetShowState(ui::SHOW_STATE_NORMAL); 604 window->bounds().ToString());
610 EXPECT_EQ(bounds.ToString(), window->GetBounds().ToString()); 605 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
606 EXPECT_EQ(bounds.ToString(), window->bounds().ToString());
611 } 607 }
612 608
613 // Tests normal->minimize->normal. 609 // Tests normal->minimize->normal.
614 TEST_F(WorkspaceLayoutManagerSoloTest, Minimize) { 610 TEST_F(WorkspaceLayoutManagerSoloTest, Minimize) {
615 gfx::Rect bounds(100, 100, 200, 200); 611 gfx::Rect bounds(100, 100, 200, 200);
616 std::unique_ptr<aura::Window> window_owner( 612 std::unique_ptr<aura::Window> window(
617 CreateTestWindowInShellWithBounds(bounds)); 613 CreateTestWindowInShellWithBounds(bounds));
618 WmWindow* window = WmWindow::Get(window_owner.get()); 614 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MINIMIZED);
619 window->SetShowState(ui::SHOW_STATE_MINIMIZED);
620 EXPECT_FALSE(window->IsVisible()); 615 EXPECT_FALSE(window->IsVisible());
621 EXPECT_TRUE(window->GetWindowState()->IsMinimized()); 616 EXPECT_TRUE(wm::GetWindowState(window.get())->IsMinimized());
622 EXPECT_EQ(bounds, window->GetBounds()); 617 EXPECT_EQ(bounds, window->bounds());
623 window->SetShowState(ui::SHOW_STATE_NORMAL); 618 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
624 EXPECT_TRUE(window->IsVisible()); 619 EXPECT_TRUE(window->IsVisible());
625 EXPECT_FALSE(window->GetWindowState()->IsMinimized()); 620 EXPECT_FALSE(wm::GetWindowState(window.get())->IsMinimized());
626 EXPECT_EQ(bounds, window->GetBounds()); 621 EXPECT_EQ(bounds, window->bounds());
627 } 622 }
628 623
629 // A aura::WindowObserver which sets the focus when the window becomes visible. 624 // A aura::WindowObserver which sets the focus when the window becomes visible.
630 class FocusDuringUnminimizeWindowObserver : public aura::WindowObserver { 625 class FocusDuringUnminimizeWindowObserver : public aura::WindowObserver {
631 public: 626 public:
632 FocusDuringUnminimizeWindowObserver() 627 FocusDuringUnminimizeWindowObserver()
633 : window_(nullptr), show_state_(ui::SHOW_STATE_END) {} 628 : window_(nullptr), show_state_(ui::SHOW_STATE_END) {}
634 ~FocusDuringUnminimizeWindowObserver() override { SetWindow(nullptr); } 629 ~FocusDuringUnminimizeWindowObserver() override { SetWindow(nullptr); }
635 630
636 void SetWindow(WmWindow* window) { 631 void SetWindow(aura::Window* window) {
637 if (window_) 632 if (window_)
638 window_->aura_window()->RemoveObserver(this); 633 window_->RemoveObserver(this);
639 window_ = window; 634 window_ = window;
640 if (window_) 635 if (window_)
641 window_->aura_window()->AddObserver(this); 636 window_->AddObserver(this);
642 } 637 }
643 638
644 // aura::WindowObserver: 639 // aura::WindowObserver:
645 void OnWindowVisibilityChanged(aura::Window* window, bool visible) override { 640 void OnWindowVisibilityChanged(aura::Window* window, bool visible) override {
646 if (window_) { 641 if (window_) {
647 if (visible) 642 if (visible)
648 window_->SetFocused(); 643 aura::client::GetFocusClient(window_)->FocusWindow(window_);
649 show_state_ = window_->GetShowState(); 644 show_state_ = window_->GetProperty(aura::client::kShowStateKey);
650 } 645 }
651 } 646 }
652 647
653 ui::WindowShowState GetShowStateAndReset() { 648 ui::WindowShowState GetShowStateAndReset() {
654 ui::WindowShowState ret = show_state_; 649 ui::WindowShowState ret = show_state_;
655 show_state_ = ui::SHOW_STATE_END; 650 show_state_ = ui::SHOW_STATE_END;
656 return ret; 651 return ret;
657 } 652 }
658 653
659 private: 654 private:
660 WmWindow* window_; 655 aura::Window* window_;
661 ui::WindowShowState show_state_; 656 ui::WindowShowState show_state_;
662 657
663 DISALLOW_COPY_AND_ASSIGN(FocusDuringUnminimizeWindowObserver); 658 DISALLOW_COPY_AND_ASSIGN(FocusDuringUnminimizeWindowObserver);
664 }; 659 };
665 660
666 // Make sure that the window's show state is correct in 661 // Make sure that the window's show state is correct in
667 // WindowObserver::OnWindowTargetVisibilityChanged(), and setting focus in this 662 // WindowObserver::OnWindowTargetVisibilityChanged(), and setting focus in this
668 // callback doesn't cause DCHECK error. See crbug.com/168383. 663 // callback doesn't cause DCHECK error. See crbug.com/168383.
669 TEST_F(WorkspaceLayoutManagerSoloTest, FocusDuringUnminimize) { 664 TEST_F(WorkspaceLayoutManagerSoloTest, FocusDuringUnminimize) {
670 FocusDuringUnminimizeWindowObserver observer; 665 FocusDuringUnminimizeWindowObserver observer;
671 std::unique_ptr<aura::Window> window_owner( 666 std::unique_ptr<aura::Window> window(
672 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100))); 667 CreateTestWindowInShellWithBounds(gfx::Rect(100, 100, 100, 100)));
673 WmWindow* window = WmWindow::Get(window_owner.get()); 668 observer.SetWindow(window.get());
674 observer.SetWindow(window); 669 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MINIMIZED);
675 window->SetShowState(ui::SHOW_STATE_MINIMIZED);
676 EXPECT_FALSE(window->IsVisible()); 670 EXPECT_FALSE(window->IsVisible());
677 EXPECT_EQ(ui::SHOW_STATE_MINIMIZED, observer.GetShowStateAndReset()); 671 EXPECT_EQ(ui::SHOW_STATE_MINIMIZED, observer.GetShowStateAndReset());
678 window->Show(); 672 window->Show();
679 EXPECT_TRUE(window->IsVisible()); 673 EXPECT_TRUE(window->IsVisible());
680 EXPECT_EQ(ui::SHOW_STATE_NORMAL, observer.GetShowStateAndReset()); 674 EXPECT_EQ(ui::SHOW_STATE_NORMAL, observer.GetShowStateAndReset());
681 observer.SetWindow(nullptr); 675 observer.SetWindow(nullptr);
682 } 676 }
683 677
684 // Tests maximized window size during root window resize. 678 // Tests maximized window size during root window resize.
685 TEST_F(WorkspaceLayoutManagerSoloTest, MaximizeRootWindowResize) { 679 TEST_F(WorkspaceLayoutManagerSoloTest, MaximizeRootWindowResize) {
686 gfx::Rect bounds(100, 100, 200, 200); 680 gfx::Rect bounds(100, 100, 200, 200);
687 std::unique_ptr<aura::Window> window_owner( 681 std::unique_ptr<aura::Window> window(
688 CreateTestWindowInShellWithBounds(bounds)); 682 CreateTestWindowInShellWithBounds(bounds));
689 WmWindow* window = WmWindow::Get(window_owner.get()); 683 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
690 window->SetShowState(ui::SHOW_STATE_MAXIMIZED);
691 gfx::Rect initial_work_area_bounds = 684 gfx::Rect initial_work_area_bounds =
692 wm::GetMaximizedWindowBoundsInParent(window); 685 ScreenUtil::GetMaximizedWindowBoundsInParent(window.get());
693 EXPECT_EQ(initial_work_area_bounds.ToString(), 686 EXPECT_EQ(initial_work_area_bounds.ToString(), window->bounds().ToString());
694 window->GetBounds().ToString());
695 // Enlarge the root window. We should still match the work area size. 687 // Enlarge the root window. We should still match the work area size.
696 UpdateDisplay("900x700"); 688 UpdateDisplay("900x700");
697 EXPECT_EQ(wm::GetMaximizedWindowBoundsInParent(window).ToString(), 689 EXPECT_EQ(
698 window->GetBounds().ToString()); 690 ScreenUtil::GetMaximizedWindowBoundsInParent(window.get()).ToString(),
699 EXPECT_NE(initial_work_area_bounds.ToString(), 691 window->bounds().ToString());
700 wm::GetMaximizedWindowBoundsInParent(window).ToString()); 692 EXPECT_NE(
693 initial_work_area_bounds.ToString(),
694 ScreenUtil::GetMaximizedWindowBoundsInParent(window.get()).ToString());
701 } 695 }
702 696
703 // Tests normal->fullscreen->normal. 697 // Tests normal->fullscreen->normal.
704 TEST_F(WorkspaceLayoutManagerSoloTest, Fullscreen) { 698 TEST_F(WorkspaceLayoutManagerSoloTest, Fullscreen) {
705 gfx::Rect bounds(100, 100, 200, 200); 699 gfx::Rect bounds(100, 100, 200, 200);
706 std::unique_ptr<aura::Window> window_owner( 700 std::unique_ptr<aura::Window> window(
707 CreateTestWindowInShellWithBounds(bounds)); 701 CreateTestWindowInShellWithBounds(bounds));
708 WmWindow* window = WmWindow::Get(window_owner.get()); 702 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN);
709 window->SetShowState(ui::SHOW_STATE_FULLSCREEN);
710 // Fullscreen window fills the whole display. 703 // Fullscreen window fills the whole display.
711 EXPECT_EQ(window->GetDisplayNearestWindow().bounds().ToString(), 704 EXPECT_EQ(GetDisplayNearestWindow(window.get()).bounds().ToString(),
712 window->GetBounds().ToString()); 705 window->bounds().ToString());
713 window->SetShowState(ui::SHOW_STATE_NORMAL); 706 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
714 EXPECT_EQ(bounds.ToString(), window->GetBounds().ToString()); 707 EXPECT_EQ(bounds.ToString(), window->bounds().ToString());
715 } 708 }
716 709
717 // Tests that fullscreen window causes always_on_top windows to stack below. 710 // Tests that fullscreen window causes always_on_top windows to stack below.
718 TEST_F(WorkspaceLayoutManagerSoloTest, FullscreenSuspendsAlwaysOnTop) { 711 TEST_F(WorkspaceLayoutManagerSoloTest, FullscreenSuspendsAlwaysOnTop) {
719 gfx::Rect bounds(100, 100, 200, 200); 712 gfx::Rect bounds(100, 100, 200, 200);
720 std::unique_ptr<aura::Window> fullscreen_window_owner( 713 std::unique_ptr<aura::Window> fullscreen_window(
721 CreateTestWindowInShellWithBounds(bounds)); 714 CreateTestWindowInShellWithBounds(bounds));
722 WmWindow* fullscreen_window = WmWindow::Get(fullscreen_window_owner.get()); 715 std::unique_ptr<aura::Window> always_on_top_window1(
723 std::unique_ptr<aura::Window> always_on_top_window1_owner(
724 CreateTestWindowInShellWithBounds(bounds)); 716 CreateTestWindowInShellWithBounds(bounds));
725 WmWindow* always_on_top_window1 = 717 std::unique_ptr<aura::Window> always_on_top_window2(
726 WmWindow::Get(always_on_top_window1_owner.get());
727 std::unique_ptr<aura::Window> always_on_top_window2_owner(
728 CreateTestWindowInShellWithBounds(bounds)); 718 CreateTestWindowInShellWithBounds(bounds));
729 WmWindow* always_on_top_window2 = 719 always_on_top_window1->SetProperty(aura::client::kAlwaysOnTopKey, true);
730 WmWindow::Get(always_on_top_window2_owner.get()); 720 always_on_top_window2->SetProperty(aura::client::kAlwaysOnTopKey, true);
731 always_on_top_window1->SetAlwaysOnTop(true);
732 always_on_top_window2->SetAlwaysOnTop(true);
733 // Making a window fullscreen temporarily suspends always on top state. 721 // Making a window fullscreen temporarily suspends always on top state.
734 fullscreen_window->SetShowState(ui::SHOW_STATE_FULLSCREEN); 722 fullscreen_window->SetProperty(aura::client::kShowStateKey,
735 EXPECT_FALSE(always_on_top_window1->IsAlwaysOnTop()); 723 ui::SHOW_STATE_FULLSCREEN);
736 EXPECT_FALSE(always_on_top_window2->IsAlwaysOnTop()); 724 EXPECT_FALSE(
737 EXPECT_NE(nullptr, wm::GetWindowForFullscreenMode(fullscreen_window)); 725 always_on_top_window1->GetProperty(aura::client::kAlwaysOnTopKey));
726 EXPECT_FALSE(
727 always_on_top_window2->GetProperty(aura::client::kAlwaysOnTopKey));
728 EXPECT_NE(nullptr, wm::GetWindowForFullscreenMode(
729 WmWindow::Get(fullscreen_window.get())));
738 730
739 // Adding a new always-on-top window is not affected by fullscreen. 731 // Adding a new always-on-top window is not affected by fullscreen.
740 std::unique_ptr<aura::Window> always_on_top_window3_owner( 732 std::unique_ptr<aura::Window> always_on_top_window3(
741 CreateTestWindowInShellWithBounds(bounds)); 733 CreateTestWindowInShellWithBounds(bounds));
742 WmWindow* always_on_top_window3 = 734 always_on_top_window3->SetProperty(aura::client::kAlwaysOnTopKey, true);
743 WmWindow::Get(always_on_top_window3_owner.get()); 735 EXPECT_TRUE(
744 always_on_top_window3->SetAlwaysOnTop(true); 736 always_on_top_window3->GetProperty(aura::client::kAlwaysOnTopKey));
745 EXPECT_TRUE(always_on_top_window3->IsAlwaysOnTop());
746 737
747 // Making fullscreen window normal restores always on top windows. 738 // Making fullscreen window normal restores always on top windows.
748 fullscreen_window->SetShowState(ui::SHOW_STATE_NORMAL); 739 fullscreen_window->SetProperty(aura::client::kShowStateKey,
749 EXPECT_TRUE(always_on_top_window1->IsAlwaysOnTop()); 740 ui::SHOW_STATE_NORMAL);
750 EXPECT_TRUE(always_on_top_window2->IsAlwaysOnTop()); 741 EXPECT_TRUE(
751 EXPECT_TRUE(always_on_top_window3->IsAlwaysOnTop()); 742 always_on_top_window1->GetProperty(aura::client::kAlwaysOnTopKey));
752 EXPECT_EQ(nullptr, wm::GetWindowForFullscreenMode(fullscreen_window)); 743 EXPECT_TRUE(
744 always_on_top_window2->GetProperty(aura::client::kAlwaysOnTopKey));
745 EXPECT_TRUE(
746 always_on_top_window3->GetProperty(aura::client::kAlwaysOnTopKey));
747 EXPECT_EQ(nullptr, wm::GetWindowForFullscreenMode(
748 WmWindow::Get(fullscreen_window.get())));
753 } 749 }
754 750
755 // Similary, pinned window causes always_on_top_ windows to stack below. 751 // Similary, pinned window causes always_on_top_ windows to stack below.
756 TEST_F(WorkspaceLayoutManagerSoloTest, PinnedSuspendsAlwaysOnTop) { 752 TEST_F(WorkspaceLayoutManagerSoloTest, PinnedSuspendsAlwaysOnTop) {
757 gfx::Rect bounds(100, 100, 200, 200); 753 gfx::Rect bounds(100, 100, 200, 200);
758 std::unique_ptr<aura::Window> pinned_window_owner( 754 std::unique_ptr<aura::Window> pinned_window(
759 CreateTestWindowInShellWithBounds(bounds)); 755 CreateTestWindowInShellWithBounds(bounds));
760 WmWindow* pinned_window = WmWindow::Get(pinned_window_owner.get()); 756 std::unique_ptr<aura::Window> always_on_top_window1(
761 std::unique_ptr<aura::Window> always_on_top_window1_owner(
762 CreateTestWindowInShellWithBounds(bounds)); 757 CreateTestWindowInShellWithBounds(bounds));
763 WmWindow* always_on_top_window1 = 758 std::unique_ptr<aura::Window> always_on_top_window2(
764 WmWindow::Get(always_on_top_window1_owner.get());
765 std::unique_ptr<aura::Window> always_on_top_window2_owner(
766 CreateTestWindowInShellWithBounds(bounds)); 759 CreateTestWindowInShellWithBounds(bounds));
767 WmWindow* always_on_top_window2 = 760 always_on_top_window1->SetProperty(aura::client::kAlwaysOnTopKey, true);
768 WmWindow::Get(always_on_top_window2_owner.get()); 761 always_on_top_window2->SetProperty(aura::client::kAlwaysOnTopKey, true);
769 always_on_top_window1->SetAlwaysOnTop(true);
770 always_on_top_window2->SetAlwaysOnTop(true);
771 762
772 // Making a window pinned temporarily suspends always on top state. 763 // Making a window pinned temporarily suspends always on top state.
773 const bool trusted = false; 764 const bool trusted = false;
774 wm::PinWindow(pinned_window->aura_window(), trusted); 765 wm::PinWindow(pinned_window.get(), trusted);
775 EXPECT_FALSE(always_on_top_window1->IsAlwaysOnTop()); 766 EXPECT_FALSE(
776 EXPECT_FALSE(always_on_top_window2->IsAlwaysOnTop()); 767 always_on_top_window1->GetProperty(aura::client::kAlwaysOnTopKey));
768 EXPECT_FALSE(
769 always_on_top_window2->GetProperty(aura::client::kAlwaysOnTopKey));
777 770
778 // Adding a new always-on-top window also is affected by pinned mode. 771 // Adding a new always-on-top window also is affected by pinned mode.
779 std::unique_ptr<aura::Window> always_on_top_window3_owner( 772 std::unique_ptr<aura::Window> always_on_top_window3(
780 CreateTestWindowInShellWithBounds(bounds)); 773 CreateTestWindowInShellWithBounds(bounds));
781 WmWindow* always_on_top_window3 = 774 always_on_top_window3->SetProperty(aura::client::kAlwaysOnTopKey, true);
782 WmWindow::Get(always_on_top_window3_owner.get()); 775 EXPECT_FALSE(
783 always_on_top_window3->SetAlwaysOnTop(true); 776 always_on_top_window3->GetProperty(aura::client::kAlwaysOnTopKey));
784 EXPECT_FALSE(always_on_top_window3->IsAlwaysOnTop());
785 777
786 // Making pinned window normal restores always on top windows. 778 // Making pinned window normal restores always on top windows.
787 pinned_window->GetWindowState()->Restore(); 779 wm::GetWindowState(pinned_window.get())->Restore();
788 EXPECT_TRUE(always_on_top_window1->IsAlwaysOnTop()); 780 EXPECT_TRUE(
789 EXPECT_TRUE(always_on_top_window2->IsAlwaysOnTop()); 781 always_on_top_window1->GetProperty(aura::client::kAlwaysOnTopKey));
790 EXPECT_TRUE(always_on_top_window3->IsAlwaysOnTop()); 782 EXPECT_TRUE(
783 always_on_top_window2->GetProperty(aura::client::kAlwaysOnTopKey));
784 EXPECT_TRUE(
785 always_on_top_window3->GetProperty(aura::client::kAlwaysOnTopKey));
791 } 786 }
792 787
793 // Tests fullscreen window size during root window resize. 788 // Tests fullscreen window size during root window resize.
794 TEST_F(WorkspaceLayoutManagerSoloTest, FullscreenRootWindowResize) { 789 TEST_F(WorkspaceLayoutManagerSoloTest, FullscreenRootWindowResize) {
795 gfx::Rect bounds(100, 100, 200, 200); 790 gfx::Rect bounds(100, 100, 200, 200);
796 std::unique_ptr<aura::Window> window_owner( 791 std::unique_ptr<aura::Window> window(
797 CreateTestWindowInShellWithBounds(bounds)); 792 CreateTestWindowInShellWithBounds(bounds));
798 WmWindow* window = WmWindow::Get(window_owner.get());
799 // Fullscreen window fills the whole display. 793 // Fullscreen window fills the whole display.
800 window->SetShowState(ui::SHOW_STATE_FULLSCREEN); 794 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_FULLSCREEN);
801 EXPECT_EQ(window->GetDisplayNearestWindow().bounds().ToString(), 795 EXPECT_EQ(GetDisplayNearestWindow(window.get()).bounds().ToString(),
802 window->GetBounds().ToString()); 796 window->bounds().ToString());
803 // Enlarge the root window. We should still match the display size. 797 // Enlarge the root window. We should still match the display size.
804 UpdateDisplay("800x600"); 798 UpdateDisplay("800x600");
805 EXPECT_EQ(window->GetDisplayNearestWindow().bounds().ToString(), 799 EXPECT_EQ(GetDisplayNearestWindow(window.get()).bounds().ToString(),
806 window->GetBounds().ToString()); 800 window->bounds().ToString());
807 } 801 }
808 802
809 // Tests that when the screen gets smaller the windows aren't bigger than 803 // Tests that when the screen gets smaller the windows aren't bigger than
810 // the screen. 804 // the screen.
811 TEST_F(WorkspaceLayoutManagerSoloTest, RootWindowResizeShrinksWindows) { 805 TEST_F(WorkspaceLayoutManagerSoloTest, RootWindowResizeShrinksWindows) {
812 std::unique_ptr<aura::Window> window_owner( 806 std::unique_ptr<aura::Window> window(
813 CreateTestWindowInShellWithBounds(gfx::Rect(10, 20, 500, 400))); 807 CreateTestWindowInShellWithBounds(gfx::Rect(10, 20, 500, 400)));
814 WmWindow* window = WmWindow::Get(window_owner.get()); 808 gfx::Rect work_area = GetDisplayNearestWindow(window.get()).work_area();
815 gfx::Rect work_area = window->GetDisplayNearestWindow().work_area();
816 // Invariant: Window is smaller than work area. 809 // Invariant: Window is smaller than work area.
817 EXPECT_LE(window->GetBounds().width(), work_area.width()); 810 EXPECT_LE(window->bounds().width(), work_area.width());
818 EXPECT_LE(window->GetBounds().height(), work_area.height()); 811 EXPECT_LE(window->bounds().height(), work_area.height());
819 812
820 // Make the root window narrower than our window. 813 // Make the root window narrower than our window.
821 UpdateDisplay("300x400"); 814 UpdateDisplay("300x400");
822 work_area = window->GetDisplayNearestWindow().work_area(); 815 work_area = GetDisplayNearestWindow(window.get()).work_area();
823 EXPECT_LE(window->GetBounds().width(), work_area.width()); 816 EXPECT_LE(window->bounds().width(), work_area.width());
824 EXPECT_LE(window->GetBounds().height(), work_area.height()); 817 EXPECT_LE(window->bounds().height(), work_area.height());
825 818
826 // Make the root window shorter than our window. 819 // Make the root window shorter than our window.
827 UpdateDisplay("300x200"); 820 UpdateDisplay("300x200");
828 work_area = window->GetDisplayNearestWindow().work_area(); 821 work_area = GetDisplayNearestWindow(window.get()).work_area();
829 EXPECT_LE(window->GetBounds().width(), work_area.width()); 822 EXPECT_LE(window->bounds().width(), work_area.width());
830 EXPECT_LE(window->GetBounds().height(), work_area.height()); 823 EXPECT_LE(window->bounds().height(), work_area.height());
831 824
832 // Enlarging the root window does not change the window bounds. 825 // Enlarging the root window does not change the window bounds.
833 gfx::Rect old_bounds = window->GetBounds(); 826 gfx::Rect old_bounds = window->bounds();
834 UpdateDisplay("800x600"); 827 UpdateDisplay("800x600");
835 EXPECT_EQ(old_bounds.width(), window->GetBounds().width()); 828 EXPECT_EQ(old_bounds.width(), window->bounds().width());
836 EXPECT_EQ(old_bounds.height(), window->GetBounds().height()); 829 EXPECT_EQ(old_bounds.height(), window->bounds().height());
837 } 830 }
838 831
839 // Verifies maximizing sets the restore bounds, and restoring 832 // Verifies maximizing sets the restore bounds, and restoring
840 // restores the bounds. 833 // restores the bounds.
841 TEST_F(WorkspaceLayoutManagerSoloTest, MaximizeSetsRestoreBounds) { 834 TEST_F(WorkspaceLayoutManagerSoloTest, MaximizeSetsRestoreBounds) {
842 const gfx::Rect initial_bounds(10, 20, 30, 40); 835 const gfx::Rect initial_bounds(10, 20, 30, 40);
843 std::unique_ptr<aura::Window> window_owner( 836 std::unique_ptr<aura::Window> window(
844 CreateTestWindowInShellWithBounds(initial_bounds)); 837 CreateTestWindowInShellWithBounds(initial_bounds));
845 WmWindow* window = WmWindow::Get(window_owner.get()); 838 EXPECT_EQ(initial_bounds, window->bounds());
846 EXPECT_EQ(initial_bounds, window->GetBounds()); 839 wm::WindowState* window_state = wm::GetWindowState(window.get());
847 wm::WindowState* window_state = window->GetWindowState();
848 840
849 // Maximize it, which will keep the previous restore bounds. 841 // Maximize it, which will keep the previous restore bounds.
850 window->SetShowState(ui::SHOW_STATE_MAXIMIZED); 842 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
851 EXPECT_EQ("10,20 30x40", window_state->GetRestoreBoundsInParent().ToString()); 843 EXPECT_EQ("10,20 30x40", window_state->GetRestoreBoundsInParent().ToString());
852 844
853 // Restore it, which should restore bounds and reset restore bounds. 845 // Restore it, which should restore bounds and reset restore bounds.
854 window->SetShowState(ui::SHOW_STATE_NORMAL); 846 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_NORMAL);
855 EXPECT_EQ("10,20 30x40", window->GetBounds().ToString()); 847 EXPECT_EQ("10,20 30x40", window->bounds().ToString());
856 EXPECT_FALSE(window_state->HasRestoreBounds()); 848 EXPECT_FALSE(window_state->HasRestoreBounds());
857 } 849 }
858 850
859 // Verifies maximizing keeps the restore bounds if set. 851 // Verifies maximizing keeps the restore bounds if set.
860 TEST_F(WorkspaceLayoutManagerSoloTest, MaximizeResetsRestoreBounds) { 852 TEST_F(WorkspaceLayoutManagerSoloTest, MaximizeResetsRestoreBounds) {
861 std::unique_ptr<aura::Window> window_owner( 853 std::unique_ptr<aura::Window> window(
862 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4))); 854 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4)));
863 WmWindow* window = WmWindow::Get(window_owner.get()); 855 wm::WindowState* window_state = wm::GetWindowState(window.get());
864 wm::WindowState* window_state = window->GetWindowState();
865 window_state->SetRestoreBoundsInParent(gfx::Rect(10, 11, 12, 13)); 856 window_state->SetRestoreBoundsInParent(gfx::Rect(10, 11, 12, 13));
866 857
867 // Maximize it, which will keep the previous restore bounds. 858 // Maximize it, which will keep the previous restore bounds.
868 window->SetShowState(ui::SHOW_STATE_MAXIMIZED); 859 window->SetProperty(aura::client::kShowStateKey, ui::SHOW_STATE_MAXIMIZED);
869 EXPECT_EQ("10,11 12x13", window_state->GetRestoreBoundsInParent().ToString()); 860 EXPECT_EQ("10,11 12x13", window_state->GetRestoreBoundsInParent().ToString());
870 } 861 }
871 862
872 // Verifies that the restore bounds do not get reset when restoring to a 863 // Verifies that the restore bounds do not get reset when restoring to a
873 // maximzied state from a minimized state. 864 // maximzied state from a minimized state.
874 TEST_F(WorkspaceLayoutManagerSoloTest, 865 TEST_F(WorkspaceLayoutManagerSoloTest,
875 BoundsAfterRestoringToMaximizeFromMinimize) { 866 BoundsAfterRestoringToMaximizeFromMinimize) {
876 std::unique_ptr<aura::Window> window_owner( 867 std::unique_ptr<aura::Window> window(
877 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4))); 868 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4)));
878 WmWindow* window = WmWindow::Get(window_owner.get());
879 gfx::Rect bounds(10, 15, 25, 35); 869 gfx::Rect bounds(10, 15, 25, 35);
880 window->SetBounds(bounds); 870 window->SetBounds(bounds);
881 871
882 wm::WindowState* window_state = window->GetWindowState(); 872 wm::WindowState* window_state = wm::GetWindowState(window.get());
883 // Maximize it, which should reset restore bounds. 873 // Maximize it, which should reset restore bounds.
884 window_state->Maximize(); 874 window_state->Maximize();
885 EXPECT_EQ(bounds.ToString(), 875 EXPECT_EQ(bounds.ToString(),
886 window_state->GetRestoreBoundsInParent().ToString()); 876 window_state->GetRestoreBoundsInParent().ToString());
887 // Minimize the window. The restore bounds should not change. 877 // Minimize the window. The restore bounds should not change.
888 window_state->Minimize(); 878 window_state->Minimize();
889 EXPECT_EQ(bounds.ToString(), 879 EXPECT_EQ(bounds.ToString(),
890 window_state->GetRestoreBoundsInParent().ToString()); 880 window_state->GetRestoreBoundsInParent().ToString());
891 881
892 // Show the window again. The window should be maximized, and the restore 882 // Show the window again. The window should be maximized, and the restore
893 // bounds should not change. 883 // bounds should not change.
894 window->Show(); 884 window->Show();
895 EXPECT_EQ(bounds.ToString(), 885 EXPECT_EQ(bounds.ToString(),
896 window_state->GetRestoreBoundsInParent().ToString()); 886 window_state->GetRestoreBoundsInParent().ToString());
897 EXPECT_TRUE(window_state->IsMaximized()); 887 EXPECT_TRUE(window_state->IsMaximized());
898 888
899 window_state->Restore(); 889 window_state->Restore();
900 EXPECT_EQ(bounds.ToString(), window->GetBounds().ToString()); 890 EXPECT_EQ(bounds.ToString(), window->bounds().ToString());
901 } 891 }
902 892
903 // Verify if the window is not resized during screen lock. See: crbug.com/173127 893 // Verify if the window is not resized during screen lock. See: crbug.com/173127
904 TEST_F(WorkspaceLayoutManagerSoloTest, NotResizeWhenScreenIsLocked) { 894 TEST_F(WorkspaceLayoutManagerSoloTest, NotResizeWhenScreenIsLocked) {
905 SetCanLockScreen(true); 895 SetCanLockScreen(true);
906 std::unique_ptr<aura::Window> window_owner( 896 std::unique_ptr<aura::Window> window(
907 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4))); 897 CreateTestWindowInShellWithBounds(gfx::Rect(1, 2, 3, 4)));
908 WmWindow* window = WmWindow::Get(window_owner.get());
909 // window with AlwaysOnTop will be managed by BaseLayoutManager. 898 // window with AlwaysOnTop will be managed by BaseLayoutManager.
910 window->SetAlwaysOnTop(true); 899 window->SetProperty(aura::client::kAlwaysOnTopKey, true);
911 window->Show(); 900 window->Show();
912 901
913 WmShelf* shelf = GetPrimaryShelf(); 902 WmShelf* shelf = GetPrimaryShelf();
914 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS); 903 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_ALWAYS);
915 904
916 window->SetBounds(wm::GetMaximizedWindowBoundsInParent(window)); 905 window->SetBounds(ScreenUtil::GetMaximizedWindowBoundsInParent(window.get()));
917 gfx::Rect window_bounds = window->GetBounds(); 906 gfx::Rect window_bounds = window->bounds();
918 EXPECT_EQ(wm::GetMaximizedWindowBoundsInParent(window).ToString(), 907 EXPECT_EQ(
919 window_bounds.ToString()); 908 ScreenUtil::GetMaximizedWindowBoundsInParent(window.get()).ToString(),
909 window_bounds.ToString());
920 910
921 // The window size should not get touched while we are in lock screen. 911 // The window size should not get touched while we are in lock screen.
922 Shell::Get()->session_controller()->LockScreenAndFlushForTest(); 912 Shell::Get()->session_controller()->LockScreenAndFlushForTest();
923 ShelfLayoutManager* shelf_layout_manager = shelf->shelf_layout_manager(); 913 ShelfLayoutManager* shelf_layout_manager = shelf->shelf_layout_manager();
924 shelf_layout_manager->UpdateVisibilityState(); 914 shelf_layout_manager->UpdateVisibilityState();
925 EXPECT_EQ(window_bounds.ToString(), window->GetBounds().ToString()); 915 EXPECT_EQ(window_bounds.ToString(), window->bounds().ToString());
926 916
927 // Coming out of the lock screen the window size should still remain. 917 // Coming out of the lock screen the window size should still remain.
928 GetSessionControllerClient()->UnlockScreen(); 918 GetSessionControllerClient()->UnlockScreen();
929 shelf_layout_manager->UpdateVisibilityState(); 919 shelf_layout_manager->UpdateVisibilityState();
930 EXPECT_EQ(wm::GetMaximizedWindowBoundsInParent(window).ToString(), 920 EXPECT_EQ(
931 window_bounds.ToString()); 921 ScreenUtil::GetMaximizedWindowBoundsInParent(window.get()).ToString(),
932 EXPECT_EQ(window_bounds.ToString(), window->GetBounds().ToString()); 922 window_bounds.ToString());
923 EXPECT_EQ(window_bounds.ToString(), window->bounds().ToString());
933 } 924 }
934 925
935 // Following tests are written to test the backdrop functionality. 926 // Following tests are written to test the backdrop functionality.
936 927
937 namespace { 928 namespace {
938 929
939 WorkspaceLayoutManager* GetWorkspaceLayoutManager(WmWindow* container) { 930 WorkspaceLayoutManager* GetWorkspaceLayoutManager(aura::Window* container) {
940 return static_cast<WorkspaceLayoutManager*>(container->GetLayoutManager()); 931 return static_cast<WorkspaceLayoutManager*>(
932 WmWindow::Get(container)->GetLayoutManager());
941 } 933 }
942 934
943 class WorkspaceLayoutManagerBackdropTest : public AshTest { 935 class WorkspaceLayoutManagerBackdropTest : public test::AshTestBase {
944 public: 936 public:
945 WorkspaceLayoutManagerBackdropTest() : default_container_(nullptr) {} 937 WorkspaceLayoutManagerBackdropTest() : default_container_(nullptr) {}
946 ~WorkspaceLayoutManagerBackdropTest() override {} 938 ~WorkspaceLayoutManagerBackdropTest() override {}
947 939
948 void SetUp() override { 940 void SetUp() override {
949 AshTest::SetUp(); 941 AshTestBase::SetUp();
950 UpdateDisplay("800x600"); 942 UpdateDisplay("800x600");
951 default_container_ = 943 default_container_ = Shell::GetPrimaryRootWindowController()->GetContainer(
952 ShellPort::Get()->GetPrimaryRootWindowController()->GetWmContainer( 944 kShellWindowId_DefaultContainer);
953 kShellWindowId_DefaultContainer);
954 } 945 }
955 946
956 // Turn the top window back drop on / off. 947 // Turn the top window back drop on / off.
957 void ShowTopWindowBackdrop(bool show) { 948 void ShowTopWindowBackdrop(bool show) {
958 std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> backdrop; 949 std::unique_ptr<WorkspaceLayoutManagerBackdropDelegate> backdrop;
959 if (show) 950 if (show) {
960 backdrop.reset(new WorkspaceBackdropDelegate(default_container_)); 951 backdrop.reset(
952 new WorkspaceBackdropDelegate(WmWindow::Get(default_container_)));
953 }
961 GetWorkspaceLayoutManager(default_container_) 954 GetWorkspaceLayoutManager(default_container_)
962 ->SetMaximizeBackdropDelegate(std::move(backdrop)); 955 ->SetMaximizeBackdropDelegate(std::move(backdrop));
963 // Closing and / or opening can be a delayed operation. 956 // Closing and / or opening can be a delayed operation.
964 base::RunLoop().RunUntilIdle(); 957 base::RunLoop().RunUntilIdle();
965 } 958 }
966 959
967 // Return the default container. 960 // Return the default container.
968 WmWindow* default_container() { return default_container_; } 961 aura::Window* default_container() { return default_container_; }
969 962
970 // Return the order of windows (top most first) as they are in the default 963 // Return the order of windows (top most first) as they are in the default
971 // container. If the window is visible it will be a big letter, otherwise a 964 // container. If the window is visible it will be a big letter, otherwise a
972 // small one. The backdrop will be an X and unknown windows will be shown as 965 // small one. The backdrop will be an X and unknown windows will be shown as
973 // '!'. 966 // '!'.
974 std::string GetWindowOrderAsString(WmWindow* backdrop, 967 std::string GetWindowOrderAsString(aura::Window* backdrop,
975 WmWindow* wa, 968 aura::Window* wa,
976 WmWindow* wb, 969 aura::Window* wb,
977 WmWindow* wc) { 970 aura::Window* wc) {
978 std::string result; 971 std::string result;
979 WmWindow::Windows children = default_container()->GetChildren(); 972 aura::Window::Windows children = default_container()->children();
980 for (int i = static_cast<int>(children.size()) - 1; i >= 0; --i) { 973 for (int i = static_cast<int>(children.size()) - 1; i >= 0; --i) {
981 if (!result.empty()) 974 if (!result.empty())
982 result += ","; 975 result += ",";
983 if (children[i] == wa) 976 if (children[i] == wa)
984 result += children[i]->IsVisible() ? "A" : "a"; 977 result += children[i]->IsVisible() ? "A" : "a";
985 else if (children[i] == wb) 978 else if (children[i] == wb)
986 result += children[i]->IsVisible() ? "B" : "b"; 979 result += children[i]->IsVisible() ? "B" : "b";
987 else if (children[i] == wc) 980 else if (children[i] == wc)
988 result += children[i]->IsVisible() ? "C" : "c"; 981 result += children[i]->IsVisible() ? "C" : "c";
989 else if (children[i] == backdrop) 982 else if (children[i] == backdrop)
990 result += children[i]->IsVisible() ? "X" : "x"; 983 result += children[i]->IsVisible() ? "X" : "x";
991 else 984 else
992 result += "!"; 985 result += "!";
993 } 986 }
994 return result; 987 return result;
995 } 988 }
996 989
997 private: 990 private:
998 // The default container. 991 // The default container.
999 WmWindow* default_container_; 992 aura::Window* default_container_;
1000 993
1001 DISALLOW_COPY_AND_ASSIGN(WorkspaceLayoutManagerBackdropTest); 994 DISALLOW_COPY_AND_ASSIGN(WorkspaceLayoutManagerBackdropTest);
1002 }; 995 };
1003 996
1004 } // namespace 997 } // namespace
1005 998
1006 // Check that creating the BackDrop without destroying it does not lead into 999 // Check that creating the BackDrop without destroying it does not lead into
1007 // a crash. 1000 // a crash.
1008 TEST_F(WorkspaceLayoutManagerBackdropTest, BackdropCrashTest) { 1001 TEST_F(WorkspaceLayoutManagerBackdropTest, BackdropCrashTest) {
1009 ShowTopWindowBackdrop(true); 1002 ShowTopWindowBackdrop(true);
1010 } 1003 }
1011 1004
1012 // Verify basic assumptions about the backdrop. 1005 // Verify basic assumptions about the backdrop.
1013 TEST_F(WorkspaceLayoutManagerBackdropTest, BasicBackdropTests) { 1006 TEST_F(WorkspaceLayoutManagerBackdropTest, BasicBackdropTests) {
1014 // Create a backdrop and see that there is one window (the backdrop) and 1007 // Create a backdrop and see that there is one window (the backdrop) and
1015 // that the size is the same as the default container as well as that it is 1008 // that the size is the same as the default container as well as that it is
1016 // not visible. 1009 // not visible.
1017 ShowTopWindowBackdrop(true); 1010 ShowTopWindowBackdrop(true);
1018 ASSERT_EQ(1U, default_container()->GetChildren().size()); 1011 ASSERT_EQ(1U, default_container()->children().size());
1019 EXPECT_FALSE(default_container()->GetChildren()[0]->IsVisible()); 1012 EXPECT_FALSE(default_container()->children()[0]->IsVisible());
1020 1013
1021 { 1014 {
1022 // Add a window and make sure that the backdrop is the second child. 1015 // Add a window and make sure that the backdrop is the second child.
1023 std::unique_ptr<WindowOwner> window_owner( 1016 std::unique_ptr<aura::Window> window(
1024 CreateTestWindow(gfx::Rect(1, 2, 3, 4))); 1017 CreateTestWindow(gfx::Rect(1, 2, 3, 4)));
1025 WmWindow* window = window_owner->window();
1026 window->Show(); 1018 window->Show();
1027 ASSERT_EQ(2U, default_container()->GetChildren().size()); 1019 ASSERT_EQ(2U, default_container()->children().size());
1028 EXPECT_TRUE(default_container()->GetChildren()[0]->IsVisible()); 1020 EXPECT_TRUE(default_container()->children()[0]->IsVisible());
1029 EXPECT_TRUE(default_container()->GetChildren()[1]->IsVisible()); 1021 EXPECT_TRUE(default_container()->children()[1]->IsVisible());
1030 EXPECT_EQ(window, default_container()->GetChildren()[1]); 1022 EXPECT_EQ(window.get(), default_container()->children()[1]);
1031 EXPECT_EQ(default_container()->GetBounds().ToString(), 1023 EXPECT_EQ(default_container()->bounds().ToString(),
1032 default_container()->GetChildren()[0]->GetBounds().ToString()); 1024 default_container()->children()[0]->bounds().ToString());
1033 } 1025 }
1034 1026
1035 // With the window gone the backdrop should be invisible again. 1027 // With the window gone the backdrop should be invisible again.
1036 ASSERT_EQ(1U, default_container()->GetChildren().size()); 1028 ASSERT_EQ(1U, default_container()->children().size());
1037 EXPECT_FALSE(default_container()->GetChildren()[0]->IsVisible()); 1029 EXPECT_FALSE(default_container()->children()[0]->IsVisible());
1038 1030
1039 // Destroying the Backdrop should empty the container. 1031 // Destroying the Backdrop should empty the container.
1040 ShowTopWindowBackdrop(false); 1032 ShowTopWindowBackdrop(false);
1041 ASSERT_EQ(0U, default_container()->GetChildren().size()); 1033 ASSERT_EQ(0U, default_container()->children().size());
1042 } 1034 }
1043 1035
1044 // Verify that the backdrop gets properly created and placed. 1036 // Verify that the backdrop gets properly created and placed.
1045 TEST_F(WorkspaceLayoutManagerBackdropTest, VerifyBackdropAndItsStacking) { 1037 TEST_F(WorkspaceLayoutManagerBackdropTest, VerifyBackdropAndItsStacking) {
1046 std::unique_ptr<WindowOwner> window1_owner( 1038 std::unique_ptr<aura::Window> window1(
1047 CreateTestWindow(gfx::Rect(1, 2, 3, 4))); 1039 CreateTestWindow(gfx::Rect(1, 2, 3, 4)));
1048 WmWindow* window1 = window1_owner->window();
1049 window1->Show(); 1040 window1->Show();
1050 1041
1051 // Get the default container and check that only a single window is in there. 1042 // Get the default container and check that only a single window is in there.
1052 ASSERT_EQ(1U, default_container()->GetChildren().size()); 1043 ASSERT_EQ(1U, default_container()->children().size());
1053 EXPECT_EQ(window1, default_container()->GetChildren()[0]); 1044 EXPECT_EQ(window1.get(), default_container()->children()[0]);
1054 EXPECT_EQ("A", GetWindowOrderAsString(nullptr, window1, nullptr, nullptr)); 1045 EXPECT_EQ("A",
1046 GetWindowOrderAsString(nullptr, window1.get(), nullptr, nullptr));
1055 1047
1056 // Create 2 more windows and check that they are also in the container. 1048 // Create 2 more windows and check that they are also in the container.
1057 std::unique_ptr<WindowOwner> window2_owner( 1049 std::unique_ptr<aura::Window> window2(
1058 CreateTestWindow(gfx::Rect(10, 2, 3, 4))); 1050 CreateTestWindow(gfx::Rect(10, 2, 3, 4)));
1059 WmWindow* window2 = window2_owner->window(); 1051 std::unique_ptr<aura::Window> window3(
1060 std::unique_ptr<WindowOwner> window3_owner(
1061 CreateTestWindow(gfx::Rect(20, 2, 3, 4))); 1052 CreateTestWindow(gfx::Rect(20, 2, 3, 4)));
1062 WmWindow* window3 = window3_owner->window();
1063 window2->Show(); 1053 window2->Show();
1064 window3->Show(); 1054 window3->Show();
1065 1055
1066 WmWindow* backdrop = nullptr; 1056 aura::Window* backdrop = nullptr;
1067 EXPECT_EQ("C,B,A", 1057 EXPECT_EQ("C,B,A", GetWindowOrderAsString(backdrop, window1.get(),
1068 GetWindowOrderAsString(backdrop, window1, window2, window3)); 1058 window2.get(), window3.get()));
1069 1059
1070 // Turn on the backdrop mode and check that the window shows up where it 1060 // Turn on the backdrop mode and check that the window shows up where it
1071 // should be (second highest number). 1061 // should be (second highest number).
1072 ShowTopWindowBackdrop(true); 1062 ShowTopWindowBackdrop(true);
1073 backdrop = default_container()->GetChildren()[2]; 1063 backdrop = default_container()->children()[2];
1074 EXPECT_EQ("C,X,B,A", 1064 EXPECT_EQ("C,X,B,A", GetWindowOrderAsString(backdrop, window1.get(),
1075 GetWindowOrderAsString(backdrop, window1, window2, window3)); 1065 window2.get(), window3.get()));
1076 1066
1077 // Switch the order of windows and check that it still remains in that 1067 // Switch the order of windows and check that it still remains in that
1078 // location. 1068 // location.
1079 default_container()->StackChildAtTop(window2); 1069 default_container()->StackChildAtTop(window2.get());
1080 EXPECT_EQ("B,X,C,A", 1070 EXPECT_EQ("B,X,C,A", GetWindowOrderAsString(backdrop, window1.get(),
1081 GetWindowOrderAsString(backdrop, window1, window2, window3)); 1071 window2.get(), window3.get()));
1082 1072
1083 // Make the top window invisible and check. 1073 // Make the top window invisible and check.
1084 window2->Hide(); 1074 window2->Hide();
1085 EXPECT_EQ("b,C,X,A", 1075 EXPECT_EQ("b,C,X,A", GetWindowOrderAsString(backdrop, window1.get(),
1086 GetWindowOrderAsString(backdrop, window1, window2, window3)); 1076 window2.get(), window3.get()));
1087 // Then delete window after window and see that everything is in order. 1077 // Then delete window after window and see that everything is in order.
1088 window1_owner.reset(); 1078 window1.reset();
1089 EXPECT_EQ("b,C,X", 1079 EXPECT_EQ("b,C,X", GetWindowOrderAsString(backdrop, window1.get(),
1090 GetWindowOrderAsString(backdrop, window1, window2, window3)); 1080 window2.get(), window3.get()));
1091 window3_owner.reset(); 1081 window3.reset();
1092 EXPECT_EQ("b,x", GetWindowOrderAsString(backdrop, window1, window2, window3)); 1082 EXPECT_EQ("b,x", GetWindowOrderAsString(backdrop, window1.get(),
1083 window2.get(), window3.get()));
1093 ShowTopWindowBackdrop(false); 1084 ShowTopWindowBackdrop(false);
1094 EXPECT_EQ("b", GetWindowOrderAsString(nullptr, window1, window2, window3)); 1085 EXPECT_EQ("b", GetWindowOrderAsString(nullptr, window1.get(), window2.get(),
1086 window3.get()));
1095 } 1087 }
1096 1088
1097 // Tests that when hidding the shelf, that the backdrop stays fullscreen. 1089 // Tests that when hidding the shelf, that the backdrop stays fullscreen.
1098 TEST_F(WorkspaceLayoutManagerBackdropTest, 1090 TEST_F(WorkspaceLayoutManagerBackdropTest,
1099 ShelfVisibilityDoesNotChangesBounds) { 1091 ShelfVisibilityDoesNotChangesBounds) {
1100 WmShelf* shelf = GetPrimaryShelf(); 1092 WmShelf* shelf = GetPrimaryShelf();
1101 ShelfLayoutManager* shelf_layout_manager = shelf->shelf_layout_manager(); 1093 ShelfLayoutManager* shelf_layout_manager = shelf->shelf_layout_manager();
1102 ShowTopWindowBackdrop(true); 1094 ShowTopWindowBackdrop(true);
1103 RunAllPendingInMessageLoop(); 1095 RunAllPendingInMessageLoop();
1104 const gfx::Size fullscreen_size = 1096 const gfx::Size fullscreen_size =
1105 display::Screen::GetScreen()->GetPrimaryDisplay().size(); 1097 display::Screen::GetScreen()->GetPrimaryDisplay().size();
1106 1098
1107 ASSERT_EQ(SHELF_VISIBLE, shelf_layout_manager->visibility_state()); 1099 ASSERT_EQ(SHELF_VISIBLE, shelf_layout_manager->visibility_state());
1108 EXPECT_EQ(fullscreen_size, 1100 EXPECT_EQ(fullscreen_size,
1109 default_container()->GetChildren()[0]->GetBounds().size()); 1101 default_container()->children()[0]->bounds().size());
1110 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_ALWAYS_HIDDEN); 1102 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_ALWAYS_HIDDEN);
1111 shelf_layout_manager->UpdateVisibilityState(); 1103 shelf_layout_manager->UpdateVisibilityState();
1112 1104
1113 // When the shelf is re-shown WorkspaceLayoutManager shrinks all children but 1105 // When the shelf is re-shown WorkspaceLayoutManager shrinks all children but
1114 // the backdrop. 1106 // the backdrop.
1115 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER); 1107 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_BEHAVIOR_NEVER);
1116 shelf_layout_manager->UpdateVisibilityState(); 1108 shelf_layout_manager->UpdateVisibilityState();
1117 EXPECT_EQ(fullscreen_size, 1109 EXPECT_EQ(fullscreen_size,
1118 default_container()->GetChildren()[0]->GetBounds().size()); 1110 default_container()->children()[0]->bounds().size());
1119 1111
1120 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_ALWAYS_HIDDEN); 1112 shelf->SetAutoHideBehavior(SHELF_AUTO_HIDE_ALWAYS_HIDDEN);
1121 shelf_layout_manager->UpdateVisibilityState(); 1113 shelf_layout_manager->UpdateVisibilityState();
1122 EXPECT_EQ(fullscreen_size, 1114 EXPECT_EQ(fullscreen_size,
1123 default_container()->GetChildren()[0]->GetBounds().size()); 1115 default_container()->children()[0]->bounds().size());
1124 } 1116 }
1125 1117
1126 class WorkspaceLayoutManagerKeyboardTest : public AshTest { 1118 class WorkspaceLayoutManagerKeyboardTest : public test::AshTestBase {
1127 public: 1119 public:
1128 WorkspaceLayoutManagerKeyboardTest() : layout_manager_(nullptr) {} 1120 WorkspaceLayoutManagerKeyboardTest() : layout_manager_(nullptr) {}
1129 ~WorkspaceLayoutManagerKeyboardTest() override {} 1121 ~WorkspaceLayoutManagerKeyboardTest() override {}
1130 1122
1131 void SetUp() override { 1123 void SetUp() override {
1132 AshTest::SetUp(); 1124 AshTestBase::SetUp();
1133 UpdateDisplay("800x600"); 1125 UpdateDisplay("800x600");
1134 WmWindow* default_container = 1126 aura::Window* default_container =
1135 ShellPort::Get()->GetPrimaryRootWindowController()->GetWmContainer( 1127 Shell::GetPrimaryRootWindowController()->GetContainer(
1136 kShellWindowId_DefaultContainer); 1128 kShellWindowId_DefaultContainer);
1137 layout_manager_ = GetWorkspaceLayoutManager(default_container); 1129 layout_manager_ = GetWorkspaceLayoutManager(default_container);
1138 } 1130 }
1139 1131
1140 void ShowKeyboard() { 1132 void ShowKeyboard() {
1141 layout_manager_->OnKeyboardBoundsChanging(keyboard_bounds_); 1133 layout_manager_->OnKeyboardBoundsChanging(keyboard_bounds_);
1142 restore_work_area_insets_ = 1134 restore_work_area_insets_ =
1143 display::Screen::GetScreen()->GetPrimaryDisplay().GetWorkAreaInsets(); 1135 display::Screen::GetScreen()->GetPrimaryDisplay().GetWorkAreaInsets();
1144 ShellPort::Get()->SetDisplayWorkAreaInsets( 1136 ShellPort::Get()->SetDisplayWorkAreaInsets(
1145 ShellPort::Get()->GetPrimaryRootWindow(), 1137 WmWindow::Get(Shell::GetPrimaryRootWindow()),
1146 gfx::Insets(0, 0, keyboard_bounds_.height(), 0)); 1138 gfx::Insets(0, 0, keyboard_bounds_.height(), 0));
1147 } 1139 }
1148 1140
1149 void HideKeyboard() { 1141 void HideKeyboard() {
1150 ShellPort::Get()->SetDisplayWorkAreaInsets( 1142 ShellPort::Get()->SetDisplayWorkAreaInsets(
1151 ShellPort::Get()->GetPrimaryRootWindow(), restore_work_area_insets_); 1143 WmWindow::Get(Shell::GetPrimaryRootWindow()),
1144 restore_work_area_insets_);
1152 layout_manager_->OnKeyboardBoundsChanging(gfx::Rect()); 1145 layout_manager_->OnKeyboardBoundsChanging(gfx::Rect());
1153 } 1146 }
1154 1147
1155 // Initializes the keyboard bounds using the bottom half of the work area. 1148 // Initializes the keyboard bounds using the bottom half of the work area.
1156 void InitKeyboardBounds() { 1149 void InitKeyboardBounds() {
1157 gfx::Rect work_area( 1150 gfx::Rect work_area(
1158 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); 1151 display::Screen::GetScreen()->GetPrimaryDisplay().work_area());
1159 keyboard_bounds_.SetRect(work_area.x(), 1152 keyboard_bounds_.SetRect(work_area.x(),
1160 work_area.y() + work_area.height() / 2, 1153 work_area.y() + work_area.height() / 2,
1161 work_area.width(), work_area.height() / 2); 1154 work_area.width(), work_area.height() / 2);
(...skipping 11 matching lines...) Expand all
1173 gfx::Insets restore_work_area_insets_; 1166 gfx::Insets restore_work_area_insets_;
1174 gfx::Rect keyboard_bounds_; 1167 gfx::Rect keyboard_bounds_;
1175 WorkspaceLayoutManager* layout_manager_; 1168 WorkspaceLayoutManager* layout_manager_;
1176 1169
1177 DISALLOW_COPY_AND_ASSIGN(WorkspaceLayoutManagerKeyboardTest); 1170 DISALLOW_COPY_AND_ASSIGN(WorkspaceLayoutManagerKeyboardTest);
1178 }; 1171 };
1179 1172
1180 // Tests that when a child window gains focus the top level window containing it 1173 // Tests that when a child window gains focus the top level window containing it
1181 // is resized to fit the remaining workspace area. 1174 // is resized to fit the remaining workspace area.
1182 TEST_F(WorkspaceLayoutManagerKeyboardTest, ChildWindowFocused) { 1175 TEST_F(WorkspaceLayoutManagerKeyboardTest, ChildWindowFocused) {
1176 WmWindowTestApi::GlobalMinimumSizeLock min_size_lock;
James Cook 2017/05/01 16:38:09 Why do so many of these tests need the GlobalMinim
1177
1183 InitKeyboardBounds(); 1178 InitKeyboardBounds();
1184 1179
1185 gfx::Rect work_area( 1180 gfx::Rect work_area(
1186 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); 1181 display::Screen::GetScreen()->GetPrimaryDisplay().work_area());
1187 1182
1188 std::unique_ptr<WindowOwner> parent_window_owner( 1183 std::unique_ptr<aura::Window> parent_window(
1189 CreateToplevelTestWindow(work_area)); 1184 CreateToplevelTestWindow(work_area));
1190 WmWindow* parent_window = parent_window_owner->window(); 1185 std::unique_ptr<aura::Window> window(CreateTestWindow(work_area));
1191 std::unique_ptr<WindowOwner> window_owner(CreateTestWindow(work_area)); 1186 parent_window->AddChild(window.get());
1192 WmWindow* window = window_owner->window();
1193 parent_window->AddChild(window);
1194 1187
1195 window->Activate(); 1188 wm::ActivateWindow(window.get());
1196 1189
1197 int available_height = 1190 int available_height =
1198 display::Screen::GetScreen()->GetPrimaryDisplay().bounds().height() - 1191 display::Screen::GetScreen()->GetPrimaryDisplay().bounds().height() -
1199 keyboard_bounds().height(); 1192 keyboard_bounds().height();
1200 1193
1201 gfx::Rect initial_window_bounds(50, 50, 100, 500); 1194 gfx::Rect initial_window_bounds(50, 50, 100, 500);
1202 parent_window->SetBounds(initial_window_bounds); 1195 parent_window->SetBounds(initial_window_bounds);
1203 EXPECT_EQ(initial_window_bounds.ToString(), 1196 EXPECT_EQ(initial_window_bounds.ToString(),
1204 parent_window->GetBounds().ToString()); 1197 parent_window->bounds().ToString());
1205 ShowKeyboard(); 1198 ShowKeyboard();
1206 EXPECT_EQ(gfx::Rect(50, 0, 100, available_height).ToString(), 1199 EXPECT_EQ(gfx::Rect(50, 0, 100, available_height).ToString(),
1207 parent_window->GetBounds().ToString()); 1200 parent_window->bounds().ToString());
1208 HideKeyboard(); 1201 HideKeyboard();
1209 EXPECT_EQ(initial_window_bounds.ToString(), 1202 EXPECT_EQ(initial_window_bounds.ToString(),
1210 parent_window->GetBounds().ToString()); 1203 parent_window->bounds().ToString());
1211 } 1204 }
1212 1205
1213 TEST_F(WorkspaceLayoutManagerKeyboardTest, AdjustWindowForA11yKeyboard) { 1206 TEST_F(WorkspaceLayoutManagerKeyboardTest, AdjustWindowForA11yKeyboard) {
1207 WmWindowTestApi::GlobalMinimumSizeLock min_size_lock;
1214 InitKeyboardBounds(); 1208 InitKeyboardBounds();
1215 gfx::Rect work_area( 1209 gfx::Rect work_area(
1216 display::Screen::GetScreen()->GetPrimaryDisplay().work_area()); 1210 display::Screen::GetScreen()->GetPrimaryDisplay().work_area());
1217 1211
1218 std::unique_ptr<WindowOwner> window_owner( 1212 std::unique_ptr<aura::Window> window(CreateToplevelTestWindow(work_area));
1219 CreateToplevelTestWindow(work_area));
1220 WmWindow* window = window_owner->window();
1221 // The additional SetBounds() is needed as the aura-mus case uses Widget, 1213 // The additional SetBounds() is needed as the aura-mus case uses Widget,
1222 // which alters the supplied bounds. 1214 // which alters the supplied bounds.
1223 window->SetBounds(work_area); 1215 window->SetBounds(work_area);
1224 1216
1225 int available_height = 1217 int available_height =
1226 display::Screen::GetScreen()->GetPrimaryDisplay().bounds().height() - 1218 display::Screen::GetScreen()->GetPrimaryDisplay().bounds().height() -
1227 keyboard_bounds().height(); 1219 keyboard_bounds().height();
1228 1220
1229 window->Activate(); 1221 wm::ActivateWindow(window.get());
1230 1222
1231 EXPECT_EQ(gfx::Rect(work_area).ToString(), window->GetBounds().ToString()); 1223 EXPECT_EQ(gfx::Rect(work_area).ToString(), window->bounds().ToString());
1232 ShowKeyboard(); 1224 ShowKeyboard();
1233 EXPECT_EQ(gfx::Rect(work_area.origin(), 1225 EXPECT_EQ(gfx::Rect(work_area.origin(),
1234 gfx::Size(work_area.width(), available_height)) 1226 gfx::Size(work_area.width(), available_height))
1235 .ToString(), 1227 .ToString(),
1236 window->GetBounds().ToString()); 1228 window->bounds().ToString());
1237 HideKeyboard(); 1229 HideKeyboard();
1238 EXPECT_EQ(gfx::Rect(work_area).ToString(), window->GetBounds().ToString()); 1230 EXPECT_EQ(gfx::Rect(work_area).ToString(), window->bounds().ToString());
1239 1231
1240 gfx::Rect small_window_bound(50, 50, 100, 500); 1232 gfx::Rect small_window_bound(50, 50, 100, 500);
1241 window->SetBounds(small_window_bound); 1233 window->SetBounds(small_window_bound);
1242 EXPECT_EQ(small_window_bound.ToString(), window->GetBounds().ToString()); 1234 EXPECT_EQ(small_window_bound.ToString(), window->bounds().ToString());
1243 ShowKeyboard(); 1235 ShowKeyboard();
1244 EXPECT_EQ(gfx::Rect(50, 0, 100, available_height).ToString(), 1236 EXPECT_EQ(gfx::Rect(50, 0, 100, available_height).ToString(),
1245 window->GetBounds().ToString()); 1237 window->bounds().ToString());
1246 HideKeyboard(); 1238 HideKeyboard();
1247 EXPECT_EQ(small_window_bound.ToString(), window->GetBounds().ToString()); 1239 EXPECT_EQ(small_window_bound.ToString(), window->bounds().ToString());
1248 1240
1249 gfx::Rect occluded_window_bounds( 1241 gfx::Rect occluded_window_bounds(
1250 50, keyboard_bounds().y() + keyboard_bounds().height() / 2, 50, 1242 50, keyboard_bounds().y() + keyboard_bounds().height() / 2, 50,
1251 keyboard_bounds().height() / 2); 1243 keyboard_bounds().height() / 2);
1252 window->SetBounds(occluded_window_bounds); 1244 window->SetBounds(occluded_window_bounds);
1253 EXPECT_EQ(occluded_window_bounds.ToString(), 1245 EXPECT_EQ(occluded_window_bounds.ToString(),
1254 occluded_window_bounds.ToString()); 1246 occluded_window_bounds.ToString());
1255 ShowKeyboard(); 1247 ShowKeyboard();
1256 EXPECT_EQ( 1248 EXPECT_EQ(
1257 gfx::Rect(50, keyboard_bounds().y() - keyboard_bounds().height() / 2, 1249 gfx::Rect(50, keyboard_bounds().y() - keyboard_bounds().height() / 2,
1258 occluded_window_bounds.width(), occluded_window_bounds.height()) 1250 occluded_window_bounds.width(), occluded_window_bounds.height())
1259 .ToString(), 1251 .ToString(),
1260 window->GetBounds().ToString()); 1252 window->bounds().ToString());
1261 HideKeyboard(); 1253 HideKeyboard();
1262 EXPECT_EQ(occluded_window_bounds.ToString(), window->GetBounds().ToString()); 1254 EXPECT_EQ(occluded_window_bounds.ToString(), window->bounds().ToString());
1263 } 1255 }
1264 1256
1265 TEST_F(WorkspaceLayoutManagerKeyboardTest, IgnoreKeyboardBoundsChange) { 1257 TEST_F(WorkspaceLayoutManagerKeyboardTest, IgnoreKeyboardBoundsChange) {
1266 InitKeyboardBounds(); 1258 InitKeyboardBounds();
1267 1259
1268 std::unique_ptr<WindowOwner> window_owner( 1260 std::unique_ptr<aura::Window> window(CreateTestWindow(keyboard_bounds()));
1269 CreateTestWindow(keyboard_bounds()));
1270 WmWindow* window = window_owner->window();
1271 // The additional SetBounds() is needed as the aura-mus case uses Widget, 1261 // The additional SetBounds() is needed as the aura-mus case uses Widget,
1272 // which alters the supplied bounds. 1262 // which alters the supplied bounds.
1273 window->SetBounds(keyboard_bounds()); 1263 window->SetBounds(keyboard_bounds());
1274 window->GetWindowState()->set_ignore_keyboard_bounds_change(true); 1264 wm::GetWindowState(window.get())->set_ignore_keyboard_bounds_change(true);
1275 window->Activate(); 1265 wm::ActivateWindow(window.get());
1276 1266
1277 EXPECT_EQ(keyboard_bounds(), window->GetBounds()); 1267 EXPECT_EQ(keyboard_bounds(), window->bounds());
1278 ShowKeyboard(); 1268 ShowKeyboard();
1279 EXPECT_EQ(keyboard_bounds(), window->GetBounds()); 1269 EXPECT_EQ(keyboard_bounds(), window->bounds());
1280 } 1270 }
1281 1271
1282 } // namespace ash 1272 } // namespace ash
OLDNEW
« no previous file with comments | « ash/wm/workspace/workspace_layout_manager_keyboard_unittest.cc ('k') | ash/wm_window_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698