1 // Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/browser.h"
6 #include "chrome/browser/ui/panels/base_panel_browser_test.h"
7 #include "chrome/browser/ui/panels/detached_panel_collection.h"
8 #include "chrome/browser/ui/panels/docked_panel_collection.h"
9 #include "chrome/browser/ui/panels/native_panel.h"
10 #include "chrome/browser/ui/panels/panel.h"
11 #include "chrome/browser/ui/panels/panel_manager.h"
12 #include "chrome/browser/ui/panels/stacked_panel_collection.h"
13 #include "chrome/browser/web_applications/web_app.h"
14 #include "chrome/test/base/testing_profile.h"
15 #include "content/public/test/test_utils.h"
17 class StackedPanelBrowserTest
: public BasePanelBrowserTest
{
20 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
, CheckStackedPanelProperties
) {
21 PanelManager
* panel_manager
= PanelManager::GetInstance();
23 // Create 2 stacked panels.
24 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
25 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
26 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
27 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
28 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
29 gfx::Rect panel3_initial_bounds
= gfx::Rect(0, 0, 120, 110);
30 Panel
* panel3
= CreateStackedPanel("3", panel3_initial_bounds
, stack
);
32 scoped_ptr
<NativePanelTesting
> panel1_testing(
33 CreateNativePanelTesting(panel1
));
34 scoped_ptr
<NativePanelTesting
> panel2_testing(
35 CreateNativePanelTesting(panel2
));
36 scoped_ptr
<NativePanelTesting
> panel3_testing(
37 CreateNativePanelTesting(panel3
));
39 // Check that all 3 panels are in a stack.
40 ASSERT_EQ(0, panel_manager
->docked_collection()->num_panels());
41 ASSERT_EQ(0, panel_manager
->detached_collection()->num_panels());
42 ASSERT_EQ(1, panel_manager
->num_stacks());
43 ASSERT_EQ(3, stack
->num_panels());
44 EXPECT_EQ(stack
, panel1
->stack());
45 EXPECT_EQ(stack
, panel2
->stack());
46 EXPECT_EQ(stack
, panel3
->stack());
49 EXPECT_TRUE(panel1_testing
->IsButtonVisible(panel::CLOSE_BUTTON
));
50 EXPECT_TRUE(panel2_testing
->IsButtonVisible(panel::CLOSE_BUTTON
));
51 EXPECT_TRUE(panel3_testing
->IsButtonVisible(panel::CLOSE_BUTTON
));
53 if (PanelManager::CanUseSystemMinimize())
54 EXPECT_TRUE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
56 EXPECT_FALSE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
57 EXPECT_FALSE(panel2_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
58 EXPECT_FALSE(panel3_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
60 EXPECT_FALSE(panel1_testing
->IsButtonVisible(panel::RESTORE_BUTTON
));
61 EXPECT_FALSE(panel2_testing
->IsButtonVisible(panel::RESTORE_BUTTON
));
62 EXPECT_FALSE(panel3_testing
->IsButtonVisible(panel::RESTORE_BUTTON
));
65 gfx::Rect
panel1_expected_bounds(panel1_initial_bounds
);
66 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
67 gfx::Rect
panel2_expected_bounds(panel1_expected_bounds
.x(),
68 panel1_expected_bounds
.bottom(),
69 panel1_expected_bounds
.width(),
70 panel2_initial_bounds
.height());
71 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
72 gfx::Rect
panel3_expected_bounds(panel2_expected_bounds
.x(),
73 panel2_expected_bounds
.bottom(),
74 panel2_expected_bounds
.width(),
75 panel3_initial_bounds
.height());
76 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
78 // Check other properties.
79 EXPECT_FALSE(panel1
->IsAlwaysOnTop());
80 EXPECT_FALSE(panel2
->IsAlwaysOnTop());
81 EXPECT_FALSE(panel3
->IsAlwaysOnTop());
83 EXPECT_FALSE(panel1
->IsMinimized());
84 EXPECT_FALSE(panel2
->IsMinimized());
85 EXPECT_FALSE(panel3
->IsMinimized());
87 EXPECT_EQ(panel::RESIZABLE_LEFT
| panel::RESIZABLE_RIGHT
|
88 panel::RESIZABLE_TOP
| panel::RESIZABLE_TOP_LEFT
|
89 panel::RESIZABLE_TOP_RIGHT
| panel::RESIZABLE_BOTTOM
,
90 panel1
->CanResizeByMouse());
91 EXPECT_EQ(panel::RESIZABLE_LEFT
| panel::RESIZABLE_RIGHT
|
92 panel::RESIZABLE_BOTTOM
,
93 panel2
->CanResizeByMouse());
94 EXPECT_EQ(panel::RESIZABLE_LEFT
| panel::RESIZABLE_RIGHT
|
95 panel::RESIZABLE_BOTTOM
| panel::RESIZABLE_BOTTOM_LEFT
|
96 panel::RESIZABLE_BOTTOM_RIGHT
,
97 panel3
->CanResizeByMouse());
99 EXPECT_EQ(panel::TOP_ROUNDED
, panel1_testing
->GetWindowCornerStyle());
100 EXPECT_EQ(panel::NOT_ROUNDED
, panel2_testing
->GetWindowCornerStyle());
101 EXPECT_EQ(panel::BOTTOM_ROUNDED
, panel3_testing
->GetWindowCornerStyle());
103 Panel::AttentionMode expected_attention_mode
=
104 static_cast<Panel::AttentionMode
>(Panel::USE_PANEL_ATTENTION
|
105 Panel::USE_SYSTEM_ATTENTION
);
106 EXPECT_EQ(expected_attention_mode
, panel1
->attention_mode());
107 EXPECT_EQ(expected_attention_mode
, panel2
->attention_mode());
108 EXPECT_EQ(expected_attention_mode
, panel3
->attention_mode());
110 panel_manager
->CloseAll();
113 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
114 CheckMinimizedStackedPanelProperties
) {
115 PanelManager
* panel_manager
= PanelManager::GetInstance();
117 // Create 2 stacked panels.
118 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
119 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
120 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
121 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
122 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
123 gfx::Rect panel3_initial_bounds
= gfx::Rect(0, 0, 120, 110);
124 Panel
* panel3
= CreateStackedPanel("3", panel3_initial_bounds
, stack
);
126 scoped_ptr
<NativePanelTesting
> panel1_testing(
127 CreateNativePanelTesting(panel1
));
128 scoped_ptr
<NativePanelTesting
> panel2_testing(
129 CreateNativePanelTesting(panel2
));
130 scoped_ptr
<NativePanelTesting
> panel3_testing(
131 CreateNativePanelTesting(panel3
));
133 // Minimize these 2 panels.
135 WaitForBoundsAnimationFinished(panel1
);
137 WaitForBoundsAnimationFinished(panel2
);
139 WaitForBoundsAnimationFinished(panel3
);
141 // Check that all 2 panels are in a stack.
142 ASSERT_EQ(0, panel_manager
->docked_collection()->num_panels());
143 ASSERT_EQ(0, panel_manager
->detached_collection()->num_panels());
144 ASSERT_EQ(1, panel_manager
->num_stacks());
145 ASSERT_EQ(3, stack
->num_panels());
146 EXPECT_EQ(stack
, panel1
->stack());
147 EXPECT_EQ(stack
, panel2
->stack());
148 EXPECT_EQ(stack
, panel3
->stack());
151 EXPECT_TRUE(panel1_testing
->IsButtonVisible(panel::CLOSE_BUTTON
));
152 EXPECT_TRUE(panel2_testing
->IsButtonVisible(panel::CLOSE_BUTTON
));
153 EXPECT_TRUE(panel3_testing
->IsButtonVisible(panel::CLOSE_BUTTON
));
155 if (PanelManager::CanUseSystemMinimize())
156 EXPECT_TRUE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
158 EXPECT_FALSE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
159 EXPECT_FALSE(panel2_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
160 EXPECT_FALSE(panel3_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
162 EXPECT_FALSE(panel1_testing
->IsButtonVisible(panel::RESTORE_BUTTON
));
163 EXPECT_FALSE(panel2_testing
->IsButtonVisible(panel::RESTORE_BUTTON
));
164 EXPECT_FALSE(panel3_testing
->IsButtonVisible(panel::RESTORE_BUTTON
));
167 gfx::Rect
panel1_expected_bounds(panel1_initial_bounds
);
168 panel1_expected_bounds
.set_height(panel1
->TitleOnlyHeight());
169 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
170 gfx::Rect
panel2_expected_bounds(panel1_expected_bounds
.x(),
171 panel1_expected_bounds
.bottom(),
172 panel1_expected_bounds
.width(),
173 panel2
->TitleOnlyHeight());
174 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
175 gfx::Rect
panel3_expected_bounds(panel2_expected_bounds
.x(),
176 panel2_expected_bounds
.bottom(),
177 panel2_expected_bounds
.width(),
178 panel3
->TitleOnlyHeight());
179 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
181 // Check other properties.
182 EXPECT_FALSE(panel1
->IsAlwaysOnTop());
183 EXPECT_FALSE(panel2
->IsAlwaysOnTop());
184 EXPECT_FALSE(panel3
->IsAlwaysOnTop());
186 EXPECT_TRUE(panel1
->IsMinimized());
187 EXPECT_TRUE(panel2
->IsMinimized());
188 EXPECT_TRUE(panel3
->IsMinimized());
190 EXPECT_EQ(panel::RESIZABLE_LEFT
| panel::RESIZABLE_RIGHT
,
191 panel1
->CanResizeByMouse());
192 EXPECT_EQ(panel::RESIZABLE_LEFT
| panel::RESIZABLE_RIGHT
,
193 panel2
->CanResizeByMouse());
194 EXPECT_EQ(panel::RESIZABLE_LEFT
| panel::RESIZABLE_RIGHT
,
195 panel3
->CanResizeByMouse());
197 EXPECT_EQ(panel::TOP_ROUNDED
, panel1_testing
->GetWindowCornerStyle());
198 EXPECT_EQ(panel::NOT_ROUNDED
, panel2_testing
->GetWindowCornerStyle());
199 EXPECT_EQ(panel::BOTTOM_ROUNDED
, panel3_testing
->GetWindowCornerStyle());
201 Panel::AttentionMode expected_attention_mode
=
202 static_cast<Panel::AttentionMode
>(Panel::USE_PANEL_ATTENTION
|
203 Panel::USE_SYSTEM_ATTENTION
);
204 EXPECT_EQ(expected_attention_mode
, panel1
->attention_mode());
205 EXPECT_EQ(expected_attention_mode
, panel2
->attention_mode());
206 EXPECT_EQ(expected_attention_mode
, panel3
->attention_mode());
208 panel_manager
->CloseAll();
211 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
, ClickTitlebar
) {
212 PanelManager
* panel_manager
= PanelManager::GetInstance();
214 // Create 2 stacked panels.
215 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
216 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
217 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
218 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
219 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
220 ASSERT_EQ(1, panel_manager
->num_stacks());
222 scoped_ptr
<NativePanelTesting
> panel1_testing(
223 CreateNativePanelTesting(panel1
));
224 scoped_ptr
<NativePanelTesting
> panel2_testing(
225 CreateNativePanelTesting(panel2
));
227 gfx::Point panel1_origin
= panel2
->GetBounds().origin();
228 gfx::Point panel2_origin
= panel2
->GetBounds().origin();
230 EXPECT_FALSE(panel1
->IsMinimized());
231 EXPECT_FALSE(panel2
->IsMinimized());
233 gfx::Rect
panel1_expected_bounds(panel1_initial_bounds
);
234 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
235 gfx::Rect
panel2_expected_bounds(panel1_expected_bounds
.x(),
236 panel1_expected_bounds
.bottom(),
237 panel1_expected_bounds
.width(),
238 panel2_initial_bounds
.height());
239 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
241 // Clicking on P2's titlebar to collapse it.
242 panel2_testing
->PressLeftMouseButtonTitlebar(panel2_origin
);
243 panel2_testing
->ReleaseMouseButtonTitlebar();
244 WaitForBoundsAnimationFinished(panel2
);
245 EXPECT_FALSE(panel1
->IsMinimized());
246 EXPECT_TRUE(panel2
->IsMinimized());
247 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
248 panel2_expected_bounds
.set_height(panel2
->TitleOnlyHeight());
249 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
251 // Clicking on P2's titlebar to expand it.
252 panel2_testing
->PressLeftMouseButtonTitlebar(panel2_origin
);
253 panel2_testing
->ReleaseMouseButtonTitlebar();
254 WaitForBoundsAnimationFinished(panel2
);
255 EXPECT_FALSE(panel1
->IsMinimized());
256 EXPECT_FALSE(panel2
->IsMinimized());
257 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
258 panel2_expected_bounds
.set_height(panel2_initial_bounds
.height());
259 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
261 // Clicking on P2's titlebar with APPLY_TO_ALL modifier to collapse all
263 panel2_testing
->PressLeftMouseButtonTitlebar(panel2_origin
,
264 panel::APPLY_TO_ALL
);
265 panel2_testing
->ReleaseMouseButtonTitlebar(panel::APPLY_TO_ALL
);
266 WaitForBoundsAnimationFinished(panel1
);
267 WaitForBoundsAnimationFinished(panel2
);
268 EXPECT_TRUE(panel1
->IsMinimized());
269 EXPECT_TRUE(panel2
->IsMinimized());
270 panel1_expected_bounds
.set_height(panel1
->TitleOnlyHeight());
271 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
272 panel2_expected_bounds
.set_y(panel1_expected_bounds
.bottom());
273 panel2_expected_bounds
.set_height(panel2
->TitleOnlyHeight());
274 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
276 // Clicking on P1's titlebar with APPLY_TO_ALL modifier to expand all
278 panel1_testing
->PressLeftMouseButtonTitlebar(panel1_origin
,
279 panel::APPLY_TO_ALL
);
280 panel1_testing
->ReleaseMouseButtonTitlebar(panel::APPLY_TO_ALL
);
281 WaitForBoundsAnimationFinished(panel1
);
282 WaitForBoundsAnimationFinished(panel2
);
283 EXPECT_FALSE(panel1
->IsMinimized());
284 EXPECT_FALSE(panel2
->IsMinimized());
285 panel1_expected_bounds
.set_height(panel1_initial_bounds
.height());
286 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
287 panel2_expected_bounds
.set_y(panel1_expected_bounds
.bottom());
288 panel2_expected_bounds
.set_height(panel2_initial_bounds
.height());
289 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
291 panel_manager
->CloseAll();
294 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
, CallMinimizeAndRestoreApi
) {
295 PanelManager
* panel_manager
= PanelManager::GetInstance();
297 // Create 2 stacked panels.
298 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
299 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
300 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
301 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
302 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
303 ASSERT_EQ(1, panel_manager
->num_stacks());
305 EXPECT_FALSE(panel1
->IsMinimized());
306 EXPECT_FALSE(panel2
->IsMinimized());
308 gfx::Rect
panel1_expected_bounds(panel1_initial_bounds
);
309 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
310 gfx::Rect
panel2_expected_bounds(panel1_expected_bounds
.x(),
311 panel1_expected_bounds
.bottom(),
312 panel1_expected_bounds
.width(),
313 panel2_initial_bounds
.height());
314 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
316 // Collapsing P1 by calling its Minimize API.
318 WaitForBoundsAnimationFinished(panel1
);
319 EXPECT_TRUE(panel1
->IsMinimized());
320 EXPECT_FALSE(panel2
->IsMinimized());
321 panel1_expected_bounds
.set_height(panel1
->TitleOnlyHeight());
322 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
323 panel2_expected_bounds
.set_y(panel1_expected_bounds
.bottom());
324 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
326 // Expanding P1 by calling its Restore API.
328 WaitForBoundsAnimationFinished(panel1
);
329 EXPECT_FALSE(panel1
->IsMinimized());
330 EXPECT_FALSE(panel2
->IsMinimized());
331 panel1_expected_bounds
.set_height(panel1_initial_bounds
.height());
332 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
333 panel2_expected_bounds
.set_y(panel1_expected_bounds
.bottom());
334 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
336 panel_manager
->CloseAll();
339 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
, ExpandToFitWithinScreen
) {
340 PanelManager
* panel_manager
= PanelManager::GetInstance();
341 gfx::Rect work_area
=
342 panel_manager
->display_settings_provider()->GetPrimaryWorkArea();
344 // Create 4 stacked panels. P4 is the active panel.
345 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
346 Panel
* panel1
= CreateStackedPanel("1", gfx::Rect(100, 90, 200, 150), stack
);
347 Panel
* panel2
= CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack
);
348 Panel
* panel3
= CreateStackedPanel("3", gfx::Rect(0, 0, 150, 120), stack
);
349 Panel
* panel4
= CreateStackedPanel("4", gfx::Rect(0, 0, 150, 100), stack
);
350 ASSERT_EQ(4, stack
->num_panels());
351 ASSERT_FALSE(panel1
->IsMinimized());
352 ASSERT_FALSE(panel2
->IsMinimized());
353 ASSERT_FALSE(panel3
->IsMinimized());
354 ASSERT_FALSE(panel4
->IsMinimized());
355 EXPECT_LE(panel4
->GetBounds().bottom(), work_area
.bottom());
356 int old_stack_top_position
= panel1
->GetBounds().y();
360 WaitForBoundsAnimationFinished(panel2
);
361 ASSERT_FALSE(panel1
->IsMinimized());
362 ASSERT_TRUE(panel2
->IsMinimized());
363 ASSERT_FALSE(panel3
->IsMinimized());
364 ASSERT_FALSE(panel4
->IsMinimized());
366 // Grow P2's restored height.
367 gfx::Size panel2_full_size
= panel2
->full_size();
368 panel2_full_size
.set_height(panel2_full_size
.height() + 30);
369 panel2
->set_full_size(panel2_full_size
);
371 // Expand P2. Expect that the least recently active panel P1 is minimized in
372 // order to make space for P2.
374 WaitForBoundsAnimationFinished(panel2
);
375 WaitForBoundsAnimationFinished(panel3
);
376 WaitForBoundsAnimationFinished(panel4
);
377 ASSERT_TRUE(panel1
->IsMinimized());
378 ASSERT_FALSE(panel2
->IsMinimized());
379 ASSERT_FALSE(panel3
->IsMinimized());
380 ASSERT_FALSE(panel4
->IsMinimized());
381 EXPECT_EQ(old_stack_top_position
, panel1
->GetBounds().y());
382 EXPECT_LE(panel4
->GetBounds().bottom(), work_area
.bottom());
383 EXPECT_EQ(panel2
->GetBounds().height(), panel2_full_size
.height());
385 // Grow P1's restored height.
386 gfx::Size panel1_full_size
= panel1
->full_size();
387 panel1_full_size
.set_height(panel1_full_size
.height() + 180);
388 panel1
->set_full_size(panel1_full_size
);
390 // Expand P1. Expect that both P2 and P3 are collapsed and the stack moves
391 // up in order to make space for P1.
393 WaitForBoundsAnimationFinished(panel1
);
394 WaitForBoundsAnimationFinished(panel2
);
395 WaitForBoundsAnimationFinished(panel3
);
396 WaitForBoundsAnimationFinished(panel4
);
397 ASSERT_FALSE(panel1
->IsMinimized());
398 ASSERT_TRUE(panel2
->IsMinimized());
399 ASSERT_TRUE(panel3
->IsMinimized());
400 ASSERT_FALSE(panel4
->IsMinimized());
401 EXPECT_LT(panel1
->GetBounds().y(), old_stack_top_position
);
402 EXPECT_GE(panel1
->GetBounds().y(), work_area
.y());
403 EXPECT_LE(panel4
->GetBounds().bottom(), work_area
.bottom());
404 EXPECT_EQ(panel1
->GetBounds().height(), panel1_full_size
.height());
405 old_stack_top_position
= panel1
->GetBounds().y();
407 // Expand P3. Expect that P1 get collapsed in order to make space for P3.
409 WaitForBoundsAnimationFinished(panel1
);
410 WaitForBoundsAnimationFinished(panel2
);
411 WaitForBoundsAnimationFinished(panel3
);
412 WaitForBoundsAnimationFinished(panel4
);
413 ASSERT_TRUE(panel1
->IsMinimized());
414 ASSERT_TRUE(panel2
->IsMinimized());
415 ASSERT_FALSE(panel3
->IsMinimized());
416 ASSERT_FALSE(panel4
->IsMinimized());
417 EXPECT_EQ(old_stack_top_position
, panel1
->GetBounds().y());
418 EXPECT_LE(panel4
->GetBounds().bottom(), work_area
.bottom());
420 // Grow P2's restored height by a very large value such that the stack with
421 // P2 in full height will not fit within the screen.
422 panel2_full_size
= panel2
->full_size();
423 panel2_full_size
.set_height(panel2_full_size
.height() + 500);
424 panel2
->set_full_size(panel2_full_size
);
426 // Expand P2. Expect:
427 // 1) Both P1 and P3 are collapsed
428 // 2) The stack moves up to the top of the screen
429 // 3) P2's restored height is reduced
431 WaitForBoundsAnimationFinished(panel1
);
432 WaitForBoundsAnimationFinished(panel2
);
433 WaitForBoundsAnimationFinished(panel3
);
434 WaitForBoundsAnimationFinished(panel4
);
435 EXPECT_TRUE(panel1
->IsMinimized());
436 EXPECT_FALSE(panel2
->IsMinimized());
437 EXPECT_TRUE(panel3
->IsMinimized());
438 EXPECT_FALSE(panel4
->IsMinimized());
439 EXPECT_EQ(panel1
->GetBounds().y(), work_area
.y());
440 EXPECT_EQ(panel4
->GetBounds().bottom(), work_area
.bottom());
441 EXPECT_LT(panel2
->GetBounds().height(), panel2_full_size
.height());
443 panel_manager
->CloseAll();
446 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
, ExpandAllToFitWithinScreen
) {
447 PanelManager
* panel_manager
= PanelManager::GetInstance();
448 gfx::Rect work_area
=
449 panel_manager
->display_settings_provider()->GetPrimaryWorkArea();
451 // Create 3 stacked panels.
452 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
453 Panel
* panel1
= CreateStackedPanel("1", gfx::Rect(100, 150, 200, 200), stack
);
454 Panel
* panel2
= CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack
);
455 Panel
* panel3
= CreateStackedPanel("3", gfx::Rect(0, 0, 150, 120), stack
);
456 ASSERT_EQ(3, stack
->num_panels());
458 scoped_ptr
<NativePanelTesting
> panel2_testing(
459 CreateNativePanelTesting(panel2
));
461 // Collapse all panels by clicking on P2's titlebar with APPLY_TO_ALL
463 panel2_testing
->PressLeftMouseButtonTitlebar(panel2
->GetBounds().origin(),
464 panel::APPLY_TO_ALL
);
465 panel2_testing
->ReleaseMouseButtonTitlebar(panel::APPLY_TO_ALL
);
466 WaitForBoundsAnimationFinished(panel1
);
467 WaitForBoundsAnimationFinished(panel2
);
468 WaitForBoundsAnimationFinished(panel3
);
469 ASSERT_TRUE(panel1
->IsMinimized());
470 ASSERT_TRUE(panel2
->IsMinimized());
471 ASSERT_TRUE(panel3
->IsMinimized());
473 // Grow P2's restored height by a very large value.
474 gfx::Size panel2_full_size
= panel2
->full_size();
475 panel2_full_size
.set_height(panel2_full_size
.height() + 500);
476 panel2
->set_full_size(panel2_full_size
);
478 // Expand all panels by clicking on P2's titlebar with APPLY_TO_ALL
479 // modifier again. Expect only P2 is expanded due to no available space for
481 panel2_testing
->PressLeftMouseButtonTitlebar(panel2
->GetBounds().origin(),
482 panel::APPLY_TO_ALL
);
483 panel2_testing
->ReleaseMouseButtonTitlebar(panel::APPLY_TO_ALL
);
484 WaitForBoundsAnimationFinished(panel1
);
485 WaitForBoundsAnimationFinished(panel2
);
486 WaitForBoundsAnimationFinished(panel3
);
487 EXPECT_TRUE(panel1
->IsMinimized());
488 EXPECT_FALSE(panel2
->IsMinimized());
489 EXPECT_TRUE(panel3
->IsMinimized());
490 EXPECT_EQ(panel1
->GetBounds().y(), work_area
.y());
491 EXPECT_EQ(panel3
->GetBounds().bottom(), work_area
.bottom());
493 panel_manager
->CloseAll();
496 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
, MinimizeButtonVisibility
) {
497 PanelManager
* panel_manager
= PanelManager::GetInstance();
499 // Create 3 stacked panels.
500 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
501 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
502 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
503 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
504 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
505 gfx::Rect panel3_initial_bounds
= gfx::Rect(0, 0, 250, 120);
506 Panel
* panel3
= CreateStackedPanel("3", panel3_initial_bounds
, stack
);
507 ASSERT_EQ(1, panel_manager
->num_stacks());
508 ASSERT_EQ(3, stack
->num_panels());
510 scoped_ptr
<NativePanelTesting
> panel1_testing(
511 CreateNativePanelTesting(panel1
));
512 scoped_ptr
<NativePanelTesting
> panel2_testing(
513 CreateNativePanelTesting(panel2
));
514 scoped_ptr
<NativePanelTesting
> panel3_testing(
515 CreateNativePanelTesting(panel3
));
517 // Only P1 shows minimize button.
518 if (PanelManager::CanUseSystemMinimize())
519 EXPECT_TRUE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
521 EXPECT_FALSE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
522 EXPECT_FALSE(panel2_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
523 EXPECT_FALSE(panel3_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
525 // Drag P2 away to unstack from P1.
526 // Expect only P2, top panel of the stack consisting P2 and P3, shows minimize
528 gfx::Point
mouse_location(panel2
->GetBounds().origin());
529 panel2_testing
->PressLeftMouseButtonTitlebar(mouse_location
);
530 gfx::Vector2d
drag_delta_to_unstack(120, 50);
531 panel2_testing
->DragTitlebar(mouse_location
+ drag_delta_to_unstack
);
532 panel2_testing
->FinishDragTitlebar();
533 ASSERT_EQ(1, panel_manager
->detached_collection()->num_panels());
534 ASSERT_EQ(1, panel_manager
->num_stacks());
535 ASSERT_EQ(2, stack
->num_panels());
537 if (PanelManager::CanUseSystemMinimize()) {
538 EXPECT_TRUE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
539 EXPECT_TRUE(panel2_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
541 EXPECT_FALSE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
542 EXPECT_FALSE(panel2_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
544 EXPECT_FALSE(panel3_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
546 // Drag P1 to stack to the top edge of P2.
547 // Expect only P1, top panel of the stack consisting P1, P2 and P3, shows
549 gfx::Rect bounds1
= panel1
->GetBounds();
550 gfx::Rect bounds2
= panel2
->GetBounds();
551 mouse_location
= bounds1
.origin();
552 panel1_testing
->PressLeftMouseButtonTitlebar(mouse_location
);
553 gfx::Vector2d
drag_delta_to_stack(bounds2
.x() - bounds1
.x(),
554 bounds2
.y() - bounds1
.bottom());
555 panel1_testing
->DragTitlebar(mouse_location
+ drag_delta_to_stack
);
556 panel1_testing
->FinishDragTitlebar();
557 ASSERT_EQ(0, panel_manager
->detached_collection()->num_panels());
558 ASSERT_EQ(1, panel_manager
->num_stacks());
559 ASSERT_EQ(3, stack
->num_panels());
561 if (PanelManager::CanUseSystemMinimize())
562 EXPECT_TRUE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
564 EXPECT_FALSE(panel1_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
565 EXPECT_FALSE(panel2_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
566 EXPECT_FALSE(panel3_testing
->IsButtonVisible(panel::MINIMIZE_BUTTON
));
568 panel_manager
->CloseAll();
571 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
, DISABLED_ClickMinimizeButton
) {
572 PanelManager
* panel_manager
= PanelManager::GetInstance();
574 // Create 2 stacked panels.
575 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
576 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
577 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
578 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
579 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
580 ASSERT_EQ(1, panel_manager
->num_stacks());
582 scoped_ptr
<NativePanelTesting
> panel1_testing(
583 CreateNativePanelTesting(panel1
));
585 EXPECT_FALSE(panel1
->IsMinimized());
586 EXPECT_FALSE(panel2
->IsMinimized());
588 // Collapsing P1 by calling its Minimize API.
589 panel1
->OnMinimizeButtonClicked(panel::NO_MODIFIER
);
590 EXPECT_FALSE(panel1
->IsMinimized());
591 EXPECT_FALSE(panel2
->IsMinimized());
592 EXPECT_TRUE(panel1_testing
->VerifySystemMinimizeState());
594 panel_manager
->CloseAll();
597 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
, UngroupMinimizedPanels
) {
598 PanelManager
* panel_manager
= PanelManager::GetInstance();
600 // Create 3 stacked panels.
601 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
602 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
603 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
604 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
605 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
606 gfx::Rect panel3_initial_bounds
= gfx::Rect(0, 0, 250, 120);
607 Panel
* panel3
= CreateStackedPanel("3", panel3_initial_bounds
, stack
);
608 ASSERT_EQ(1, panel_manager
->num_stacks());
609 ASSERT_EQ(3, stack
->num_panels());
611 scoped_ptr
<NativePanelTesting
> panel2_testing(
612 CreateNativePanelTesting(panel2
));
613 scoped_ptr
<NativePanelTesting
> panel3_testing(
614 CreateNativePanelTesting(panel3
));
616 // Minimize these 3 panels.
618 WaitForBoundsAnimationFinished(panel1
);
620 WaitForBoundsAnimationFinished(panel3
);
622 WaitForBoundsAnimationFinished(panel3
);
624 EXPECT_TRUE(panel1
->IsMinimized());
625 EXPECT_TRUE(panel2
->IsMinimized());
626 EXPECT_TRUE(panel3
->IsMinimized());
628 gfx::Rect
panel1_expected_bounds(panel1_initial_bounds
);
629 panel1_expected_bounds
.set_height(panel1
->TitleOnlyHeight());
630 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
631 gfx::Rect
panel2_expected_bounds(panel1_expected_bounds
.x(),
632 panel1_expected_bounds
.bottom(),
633 panel1_expected_bounds
.width(),
634 panel2
->TitleOnlyHeight());
635 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
636 gfx::Rect
panel3_expected_bounds(panel2_expected_bounds
.x(),
637 panel2_expected_bounds
.bottom(),
638 panel2_expected_bounds
.width(),
639 panel3
->TitleOnlyHeight());
640 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
642 // Drag P2 away to unstack from P1.
643 // Expect P2 and P3 are still stacked and minimized while P1 becomes detached
644 // and expanded. The minimize button of P2 should become visible now.
645 gfx::Point
mouse_location(panel2
->GetBounds().origin());
646 panel2_testing
->PressLeftMouseButtonTitlebar(mouse_location
);
647 gfx::Vector2d
drag_delta(120, 50);
648 panel2_testing
->DragTitlebar(mouse_location
+ drag_delta
);
649 panel2_testing
->FinishDragTitlebar();
650 WaitForBoundsAnimationFinished(panel1
);
651 ASSERT_EQ(1, panel_manager
->detached_collection()->num_panels());
652 ASSERT_EQ(1, panel_manager
->num_stacks());
653 ASSERT_EQ(2, stack
->num_panels());
655 EXPECT_FALSE(panel1
->IsMinimized());
656 EXPECT_TRUE(panel2
->IsMinimized());
657 EXPECT_TRUE(panel3
->IsMinimized());
659 panel1_expected_bounds
.set_height(panel1_initial_bounds
.height());
660 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
661 panel2_expected_bounds
.Offset(drag_delta
);
662 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
663 panel3_expected_bounds
.Offset(drag_delta
);
664 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
666 // Drag P3 away to unstack from P2.
667 // Expect both panels become detached and expanded.
668 mouse_location
= panel3
->GetBounds().origin();
669 panel3_testing
->PressLeftMouseButtonTitlebar(mouse_location
);
670 panel3_testing
->DragTitlebar(mouse_location
+ drag_delta
);
671 panel3_testing
->FinishDragTitlebar();
672 WaitForBoundsAnimationFinished(panel2
);
673 WaitForBoundsAnimationFinished(panel3
);
674 ASSERT_EQ(3, panel_manager
->detached_collection()->num_panels());
675 ASSERT_EQ(0, panel_manager
->num_stacks());
677 EXPECT_FALSE(panel1
->IsMinimized());
678 EXPECT_FALSE(panel2
->IsMinimized());
679 EXPECT_FALSE(panel3
->IsMinimized());
681 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
682 panel2_expected_bounds
.set_height(panel2_initial_bounds
.height());
683 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
684 panel3_expected_bounds
.Offset(drag_delta
);
685 panel3_expected_bounds
.set_height(panel3_initial_bounds
.height());
686 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
688 panel_manager
->CloseAll();
691 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
692 AddNewPanelToStackWithMostPanels
) {
693 PanelManager
* panel_manager
= PanelManager::GetInstance();
695 // Create one stack with 2 panels.
696 StackedPanelCollection
* stack1
= panel_manager
->CreateStack();
697 CreateStackedPanel("1", gfx::Rect(200, 50, 200, 150), stack1
);
698 CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack1
);
699 ASSERT_EQ(2, panel_manager
->num_panels());
700 ASSERT_EQ(1, panel_manager
->num_stacks());
701 ASSERT_EQ(2, stack1
->num_panels());
703 // Create another stack with 3 panels.
704 StackedPanelCollection
* stack2
= panel_manager
->CreateStack();
705 CreateStackedPanel("3", gfx::Rect(100, 50, 200, 150), stack2
);
706 CreateStackedPanel("4", gfx::Rect(0, 0, 150, 100), stack2
);
707 CreateStackedPanel("5", gfx::Rect(0, 0, 250, 120), stack2
);
708 ASSERT_EQ(5, panel_manager
->num_panels());
709 ASSERT_EQ(2, panel_manager
->num_stacks());
710 ASSERT_EQ(3, stack2
->num_panels());
712 // Create new panel. Expect that it will append to stack2 since it has most
714 CreatePanelParams
params("N", gfx::Rect(50, 50, 150, 100), SHOW_AS_ACTIVE
);
715 params
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
716 Panel
* new_panel
= CreatePanelWithParams(params
);
717 EXPECT_EQ(6, panel_manager
->num_panels());
718 EXPECT_EQ(2, panel_manager
->num_stacks());
719 EXPECT_EQ(2, stack1
->num_panels());
720 EXPECT_EQ(4, stack2
->num_panels());
721 EXPECT_TRUE(stack2
->HasPanel(new_panel
));
722 EXPECT_TRUE(new_panel
== stack2
->bottom_panel());
724 panel_manager
->CloseAll();
727 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
728 AddNewPanelToRightMostStack
) {
729 PanelManager
* panel_manager
= PanelManager::GetInstance();
731 // Create one stack with 2 panels.
732 StackedPanelCollection
* stack1
= panel_manager
->CreateStack();
733 CreateStackedPanel("1", gfx::Rect(100, 50, 200, 150), stack1
);
734 CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack1
);
735 ASSERT_EQ(2, panel_manager
->num_panels());
736 ASSERT_EQ(1, panel_manager
->num_stacks());
737 ASSERT_EQ(2, stack1
->num_panels());
739 // Create another stack with 2 panels.
740 StackedPanelCollection
* stack2
= panel_manager
->CreateStack();
741 CreateStackedPanel("3", gfx::Rect(200, 50, 200, 150), stack2
);
742 CreateStackedPanel("4", gfx::Rect(0, 0, 150, 100), stack2
);
743 ASSERT_EQ(4, panel_manager
->num_panels());
744 ASSERT_EQ(2, panel_manager
->num_stacks());
745 ASSERT_EQ(2, stack2
->num_panels());
747 // Create new panel. Both stack1 and stack2 have same number of panels. Since
748 // stack2 is right-most, new panel will be added to it.
749 CreatePanelParams
params("N", gfx::Rect(50, 50, 150, 100), SHOW_AS_ACTIVE
);
750 params
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
751 Panel
* new_panel
= CreatePanelWithParams(params
);
752 EXPECT_EQ(5, panel_manager
->num_panels());
753 EXPECT_EQ(2, panel_manager
->num_stacks());
754 EXPECT_EQ(2, stack1
->num_panels());
755 EXPECT_EQ(3, stack2
->num_panels());
756 EXPECT_TRUE(stack2
->HasPanel(new_panel
));
757 EXPECT_TRUE(new_panel
== stack2
->bottom_panel());
759 panel_manager
->CloseAll();
762 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
763 AddNewPanelToTopMostStack
) {
764 PanelManager
* panel_manager
= PanelManager::GetInstance();
766 // Create one stack with 2 panels.
767 StackedPanelCollection
* stack1
= panel_manager
->CreateStack();
768 CreateStackedPanel("1", gfx::Rect(100, 90, 200, 150), stack1
);
769 CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack1
);
770 ASSERT_EQ(2, panel_manager
->num_panels());
771 ASSERT_EQ(1, panel_manager
->num_stacks());
772 ASSERT_EQ(2, stack1
->num_panels());
774 // Create another stack with 2 panels.
775 StackedPanelCollection
* stack2
= panel_manager
->CreateStack();
776 CreateStackedPanel("3", gfx::Rect(100, 50, 200, 150), stack2
);
777 CreateStackedPanel("4", gfx::Rect(0, 0, 150, 100), stack2
);
778 ASSERT_EQ(4, panel_manager
->num_panels());
779 ASSERT_EQ(2, panel_manager
->num_stacks());
780 ASSERT_EQ(2, stack2
->num_panels());
782 // Create new panel. Both stack1 and stack2 have same number of panels and
783 // same right position. Since stack2 is top-most, new panel will be added to
785 CreatePanelParams
params("N", gfx::Rect(50, 50, 150, 100), SHOW_AS_ACTIVE
);
786 params
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
787 Panel
* new_panel
= CreatePanelWithParams(params
);
788 EXPECT_EQ(5, panel_manager
->num_panels());
789 EXPECT_EQ(2, panel_manager
->num_stacks());
790 EXPECT_EQ(2, stack1
->num_panels());
791 EXPECT_EQ(3, stack2
->num_panels());
792 EXPECT_TRUE(stack2
->HasPanel(new_panel
));
793 EXPECT_TRUE(new_panel
== stack2
->bottom_panel());
795 panel_manager
->CloseAll();
798 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
799 AddNewPanelToGroupWithRightMostDetachedPanel
) {
800 PanelManager
* panel_manager
= PanelManager::GetInstance();
802 // Create 2 detached panels.
803 CreateDetachedPanel("1", gfx::Rect(200, 50, 250, 150));
804 Panel
* panel2
= CreateDetachedPanel("2", gfx::Rect(250, 100, 150, 100));
805 ASSERT_EQ(2, panel_manager
->num_panels());
806 ASSERT_EQ(0, panel_manager
->num_stacks());
807 ASSERT_EQ(2, panel_manager
->detached_collection()->num_panels());
809 // Create new panel. Expect that new panel will stack to the bottom of panel2
810 // since it is right-most.
811 CreatePanelParams
params("N", gfx::Rect(50, 50, 150, 100), SHOW_AS_ACTIVE
);
812 params
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
813 Panel
* new_panel
= CreatePanelWithParams(params
);
814 EXPECT_EQ(3, panel_manager
->num_panels());
815 EXPECT_EQ(1, panel_manager
->detached_collection()->num_panels());
816 ASSERT_EQ(1, panel_manager
->num_stacks());
817 StackedPanelCollection
* stack
= panel_manager
->stacks().front();
818 EXPECT_EQ(2, stack
->num_panels());
819 EXPECT_TRUE(panel2
== stack
->top_panel());
820 EXPECT_TRUE(new_panel
== stack
->bottom_panel());
822 panel_manager
->CloseAll();
825 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
826 AddNewPanelToGroupWitTopMostDetachedPanel
) {
827 PanelManager
* panel_manager
= PanelManager::GetInstance();
829 // Create 2 detached panels.
830 CreateDetachedPanel("1", gfx::Rect(200, 100, 100, 150));
831 Panel
* panel2
= CreateDetachedPanel("2", gfx::Rect(200, 50, 100, 100));
832 ASSERT_EQ(2, panel_manager
->num_panels());
833 ASSERT_EQ(0, panel_manager
->num_stacks());
834 ASSERT_EQ(2, panel_manager
->detached_collection()->num_panels());
836 // Create new panel. Expect that new panel will stack to the bottom of panel2
837 // since it is top-most.
838 CreatePanelParams
params("N", gfx::Rect(50, 50, 150, 100), SHOW_AS_ACTIVE
);
839 params
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
840 Panel
* new_panel
= CreatePanelWithParams(params
);
841 EXPECT_EQ(3, panel_manager
->num_panels());
842 EXPECT_EQ(1, panel_manager
->detached_collection()->num_panels());
843 ASSERT_EQ(1, panel_manager
->num_stacks());
844 StackedPanelCollection
* stack
= panel_manager
->stacks().front();
845 EXPECT_EQ(2, stack
->num_panels());
846 EXPECT_TRUE(panel2
== stack
->top_panel());
847 EXPECT_TRUE(new_panel
== stack
->bottom_panel());
849 panel_manager
->CloseAll();
852 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
853 AddNewPanelToStackWithCollapseToFit
) {
854 PanelManager
* panel_manager
= PanelManager::GetInstance();
856 // Create one stack with 4 panels.
857 // The panels from most recent active to least recent active are:
859 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
860 Panel
* panel1
= CreateStackedPanel("1", gfx::Rect(100, 50, 200, 140), stack
);
861 Panel
* panel2
= CreateStackedPanel("2", gfx::Rect(0, 0, 150, 150), stack
);
862 Panel
* panel3
= CreateStackedPanel("3", gfx::Rect(0, 0, 180, 120), stack
);
863 Panel
* panel4
= CreateStackedPanel("4", gfx::Rect(0, 0, 170, 110), stack
);
864 ASSERT_EQ(4, panel_manager
->num_panels());
865 ASSERT_EQ(1, panel_manager
->num_stacks());
866 ASSERT_EQ(4, stack
->num_panels());
867 EXPECT_FALSE(panel1
->IsMinimized());
868 EXPECT_FALSE(panel2
->IsMinimized());
869 EXPECT_FALSE(panel3
->IsMinimized());
870 EXPECT_FALSE(panel4
->IsMinimized());
872 // Create a panel. Expect the least recent active panel P1 gets minimized such
873 // that there is enough space for new panel to append to the stack.
874 // The panels from most recent active to least recent active are:
876 CreatePanelParams
params1("M", gfx::Rect(50, 50, 300, 110), SHOW_AS_ACTIVE
);
877 params1
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
878 Panel
* new_panel1
= CreatePanelWithParams(params1
);
879 EXPECT_EQ(5, panel_manager
->num_panels());
880 EXPECT_EQ(1, panel_manager
->num_stacks());
881 EXPECT_EQ(5, stack
->num_panels());
882 EXPECT_TRUE(new_panel1
== stack
->bottom_panel());
883 EXPECT_TRUE(panel1
->IsMinimized());
884 EXPECT_FALSE(panel2
->IsMinimized());
885 EXPECT_FALSE(panel3
->IsMinimized());
886 EXPECT_FALSE(panel4
->IsMinimized());
887 EXPECT_FALSE(new_panel1
->IsMinimized());
889 // Create another panel. Expect P2 and P3 are minimized such that there is
890 // enough space for new panel to append to the stack.
891 CreatePanelParams
params2("N", gfx::Rect(50, 50, 300, 180), SHOW_AS_ACTIVE
);
892 params2
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
893 Panel
* new_panel2
= CreatePanelWithParams(params2
);
894 EXPECT_EQ(6, panel_manager
->num_panels());
895 EXPECT_EQ(1, panel_manager
->num_stacks());
896 EXPECT_EQ(6, stack
->num_panels());
897 EXPECT_TRUE(new_panel2
== stack
->bottom_panel());
898 EXPECT_TRUE(panel1
->IsMinimized());
899 EXPECT_TRUE(panel2
->IsMinimized());
900 EXPECT_TRUE(panel3
->IsMinimized());
901 EXPECT_FALSE(panel4
->IsMinimized());
902 EXPECT_FALSE(new_panel1
->IsMinimized());
903 EXPECT_FALSE(new_panel2
->IsMinimized());
905 panel_manager
->CloseAll();
908 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
909 AddNewPanelToGroupWithDetachedPanelWithCollapseToFit
) {
910 PanelManager
* panel_manager
= PanelManager::GetInstance();
912 // Create 2 detached panels.
913 // Since P2 is active, it will not get collapsed when the new panel to stack
914 // with needs the space.
916 CreateInactiveDetachedPanel("1", gfx::Rect(100, 310, 200, 200));
917 Panel
* panel2
= CreateDetachedPanel("2", gfx::Rect(300, 300, 150, 200));
918 ASSERT_EQ(2, panel_manager
->num_panels());
919 ASSERT_EQ(0, panel_manager
->num_stacks());
920 ASSERT_EQ(2, panel_manager
->detached_collection()->num_panels());
922 // Create new panel. Expect panel1 is minimized such that there is enough
923 // space for new panel to append to panel1.
924 CreatePanelParams
params("N", gfx::Rect(50, 50, 300, 220), SHOW_AS_ACTIVE
);
925 params
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
926 Panel
* new_panel
= CreatePanelWithParams(params
);
927 EXPECT_EQ(3, panel_manager
->num_panels());
928 EXPECT_EQ(1, panel_manager
->detached_collection()->num_panels());
929 ASSERT_EQ(1, panel_manager
->num_stacks());
930 StackedPanelCollection
* stack
= panel_manager
->stacks().front();
931 EXPECT_EQ(2, stack
->num_panels());
932 EXPECT_TRUE(panel1
== stack
->top_panel());
933 EXPECT_TRUE(new_panel
== stack
->bottom_panel());
934 EXPECT_TRUE(panel1
->IsMinimized());
935 EXPECT_FALSE(panel2
->IsMinimized());
936 EXPECT_FALSE(new_panel
->IsMinimized());
938 panel_manager
->CloseAll();
941 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
942 AddNewPanelAsDetachedDueToNoPanelToGroupWith
) {
943 PanelManager
* panel_manager
= PanelManager::GetInstance();
945 // Create one stack with 2 panels.
946 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
947 CreateStackedPanel("1", gfx::Rect(100, 350, 200, 100), stack
);
948 CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack
);
949 ASSERT_EQ(2, panel_manager
->num_panels());
950 ASSERT_EQ(1, panel_manager
->num_stacks());
951 ASSERT_EQ(2, stack
->num_panels());
953 // Create 2 detached panels.
954 CreateDetachedPanel("3", gfx::Rect(300, 450, 200, 100));
955 CreateDetachedPanel("4", gfx::Rect(250, 150, 150, 200));
956 ASSERT_EQ(4, panel_manager
->num_panels());
957 ASSERT_EQ(2, panel_manager
->detached_collection()->num_panels());
958 ASSERT_EQ(1, panel_manager
->num_stacks());
960 // Create new panel. Expect that new panel has to be created as detached due
961 // to that there is not enough space from any stack or detached panel.
962 CreatePanelParams
params("N", gfx::Rect(50, 50, 300, 300), SHOW_AS_ACTIVE
);
963 params
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
964 Panel
* new_panel
= CreatePanelWithParams(params
);
965 EXPECT_EQ(5, panel_manager
->num_panels());
966 EXPECT_EQ(3, panel_manager
->detached_collection()->num_panels());
967 EXPECT_EQ(1, panel_manager
->num_stacks());
968 EXPECT_EQ(2, stack
->num_panels());
969 EXPECT_TRUE(panel_manager
->detached_collection()->HasPanel(new_panel
));
971 panel_manager
->CloseAll();
974 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
975 AddNewPanelFromDifferentExtension
) {
976 PanelManager
* panel_manager
= PanelManager::GetInstance();
978 // Create 2 test extensions.
979 base::DictionaryValue empty_value
;
980 scoped_refptr
<extensions::Extension
> extension1
=
981 CreateExtension(FILE_PATH_LITERAL("TestExtension1"),
982 extensions::Manifest::INTERNAL
, empty_value
);
983 std::string extension1_app_name
=
984 web_app::GenerateApplicationNameFromExtensionId(extension1
->id());
985 scoped_refptr
<extensions::Extension
> extension2
=
986 CreateExtension(FILE_PATH_LITERAL("TestExtension2"),
987 extensions::Manifest::INTERNAL
, empty_value
);
988 std::string extension2_app_name
=
989 web_app::GenerateApplicationNameFromExtensionId(extension2
->id());
991 // Create 2 panels from extension1. Expect that these 2 panels stack together.
992 CreatePanelParams
params1(
993 extension1_app_name
, gfx::Rect(50, 50, 100, 100), SHOW_AS_ACTIVE
);
994 params1
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
995 Panel
* panel1
= CreatePanelWithParams(params1
);
996 CreatePanelParams
params2(
997 extension1_app_name
, gfx::Rect(100, 100, 200, 100), SHOW_AS_ACTIVE
);
998 params2
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
999 Panel
* panel2
= CreatePanelWithParams(params2
);
1000 EXPECT_EQ(2, panel_manager
->num_panels());
1001 EXPECT_EQ(1, panel_manager
->num_stacks());
1002 StackedPanelCollection
* stack1
= panel_manager
->stacks().back();
1003 EXPECT_TRUE(stack1
->HasPanel(panel1
));
1004 EXPECT_TRUE(stack1
->HasPanel(panel2
));
1006 // Create 2 panels from extension2. Expect that these 2 panels form a separate
1008 CreatePanelParams
params3(
1009 extension2_app_name
, gfx::Rect(350, 350, 100, 100), SHOW_AS_ACTIVE
);
1010 params3
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1011 Panel
* panel3
= CreatePanelWithParams(params3
);
1012 CreatePanelParams
params4(
1013 extension2_app_name
, gfx::Rect(100, 100, 200, 100), SHOW_AS_ACTIVE
);
1014 params4
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1015 Panel
* panel4
= CreatePanelWithParams(params4
);
1016 EXPECT_EQ(4, panel_manager
->num_panels());
1017 EXPECT_EQ(2, panel_manager
->num_stacks());
1018 StackedPanelCollection
* stack2
= panel_manager
->stacks().back();
1019 EXPECT_TRUE(stack2
->HasPanel(panel3
));
1020 EXPECT_TRUE(stack2
->HasPanel(panel4
));
1022 // Create one more panel from extension1. Expect that new panel should join
1023 // with the stack of panel1 and panel2.
1024 CreatePanelParams
params5(
1025 extension1_app_name
, gfx::Rect(0, 0, 100, 100), SHOW_AS_ACTIVE
);
1026 params5
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1027 Panel
* panel5
= CreatePanelWithParams(params5
);
1028 EXPECT_EQ(5, panel_manager
->num_panels());
1029 EXPECT_EQ(2, panel_manager
->num_stacks());
1030 EXPECT_TRUE(stack1
->HasPanel(panel5
));
1032 // Create one more panel from extension2. Expect that new panel should join
1033 // with the stack of panel3 and panel4.
1034 CreatePanelParams
params6(
1035 extension2_app_name
, gfx::Rect(0, 0, 100, 100), SHOW_AS_ACTIVE
);
1036 params6
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1037 Panel
* panel6
= CreatePanelWithParams(params6
);
1038 EXPECT_EQ(6, panel_manager
->num_panels());
1039 EXPECT_EQ(2, panel_manager
->num_stacks());
1040 EXPECT_TRUE(stack2
->HasPanel(panel6
));
1042 panel_manager
->CloseAll();
1045 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
1046 AddNewPanelFromDifferentProfile
) {
1047 PanelManager
* panel_manager
= PanelManager::GetInstance();
1049 // Create a new profile.
1050 Profile
* profile1
= browser()->profile();
1051 scoped_ptr
<TestingProfile
> profile2(new TestingProfile());
1053 // Create 2 panels from profile1. Expect that these 2 panels stack together.
1054 CreatePanelParams
params1(
1055 "1", gfx::Rect(50, 50, 100, 100), SHOW_AS_ACTIVE
);
1056 params1
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1057 params1
.profile
= profile1
;
1058 Panel
* panel1
= CreatePanelWithParams(params1
);
1059 CreatePanelParams
params2(
1060 "2", gfx::Rect(100, 100, 200, 100), SHOW_AS_ACTIVE
);
1061 params2
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1062 params2
.profile
= profile1
;
1063 Panel
* panel2
= CreatePanelWithParams(params2
);
1064 EXPECT_EQ(2, panel_manager
->num_panels());
1065 EXPECT_EQ(1, panel_manager
->num_stacks());
1066 StackedPanelCollection
* stack1
= panel_manager
->stacks().back();
1067 EXPECT_TRUE(stack1
->HasPanel(panel1
));
1068 EXPECT_TRUE(stack1
->HasPanel(panel2
));
1070 // Create 2 panels from profile2. Expect that these 2 panels form a separate
1072 CreatePanelParams
params3(
1073 "3", gfx::Rect(350, 350, 100, 100), SHOW_AS_ACTIVE
);
1074 params3
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1075 params3
.profile
= profile2
.get();
1076 Panel
* panel3
= CreatePanelWithParams(params3
);
1077 CreatePanelParams
params4(
1078 "4", gfx::Rect(100, 100, 200, 100), SHOW_AS_ACTIVE
);
1079 params4
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1080 params4
.profile
= profile2
.get();
1081 Panel
* panel4
= CreatePanelWithParams(params4
);
1082 EXPECT_EQ(4, panel_manager
->num_panels());
1083 EXPECT_EQ(2, panel_manager
->num_stacks());
1084 StackedPanelCollection
* stack2
= panel_manager
->stacks().back();
1085 EXPECT_TRUE(stack2
->HasPanel(panel3
));
1086 EXPECT_TRUE(stack2
->HasPanel(panel4
));
1088 // Create one more panel from profile1. Expect that new panel should join
1089 // with the stack of panel1 and panel2.
1090 CreatePanelParams
params5(
1091 "5", gfx::Rect(0, 0, 100, 100), SHOW_AS_ACTIVE
);
1092 params5
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1093 params5
.profile
= profile1
;
1094 Panel
* panel5
= CreatePanelWithParams(params5
);
1095 EXPECT_EQ(5, panel_manager
->num_panels());
1096 EXPECT_EQ(2, panel_manager
->num_stacks());
1097 EXPECT_TRUE(stack1
->HasPanel(panel5
));
1099 // Create one more panel from profile2. Expect that new panel should join
1100 // with the stack of panel3 and panel4.
1101 CreatePanelParams
params6(
1102 "6", gfx::Rect(0, 0, 100, 100), SHOW_AS_ACTIVE
);
1103 params6
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1104 params6
.profile
= profile2
.get();
1105 Panel
* panel6
= CreatePanelWithParams(params6
);
1106 EXPECT_EQ(6, panel_manager
->num_panels());
1107 EXPECT_EQ(2, panel_manager
->num_stacks());
1108 EXPECT_TRUE(stack2
->HasPanel(panel6
));
1110 // Wait until all panels created from profile2 get fully closed since profile2
1111 // is going out of scope at the exit of this function.
1112 CloseWindowAndWait(panel3
);
1113 CloseWindowAndWait(panel4
);
1114 CloseWindowAndWait(panel6
);
1116 panel_manager
->CloseAll();
1119 // Skip the test since system-minimize might not be supported for some window
1120 // managers on Linux.
1121 #if defined(TOOLKIT_GTK)
1122 #define MAYBE_AddNewPanelNotWithSystemMinimizedDetachedPanel \
1123 DISABLED_AddNewPanelNotWithSystemMinimizedDetachedPanel
1125 #define MAYBE_AddNewPanelNotWithSystemMinimizedDetachedPanel \
1126 AddNewPanelNotWithSystemMinimizedDetachedPanel
1128 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
1129 MAYBE_AddNewPanelNotWithSystemMinimizedDetachedPanel
) {
1130 PanelManager
* panel_manager
= PanelManager::GetInstance();
1132 // Create 1 detached panel.
1133 Panel
* panel1
= CreateDetachedPanel("1", gfx::Rect(200, 50, 250, 150));
1134 EXPECT_EQ(1, panel_manager
->num_panels());
1135 EXPECT_EQ(0, panel_manager
->num_stacks());
1136 EXPECT_EQ(1, panel_manager
->detached_collection()->num_panels());
1137 EXPECT_EQ(PanelCollection::DETACHED
, panel1
->collection()->type());
1139 // Minimize the detached panel by system.
1140 panel1
->OnMinimizeButtonClicked(panel::NO_MODIFIER
);
1142 // Create new panel. Expect that new panel will open as a separate detached
1143 // panel, instead of being grouped with the system-minimized detached panel.
1144 CreatePanelParams
params("N", gfx::Rect(50, 50, 150, 100), SHOW_AS_ACTIVE
);
1145 params
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1146 Panel
* new_panel
= CreatePanelWithParams(params
);
1147 EXPECT_EQ(2, panel_manager
->num_panels());
1148 EXPECT_EQ(2, panel_manager
->detached_collection()->num_panels());
1149 EXPECT_EQ(0, panel_manager
->num_stacks());
1150 EXPECT_EQ(PanelCollection::DETACHED
, panel1
->collection()->type());
1151 EXPECT_EQ(PanelCollection::DETACHED
, new_panel
->collection()->type());
1153 panel_manager
->CloseAll();
1156 // Skip the test since system-minimize might not be supported for some window
1157 // managers on Linux.
1158 #if defined(TOOLKIT_GTK)
1159 #define MAYBE_AddNewPanelNotWithSystemMinimizedStack \
1160 DISABLED_AddNewPanelNotWithSystemMinimizedStack
1162 #define MAYBE_AddNewPanelNotWithSystemMinimizedStack \
1163 AddNewPanelNotWithSystemMinimizedStack
1165 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
1166 MAYBE_AddNewPanelNotWithSystemMinimizedStack
) {
1167 PanelManager
* panel_manager
= PanelManager::GetInstance();
1169 // Create one stack with 2 panels.
1170 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
1171 Panel
* panel1
= CreateStackedPanel("1", gfx::Rect(100, 90, 200, 150), stack
);
1172 Panel
* panel2
= CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack
);
1173 EXPECT_EQ(2, panel_manager
->num_panels());
1174 EXPECT_EQ(0, panel_manager
->detached_collection()->num_panels());
1175 EXPECT_EQ(1, panel_manager
->num_stacks());
1176 EXPECT_EQ(2, stack
->num_panels());
1177 EXPECT_EQ(PanelCollection::STACKED
, panel1
->collection()->type());
1178 EXPECT_EQ(PanelCollection::STACKED
, panel2
->collection()->type());
1180 // Minimize the stack by system.
1181 stack
->OnMinimizeButtonClicked(panel1
, panel::NO_MODIFIER
);
1183 // Create new panel. Expect that new panel will open as a separate detached
1184 // panel, instead of appending to the system-minimized stack.
1185 CreatePanelParams
params("N", gfx::Rect(50, 50, 150, 100), SHOW_AS_ACTIVE
);
1186 params
.create_mode
= PanelManager::CREATE_AS_DETACHED
;
1187 Panel
* new_panel
= CreatePanelWithParams(params
);
1188 EXPECT_EQ(3, panel_manager
->num_panels());
1189 EXPECT_EQ(1, panel_manager
->detached_collection()->num_panels());
1190 EXPECT_EQ(1, panel_manager
->num_stacks());
1191 EXPECT_EQ(2, stack
->num_panels());
1192 EXPECT_EQ(PanelCollection::STACKED
, panel1
->collection()->type());
1193 EXPECT_EQ(PanelCollection::STACKED
, panel2
->collection()->type());
1194 EXPECT_EQ(PanelCollection::DETACHED
, new_panel
->collection()->type());
1196 panel_manager
->CloseAll();
1199 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
, ClosePanels
) {
1200 PanelManager
* panel_manager
= PanelManager::GetInstance();
1202 // Create 3 stacked panels.
1203 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
1204 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
1205 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
1206 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
1207 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
1208 gfx::Rect panel3_initial_bounds
= gfx::Rect(0, 0, 250, 120);
1209 Panel
* panel3
= CreateStackedPanel("3", panel3_initial_bounds
, stack
);
1210 ASSERT_EQ(3, panel_manager
->num_panels());
1211 ASSERT_EQ(1, panel_manager
->num_stacks());
1212 ASSERT_EQ(3, stack
->num_panels());
1214 gfx::Rect
panel1_expected_bounds(panel1_initial_bounds
);
1215 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
1216 gfx::Rect
panel2_expected_bounds(panel1_expected_bounds
.x(),
1217 panel1_expected_bounds
.bottom(),
1218 panel1_expected_bounds
.width(),
1219 panel2_initial_bounds
.height());
1220 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
1221 gfx::Rect
panel3_expected_bounds(panel2_expected_bounds
.x(),
1222 panel2_expected_bounds
.bottom(),
1223 panel2_expected_bounds
.width(),
1224 panel3_initial_bounds
.height());
1225 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
1227 // Close P1. Expect that P2 and P3 should move up.
1228 CloseWindowAndWait(panel1
);
1229 WaitForBoundsAnimationFinished(panel2
);
1230 WaitForBoundsAnimationFinished(panel3
);
1231 ASSERT_EQ(2, panel_manager
->num_panels());
1232 ASSERT_EQ(1, panel_manager
->num_stacks());
1233 ASSERT_EQ(2, stack
->num_panels());
1234 EXPECT_EQ(PanelCollection::STACKED
, panel2
->collection()->type());
1235 EXPECT_EQ(PanelCollection::STACKED
, panel3
->collection()->type());
1237 panel2_expected_bounds
.set_y(panel1_expected_bounds
.y());
1238 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
1239 panel3_expected_bounds
.set_y(panel2_expected_bounds
.bottom());
1240 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
1242 // Close P2. Expect that P3 should become detached and move up.
1243 CloseWindowAndWait(panel2
);
1244 WaitForBoundsAnimationFinished(panel3
);
1245 ASSERT_EQ(1, panel_manager
->num_panels());
1246 ASSERT_EQ(0, panel_manager
->num_stacks());
1247 EXPECT_EQ(PanelCollection::DETACHED
, panel3
->collection()->type());
1249 panel3_expected_bounds
.set_y(panel2_expected_bounds
.y());
1250 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
1252 panel_manager
->CloseAll();
1255 // Skip the test since active state might not be fully supported for some window
1257 #if defined(TOOLKIT_GTK) || defined(OS_MACOSX)
1258 #define MAYBE_FocusNextPanelOnPanelClose DISABLED_FocusNextPanelOnPanelClose
1260 #define MAYBE_FocusNextPanelOnPanelClose FocusNextPanelOnPanelClose
1262 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
1263 MAYBE_FocusNextPanelOnPanelClose
) {
1264 PanelManager
* panel_manager
= PanelManager::GetInstance();
1266 // Create 3 stacked panels.
1267 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
1268 Panel
* panel1
= CreateStackedPanel("1", gfx::Rect(100, 50, 200, 200), stack
);
1269 Panel
* panel2
= CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack
);
1270 Panel
* panel3
= CreateStackedPanel("3", gfx::Rect(0, 0, 150, 120), stack
);
1271 ASSERT_EQ(3, stack
->num_panels());
1272 ASSERT_FALSE(panel1
->IsActive());
1273 ASSERT_FALSE(panel2
->IsActive());
1274 ASSERT_TRUE(panel3
->IsActive());
1276 // Close P3. Expect P2 should become active.
1277 CloseWindowAndWait(panel3
);
1278 EXPECT_FALSE(panel1
->IsActive());
1279 EXPECT_TRUE(panel2
->IsActive());
1281 // Close P2. Expect P1 should become active.
1282 CloseWindowAndWait(panel2
);
1283 EXPECT_TRUE(panel1
->IsActive());
1285 panel_manager
->CloseAll();
1288 // Skip the test since active state might not be fully supported for some window
1290 #if defined(TOOLKIT_GTK) || defined(OS_MACOSX)
1291 #define MAYBE_FocusNextUnminimizedPanelOnPanelClose \
1292 DISABLED_FocusNextUnminimizedPanelOnPanelClose
1294 #define MAYBE_FocusNextUnminimizedPanelOnPanelClose \
1295 FocusNextUnminimizedPanelOnPanelClose
1297 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
1298 MAYBE_FocusNextUnminimizedPanelOnPanelClose
) {
1299 PanelManager
* panel_manager
= PanelManager::GetInstance();
1301 // Create 3 stacked panels.
1302 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
1303 Panel
* panel1
= CreateStackedPanel("1", gfx::Rect(100, 50, 200, 200), stack
);
1304 Panel
* panel2
= CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack
);
1305 Panel
* panel3
= CreateStackedPanel("3", gfx::Rect(0, 0, 150, 120), stack
);
1306 ASSERT_EQ(3, stack
->num_panels());
1307 ASSERT_FALSE(panel1
->IsActive());
1308 ASSERT_FALSE(panel2
->IsActive());
1309 ASSERT_TRUE(panel3
->IsActive());
1313 WaitForBoundsAnimationFinished(panel2
);
1315 // Close P3. Expect P1, not P2, should become active.
1316 CloseWindowAndWait(panel3
);
1317 EXPECT_TRUE(panel1
->IsActive());
1318 EXPECT_FALSE(panel2
->IsActive());
1320 panel_manager
->CloseAll();
1323 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
1324 ExpandCollapsedTopPanelOnBottomPanelClose
) {
1325 PanelManager
* panel_manager
= PanelManager::GetInstance();
1327 // Create 2 stacked panels.
1328 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
1329 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
1330 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
1331 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
1332 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
1333 ASSERT_EQ(2, panel_manager
->num_panels());
1334 ASSERT_EQ(1, panel_manager
->num_stacks());
1335 ASSERT_EQ(2, stack
->num_panels());
1337 // Collapse top panel.
1338 int original_panel1_height
= panel1
->GetBounds().height();
1340 WaitForBoundsAnimationFinished(panel2
);
1341 EXPECT_TRUE(panel1
->IsMinimized());
1342 EXPECT_FALSE(panel2
->IsMinimized());
1344 // Close bottom panel. Expect that top panel should become detached and
1346 CloseWindowAndWait(panel2
);
1347 WaitForBoundsAnimationFinished(panel1
);
1348 EXPECT_EQ(1, panel_manager
->num_panels());
1349 EXPECT_EQ(0, panel_manager
->num_stacks());
1350 EXPECT_EQ(PanelCollection::DETACHED
, panel1
->collection()->type());
1351 EXPECT_FALSE(panel1
->IsMinimized());
1352 EXPECT_EQ(Panel::EXPANDED
, panel1
->expansion_state());
1353 EXPECT_EQ(original_panel1_height
, panel1
->GetBounds().height());
1355 panel_manager
->CloseAll();
1358 // The activation waiting logic does not work well on MacOSX. Disabled for now.
1359 #if defined(OS_MACOSX)
1360 #define MAYBE_FocusCollapsedStackedPanel DISABLED_FocusCollapsedStackedPanel
1362 #define MAYBE_FocusCollapsedStackedPanel FocusCollapsedStackedPanel
1364 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
1365 MAYBE_FocusCollapsedStackedPanel
) {
1366 PanelManager
* panel_manager
= PanelManager::GetInstance();
1368 // Create 2 stacked panels.
1369 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
1370 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
1371 CreateStackedPanel("1", panel1_initial_bounds
, stack
);
1372 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
1373 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
1374 ASSERT_EQ(2, panel_manager
->num_panels());
1375 ASSERT_EQ(1, panel_manager
->num_stacks());
1376 ASSERT_EQ(2, stack
->num_panels());
1378 // Collapse a panel.
1380 WaitForBoundsAnimationFinished(panel2
);
1381 EXPECT_TRUE(panel2
->IsMinimized());
1382 EXPECT_FALSE(panel2
->IsActive());
1384 // Focus the panel. Expect the panel is expanded.
1386 WaitForPanelActiveState(panel2
, SHOW_AS_ACTIVE
);
1387 EXPECT_FALSE(panel2
->IsMinimized());
1389 panel_manager
->CloseAll();
1392 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
1393 UpdateStackedPanelsOnPrimaryDisplayChange
) {
1394 PanelManager
* panel_manager
= PanelManager::GetInstance();
1396 // Create one stack with 5 panels.
1397 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
1398 Panel
* panel1
= CreateStackedPanel("1", gfx::Rect(50, 50, 700, 100), stack
);
1399 Panel
* panel2
= CreateStackedPanel("2", gfx::Rect(0, 0, 100, 100), stack
);
1400 Panel
* panel3
= CreateStackedPanel("3", gfx::Rect(0, 0, 100, 100), stack
);
1401 Panel
* panel4
= CreateStackedPanel("4", gfx::Rect(0, 0, 100, 100), stack
);
1402 Panel
* panel5
= CreateStackedPanel("5", gfx::Rect(0, 0, 100, 100), stack
);
1403 ASSERT_EQ(5, panel_manager
->num_panels());
1404 ASSERT_EQ(1, panel_manager
->num_stacks());
1405 ASSERT_EQ(5, stack
->num_panels());
1407 // Make the primary display smaller.
1408 // Expect that all panels except P5 should be collapsed and their bounds
1409 // should be updated.
1410 int new_primary_area_width
= 500;
1411 gfx::Rect
primary_display_area(0, 0, new_primary_area_width
, 300);
1412 gfx::Rect
primary_work_area(0, 0, new_primary_area_width
, 280);
1413 mock_display_settings_provider()->SetPrimaryDisplay(
1414 primary_display_area
, primary_work_area
);
1415 WaitForBoundsAnimationFinished(panel1
);
1416 WaitForBoundsAnimationFinished(panel2
);
1417 WaitForBoundsAnimationFinished(panel3
);
1418 WaitForBoundsAnimationFinished(panel4
);
1419 WaitForBoundsAnimationFinished(panel5
);
1421 EXPECT_TRUE(panel1
->IsMinimized());
1422 EXPECT_TRUE(panel2
->IsMinimized());
1423 EXPECT_TRUE(panel3
->IsMinimized());
1424 EXPECT_TRUE(panel4
->IsMinimized());
1425 EXPECT_FALSE(panel5
->IsMinimized());
1427 gfx::Rect bounds1
= panel1
->GetBounds();
1428 EXPECT_EQ(primary_work_area
.x(), bounds1
.x());
1429 EXPECT_LE(bounds1
.x(), primary_work_area
.right());
1430 EXPECT_LE(primary_work_area
.y(), bounds1
.y());
1431 EXPECT_EQ(new_primary_area_width
, bounds1
.width());
1433 gfx::Rect bounds2
= panel2
->GetBounds();
1434 EXPECT_EQ(bounds1
.x(), bounds2
.x());
1435 EXPECT_EQ(bounds1
.width(), bounds2
.width());
1436 EXPECT_EQ(bounds1
.bottom(), bounds2
.y());
1438 gfx::Rect bounds3
= panel3
->GetBounds();
1439 EXPECT_EQ(bounds2
.x(), bounds3
.x());
1440 EXPECT_EQ(bounds2
.width(), bounds3
.width());
1441 EXPECT_EQ(bounds2
.bottom(), bounds3
.y());
1443 gfx::Rect bounds4
= panel4
->GetBounds();
1444 EXPECT_EQ(bounds3
.x(), bounds4
.x());
1445 EXPECT_EQ(bounds3
.width(), bounds4
.width());
1446 EXPECT_EQ(bounds3
.bottom(), bounds4
.y());
1448 gfx::Rect bounds5
= panel5
->GetBounds();
1449 EXPECT_EQ(bounds4
.x(), bounds5
.x());
1450 EXPECT_EQ(bounds4
.width(), bounds5
.width());
1451 EXPECT_EQ(bounds4
.bottom(), bounds5
.y());
1452 EXPECT_LE(bounds5
.bottom(), primary_work_area
.bottom());
1454 panel_manager
->CloseAll();
1457 IN_PROC_BROWSER_TEST_F(StackedPanelBrowserTest
,
1458 KeepShowingStackedPanelCreatedBeforeFullScreenMode
) {
1459 PanelManager
* panel_manager
= PanelManager::GetInstance();
1461 // Create 2 stacked panels.
1462 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
1463 Panel
* panel1
= CreateStackedPanel("1", gfx::Rect(100, 50, 200, 150), stack
);
1464 Panel
* panel2
= CreateStackedPanel("2", gfx::Rect(0, 0, 150, 100), stack
);
1465 scoped_ptr
<NativePanelTesting
> panel1_testing(
1466 CreateNativePanelTesting(panel1
));
1467 scoped_ptr
<NativePanelTesting
> panel2_testing(
1468 CreateNativePanelTesting(panel2
));
1470 // Panels should be visible at first.
1471 EXPECT_TRUE(panel1_testing
->IsWindowVisible());
1472 EXPECT_TRUE(panel2_testing
->IsWindowVisible());
1474 // Panels' visibility should not be affected when entering full-screen mode.
1475 mock_display_settings_provider()->EnableFullScreenMode(true);
1476 EXPECT_TRUE(panel1_testing
->IsWindowVisible());
1477 EXPECT_TRUE(panel2_testing
->IsWindowVisible());
1479 // Panels' visibility should not be affected when leaving full-screen mode.
1480 mock_display_settings_provider()->EnableFullScreenMode(false);
1481 EXPECT_TRUE(panel1_testing
->IsWindowVisible());
1482 EXPECT_TRUE(panel2_testing
->IsWindowVisible());
1484 panel_manager
->CloseAll();