Index: chrome/browser/ui/panels/old_panel_resize_browsertest.cc |
diff --git a/chrome/browser/ui/panels/old_panel_resize_browsertest.cc b/chrome/browser/ui/panels/old_panel_resize_browsertest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..7ca7ea32e84400e7c204cffb11f95d7de4b32f9b |
--- /dev/null |
+++ b/chrome/browser/ui/panels/old_panel_resize_browsertest.cc |
@@ -0,0 +1,412 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "chrome/browser/ui/panels/base_panel_browser_test.h" |
+#include "chrome/browser/ui/panels/detached_panel_strip.h" |
+#include "chrome/browser/ui/panels/panel.h" |
+#include "chrome/browser/ui/panels/panel_manager.h" |
+#include "chrome/browser/ui/panels/panel_resize_controller.h" |
+ |
+class PanelResizeBrowserTest : public BasePanelBrowserTest { |
+ public: |
+ PanelResizeBrowserTest() : BasePanelBrowserTest() { |
+ } |
+ |
+ virtual ~PanelResizeBrowserTest() { |
+ } |
+ |
+ virtual void SetUpOnMainThread() OVERRIDE { |
+ BasePanelBrowserTest::SetUpOnMainThread(); |
+ |
+ // All the tests here assume using mocked 800x600 screen area for the |
+ // primary monitor. Do the check now. |
+ gfx::Rect primary_screen_area = PanelManager::GetInstance()-> |
+ display_settings_provider()->GetPrimaryScreenArea(); |
+ DCHECK(primary_screen_area.width() == 800); |
+ DCHECK(primary_screen_area.height() == 600); |
+ } |
+}; |
+ |
+IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, DockedPanelResizability) { |
+ PanelManager* panel_manager = PanelManager::GetInstance(); |
+ Panel* panel = CreatePanel("Panel"); |
+ |
+ EXPECT_EQ(panel::RESIZABLE_ALL_SIDES_EXCEPT_BOTTOM, |
+ panel->CanResizeByMouse()); |
+ |
+ gfx::Rect bounds = panel->GetBounds(); |
+ |
+ // Try resizing by the top left corner. |
+ gfx::Point mouse_location = bounds.origin(); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_TOP_LEFT); |
+ mouse_location.Offset(-20, -10); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_size(gfx::Size(bounds.width() + 20, bounds.height() + 10)); |
+ bounds.Offset(-20, -10); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the top. |
+ mouse_location = bounds.origin().Add(gfx::Point(10, 1)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_TOP); |
+ mouse_location.Offset(5, -10); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_height(bounds.height() + 10); |
+ bounds.Offset(0, -10); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the left side. |
+ mouse_location = bounds.origin().Add(gfx::Point(1, 30)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_LEFT); |
+ mouse_location.Offset(-5, 25); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_width(bounds.width() + 5); |
+ bounds.Offset(-5, 0); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the top right side. |
+ mouse_location = bounds.origin().Add(gfx::Point(bounds.width() - 1, 2)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_TOP_RIGHT); |
+ mouse_location.Offset(30, 20); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_size(gfx::Size(bounds.width() + 30, bounds.height() - 20)); |
+ bounds.Offset(0, 20); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ WaitForBoundsAnimationFinished(panel); |
+ bounds.Offset(-30, 0); // Layout of panel adjusted in docked strip. |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the right side. |
+ mouse_location = bounds.origin().Add(gfx::Point(bounds.width() - 1, 30)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_RIGHT); |
+ mouse_location.Offset(5, 25); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_width(bounds.width() + 5); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ WaitForBoundsAnimationFinished(panel); |
+ bounds.Offset(-5, 0); // Layout of panel adjusted in docked strip. |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the bottom side; verify resize won't work. |
+ mouse_location = bounds.origin().Add(gfx::Point(10, bounds.height() - 1)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_BOTTOM); |
+ mouse_location.Offset(30, -10); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the bottom left corner; verify resize won't work. |
+ mouse_location = bounds.origin().Add(gfx::Point(1, bounds.height() - 1)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_BOTTOM_LEFT); |
+ mouse_location.Offset(-10, 15); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the bottom right corner; verify resize won't work. |
+ mouse_location = bounds.origin().Add( |
+ gfx::Point(bounds.width() - 2, bounds.height())); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_BOTTOM_RIGHT); |
+ mouse_location.Offset(20, 10); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel->Close(); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, ResizeDetachedPanel) { |
+ PanelManager* panel_manager = PanelManager::GetInstance(); |
+ Panel* panel = CreateDetachedPanel("Panel", gfx::Rect(300, 200, 150, 100)); |
+ |
+ EXPECT_EQ(panel::RESIZABLE_ALL_SIDES, panel->CanResizeByMouse()); |
+ |
+ gfx::Rect bounds = panel->GetBounds(); |
+ |
+ // Try resizing by the right side; verify resize will change width only. |
+ gfx::Point mouse_location = bounds.origin().Add( |
+ gfx::Point(bounds.width() - 1, 30)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_RIGHT); |
+ mouse_location.Offset(5, 25); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_width(bounds.width() + 5); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the bottom left side. |
+ mouse_location = bounds.origin().Add(gfx::Point(1, bounds.height() - 1)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_BOTTOM_LEFT); |
+ mouse_location.Offset(-10, 15); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_size(gfx::Size(bounds.width() + 10, bounds.height() + 15)); |
+ bounds.Offset(-10, 0); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the top right side. |
+ mouse_location = bounds.origin().Add(gfx::Point(bounds.width() - 1, 2)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_TOP_RIGHT); |
+ mouse_location.Offset(30, 20); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_size(gfx::Size(bounds.width() + 30, bounds.height() - 20)); |
+ bounds.Offset(0, 20); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the top left side. |
+ mouse_location = bounds.origin().Add(gfx::Point(1, 0)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_TOP_LEFT); |
+ mouse_location.Offset(-20, -10); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_size(gfx::Size(bounds.width() + 20, bounds.height() + 10)); |
+ bounds.Offset(-20, -10); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ PanelManager::GetInstance()->CloseAll(); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, ResizeDetachedPanelToClampSize) { |
+ PanelManager* panel_manager = PanelManager::GetInstance(); |
+ Panel* panel = CreateDetachedPanel("Panel", gfx::Rect(300, 200, 150, 100)); |
+ |
+ EXPECT_EQ(panel::RESIZABLE_ALL_SIDES, panel->CanResizeByMouse()); |
+ |
+ gfx::Rect bounds = panel->GetBounds(); |
+ |
+ // Make sure the panel does not resize smaller than its min size. |
+ gfx::Point mouse_location = bounds.origin().Add( |
+ gfx::Point(30, bounds.height() - 2)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_BOTTOM); |
+ mouse_location.Offset(-20, -500); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_height(panel->min_size().height()); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Make sure the panel can resize larger than its size. User is in control. |
+ mouse_location = bounds.origin().Add( |
+ gfx::Point(bounds.width(), bounds.height() - 2)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_BOTTOM_RIGHT); |
+ |
+ // This drag would take us beyond max size. |
+ int delta_x = panel->max_size().width() + 10 - panel->GetBounds().width(); |
+ int delta_y = panel->max_size().height() + 10 - panel->GetBounds().height(); |
+ mouse_location.Offset(delta_x, delta_y); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ // The bounds if the max_size does not limit the resize. |
+ bounds.set_size(gfx::Size(bounds.width() + delta_x, |
+ bounds.height() + delta_y)); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ PanelManager::GetInstance()->CloseAll(); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, CloseDetachedPanelOnResize) { |
+ PanelManager* panel_manager = PanelManager::GetInstance(); |
+ PanelResizeController* resize_controller = panel_manager->resize_controller(); |
+ DetachedPanelStrip* detached_strip = panel_manager->detached_strip(); |
+ |
+ // Create 3 detached panels. |
+ Panel* panel1 = CreateDetachedPanel("1", gfx::Rect(100, 200, 100, 100)); |
+ Panel* panel2 = CreateDetachedPanel("2", gfx::Rect(200, 210, 110, 110)); |
+ Panel* panel3 = CreateDetachedPanel("3", gfx::Rect(300, 220, 120, 120)); |
+ ASSERT_EQ(3, detached_strip->num_panels()); |
+ |
+ gfx::Rect panel1_bounds = panel1->GetBounds(); |
+ gfx::Rect panel2_bounds = panel2->GetBounds(); |
+ gfx::Rect panel3_bounds = panel3->GetBounds(); |
+ |
+ // Start resizing panel1, and close panel2 in the process. |
+ // Panel1 is not affected. |
+ gfx::Point mouse_location = panel1_bounds.origin().Add( |
+ gfx::Point(1, panel1_bounds.height() - 1)); |
+ panel_manager->StartResizingByMouse(panel1, mouse_location, |
+ panel::RESIZE_BOTTOM_LEFT); |
+ mouse_location.Offset(-10, 15); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ panel1_bounds.set_size(gfx::Size(panel1_bounds.width() + 10, |
+ panel1_bounds.height() + 15)); |
+ panel1_bounds.Offset(-10, 0); |
+ EXPECT_EQ(panel1_bounds, panel1->GetBounds()); |
+ |
+ CloseWindowAndWait(panel2); |
+ EXPECT_TRUE(resize_controller->IsResizing()); |
+ EXPECT_EQ(2, detached_strip->num_panels()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(panel1_bounds, panel1->GetBounds()); |
+ |
+ // Start resizing panel3, and close it in the process. |
+ // Resize should abort, panel1 will not be affected. |
+ mouse_location = panel3_bounds.origin().Add( |
+ gfx::Point(panel3_bounds.width() - 1, panel3_bounds.height() - 2)); |
+ panel_manager->StartResizingByMouse(panel3, mouse_location, |
+ panel::RESIZE_BOTTOM_RIGHT); |
+ mouse_location.Offset(7, -12); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ panel3_bounds.set_size(gfx::Size(panel3_bounds.width() + 7, |
+ panel3_bounds.height() - 12)); |
+ EXPECT_EQ(panel3_bounds, panel3->GetBounds()); |
+ |
+ CloseWindowAndWait(panel3); |
+ EXPECT_EQ(1, detached_strip->num_panels()); |
+ // Since we closed the panel we were resizing, we should be out of the |
+ // resizing mode by now. |
+ EXPECT_FALSE(resize_controller->IsResizing()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_FALSE(resize_controller->IsResizing()); |
+ EXPECT_EQ(panel1_bounds, panel1->GetBounds()); |
+ |
+ panel_manager->CloseAll(); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, ResizeAndCancel) { |
+ PanelManager* panel_manager = PanelManager::GetInstance(); |
+ Panel* panel = CreateDetachedPanel("Panel", gfx::Rect(300, 200, 150, 100)); |
+ PanelResizeController* resize_controller = panel_manager->resize_controller(); |
+ |
+ EXPECT_EQ(panel::RESIZABLE_ALL_SIDES, panel->CanResizeByMouse()); |
+ |
+ gfx::Rect original_bounds = panel->GetBounds(); |
+ |
+ // Resizing the panel, then cancelling should return it to the original state. |
+ // Try resizing by the top right side. |
+ gfx::Rect bounds = panel->GetBounds(); |
+ gfx::Point mouse_location = bounds.origin().Add( |
+ gfx::Point(bounds.width() - 1, 1)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_TOP_RIGHT); |
+ mouse_location.Offset(5, 25); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_size(gfx::Size(bounds.width() + 5, bounds.height() - 25)); |
+ bounds.Offset(0, 25); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(true); |
+ EXPECT_EQ(original_bounds, panel->GetBounds()); |
+ |
+ // Try resizing by the bottom left side. |
+ bounds = panel->GetBounds(); |
+ mouse_location = bounds.origin().Add( |
+ gfx::Point(1, bounds.height() - 1)); |
+ panel_manager->StartResizingByMouse(panel, mouse_location, |
+ panel::RESIZE_BOTTOM_LEFT); |
+ mouse_location.Offset(-10, 15); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_size(gfx::Size(bounds.width() + 10, bounds.height() + 15)); |
+ bounds.Offset(-10, 0); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(true); |
+ EXPECT_EQ(original_bounds, panel->GetBounds()); |
+ EXPECT_FALSE(resize_controller->IsResizing()); |
+ |
+ panel_manager->CloseAll(); |
+} |
+ |
+IN_PROC_BROWSER_TEST_F(PanelResizeBrowserTest, ResizeDetachedPanelToTop) { |
+ // Setup the test areas to have top-aligned bar excluded from work area. |
+ const gfx::Rect primary_scren_area(0, 0, 800, 600); |
+ const gfx::Rect work_area(0, 10, 800, 590); |
+ SetTestingAreas(primary_scren_area, work_area); |
+ |
+ PanelManager* panel_manager = PanelManager::GetInstance(); |
+ Panel* panel = CreateDetachedPanel("1", gfx::Rect(300, 200, 250, 200)); |
+ gfx::Rect bounds = panel->GetBounds(); |
+ |
+ // Try resizing by the top left corner. |
+ gfx::Point mouse_location = bounds.origin(); |
+ panel_manager->StartResizingByMouse(panel, |
+ mouse_location, |
+ panel::RESIZE_TOP_LEFT); |
+ |
+ // Try moving the mouse outside the top of the work area. Expect that panel's |
+ // top position will not exceed the top of the work area. |
+ mouse_location = gfx::Point(250, 2); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_width(bounds.width() + bounds.x() - mouse_location.x()); |
+ bounds.set_height(bounds.height() + bounds.y() - work_area.y()); |
+ bounds.set_x(mouse_location.x()); |
+ bounds.set_y(work_area.y()); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ // Try moving the mouse inside the work area. Expect that the panel can be |
+ // resized without constraint. |
+ mouse_location = gfx::Point(280, 50); |
+ panel_manager->ResizeByMouse(mouse_location); |
+ |
+ bounds.set_width(bounds.width() + bounds.x() - mouse_location.x()); |
+ bounds.set_height(bounds.height() + bounds.y() - mouse_location.y()); |
+ bounds.set_x(mouse_location.x()); |
+ bounds.set_y(mouse_location.y()); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->EndResizingByMouse(false); |
+ EXPECT_EQ(bounds, panel->GetBounds()); |
+ |
+ panel_manager->CloseAll(); |
+} |