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