15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/panels/base_panel_browser_test.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/panels/detached_panel_collection.h"
75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/panels/panel.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/panels/panel_manager.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "chrome/browser/ui/panels/panel_resize_controller.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/panels/stacked_panel_collection.h"
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "ui/base/hit_test.h"
125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class PanelResizeBrowserTest : public BasePanelBrowserTest {
145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public:
155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelResizeBrowserTest() : BasePanelBrowserTest() {
165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual ~PanelResizeBrowserTest() {
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  virtual void SetUpOnMainThread() OVERRIDE {
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    BasePanelBrowserTest::SetUpOnMainThread();
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    // All the tests here assume using mocked 800x600 display area for the
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    // primary monitor. Do the check now.
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    gfx::Rect primary_display_area = PanelManager::GetInstance()->
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        display_settings_provider()->GetPrimaryDisplayArea();
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(primary_display_area.width() == 800);
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    DCHECK(primary_display_area.height() == 600);
302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  }
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  void ResizePanel(Panel* panel,
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                   int component,
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                   const gfx::Vector2d& delta) {
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    PanelManager* panel_manager = PanelManager::GetInstance();
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    gfx::Rect bounds = panel->GetBounds();
372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    gfx::Point mouse_location;
38f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    switch (component) {
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      case HTTOPLEFT:
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mouse_location = bounds.origin();
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      case HTTOP:
432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mouse_location.SetPoint(bounds.x() + bounds.width() / 2, bounds.y());
442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
45f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      case HTTOPRIGHT:
462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mouse_location.SetPoint(bounds.right(), bounds.y());
472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
48f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      case HTLEFT:
492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mouse_location.SetPoint(bounds.x(), bounds.y() + bounds.height() / 2);
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
51f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      case HTRIGHT:
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mouse_location.SetPoint(bounds.right(),
532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                bounds.y() + bounds.height() / 2);
542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
55f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      case HTBOTTOMLEFT:
562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mouse_location.SetPoint(bounds.x(), bounds.bottom());
572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      case HTBOTTOM:
592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mouse_location.SetPoint(bounds.x() + bounds.width() / 2,
602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                bounds.bottom());
612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      case HTBOTTOMRIGHT:
632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        mouse_location.SetPoint(bounds.right(), bounds.bottom());
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      default:
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        NOTREACHED();
672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)        break;
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    }
69f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)    panel_manager->StartResizingByMouse(panel, mouse_location, component);
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    mouse_location += delta;
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    panel_manager->ResizeByMouse(mouse_location);
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)    panel_manager->EndResizingByMouse(false);
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  }
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)};
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/175760; several panel tests failing regularly on mac.
772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX)
782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_DockedPanelResizability DISABLED_DockedPanelResizability
792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_DockedPanelResizability DockedPanelResizability
812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, MAYBE_DockedPanelResizability) {
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelManager* panel_manager = PanelManager::GetInstance();
845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Panel* panel = CreatePanel("Panel");
855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel::RESIZABLE_EXCEPT_BOTTOM, panel->CanResizeByMouse());
875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect bounds = panel->GetBounds();
895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the top left corner.
915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point mouse_location = bounds.origin();
92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTTOPLEFT);
935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(-20, -10);
945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_size(gfx::Size(bounds.width() + 20, bounds.height() + 10));
975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.Offset(-20, -10);
985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the top.
1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(10, 1);
105f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTTOP);
1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(5, -10);
1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_height(bounds.height() + 10);
1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.Offset(0, -10);
1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the left side.
1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(1, 30);
118f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTLEFT);
1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(-5, 25);
1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_width(bounds.width() + 5);
1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.Offset(-5, 0);
1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the top right side.
1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(bounds.width() - 1, 2);
131f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTTOPRIGHT);
1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(30, 20);
1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_size(gfx::Size(bounds.width() + 30, bounds.height() - 20));
1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.Offset(0, 20);
1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WaitForBoundsAnimationFinished(panel);
1412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bounds.Offset(-30, 0);  // Layout of panel adjusted in docked collection.
1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the right side.
1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(bounds.width() - 1, 30);
146f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTRIGHT);
1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(5, 25);
1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_width(bounds.width() + 5);
1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  WaitForBoundsAnimationFinished(panel);
1552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bounds.Offset(-5, 0);  // Layout of panel adjusted in docked collection.
1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the bottom side; verify resize won't work.
1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(10, bounds.height() - 1);
160f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTBOTTOM);
1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(30, -10);
1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the bottom left corner; verify resize won't work.
1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(1, bounds.height() - 1);
170f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTBOTTOMLEFT);
1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(-10, 15);
1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the bottom right corner; verify resize won't work.
1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() +
1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Vector2d(bounds.width() - 2, bounds.height());
181f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTBOTTOMRIGHT);
1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(20, 10);
1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel->Close();
1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
1922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/175760; several panel tests failing regularly on mac.
1932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX)
1942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ResizeDetachedPanel DISABLED_ResizeDetachedPanel
1952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
1962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ResizeDetachedPanel ResizeDetachedPanel
1972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
1982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, MAYBE_ResizeDetachedPanel) {
1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelManager* panel_manager = PanelManager::GetInstance();
2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Panel* panel = CreateDetachedPanel("Panel", gfx::Rect(300, 200, 150, 100));
2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel::RESIZABLE_ALL, panel->CanResizeByMouse());
2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect bounds = panel->GetBounds();
2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the right side; verify resize will change width only.
2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point mouse_location = bounds.origin() +
2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Vector2d(bounds.width() - 1, 30);
209f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTRIGHT);
2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(5, 25);
2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_width(bounds.width() + 5);
2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the bottom left side.
2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(1, bounds.height() - 1);
221f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTBOTTOMLEFT);
2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(-10, 15);
2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_size(gfx::Size(bounds.width() + 10, bounds.height() + 15));
2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.Offset(-10, 0);
2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the top right side.
2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(bounds.width() - 1, 2);
234f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTTOPRIGHT);
2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(30, 20);
2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_size(gfx::Size(bounds.width() + 30, bounds.height() - 20));
2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.Offset(0, 20);
2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the top left side.
2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(1, 0);
247f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTTOPLEFT);
2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(-20, -10);
2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_size(gfx::Size(bounds.width() + 20, bounds.height() + 10));
2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.Offset(-20, -10);
2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
2565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
2575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelManager::GetInstance()->CloseAll();
2595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
2605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
2612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/175760; several panel tests failing regularly on mac.
2622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX)
263c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_TryResizePanelBelowMinimizeSize \
264c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  DISABLED_TryResizePanelBelowMinimizeSize
265c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#else
266c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#define MAYBE_TryResizePanelBelowMinimizeSize TryResizePanelBelowMinimizeSize
267c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#endif
268c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest,
269c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       MAYBE_TryResizePanelBelowMinimizeSize) {
270c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int initial_width = 150;
271c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int initial_height = 100;
272c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Panel* panel = CreateDetachedPanel("1",
273c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      gfx::Rect(300, 200, initial_width, initial_height));
274c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
275c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // Try to resize the panel below the minimum size. Expect that the panel
276c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  // shrinks to the minimum size.
277c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int resize_width = panel::kPanelMinWidth / 2 - initial_width;
278c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  int resize_height = panel::kPanelMinHeight / 2 - initial_height;
279c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  ResizePanel(panel,
280f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)              HTBOTTOMRIGHT,
281c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)              gfx::Vector2d(resize_width, resize_height));
282c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
283c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(panel::kPanelMinWidth, panel->GetBounds().width());
284c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(panel::kPanelMinHeight, panel->GetBounds().height());
285c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
286c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  PanelManager::GetInstance()->CloseAll();
287c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}
288c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
289c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)// http://crbug.com/175760; several panel tests failing regularly on mac.
290c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#if defined(OS_MACOSX)
2912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ResizeDetachedPanelToClampSize \
2922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DISABLED_ResizeDetachedPanelToClampSize
2932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
2942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ResizeDetachedPanelToClampSize ResizeDetachedPanelToClampSize
2952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
2962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest,
2972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       MAYBE_ResizeDetachedPanelToClampSize) {
2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelManager* panel_manager = PanelManager::GetInstance();
2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Panel* panel = CreateDetachedPanel("Panel", gfx::Rect(300, 200, 150, 100));
3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel::RESIZABLE_ALL, panel->CanResizeByMouse());
3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect bounds = panel->GetBounds();
3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure the panel does not resize smaller than its min size.
3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point mouse_location = bounds.origin() +
3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Vector2d(30, bounds.height() - 2);
308f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTBOTTOM);
3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(-20, -500);
3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_height(panel->min_size().height());
3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Make sure the panel can resize larger than its size. User is in control.
3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() +
3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Vector2d(bounds.width(), bounds.height() - 2);
321f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTBOTTOMRIGHT);
3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // This drag would take us beyond max size.
3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int delta_x = panel->max_size().width() + 10 - panel->GetBounds().width();
3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  int delta_y = panel->max_size().height() + 10 - panel->GetBounds().height();
3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(delta_x, delta_y);
3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // The bounds if the max_size does not limit the resize.
3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_size(gfx::Size(bounds.width() + delta_x,
3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                            bounds.height() + delta_y));
3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelManager::GetInstance()->CloseAll();
3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/175760; several panel tests failing regularly on mac.
3412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX)
3422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_CloseDetachedPanelOnResize DISABLED_CloseDetachedPanelOnResize
3432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
3442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_CloseDetachedPanelOnResize CloseDetachedPanelOnResize
3452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
3462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest,
3472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                       MAYBE_CloseDetachedPanelOnResize) {
3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelManager* panel_manager = PanelManager::GetInstance();
3495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelResizeController* resize_controller = panel_manager->resize_controller();
3502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  DetachedPanelCollection* detached_collection =
3512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel_manager->detached_collection();
3525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Create 3 detached panels.
3545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Panel* panel1 = CreateDetachedPanel("1", gfx::Rect(100, 200, 100, 100));
3555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Panel* panel2 = CreateDetachedPanel("2", gfx::Rect(200, 210, 110, 110));
3565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Panel* panel3 = CreateDetachedPanel("3", gfx::Rect(300, 220, 120, 120));
3572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(3, detached_collection->num_panels());
3585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect panel1_bounds = panel1->GetBounds();
3605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect panel2_bounds = panel2->GetBounds();
3615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect panel3_bounds = panel3->GetBounds();
3625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Start resizing panel1, and close panel2 in the process.
3645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Panel1 is not affected.
3655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point mouse_location = panel1_bounds.origin() +
3665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Vector2d(1, panel1_bounds.height() - 1);
367f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel1, mouse_location, HTBOTTOMLEFT);
3685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(-10, 15);
3695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
3705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel1_bounds.set_size(gfx::Size(panel1_bounds.width() + 10,
3725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   panel1_bounds.height() + 15));
3735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel1_bounds.Offset(-10, 0);
3745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(panel1_bounds, panel1->GetBounds());
3755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CloseWindowAndWait(panel2);
3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_TRUE(resize_controller->IsResizing());
3782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(2, detached_collection->num_panels());
3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(panel1_bounds, panel1->GetBounds());
3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Start resizing panel3, and close it in the process.
3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resize should abort, panel1 will not be affected.
3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = panel3_bounds.origin() +
3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Vector2d(panel3_bounds.width() - 1, panel3_bounds.height() - 2);
387f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel3, mouse_location, HTBOTTOMRIGHT);
3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(7, -12);
3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel3_bounds.set_size(gfx::Size(panel3_bounds.width() + 7,
3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                   panel3_bounds.height() - 12));
3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(panel3_bounds, panel3->GetBounds());
3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  CloseWindowAndWait(panel3);
3962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(1, detached_collection->num_panels());
3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Since we closed the panel we were resizing, we should be out of the
3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // resizing mode by now.
3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(resize_controller->IsResizing());
4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(resize_controller->IsResizing());
4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(panel1_bounds, panel1->GetBounds());
4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->CloseAll();
4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/175760; several panel tests failing regularly on mac.
4092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX)
4102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ResizeAndCancel DISABLED_ResizeAndCancel
4112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
4122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ResizeAndCancel ResizeAndCancel
4132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
4142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, MAYBE_ResizeAndCancel) {
4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelManager* panel_manager = PanelManager::GetInstance();
4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Panel* panel = CreateDetachedPanel("Panel", gfx::Rect(300, 200, 150, 100));
4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelResizeController* resize_controller = panel_manager->resize_controller();
4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel::RESIZABLE_ALL, panel->CanResizeByMouse());
4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect original_bounds = panel->GetBounds();
4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Resizing the panel, then cancelling should return it to the original state.
4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the top right side.
4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect bounds = panel->GetBounds();
4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point mouse_location = bounds.origin() +
4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      gfx::Vector2d(bounds.width() - 1, 1);
428f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTTOPRIGHT);
4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(5, 25);
4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_size(gfx::Size(bounds.width() + 5, bounds.height() - 25));
4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.Offset(0, 25);
4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(true);
4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(original_bounds, panel->GetBounds());
4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the bottom left side.
4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds = panel->GetBounds();
4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = bounds.origin() + gfx::Vector2d(1, bounds.height() - 1);
442f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel, mouse_location, HTBOTTOMLEFT);
4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location.Offset(-10, 15);
4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_size(gfx::Size(bounds.width() + 10, bounds.height() + 15));
4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.Offset(-10, 0);
4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(true);
4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(original_bounds, panel->GetBounds());
4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_FALSE(resize_controller->IsResizing());
4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->CloseAll();
4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// http://crbug.com/175760; several panel tests failing regularly on mac.
4582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_MACOSX)
4592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ResizeDetachedPanelToTop DISABLED_ResizeDetachedPanelToTop
4602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#else
4612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#define MAYBE_ResizeDetachedPanelToTop ResizeDetachedPanelToTop
4622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
4632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, MAYBE_ResizeDetachedPanelToTop) {
4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Setup the test areas to have top-aligned bar excluded from work area.
4652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Rect primary_display_area(0, 0, 800, 600);
4662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  const gfx::Rect primary_work_area(0, 10, 800, 590);
4672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  mock_display_settings_provider()->SetPrimaryDisplay(
4682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      primary_display_area, primary_work_area);
4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  PanelManager* panel_manager = PanelManager::GetInstance();
4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Panel* panel = CreateDetachedPanel("1", gfx::Rect(300, 200, 250, 200));
4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Rect bounds = panel->GetBounds();
4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try resizing by the top left corner.
4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  gfx::Point mouse_location = bounds.origin();
4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->StartResizingByMouse(panel,
4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)                                      mouse_location,
478f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)                                      HTTOPLEFT);
4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try moving the mouse outside the top of the work area. Expect that panel's
4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // top position will not exceed the top of the work area.
4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = gfx::Point(250, 2);
4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_width(bounds.width() + bounds.x() - mouse_location.x());
4862a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bounds.set_height(bounds.height() + bounds.y() - primary_work_area.y());
4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_x(mouse_location.x());
4882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  bounds.set_y(primary_work_area.y());
4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Try moving the mouse inside the work area. Expect that the panel can be
4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // resized without constraint.
4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  mouse_location = gfx::Point(280, 50);
4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->ResizeByMouse(mouse_location);
4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_width(bounds.width() + bounds.x() - mouse_location.x());
4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_height(bounds.height() + bounds.y() - mouse_location.y());
4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_x(mouse_location.x());
4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  bounds.set_y(mouse_location.y());
5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->EndResizingByMouse(false);
5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  EXPECT_EQ(bounds, panel->GetBounds());
5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  panel_manager->CloseAll();
5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
5072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// TODO(jianli): to be enabled for other platforms when stacked panels are
5092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// supported.
5102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#if defined(OS_WIN)
5112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, ResizeStackedPanels) {
5132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  PanelManager* panel_manager = PanelManager::GetInstance();
5142a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Create 3 stacked panels.
5162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  StackedPanelCollection* stack = panel_manager->CreateStack();
5172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect panel1_initial_bounds = gfx::Rect(100, 50, 200, 150);
5182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Panel* panel1 = CreateStackedPanel("1", panel1_initial_bounds, stack);
5192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect panel2_initial_bounds = gfx::Rect(0, 0, 150, 100);
5202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Panel* panel2 = CreateStackedPanel("2", panel2_initial_bounds, stack);
5212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect panel3_initial_bounds = gfx::Rect(0, 0, 120, 110);
5222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  Panel* panel3 = CreateStackedPanel("3", panel3_initial_bounds, stack);
5232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(3, panel_manager->num_panels());
5242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(1, panel_manager->num_stacks());
5252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_EQ(3, stack->num_panels());
5262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size panel1_expected_full_size = panel1_initial_bounds.size();
5282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_full_size, panel1->full_size());
5292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size panel2_expected_full_size(panel1_initial_bounds.width(),
5302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      panel2_initial_bounds.height());
5312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_full_size, panel2->full_size());
5322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Size panel3_expected_full_size(panel1_initial_bounds.width(),
5332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                      panel3_initial_bounds.height());
5342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_full_size, panel3->full_size());
5352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect panel1_expected_bounds(panel1_initial_bounds);
5372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_bounds, panel1->GetBounds());
5382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect panel2_expected_bounds(panel1_expected_bounds.x(),
5392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   panel1_expected_bounds.bottom(),
5402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   panel1_expected_bounds.width(),
5412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   panel2_initial_bounds.height());
5422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_bounds, panel2->GetBounds());
5432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  gfx::Rect panel3_expected_bounds(panel2_expected_bounds.x(),
5442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   panel2_expected_bounds.bottom(),
5452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   panel2_expected_bounds.width(),
5462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                   panel3_initial_bounds.height());
5472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_bounds, panel3->GetBounds());
5482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Resize by the top-left corner of the top panel.
5502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Expect that the width of all stacked panels get increased by the same
5512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // amount and the top panel also expands in height.
5522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int top_resize_width = 15;
5532a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int top_resize_height = 10;
5542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ResizePanel(panel1,
555f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)              HTTOPLEFT,
5562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              gfx::Vector2d(-top_resize_width, -top_resize_height));
5572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel1_expected_full_size.Enlarge(top_resize_width, top_resize_height);
5592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_full_size, panel1->full_size());
5602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2_expected_full_size.Enlarge(top_resize_width, 0);
5612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_full_size, panel2->full_size());
5622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_full_size.Enlarge(top_resize_width, 0);
5632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_full_size, panel3->full_size());
5642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel1_expected_bounds.SetRect(
5662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel1_expected_bounds.x() - top_resize_width,
5672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel1_expected_bounds.y() - top_resize_height,
5682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel1_expected_bounds.width() + top_resize_width,
5692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel1_expected_bounds.height() + top_resize_height);
5702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_bounds, panel1->GetBounds());
5712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2_expected_bounds.set_x(panel2_expected_bounds.x() - top_resize_width);
5722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2_expected_bounds.set_width(
5732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel2_expected_bounds.width() + top_resize_width);
5742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_bounds, panel2->GetBounds());
5752a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_bounds.set_x(panel3_expected_bounds.x() - top_resize_width);
5762a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_bounds.set_width(
5772a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel3_expected_bounds.width() + top_resize_width);
5782a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_bounds, panel3->GetBounds());
5792a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5802a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Resize by the bottom-right corner of the bottom panel.
5812a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Expect that the width of all stacked panels get increased by the same
5822a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // amount and the bottom panel also shrinks in height.
5832a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int bottom_resize_width = 12;
5842a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int bottom_resize_height = 8;
5852a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ResizePanel(panel3,
586f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)              HTBOTTOMRIGHT,
5872a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              gfx::Vector2d(-bottom_resize_width, -bottom_resize_height));
5882a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5892a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel1_expected_full_size.Enlarge(-bottom_resize_width, 0);
5902a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_full_size, panel1->full_size());
5912a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2_expected_full_size.Enlarge(-bottom_resize_width, 0);
5922a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_full_size, panel2->full_size());
5932a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_full_size.Enlarge(-bottom_resize_width,
5942a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)                                    -bottom_resize_height);
5952a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_full_size, panel3->full_size());
5962a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5972a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel1_expected_bounds.set_width(
5982a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel1_expected_bounds.width() - bottom_resize_width);
5992a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_bounds, panel1->GetBounds());
6002a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2_expected_bounds.set_width(
6012a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel2_expected_bounds.width() - bottom_resize_width);
6022a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_bounds, panel2->GetBounds());
6032a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_bounds.set_width(
6042a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel3_expected_bounds.width() - bottom_resize_width);
6052a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_bounds.set_height(
6062a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel3_expected_bounds.height() - bottom_resize_height);
6072a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_bounds, panel3->GetBounds());
6082a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6092a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Resize by the bottom edge of the middle panel.
6102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Expect that the height of the middle panel increases and the height of
6112a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the bottom panel decreases by the same amount.
6122a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  int middle_resize_height = 5;
6132a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ResizePanel(panel2,
614f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)              HTBOTTOM,
6152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              gfx::Vector2d(0, middle_resize_height));
6162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_full_size, panel1->full_size());
6182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2_expected_full_size.Enlarge(0, middle_resize_height);
6192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_full_size, panel2->full_size());
6202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_full_size.Enlarge(0, -middle_resize_height);
6212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_full_size, panel3->full_size());
6222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_bounds, panel1->GetBounds());
6242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2_expected_bounds.set_height(
6252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel2_expected_bounds.height() + middle_resize_height);
6262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_bounds, panel2->GetBounds());
6272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_bounds.set_y(
6282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel3_expected_bounds.y() + middle_resize_height);
6292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_bounds.set_height(
6302a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel3_expected_bounds.height() - middle_resize_height);
6312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_bounds, panel3->GetBounds());
6322a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6332a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Collapse the middle panel.
6342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2->Minimize();
6352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  WaitForBoundsAnimationFinished(panel2);
6362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_TRUE(panel2->IsMinimized());
6372a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_full_size, panel1->full_size());
6392a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_full_size, panel2->full_size());
6402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_full_size, panel3->full_size());
6412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6422a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_bounds, panel1->GetBounds());
6432a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2_expected_bounds.set_height(panel2->TitleOnlyHeight());
6442a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_bounds, panel2->GetBounds());
6452a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_bounds.set_y(panel2_expected_bounds.bottom());
6462a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_bounds, panel3->GetBounds());
6472a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6482a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Resize by the bottom edge of the top panel.
6492a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // Expect that the height of the top panel increases and the height of
6502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  // the middle panel is not affected because it is collapsed.
6512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  top_resize_height = 18;
6522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ResizePanel(panel1,
653f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)              HTBOTTOM,
6542a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)              gfx::Vector2d(0, top_resize_height));
6552a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6562a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel1_expected_full_size.Enlarge(0, top_resize_height);
6572a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_full_size, panel1->full_size());
6582a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_full_size, panel2->full_size());
6592a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_full_size, panel3->full_size());
6602a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6612a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel1_expected_bounds.set_height(
6622a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel1_expected_bounds.height() + top_resize_height);
6632a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel1_expected_bounds, panel1->GetBounds());
6642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel2_expected_bounds.set_y(
6652a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel2_expected_bounds.y() + top_resize_height);
6662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel2_expected_bounds, panel2->GetBounds());
6672a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel3_expected_bounds.set_y(
6682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)      panel3_expected_bounds.y() + top_resize_height);
6692a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(panel3_expected_bounds, panel3->GetBounds());
6702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  panel_manager->CloseAll();
6722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
6732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
6742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#endif
675