| Index: chrome/browser/ui/panels/panel_view_browsertest.cc
|
| diff --git a/chrome/browser/ui/panels/panel_view_browsertest.cc b/chrome/browser/ui/panels/panel_view_browsertest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..9c08f414519d00ea5dd97e40bf27fcff175fd83e
|
| --- /dev/null
|
| +++ b/chrome/browser/ui/panels/panel_view_browsertest.cc
|
| @@ -0,0 +1,487 @@
|
| +// 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 "base/i18n/time_formatting.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "chrome/browser/extensions/extension_service.h"
|
| +#include "chrome/browser/profiles/profile.h"
|
| +#include "chrome/browser/ui/browser_window.h"
|
| +#include "chrome/browser/ui/panels/base_panel_browser_test.h"
|
| +#include "chrome/browser/ui/panels/docked_panel_strip.h"
|
| +#include "chrome/browser/ui/panels/panel.h"
|
| +#include "chrome/browser/ui/panels/panel_bounds_animation.h"
|
| +#include "chrome/browser/ui/panels/panel_browser_frame_view.h"
|
| +#include "chrome/browser/ui/panels/panel_browser_view.h"
|
| +#include "chrome/browser/ui/panels/panel_manager.h"
|
| +#include "chrome/browser/web_applications/web_app.h"
|
| +#include "chrome/common/chrome_notification_types.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| +#include "chrome/common/extensions/extension.h"
|
| +#include "chrome/test/base/ui_test_utils.h"
|
| +#include "grit/generated_resources.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +#include "ui/base/animation/linear_animation.h"
|
| +#include "ui/base/l10n/l10n_util.h"
|
| +#include "ui/views/controls/button/image_button.h"
|
| +#include "ui/views/controls/button/menu_button.h"
|
| +#include "ui/views/controls/image_view.h"
|
| +#include "ui/views/controls/label.h"
|
| +#include "ui/views/controls/link.h"
|
| +#include "ui/views/controls/textfield/textfield.h"
|
| +
|
| +class PanelBrowserViewTest : public BasePanelBrowserTest {
|
| + public:
|
| + PanelBrowserViewTest() : BasePanelBrowserTest() { }
|
| +
|
| + protected:
|
| + PanelBrowserView* GetBrowserView(Panel* panel) const {
|
| + return static_cast<PanelBrowserView*>(panel->native_panel());
|
| + }
|
| +
|
| + gfx::Rect GetViewBounds(Panel* panel) const {
|
| + return GetBrowserView(panel)->GetBounds();
|
| + }
|
| +
|
| + void SetViewBounds(Panel* panel, const gfx::Rect& rect) const {
|
| + return GetBrowserView(panel)->SetPanelBounds(rect);
|
| + }
|
| +
|
| + gfx::NativeWindow GetNativeWindow(Panel* panel) const {
|
| + return GetBrowserView(panel)->GetNativeWindow();
|
| + }
|
| +
|
| + PanelBoundsAnimation* GetBoundsAnimator(Panel* panel) const {
|
| + return GetBrowserView(panel)->bounds_animator_.get();
|
| + }
|
| +
|
| + int GetTitlebarHeight(Panel* panel) const {
|
| + PanelBrowserFrameView* frame_view = GetBrowserView(panel)->GetFrameView();
|
| + return frame_view->NonClientTopBorderHeight() -
|
| + frame_view->NonClientBorderThickness();
|
| + }
|
| +
|
| + PanelBrowserFrameView::PaintState GetTitlebarPaintState(Panel* panel) const {
|
| + return GetBrowserView(panel)->GetFrameView()->paint_state_;
|
| + }
|
| +
|
| + bool IsTitlebarPaintedAsActive(Panel* panel) const {
|
| + return GetTitlebarPaintState(panel) ==
|
| + PanelBrowserFrameView::PAINT_AS_ACTIVE;
|
| + }
|
| +
|
| + bool IsTitlebarPaintedAsInactive(Panel* panel) const {
|
| + return GetTitlebarPaintState(panel) ==
|
| + PanelBrowserFrameView::PAINT_AS_INACTIVE;
|
| + }
|
| +
|
| + bool IsTitlebarPaintedForAttention(Panel* panel) const {
|
| + return GetTitlebarPaintState(panel) ==
|
| + PanelBrowserFrameView::PAINT_FOR_ATTENTION;
|
| + }
|
| +
|
| + int GetControlCount(Panel* panel) const {
|
| + return GetBrowserView(panel)->GetFrameView()->child_count();
|
| + }
|
| +
|
| + TabIconView* GetTitleIcon(Panel* panel) const {
|
| + return GetBrowserView(panel)->GetFrameView()->title_icon_;
|
| + }
|
| +
|
| + views::Label* GetTitleText(Panel* panel) const {
|
| + return GetBrowserView(panel)->GetFrameView()->title_label_;
|
| + }
|
| +
|
| + views::Button* GetCloseButton(Panel* panel) const {
|
| + return GetBrowserView(panel)->GetFrameView()->close_button_;
|
| + }
|
| +
|
| + views::Button* GetMinimizeButton(Panel* panel) const {
|
| + return GetBrowserView(panel)->GetFrameView()->minimize_button_;
|
| + }
|
| +
|
| + views::Button* GetRestoreButton(Panel* panel) const {
|
| + return GetBrowserView(panel)->GetFrameView()->restore_button_;
|
| + }
|
| +
|
| + bool ContainsControl(Panel* panel, views::View* control) const {
|
| + return GetBrowserView(panel)->GetFrameView()->Contains(control);
|
| + }
|
| +
|
| + void WaitTillBoundsAnimationFinished(Panel* panel) {
|
| + // The timer for the animation will only kick in as async task.
|
| + while (GetBoundsAnimator(panel)->is_animating()) {
|
| + MessageLoopForUI::current()->PostTask(FROM_HERE,
|
| + MessageLoop::QuitClosure());
|
| + MessageLoopForUI::current()->RunAllPending();
|
| + }
|
| + }
|
| +
|
| + void ClosePanelAndWaitForNotification(Panel* panel) {
|
| + ui_test_utils::WindowedNotificationObserver signal(
|
| + chrome::NOTIFICATION_PANEL_CLOSED,
|
| + content::Source<Panel>(panel));
|
| + panel->Close();
|
| + signal.Wait();
|
| + }
|
| +
|
| + // We put all the testing logic in this class instead of the test so that
|
| + // we do not need to declare each new test as a friend of PanelBrowserView
|
| + // for the purpose of accessing its private members.
|
| + void TestMinimizeAndRestore(bool enable_auto_hiding) {
|
| + PanelManager* panel_manager = PanelManager::GetInstance();
|
| + DockedPanelStrip* docked_strip = panel_manager->docked_strip();
|
| + int expected_bottom_on_expanded = docked_strip->display_area().bottom();
|
| + int expected_bottom_on_title_only = expected_bottom_on_expanded;
|
| + int expected_bottom_on_minimized = expected_bottom_on_expanded;
|
| +
|
| + // Turn on auto-hiding if requested.
|
| + static const int bottom_thickness = 40;
|
| + mock_display_settings_provider()->EnableAutoHidingDesktopBar(
|
| + DisplaySettingsProvider::DESKTOP_BAR_ALIGNED_BOTTOM,
|
| + enable_auto_hiding,
|
| + bottom_thickness);
|
| + if (enable_auto_hiding)
|
| + expected_bottom_on_title_only -= bottom_thickness;
|
| +
|
| + // Create and test one panel first.
|
| + Panel* panel1 = CreatePanel("PanelTest1");
|
| + PanelBrowserView* browser_view1 = GetBrowserView(panel1);
|
| + PanelBrowserFrameView* frame_view1 = browser_view1->GetFrameView();
|
| +
|
| + // Test minimizing/restoring an individual panel.
|
| + EXPECT_EQ(Panel::EXPANDED, panel1->expansion_state());
|
| + int initial_height = panel1->GetBounds().height();
|
| +
|
| + panel1->SetExpansionState(Panel::MINIMIZED);
|
| + EXPECT_EQ(Panel::MINIMIZED, panel1->expansion_state());
|
| +
|
| + int titlebar_height = frame_view1->NonClientTopBorderHeight();
|
| + EXPECT_LT(panel1->GetBounds().height(), titlebar_height);
|
| + EXPECT_GT(panel1->GetBounds().height(), 0);
|
| + EXPECT_EQ(expected_bottom_on_minimized, panel1->GetBounds().bottom());
|
| + WaitTillBoundsAnimationFinished(panel1);
|
| + EXPECT_FALSE(panel1->IsActive());
|
| +
|
| + panel1->SetExpansionState(Panel::TITLE_ONLY);
|
| + EXPECT_EQ(Panel::TITLE_ONLY, panel1->expansion_state());
|
| + EXPECT_EQ(titlebar_height, panel1->GetBounds().height());
|
| + EXPECT_EQ(expected_bottom_on_title_only, panel1->GetBounds().bottom());
|
| + WaitTillBoundsAnimationFinished(panel1);
|
| + EXPECT_TRUE(frame_view1->close_button_->visible());
|
| + EXPECT_TRUE(frame_view1->title_icon_->visible());
|
| + EXPECT_TRUE(frame_view1->title_label_->visible());
|
| +
|
| + panel1->SetExpansionState(Panel::EXPANDED);
|
| + EXPECT_EQ(Panel::EXPANDED, panel1->expansion_state());
|
| + EXPECT_EQ(initial_height, panel1->GetBounds().height());
|
| + EXPECT_EQ(expected_bottom_on_expanded, panel1->GetBounds().bottom());
|
| + WaitTillBoundsAnimationFinished(panel1);
|
| + EXPECT_TRUE(frame_view1->close_button_->visible());
|
| + EXPECT_TRUE(frame_view1->title_icon_->visible());
|
| + EXPECT_TRUE(frame_view1->title_label_->visible());
|
| +
|
| + panel1->SetExpansionState(Panel::MINIMIZED);
|
| + EXPECT_EQ(Panel::MINIMIZED, panel1->expansion_state());
|
| + EXPECT_LT(panel1->GetBounds().height(), titlebar_height);
|
| + EXPECT_GT(panel1->GetBounds().height(), 0);
|
| + EXPECT_EQ(expected_bottom_on_minimized, panel1->GetBounds().bottom());
|
| +
|
| + panel1->SetExpansionState(Panel::TITLE_ONLY);
|
| + EXPECT_EQ(Panel::TITLE_ONLY, panel1->expansion_state());
|
| + EXPECT_EQ(titlebar_height, panel1->GetBounds().height());
|
| + EXPECT_EQ(expected_bottom_on_title_only, panel1->GetBounds().bottom());
|
| +
|
| + // Create 2 more panels for more testing.
|
| + Panel* panel2 = CreatePanel("PanelTest2");
|
| + Panel* panel3 = CreatePanel("PanelTest3");
|
| +
|
| + // Test bringing up or down the title-bar of all minimized panels.
|
| + EXPECT_EQ(Panel::EXPANDED, panel2->expansion_state());
|
| + panel3->SetExpansionState(Panel::MINIMIZED);
|
| + EXPECT_EQ(Panel::MINIMIZED, panel3->expansion_state());
|
| +
|
| + mock_display_settings_provider()->SetDesktopBarVisibility(
|
| + DisplaySettingsProvider::DESKTOP_BAR_ALIGNED_BOTTOM,
|
| + DisplaySettingsProvider::DESKTOP_BAR_VISIBLE);
|
| + panel_manager->BringUpOrDownTitlebars(true);
|
| + MessageLoopForUI::current()->RunAllPending();
|
| + EXPECT_EQ(Panel::TITLE_ONLY, panel1->expansion_state());
|
| + EXPECT_EQ(Panel::EXPANDED, panel2->expansion_state());
|
| + EXPECT_EQ(Panel::TITLE_ONLY, panel3->expansion_state());
|
| +
|
| + mock_display_settings_provider()->SetDesktopBarVisibility(
|
| + DisplaySettingsProvider::DESKTOP_BAR_ALIGNED_BOTTOM,
|
| + DisplaySettingsProvider::DESKTOP_BAR_HIDDEN);
|
| + panel_manager->BringUpOrDownTitlebars(false);
|
| + MessageLoopForUI::current()->RunAllPending();
|
| + EXPECT_EQ(Panel::MINIMIZED, panel1->expansion_state());
|
| + EXPECT_EQ(Panel::EXPANDED, panel2->expansion_state());
|
| + EXPECT_EQ(Panel::MINIMIZED, panel3->expansion_state());
|
| +
|
| + // Test if it is OK to bring up title-bar given the mouse position.
|
| + EXPECT_TRUE(panel_manager->ShouldBringUpTitlebars(
|
| + panel1->GetBounds().x(), panel1->GetBounds().y()));
|
| + EXPECT_FALSE(panel_manager->ShouldBringUpTitlebars(
|
| + panel2->GetBounds().x(), panel2->GetBounds().y()));
|
| + EXPECT_TRUE(panel_manager->ShouldBringUpTitlebars(
|
| + panel3->GetBounds().right() - 1, panel3->GetBounds().bottom() - 1));
|
| + EXPECT_TRUE(panel_manager->ShouldBringUpTitlebars(
|
| + panel3->GetBounds().right() - 1, panel3->GetBounds().bottom() + 10));
|
| + EXPECT_FALSE(panel_manager->ShouldBringUpTitlebars(
|
| + 0, 0));
|
| +
|
| + // Test that the panel in title-only state should not be minimized
|
| + // regardless of the current mouse position when the panel is being dragged.
|
| + panel1->SetExpansionState(Panel::TITLE_ONLY);
|
| + EXPECT_FALSE(panel_manager->ShouldBringUpTitlebars(
|
| + 0, 0));
|
| + browser_view1->OnTitlebarMousePressed(panel1->GetBounds().origin());
|
| + EXPECT_EQ(Panel::TITLE_ONLY, panel1->expansion_state());
|
| + browser_view1->OnTitlebarMouseDragged(
|
| + panel1->GetBounds().origin().Subtract(gfx::Point(5, 5)));
|
| + EXPECT_EQ(Panel::TITLE_ONLY, panel1->expansion_state());
|
| + EXPECT_TRUE(panel_manager->ShouldBringUpTitlebars(
|
| + 0, 0));
|
| + browser_view1->OnTitlebarMouseReleased(panel::NO_MODIFIER);
|
| +
|
| + ClosePanelAndWaitForNotification(panel1);
|
| + ClosePanelAndWaitForNotification(panel2);
|
| + ClosePanelAndWaitForNotification(panel3);
|
| + }
|
| +
|
| + void TestChangeAutoHideTaskBarThickness() {
|
| + PanelManager* manager = PanelManager::GetInstance();
|
| + DockedPanelStrip* docked_strip = manager->docked_strip();
|
| + int initial_starting_right_position = docked_strip->StartingRightPosition();
|
| +
|
| + int bottom_bar_thickness = 20;
|
| + int right_bar_thickness = 30;
|
| + mock_display_settings_provider()->EnableAutoHidingDesktopBar(
|
| + DisplaySettingsProvider::DESKTOP_BAR_ALIGNED_BOTTOM,
|
| + true,
|
| + bottom_bar_thickness);
|
| + mock_display_settings_provider()->EnableAutoHidingDesktopBar(
|
| + DisplaySettingsProvider::DESKTOP_BAR_ALIGNED_RIGHT,
|
| + true,
|
| + right_bar_thickness);
|
| + EXPECT_EQ(
|
| + initial_starting_right_position - docked_strip->StartingRightPosition(),
|
| + right_bar_thickness);
|
| +
|
| + Panel* panel = CreatePanel("PanelTest");
|
| + panel->SetExpansionState(Panel::TITLE_ONLY);
|
| + WaitTillBoundsAnimationFinished(panel);
|
| +
|
| + EXPECT_EQ(docked_strip->display_area().bottom() - bottom_bar_thickness,
|
| + panel->GetBounds().bottom());
|
| + EXPECT_EQ(docked_strip->StartingRightPosition(),
|
| + panel->GetBounds().right());
|
| +
|
| + initial_starting_right_position = docked_strip->StartingRightPosition();
|
| + int bottom_bar_thickness_delta = 10;
|
| + bottom_bar_thickness += bottom_bar_thickness_delta;
|
| + int right_bar_thickness_delta = 15;
|
| + right_bar_thickness += right_bar_thickness_delta;
|
| + mock_display_settings_provider()->SetDesktopBarThickness(
|
| + DisplaySettingsProvider::DESKTOP_BAR_ALIGNED_BOTTOM,
|
| + bottom_bar_thickness);
|
| + mock_display_settings_provider()->SetDesktopBarThickness(
|
| + DisplaySettingsProvider::DESKTOP_BAR_ALIGNED_RIGHT,
|
| + right_bar_thickness);
|
| + MessageLoopForUI::current()->RunAllPending();
|
| + EXPECT_EQ(
|
| + initial_starting_right_position - docked_strip->StartingRightPosition(),
|
| + right_bar_thickness_delta);
|
| + EXPECT_EQ(docked_strip->display_area().bottom() - bottom_bar_thickness,
|
| + panel->GetBounds().bottom());
|
| + EXPECT_EQ(docked_strip->StartingRightPosition(),
|
| + panel->GetBounds().right());
|
| +
|
| + initial_starting_right_position = docked_strip->StartingRightPosition();
|
| + bottom_bar_thickness_delta = 20;
|
| + bottom_bar_thickness -= bottom_bar_thickness_delta;
|
| + right_bar_thickness_delta = 10;
|
| + right_bar_thickness -= right_bar_thickness_delta;
|
| + mock_display_settings_provider()->SetDesktopBarThickness(
|
| + DisplaySettingsProvider::DESKTOP_BAR_ALIGNED_BOTTOM,
|
| + bottom_bar_thickness);
|
| + mock_display_settings_provider()->SetDesktopBarThickness(
|
| + DisplaySettingsProvider::DESKTOP_BAR_ALIGNED_RIGHT,
|
| + right_bar_thickness);
|
| + MessageLoopForUI::current()->RunAllPending();
|
| + EXPECT_EQ(
|
| + docked_strip->StartingRightPosition() - initial_starting_right_position,
|
| + right_bar_thickness_delta);
|
| + EXPECT_EQ(docked_strip->display_area().bottom() - bottom_bar_thickness,
|
| + panel->GetBounds().bottom());
|
| + EXPECT_EQ(docked_strip->StartingRightPosition(),
|
| + panel->GetBounds().right());
|
| +
|
| + panel->Close();
|
| + }
|
| +};
|
| +
|
| +// Panel is not supported for Linux view yet.
|
| +#if !defined(OS_LINUX) || !defined(TOOLKIT_VIEWS)
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, CreatePanelBasic) {
|
| + CreatePanelParams params(
|
| + "PanelTest", gfx::Rect(0, 0, 200, 150), SHOW_AS_ACTIVE);
|
| + Panel* panel = CreatePanelWithParams(params);
|
| +
|
| + // Validate basic window properties.
|
| +#if defined(OS_WIN) && !defined(USE_AURA)
|
| + HWND native_window = GetNativeWindow(panel);
|
| +
|
| + RECT window_rect;
|
| + EXPECT_TRUE(::GetWindowRect(native_window, &window_rect));
|
| + EXPECT_EQ(200, window_rect.right - window_rect.left);
|
| + EXPECT_EQ(150, window_rect.bottom - window_rect.top);
|
| +
|
| + EXPECT_TRUE(::IsWindowVisible(native_window));
|
| +#endif
|
| +
|
| + panel->Close();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, CreatePanelActive) {
|
| + CreatePanelParams params("PanelTest", gfx::Rect(), SHOW_AS_ACTIVE);
|
| + Panel* panel = CreatePanelWithParams(params);
|
| +
|
| + // Validate it is active.
|
| + EXPECT_TRUE(panel->IsActive());
|
| + EXPECT_TRUE(IsTitlebarPaintedAsActive(panel));
|
| +
|
| + // Validate window styles. We want to ensure that the window is created
|
| + // with expected styles regardless of its active state.
|
| +#if defined(OS_WIN) && !defined(USE_AURA)
|
| + HWND native_window = GetNativeWindow(panel);
|
| +
|
| + LONG styles = ::GetWindowLong(native_window, GWL_STYLE);
|
| + EXPECT_EQ(0, styles & WS_MAXIMIZEBOX);
|
| + EXPECT_EQ(0, styles & WS_MINIMIZEBOX);
|
| +
|
| + LONG ext_styles = ::GetWindowLong(native_window, GWL_EXSTYLE);
|
| + EXPECT_EQ(WS_EX_TOPMOST, ext_styles & WS_EX_TOPMOST);
|
| +#endif
|
| +
|
| + panel->Close();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, CreatePanelInactive) {
|
| + CreatePanelParams params("PanelTest", gfx::Rect(), SHOW_AS_INACTIVE);
|
| + Panel* panel = CreatePanelWithParams(params);
|
| +
|
| + // Validate it is inactive.
|
| + EXPECT_FALSE(panel->IsActive());
|
| + EXPECT_FALSE(IsTitlebarPaintedAsActive(panel));
|
| +
|
| + // Validate window styles. We want to ensure that the window is created
|
| + // with expected styles regardless of its active state.
|
| +#if defined(OS_WIN) && !defined(USE_AURA)
|
| + HWND native_window = GetNativeWindow(panel);
|
| +
|
| + LONG styles = ::GetWindowLong(native_window, GWL_STYLE);
|
| + EXPECT_EQ(0, styles & WS_MAXIMIZEBOX);
|
| + EXPECT_EQ(0, styles & WS_MINIMIZEBOX);
|
| +
|
| + LONG ext_styles = ::GetWindowLong(native_window, GWL_EXSTYLE);
|
| + EXPECT_EQ(WS_EX_TOPMOST, ext_styles & WS_EX_TOPMOST);
|
| +#endif
|
| +
|
| + panel->Close();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, PanelLayout) {
|
| + // Create a fixed-size panel to avoid possible collapsing of the title
|
| + // if the enforced min sizes are too small.
|
| + Panel* panel = CreatePanelWithBounds("PanelTest", gfx::Rect(0, 0, 200, 50));
|
| +
|
| + views::View* title_icon = GetTitleIcon(panel);
|
| + views::View* title_text = GetTitleText(panel);
|
| + views::View* close_button = GetCloseButton(panel);
|
| + views::View* minimize_button = GetMinimizeButton(panel);
|
| + views::View* restore_button = GetRestoreButton(panel);
|
| +
|
| + // We should have icon, text, minimize, restore and close buttons. Only one of
|
| + // minimize and restore buttons are visible.
|
| + EXPECT_EQ(5, GetControlCount(panel));
|
| + EXPECT_TRUE(ContainsControl(panel, title_icon));
|
| + EXPECT_TRUE(ContainsControl(panel, title_text));
|
| + EXPECT_TRUE(ContainsControl(panel, close_button));
|
| + EXPECT_TRUE(ContainsControl(panel, minimize_button));
|
| + EXPECT_TRUE(ContainsControl(panel, restore_button));
|
| +
|
| + // These controls should be visible.
|
| + EXPECT_TRUE(title_icon->visible());
|
| + EXPECT_TRUE(title_text->visible());
|
| + EXPECT_TRUE(close_button->visible());
|
| + EXPECT_TRUE(minimize_button->visible());
|
| + EXPECT_FALSE(restore_button->visible());
|
| +
|
| + // Validate their layouts.
|
| + int titlebar_height = GetTitlebarHeight(panel);
|
| + EXPECT_GT(title_icon->width(), 0);
|
| + EXPECT_GT(title_icon->height(), 0);
|
| + EXPECT_LT(title_icon->height(), titlebar_height);
|
| + EXPECT_GT(title_text->width(), 0);
|
| + EXPECT_GT(title_text->height(), 0);
|
| + EXPECT_LT(title_text->height(), titlebar_height);
|
| + EXPECT_GT(minimize_button->width(), 0);
|
| + EXPECT_GT(minimize_button->height(), 0);
|
| + EXPECT_LT(minimize_button->height(), titlebar_height);
|
| + EXPECT_GT(close_button->width(), 0);
|
| + EXPECT_GT(close_button->height(), 0);
|
| + EXPECT_LT(close_button->height(), titlebar_height);
|
| + EXPECT_LT(title_icon->x() + title_icon->width(), title_text->x());
|
| + EXPECT_LT(title_text->x() + title_text->width(), minimize_button->x());
|
| + EXPECT_LT(minimize_button->x() + minimize_button->width(), close_button->x());
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, SetBoundsAnimation) {
|
| + Panel* panel = CreatePanel("PanelTest");
|
| + PanelBrowserView* browser_view = GetBrowserView(panel);
|
| +
|
| + // The bounds animation should not be triggered when the panel is up for the
|
| + // first time.
|
| + EXPECT_FALSE(GetBoundsAnimator(panel));
|
| +
|
| + // Validate that animation should be triggered when bounds are changed.
|
| + gfx::Rect target_bounds(GetViewBounds(panel));
|
| + target_bounds.Offset(20, -30);
|
| + target_bounds.set_width(target_bounds.width() + 100);
|
| + target_bounds.set_height(target_bounds.height() + 50);
|
| + SetViewBounds(panel, target_bounds);
|
| + ASSERT_TRUE(GetBoundsAnimator(panel));
|
| + EXPECT_TRUE(GetBoundsAnimator(panel)->is_animating());
|
| + EXPECT_NE(GetViewBounds(panel), target_bounds);
|
| + WaitTillBoundsAnimationFinished(panel);
|
| + EXPECT_EQ(GetViewBounds(panel), target_bounds);
|
| +
|
| + // Validates that no animation should be triggered for the panel currently
|
| + // being dragged.
|
| + browser_view->OnTitlebarMousePressed(gfx::Point(
|
| + target_bounds.x(), target_bounds.y()));
|
| + browser_view->OnTitlebarMouseDragged(gfx::Point(
|
| + target_bounds.x() + 5, target_bounds.y() + 5));
|
| + EXPECT_FALSE(GetBoundsAnimator(panel)->is_animating());
|
| + browser_view->OnTitlebarMouseCaptureLost();
|
| +
|
| + panel->Close();
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest,
|
| + MinimizeAndRestoreOnNormalTaskBar) {
|
| + TestMinimizeAndRestore(false);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest,
|
| + MinimizeAndRestoreOnAutoHideTaskBar) {
|
| + TestMinimizeAndRestore(true);
|
| +}
|
| +
|
| +IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest,
|
| + ChangeAutoHideTaskBarThickness) {
|
| + TestChangeAutoHideTaskBarThickness();
|
| +}
|
| +#endif
|
|
|