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
3 // found in the LICENSE file.
5 #include "chrome/browser/ui/panels/base_panel_browser_test.h"
6 #include "chrome/browser/ui/panels/detached_panel_collection.h"
7 #include "chrome/browser/ui/panels/panel.h"
8 #include "chrome/browser/ui/panels/panel_manager.h"
9 #include "chrome/browser/ui/panels/panel_resize_controller.h"
10 #include "chrome/browser/ui/panels/stacked_panel_collection.h"
12 class PanelResizeBrowserTest
: public BasePanelBrowserTest
{
14 PanelResizeBrowserTest() : BasePanelBrowserTest() {
17 virtual ~PanelResizeBrowserTest() {
20 virtual void SetUpOnMainThread() OVERRIDE
{
21 BasePanelBrowserTest::SetUpOnMainThread();
23 // All the tests here assume using mocked 800x600 display area for the
24 // primary monitor. Do the check now.
25 gfx::Rect primary_display_area
= PanelManager::GetInstance()->
26 display_settings_provider()->GetPrimaryDisplayArea();
27 DCHECK(primary_display_area
.width() == 800);
28 DCHECK(primary_display_area
.height() == 600);
31 void ResizePanel(Panel
* panel
,
32 panel::ResizingSides sides
,
33 const gfx::Vector2d
& delta
) {
34 PanelManager
* panel_manager
= PanelManager::GetInstance();
35 gfx::Rect bounds
= panel
->GetBounds();
36 gfx::Point mouse_location
;
38 case panel::RESIZE_TOP_LEFT
:
39 mouse_location
= bounds
.origin();
41 case panel::RESIZE_TOP
:
42 mouse_location
.SetPoint(bounds
.x() + bounds
.width() / 2, bounds
.y());
44 case panel::RESIZE_TOP_RIGHT
:
45 mouse_location
.SetPoint(bounds
.right(), bounds
.y());
47 case panel::RESIZE_LEFT
:
48 mouse_location
.SetPoint(bounds
.x(), bounds
.y() + bounds
.height() / 2);
50 case panel::RESIZE_RIGHT
:
51 mouse_location
.SetPoint(bounds
.right(),
52 bounds
.y() + bounds
.height() / 2);
54 case panel::RESIZE_BOTTOM_LEFT
:
55 mouse_location
.SetPoint(bounds
.x(), bounds
.bottom());
57 case panel::RESIZE_BOTTOM
:
58 mouse_location
.SetPoint(bounds
.x() + bounds
.width() / 2,
61 case panel::RESIZE_BOTTOM_RIGHT
:
62 mouse_location
.SetPoint(bounds
.right(), bounds
.bottom());
68 panel_manager
->StartResizingByMouse(panel
, mouse_location
, sides
);
69 mouse_location
+= delta
;
70 panel_manager
->ResizeByMouse(mouse_location
);
71 panel_manager
->EndResizingByMouse(false);
75 // http://crbug.com/175760; several panel tests failing regularly on mac.
76 #if defined(OS_MACOSX)
77 #define MAYBE_DockedPanelResizability DISABLED_DockedPanelResizability
79 #define MAYBE_DockedPanelResizability DockedPanelResizability
81 IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest
, MAYBE_DockedPanelResizability
) {
82 PanelManager
* panel_manager
= PanelManager::GetInstance();
83 Panel
* panel
= CreatePanel("Panel");
85 EXPECT_EQ(panel::RESIZABLE_EXCEPT_BOTTOM
, panel
->CanResizeByMouse());
87 gfx::Rect bounds
= panel
->GetBounds();
89 // Try resizing by the top left corner.
90 gfx::Point mouse_location
= bounds
.origin();
91 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
92 panel::RESIZE_TOP_LEFT
);
93 mouse_location
.Offset(-20, -10);
94 panel_manager
->ResizeByMouse(mouse_location
);
96 bounds
.set_size(gfx::Size(bounds
.width() + 20, bounds
.height() + 10));
97 bounds
.Offset(-20, -10);
98 EXPECT_EQ(bounds
, panel
->GetBounds());
100 panel_manager
->EndResizingByMouse(false);
101 EXPECT_EQ(bounds
, panel
->GetBounds());
103 // Try resizing by the top.
104 mouse_location
= bounds
.origin() + gfx::Vector2d(10, 1);
105 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
107 mouse_location
.Offset(5, -10);
108 panel_manager
->ResizeByMouse(mouse_location
);
110 bounds
.set_height(bounds
.height() + 10);
111 bounds
.Offset(0, -10);
112 EXPECT_EQ(bounds
, panel
->GetBounds());
114 panel_manager
->EndResizingByMouse(false);
115 EXPECT_EQ(bounds
, panel
->GetBounds());
117 // Try resizing by the left side.
118 mouse_location
= bounds
.origin() + gfx::Vector2d(1, 30);
119 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
121 mouse_location
.Offset(-5, 25);
122 panel_manager
->ResizeByMouse(mouse_location
);
124 bounds
.set_width(bounds
.width() + 5);
125 bounds
.Offset(-5, 0);
126 EXPECT_EQ(bounds
, panel
->GetBounds());
128 panel_manager
->EndResizingByMouse(false);
129 EXPECT_EQ(bounds
, panel
->GetBounds());
131 // Try resizing by the top right side.
132 mouse_location
= bounds
.origin() + gfx::Vector2d(bounds
.width() - 1, 2);
133 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
134 panel::RESIZE_TOP_RIGHT
);
135 mouse_location
.Offset(30, 20);
136 panel_manager
->ResizeByMouse(mouse_location
);
138 bounds
.set_size(gfx::Size(bounds
.width() + 30, bounds
.height() - 20));
139 bounds
.Offset(0, 20);
140 EXPECT_EQ(bounds
, panel
->GetBounds());
142 panel_manager
->EndResizingByMouse(false);
143 WaitForBoundsAnimationFinished(panel
);
144 bounds
.Offset(-30, 0); // Layout of panel adjusted in docked collection.
145 EXPECT_EQ(bounds
, panel
->GetBounds());
147 // Try resizing by the right side.
148 mouse_location
= bounds
.origin() + gfx::Vector2d(bounds
.width() - 1, 30);
149 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
150 panel::RESIZE_RIGHT
);
151 mouse_location
.Offset(5, 25);
152 panel_manager
->ResizeByMouse(mouse_location
);
154 bounds
.set_width(bounds
.width() + 5);
155 EXPECT_EQ(bounds
, panel
->GetBounds());
157 panel_manager
->EndResizingByMouse(false);
158 WaitForBoundsAnimationFinished(panel
);
159 bounds
.Offset(-5, 0); // Layout of panel adjusted in docked collection.
160 EXPECT_EQ(bounds
, panel
->GetBounds());
162 // Try resizing by the bottom side; verify resize won't work.
163 mouse_location
= bounds
.origin() + gfx::Vector2d(10, bounds
.height() - 1);
164 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
165 panel::RESIZE_BOTTOM
);
166 mouse_location
.Offset(30, -10);
167 panel_manager
->ResizeByMouse(mouse_location
);
168 EXPECT_EQ(bounds
, panel
->GetBounds());
170 panel_manager
->EndResizingByMouse(false);
171 EXPECT_EQ(bounds
, panel
->GetBounds());
173 // Try resizing by the bottom left corner; verify resize won't work.
174 mouse_location
= bounds
.origin() + gfx::Vector2d(1, bounds
.height() - 1);
175 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
176 panel::RESIZE_BOTTOM_LEFT
);
177 mouse_location
.Offset(-10, 15);
178 panel_manager
->ResizeByMouse(mouse_location
);
179 EXPECT_EQ(bounds
, panel
->GetBounds());
181 panel_manager
->EndResizingByMouse(false);
182 EXPECT_EQ(bounds
, panel
->GetBounds());
184 // Try resizing by the bottom right corner; verify resize won't work.
185 mouse_location
= bounds
.origin() +
186 gfx::Vector2d(bounds
.width() - 2, bounds
.height());
187 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
188 panel::RESIZE_BOTTOM_RIGHT
);
189 mouse_location
.Offset(20, 10);
190 panel_manager
->ResizeByMouse(mouse_location
);
191 EXPECT_EQ(bounds
, panel
->GetBounds());
193 panel_manager
->EndResizingByMouse(false);
194 EXPECT_EQ(bounds
, panel
->GetBounds());
199 // http://crbug.com/175760; several panel tests failing regularly on mac.
200 #if defined(OS_MACOSX)
201 #define MAYBE_ResizeDetachedPanel DISABLED_ResizeDetachedPanel
203 #define MAYBE_ResizeDetachedPanel ResizeDetachedPanel
205 IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest
, MAYBE_ResizeDetachedPanel
) {
206 PanelManager
* panel_manager
= PanelManager::GetInstance();
207 Panel
* panel
= CreateDetachedPanel("Panel", gfx::Rect(300, 200, 150, 100));
209 EXPECT_EQ(panel::RESIZABLE_ALL
, panel
->CanResizeByMouse());
211 gfx::Rect bounds
= panel
->GetBounds();
213 // Try resizing by the right side; verify resize will change width only.
214 gfx::Point mouse_location
= bounds
.origin() +
215 gfx::Vector2d(bounds
.width() - 1, 30);
216 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
217 panel::RESIZE_RIGHT
);
218 mouse_location
.Offset(5, 25);
219 panel_manager
->ResizeByMouse(mouse_location
);
221 bounds
.set_width(bounds
.width() + 5);
222 EXPECT_EQ(bounds
, panel
->GetBounds());
224 panel_manager
->EndResizingByMouse(false);
225 EXPECT_EQ(bounds
, panel
->GetBounds());
227 // Try resizing by the bottom left side.
228 mouse_location
= bounds
.origin() + gfx::Vector2d(1, bounds
.height() - 1);
229 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
230 panel::RESIZE_BOTTOM_LEFT
);
231 mouse_location
.Offset(-10, 15);
232 panel_manager
->ResizeByMouse(mouse_location
);
234 bounds
.set_size(gfx::Size(bounds
.width() + 10, bounds
.height() + 15));
235 bounds
.Offset(-10, 0);
236 EXPECT_EQ(bounds
, panel
->GetBounds());
238 panel_manager
->EndResizingByMouse(false);
239 EXPECT_EQ(bounds
, panel
->GetBounds());
241 // Try resizing by the top right side.
242 mouse_location
= bounds
.origin() + gfx::Vector2d(bounds
.width() - 1, 2);
243 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
244 panel::RESIZE_TOP_RIGHT
);
245 mouse_location
.Offset(30, 20);
246 panel_manager
->ResizeByMouse(mouse_location
);
248 bounds
.set_size(gfx::Size(bounds
.width() + 30, bounds
.height() - 20));
249 bounds
.Offset(0, 20);
250 EXPECT_EQ(bounds
, panel
->GetBounds());
252 panel_manager
->EndResizingByMouse(false);
253 EXPECT_EQ(bounds
, panel
->GetBounds());
255 // Try resizing by the top left side.
256 mouse_location
= bounds
.origin() + gfx::Vector2d(1, 0);
257 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
258 panel::RESIZE_TOP_LEFT
);
259 mouse_location
.Offset(-20, -10);
260 panel_manager
->ResizeByMouse(mouse_location
);
262 bounds
.set_size(gfx::Size(bounds
.width() + 20, bounds
.height() + 10));
263 bounds
.Offset(-20, -10);
264 EXPECT_EQ(bounds
, panel
->GetBounds());
266 panel_manager
->EndResizingByMouse(false);
267 EXPECT_EQ(bounds
, panel
->GetBounds());
269 PanelManager::GetInstance()->CloseAll();
272 // http://crbug.com/175760; several panel tests failing regularly on mac.
273 #if defined(OS_MACOSX)
274 #define MAYBE_TryResizePanelBelowMinimizeSize \
275 DISABLED_TryResizePanelBelowMinimizeSize
277 #define MAYBE_TryResizePanelBelowMinimizeSize TryResizePanelBelowMinimizeSize
279 IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest
,
280 MAYBE_TryResizePanelBelowMinimizeSize
) {
281 int initial_width
= 150;
282 int initial_height
= 100;
283 Panel
* panel
= CreateDetachedPanel("1",
284 gfx::Rect(300, 200, initial_width
, initial_height
));
286 // Try to resize the panel below the minimum size. Expect that the panel
287 // shrinks to the minimum size.
288 int resize_width
= panel::kPanelMinWidth
/ 2 - initial_width
;
289 int resize_height
= panel::kPanelMinHeight
/ 2 - initial_height
;
291 panel::RESIZE_BOTTOM_RIGHT
,
292 gfx::Vector2d(resize_width
, resize_height
));
294 EXPECT_EQ(panel::kPanelMinWidth
, panel
->GetBounds().width());
295 EXPECT_EQ(panel::kPanelMinHeight
, panel
->GetBounds().height());
297 PanelManager::GetInstance()->CloseAll();
300 // http://crbug.com/175760; several panel tests failing regularly on mac.
301 #if defined(OS_MACOSX)
302 #define MAYBE_ResizeDetachedPanelToClampSize \
303 DISABLED_ResizeDetachedPanelToClampSize
305 #define MAYBE_ResizeDetachedPanelToClampSize ResizeDetachedPanelToClampSize
307 IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest
,
308 MAYBE_ResizeDetachedPanelToClampSize
) {
309 PanelManager
* panel_manager
= PanelManager::GetInstance();
310 Panel
* panel
= CreateDetachedPanel("Panel", gfx::Rect(300, 200, 150, 100));
312 EXPECT_EQ(panel::RESIZABLE_ALL
, panel
->CanResizeByMouse());
314 gfx::Rect bounds
= panel
->GetBounds();
316 // Make sure the panel does not resize smaller than its min size.
317 gfx::Point mouse_location
= bounds
.origin() +
318 gfx::Vector2d(30, bounds
.height() - 2);
319 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
320 panel::RESIZE_BOTTOM
);
321 mouse_location
.Offset(-20, -500);
322 panel_manager
->ResizeByMouse(mouse_location
);
324 bounds
.set_height(panel
->min_size().height());
325 EXPECT_EQ(bounds
, panel
->GetBounds());
327 panel_manager
->EndResizingByMouse(false);
328 EXPECT_EQ(bounds
, panel
->GetBounds());
330 // Make sure the panel can resize larger than its size. User is in control.
331 mouse_location
= bounds
.origin() +
332 gfx::Vector2d(bounds
.width(), bounds
.height() - 2);
333 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
334 panel::RESIZE_BOTTOM_RIGHT
);
336 // This drag would take us beyond max size.
337 int delta_x
= panel
->max_size().width() + 10 - panel
->GetBounds().width();
338 int delta_y
= panel
->max_size().height() + 10 - panel
->GetBounds().height();
339 mouse_location
.Offset(delta_x
, delta_y
);
340 panel_manager
->ResizeByMouse(mouse_location
);
342 // The bounds if the max_size does not limit the resize.
343 bounds
.set_size(gfx::Size(bounds
.width() + delta_x
,
344 bounds
.height() + delta_y
));
345 EXPECT_EQ(bounds
, panel
->GetBounds());
347 panel_manager
->EndResizingByMouse(false);
348 EXPECT_EQ(bounds
, panel
->GetBounds());
350 PanelManager::GetInstance()->CloseAll();
353 // http://crbug.com/175760; several panel tests failing regularly on mac.
354 #if defined(OS_MACOSX)
355 #define MAYBE_CloseDetachedPanelOnResize DISABLED_CloseDetachedPanelOnResize
357 #define MAYBE_CloseDetachedPanelOnResize CloseDetachedPanelOnResize
359 IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest
,
360 MAYBE_CloseDetachedPanelOnResize
) {
361 PanelManager
* panel_manager
= PanelManager::GetInstance();
362 PanelResizeController
* resize_controller
= panel_manager
->resize_controller();
363 DetachedPanelCollection
* detached_collection
=
364 panel_manager
->detached_collection();
366 // Create 3 detached panels.
367 Panel
* panel1
= CreateDetachedPanel("1", gfx::Rect(100, 200, 100, 100));
368 Panel
* panel2
= CreateDetachedPanel("2", gfx::Rect(200, 210, 110, 110));
369 Panel
* panel3
= CreateDetachedPanel("3", gfx::Rect(300, 220, 120, 120));
370 ASSERT_EQ(3, detached_collection
->num_panels());
372 gfx::Rect panel1_bounds
= panel1
->GetBounds();
373 gfx::Rect panel2_bounds
= panel2
->GetBounds();
374 gfx::Rect panel3_bounds
= panel3
->GetBounds();
376 // Start resizing panel1, and close panel2 in the process.
377 // Panel1 is not affected.
378 gfx::Point mouse_location
= panel1_bounds
.origin() +
379 gfx::Vector2d(1, panel1_bounds
.height() - 1);
380 panel_manager
->StartResizingByMouse(panel1
, mouse_location
,
381 panel::RESIZE_BOTTOM_LEFT
);
382 mouse_location
.Offset(-10, 15);
383 panel_manager
->ResizeByMouse(mouse_location
);
385 panel1_bounds
.set_size(gfx::Size(panel1_bounds
.width() + 10,
386 panel1_bounds
.height() + 15));
387 panel1_bounds
.Offset(-10, 0);
388 EXPECT_EQ(panel1_bounds
, panel1
->GetBounds());
390 CloseWindowAndWait(panel2
);
391 EXPECT_TRUE(resize_controller
->IsResizing());
392 EXPECT_EQ(2, detached_collection
->num_panels());
394 panel_manager
->EndResizingByMouse(false);
395 EXPECT_EQ(panel1_bounds
, panel1
->GetBounds());
397 // Start resizing panel3, and close it in the process.
398 // Resize should abort, panel1 will not be affected.
399 mouse_location
= panel3_bounds
.origin() +
400 gfx::Vector2d(panel3_bounds
.width() - 1, panel3_bounds
.height() - 2);
401 panel_manager
->StartResizingByMouse(panel3
, mouse_location
,
402 panel::RESIZE_BOTTOM_RIGHT
);
403 mouse_location
.Offset(7, -12);
404 panel_manager
->ResizeByMouse(mouse_location
);
406 panel3_bounds
.set_size(gfx::Size(panel3_bounds
.width() + 7,
407 panel3_bounds
.height() - 12));
408 EXPECT_EQ(panel3_bounds
, panel3
->GetBounds());
410 CloseWindowAndWait(panel3
);
411 EXPECT_EQ(1, detached_collection
->num_panels());
412 // Since we closed the panel we were resizing, we should be out of the
413 // resizing mode by now.
414 EXPECT_FALSE(resize_controller
->IsResizing());
416 panel_manager
->EndResizingByMouse(false);
417 EXPECT_FALSE(resize_controller
->IsResizing());
418 EXPECT_EQ(panel1_bounds
, panel1
->GetBounds());
420 panel_manager
->CloseAll();
423 // http://crbug.com/175760; several panel tests failing regularly on mac.
424 #if defined(OS_MACOSX)
425 #define MAYBE_ResizeAndCancel DISABLED_ResizeAndCancel
427 #define MAYBE_ResizeAndCancel ResizeAndCancel
429 IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest
, MAYBE_ResizeAndCancel
) {
430 PanelManager
* panel_manager
= PanelManager::GetInstance();
431 Panel
* panel
= CreateDetachedPanel("Panel", gfx::Rect(300, 200, 150, 100));
432 PanelResizeController
* resize_controller
= panel_manager
->resize_controller();
434 EXPECT_EQ(panel::RESIZABLE_ALL
, panel
->CanResizeByMouse());
436 gfx::Rect original_bounds
= panel
->GetBounds();
438 // Resizing the panel, then cancelling should return it to the original state.
439 // Try resizing by the top right side.
440 gfx::Rect bounds
= panel
->GetBounds();
441 gfx::Point mouse_location
= bounds
.origin() +
442 gfx::Vector2d(bounds
.width() - 1, 1);
443 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
444 panel::RESIZE_TOP_RIGHT
);
445 mouse_location
.Offset(5, 25);
446 panel_manager
->ResizeByMouse(mouse_location
);
448 bounds
.set_size(gfx::Size(bounds
.width() + 5, bounds
.height() - 25));
449 bounds
.Offset(0, 25);
450 EXPECT_EQ(bounds
, panel
->GetBounds());
452 panel_manager
->EndResizingByMouse(true);
453 EXPECT_EQ(original_bounds
, panel
->GetBounds());
455 // Try resizing by the bottom left side.
456 bounds
= panel
->GetBounds();
457 mouse_location
= bounds
.origin() + gfx::Vector2d(1, bounds
.height() - 1);
458 panel_manager
->StartResizingByMouse(panel
, mouse_location
,
459 panel::RESIZE_BOTTOM_LEFT
);
460 mouse_location
.Offset(-10, 15);
461 panel_manager
->ResizeByMouse(mouse_location
);
463 bounds
.set_size(gfx::Size(bounds
.width() + 10, bounds
.height() + 15));
464 bounds
.Offset(-10, 0);
465 EXPECT_EQ(bounds
, panel
->GetBounds());
467 panel_manager
->EndResizingByMouse(true);
468 EXPECT_EQ(original_bounds
, panel
->GetBounds());
469 EXPECT_FALSE(resize_controller
->IsResizing());
471 panel_manager
->CloseAll();
474 // http://crbug.com/175760; several panel tests failing regularly on mac.
475 #if defined(OS_MACOSX)
476 #define MAYBE_ResizeDetachedPanelToTop DISABLED_ResizeDetachedPanelToTop
478 #define MAYBE_ResizeDetachedPanelToTop ResizeDetachedPanelToTop
480 IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest
, MAYBE_ResizeDetachedPanelToTop
) {
481 // Setup the test areas to have top-aligned bar excluded from work area.
482 const gfx::Rect
primary_display_area(0, 0, 800, 600);
483 const gfx::Rect
primary_work_area(0, 10, 800, 590);
484 mock_display_settings_provider()->SetPrimaryDisplay(
485 primary_display_area
, primary_work_area
);
487 PanelManager
* panel_manager
= PanelManager::GetInstance();
488 Panel
* panel
= CreateDetachedPanel("1", gfx::Rect(300, 200, 250, 200));
489 gfx::Rect bounds
= panel
->GetBounds();
491 // Try resizing by the top left corner.
492 gfx::Point mouse_location
= bounds
.origin();
493 panel_manager
->StartResizingByMouse(panel
,
495 panel::RESIZE_TOP_LEFT
);
497 // Try moving the mouse outside the top of the work area. Expect that panel's
498 // top position will not exceed the top of the work area.
499 mouse_location
= gfx::Point(250, 2);
500 panel_manager
->ResizeByMouse(mouse_location
);
502 bounds
.set_width(bounds
.width() + bounds
.x() - mouse_location
.x());
503 bounds
.set_height(bounds
.height() + bounds
.y() - primary_work_area
.y());
504 bounds
.set_x(mouse_location
.x());
505 bounds
.set_y(primary_work_area
.y());
506 EXPECT_EQ(bounds
, panel
->GetBounds());
508 // Try moving the mouse inside the work area. Expect that the panel can be
509 // resized without constraint.
510 mouse_location
= gfx::Point(280, 50);
511 panel_manager
->ResizeByMouse(mouse_location
);
513 bounds
.set_width(bounds
.width() + bounds
.x() - mouse_location
.x());
514 bounds
.set_height(bounds
.height() + bounds
.y() - mouse_location
.y());
515 bounds
.set_x(mouse_location
.x());
516 bounds
.set_y(mouse_location
.y());
517 EXPECT_EQ(bounds
, panel
->GetBounds());
519 panel_manager
->EndResizingByMouse(false);
520 EXPECT_EQ(bounds
, panel
->GetBounds());
522 panel_manager
->CloseAll();
525 // TODO(jianli): to be enabled for other platforms when stacked panels are
529 IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest
, ResizeStackedPanels
) {
530 PanelManager
* panel_manager
= PanelManager::GetInstance();
532 // Create 3 stacked panels.
533 StackedPanelCollection
* stack
= panel_manager
->CreateStack();
534 gfx::Rect panel1_initial_bounds
= gfx::Rect(100, 50, 200, 150);
535 Panel
* panel1
= CreateStackedPanel("1", panel1_initial_bounds
, stack
);
536 gfx::Rect panel2_initial_bounds
= gfx::Rect(0, 0, 150, 100);
537 Panel
* panel2
= CreateStackedPanel("2", panel2_initial_bounds
, stack
);
538 gfx::Rect panel3_initial_bounds
= gfx::Rect(0, 0, 120, 110);
539 Panel
* panel3
= CreateStackedPanel("3", panel3_initial_bounds
, stack
);
540 ASSERT_EQ(3, panel_manager
->num_panels());
541 ASSERT_EQ(1, panel_manager
->num_stacks());
542 ASSERT_EQ(3, stack
->num_panels());
544 gfx::Size panel1_expected_full_size
= panel1_initial_bounds
.size();
545 EXPECT_EQ(panel1_expected_full_size
, panel1
->full_size());
546 gfx::Size
panel2_expected_full_size(panel1_initial_bounds
.width(),
547 panel2_initial_bounds
.height());
548 EXPECT_EQ(panel2_expected_full_size
, panel2
->full_size());
549 gfx::Size
panel3_expected_full_size(panel1_initial_bounds
.width(),
550 panel3_initial_bounds
.height());
551 EXPECT_EQ(panel3_expected_full_size
, panel3
->full_size());
553 gfx::Rect
panel1_expected_bounds(panel1_initial_bounds
);
554 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
555 gfx::Rect
panel2_expected_bounds(panel1_expected_bounds
.x(),
556 panel1_expected_bounds
.bottom(),
557 panel1_expected_bounds
.width(),
558 panel2_initial_bounds
.height());
559 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
560 gfx::Rect
panel3_expected_bounds(panel2_expected_bounds
.x(),
561 panel2_expected_bounds
.bottom(),
562 panel2_expected_bounds
.width(),
563 panel3_initial_bounds
.height());
564 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
566 // Resize by the top-left corner of the top panel.
567 // Expect that the width of all stacked panels get increased by the same
568 // amount and the top panel also expands in height.
569 int top_resize_width
= 15;
570 int top_resize_height
= 10;
572 panel::RESIZE_TOP_LEFT
,
573 gfx::Vector2d(-top_resize_width
, -top_resize_height
));
575 panel1_expected_full_size
.Enlarge(top_resize_width
, top_resize_height
);
576 EXPECT_EQ(panel1_expected_full_size
, panel1
->full_size());
577 panel2_expected_full_size
.Enlarge(top_resize_width
, 0);
578 EXPECT_EQ(panel2_expected_full_size
, panel2
->full_size());
579 panel3_expected_full_size
.Enlarge(top_resize_width
, 0);
580 EXPECT_EQ(panel3_expected_full_size
, panel3
->full_size());
582 panel1_expected_bounds
.SetRect(
583 panel1_expected_bounds
.x() - top_resize_width
,
584 panel1_expected_bounds
.y() - top_resize_height
,
585 panel1_expected_bounds
.width() + top_resize_width
,
586 panel1_expected_bounds
.height() + top_resize_height
);
587 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
588 panel2_expected_bounds
.set_x(panel2_expected_bounds
.x() - top_resize_width
);
589 panel2_expected_bounds
.set_width(
590 panel2_expected_bounds
.width() + top_resize_width
);
591 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
592 panel3_expected_bounds
.set_x(panel3_expected_bounds
.x() - top_resize_width
);
593 panel3_expected_bounds
.set_width(
594 panel3_expected_bounds
.width() + top_resize_width
);
595 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
597 // Resize by the bottom-right corner of the bottom panel.
598 // Expect that the width of all stacked panels get increased by the same
599 // amount and the bottom panel also shrinks in height.
600 int bottom_resize_width
= 12;
601 int bottom_resize_height
= 8;
603 panel::RESIZE_BOTTOM_RIGHT
,
604 gfx::Vector2d(-bottom_resize_width
, -bottom_resize_height
));
606 panel1_expected_full_size
.Enlarge(-bottom_resize_width
, 0);
607 EXPECT_EQ(panel1_expected_full_size
, panel1
->full_size());
608 panel2_expected_full_size
.Enlarge(-bottom_resize_width
, 0);
609 EXPECT_EQ(panel2_expected_full_size
, panel2
->full_size());
610 panel3_expected_full_size
.Enlarge(-bottom_resize_width
,
611 -bottom_resize_height
);
612 EXPECT_EQ(panel3_expected_full_size
, panel3
->full_size());
614 panel1_expected_bounds
.set_width(
615 panel1_expected_bounds
.width() - bottom_resize_width
);
616 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
617 panel2_expected_bounds
.set_width(
618 panel2_expected_bounds
.width() - bottom_resize_width
);
619 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
620 panel3_expected_bounds
.set_width(
621 panel3_expected_bounds
.width() - bottom_resize_width
);
622 panel3_expected_bounds
.set_height(
623 panel3_expected_bounds
.height() - bottom_resize_height
);
624 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
626 // Resize by the bottom edge of the middle panel.
627 // Expect that the height of the middle panel increases and the height of
628 // the bottom panel decreases by the same amount.
629 int middle_resize_height
= 5;
631 panel::RESIZE_BOTTOM
,
632 gfx::Vector2d(0, middle_resize_height
));
634 EXPECT_EQ(panel1_expected_full_size
, panel1
->full_size());
635 panel2_expected_full_size
.Enlarge(0, middle_resize_height
);
636 EXPECT_EQ(panel2_expected_full_size
, panel2
->full_size());
637 panel3_expected_full_size
.Enlarge(0, -middle_resize_height
);
638 EXPECT_EQ(panel3_expected_full_size
, panel3
->full_size());
640 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
641 panel2_expected_bounds
.set_height(
642 panel2_expected_bounds
.height() + middle_resize_height
);
643 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
644 panel3_expected_bounds
.set_y(
645 panel3_expected_bounds
.y() + middle_resize_height
);
646 panel3_expected_bounds
.set_height(
647 panel3_expected_bounds
.height() - middle_resize_height
);
648 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
650 // Collapse the middle panel.
652 WaitForBoundsAnimationFinished(panel2
);
653 EXPECT_TRUE(panel2
->IsMinimized());
655 EXPECT_EQ(panel1_expected_full_size
, panel1
->full_size());
656 EXPECT_EQ(panel2_expected_full_size
, panel2
->full_size());
657 EXPECT_EQ(panel3_expected_full_size
, panel3
->full_size());
659 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
660 panel2_expected_bounds
.set_height(panel2
->TitleOnlyHeight());
661 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
662 panel3_expected_bounds
.set_y(panel2_expected_bounds
.bottom());
663 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
665 // Resize by the bottom edge of the top panel.
666 // Expect that the height of the top panel increases and the height of
667 // the middle panel is not affected because it is collapsed.
668 top_resize_height
= 18;
670 panel::RESIZE_BOTTOM
,
671 gfx::Vector2d(0, top_resize_height
));
673 panel1_expected_full_size
.Enlarge(0, top_resize_height
);
674 EXPECT_EQ(panel1_expected_full_size
, panel1
->full_size());
675 EXPECT_EQ(panel2_expected_full_size
, panel2
->full_size());
676 EXPECT_EQ(panel3_expected_full_size
, panel3
->full_size());
678 panel1_expected_bounds
.set_height(
679 panel1_expected_bounds
.height() + top_resize_height
);
680 EXPECT_EQ(panel1_expected_bounds
, panel1
->GetBounds());
681 panel2_expected_bounds
.set_y(
682 panel2_expected_bounds
.y() + top_resize_height
);
683 EXPECT_EQ(panel2_expected_bounds
, panel2
->GetBounds());
684 panel3_expected_bounds
.set_y(
685 panel3_expected_bounds
.y() + top_resize_height
);
686 EXPECT_EQ(panel3_expected_bounds
, panel3
->GetBounds());
688 panel_manager
->CloseAll();