summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/panels/panel_browser_view_browsertest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chrome/browser/ui/panels/panel_browser_view_browsertest.cc')
-rw-r--r--chrome/browser/ui/panels/panel_browser_view_browsertest.cc316
1 files changed, 221 insertions, 95 deletions
diff --git a/chrome/browser/ui/panels/panel_browser_view_browsertest.cc b/chrome/browser/ui/panels/panel_browser_view_browsertest.cc
index 34d8cdc..3a92f69 100644
--- a/chrome/browser/ui/panels/panel_browser_view_browsertest.cc
+++ b/chrome/browser/ui/panels/panel_browser_view_browsertest.cc
@@ -60,49 +60,105 @@ class PanelBrowserViewTest : public BasePanelBrowserTest {
bool is_cursor_in_view_;
};
- PanelBrowserView* GetBrowserView(Panel* panel) {
+ PanelBrowserView* GetBrowserView(Panel* panel) const {
return static_cast<PanelBrowserView*>(panel->native_panel());
}
- void WaitTillBoundsAnimationFinished(PanelBrowserView* browser_view) {
+ gfx::Rect GetViewBounds(Panel* panel) const {
+ return GetBrowserView(panel)->GetBounds();
+ }
+
+ void SetViewBounds(Panel* panel, const gfx::Rect& rect) const {
+ return GetBrowserView(panel)->SetPanelBounds(rect);
+ }
+
+ HWND GetNativeWindow(Panel* panel) const {
+ return GetBrowserView(panel)->GetNativeHandle();
+ }
+
+ ui::SlideAnimation* GetBoundsAnimator(Panel* panel) const {
+ return GetBrowserView(panel)->bounds_animator_.get();
+ }
+
+ ui::SlideAnimation* GetSettingsButtonAnimator(Panel* panel) const {
+ return GetBrowserView(panel)->GetFrameView()->
+ settings_button_animator_.get();
+ }
+
+ int GetTitlebarHeight(Panel* panel) const {
+ PanelBrowserFrameView* frame_view = GetBrowserView(panel)->GetFrameView();
+ return frame_view->NonClientTopBorderHeight() -
+ frame_view->NonClientBorderThickness();
+ }
+
+ MockMouseWatcher* CreateTitlebarMouseWatcher(Panel* panel) {
+ PanelBrowserFrameView* frame_view = GetBrowserView(panel)->GetFrameView();
+ MockMouseWatcher* mouse_watcher = new MockMouseWatcher(frame_view);
+ frame_view->set_mouse_watcher(mouse_watcher);
+ return mouse_watcher;
+ }
+
+ 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* GetSettingsButton(Panel* panel) const {
+ return GetBrowserView(panel)->GetFrameView()->settings_button_;
+ }
+
+ views::Button* GetCloseButton(Panel* panel) const {
+ return GetBrowserView(panel)->GetFrameView()->close_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 (browser_view->bounds_animator_->is_animating()) {
+ while (GetBoundsAnimator(panel)->is_animating()) {
MessageLoopForUI::current()->PostTask(FROM_HERE,
new MessageLoop::QuitTask());
MessageLoopForUI::current()->RunAllPending();
}
}
- void WaitTillSettingsAnimationFinished(PanelBrowserFrameView* frame_view) {
+ void WaitTillSettingsAnimationFinished(Panel* panel) {
// The timer for the animation will only kick in as async task.
- while (frame_view->settings_button_animator_->is_animating()) {
+ while (GetSettingsButtonAnimator(panel)->is_animating()) {
MessageLoopForUI::current()->PostTask(FROM_HERE,
new MessageLoop::QuitTask());
MessageLoopForUI::current()->RunAllPending();
}
}
- void TestShowPanelActiveOrInactive() {
- CreatePanelParams params1("PanelTest1", gfx::Rect(), SHOW_AS_ACTIVE);
- Panel* panel1 = CreatePanelWithParams(params1);
- PanelBrowserView* browser_view1 = GetBrowserView(panel1);
- PanelBrowserFrameView* frame_view1 = browser_view1->GetFrameView();
- EXPECT_TRUE(panel1->IsActive());
- EXPECT_EQ(PanelBrowserFrameView::PAINT_AS_ACTIVE,
- frame_view1->paint_state_);
-
- CreatePanelParams params2("PanelTest2", gfx::Rect(), SHOW_AS_INACTIVE);
- Panel* panel2 = CreatePanelWithParams(params2);
- PanelBrowserView* browser_view2 = GetBrowserView(panel2);
- PanelBrowserFrameView* frame_view2 = browser_view2->GetFrameView();
- EXPECT_FALSE(panel2->IsActive());
- EXPECT_EQ(PanelBrowserFrameView::PAINT_AS_INACTIVE,
- frame_view2->paint_state_);
-
- panel1->Close();
- panel2->Close();
- }
-
// 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.
@@ -137,7 +193,7 @@ class PanelBrowserViewTest : public BasePanelBrowserTest {
EXPECT_GT(panel1->GetBounds().height(), 0);
EXPECT_EQ(expected_bottom_on_minimized, panel1->GetBounds().bottom());
EXPECT_EQ(1, panel_manager->minimized_panel_count());
- WaitTillBoundsAnimationFinished(browser_view1);
+ WaitTillBoundsAnimationFinished(panel1);
EXPECT_FALSE(panel1->IsActive());
panel1->SetExpansionState(Panel::TITLE_ONLY);
@@ -145,7 +201,7 @@ class PanelBrowserViewTest : public BasePanelBrowserTest {
EXPECT_EQ(titlebar_height, panel1->GetBounds().height());
EXPECT_EQ(expected_bottom_on_unminimized, panel1->GetBounds().bottom());
EXPECT_EQ(1, panel_manager->minimized_panel_count());
- WaitTillBoundsAnimationFinished(browser_view1);
+ WaitTillBoundsAnimationFinished(panel1);
EXPECT_TRUE(frame_view1->close_button_->IsVisible());
EXPECT_TRUE(frame_view1->title_icon_->IsVisible());
EXPECT_TRUE(frame_view1->title_label_->IsVisible());
@@ -155,7 +211,7 @@ class PanelBrowserViewTest : public BasePanelBrowserTest {
EXPECT_EQ(initial_height, panel1->GetBounds().height());
EXPECT_EQ(expected_bottom_on_unminimized, panel1->GetBounds().bottom());
EXPECT_EQ(0, panel_manager->minimized_panel_count());
- WaitTillBoundsAnimationFinished(browser_view1);
+ WaitTillBoundsAnimationFinished(panel1);
EXPECT_TRUE(frame_view1->close_button_->IsVisible());
EXPECT_TRUE(frame_view1->title_icon_->IsVisible());
EXPECT_TRUE(frame_view1->title_label_->IsVisible());
@@ -333,73 +389,139 @@ class PanelBrowserViewTest : public BasePanelBrowserTest {
// Panel is not supported for Linux view yet.
#if !defined(OS_LINUX) || !defined(TOOLKIT_VIEWS)
-IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, CreatePanel) {
+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)
+ 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)
+ HWND native_window = GetNativeWindow(panel);
+
+ LONG styles = ::GetWindowLong(native_window, GWL_STYLE);
+ EXPECT_EQ(0, styles & WS_MAXIMIZEBOX);
+ EXPECT_EQ(0, styles & WS_MINIMIZEBOX);
+ EXPECT_EQ(0, styles & WS_THICKFRAME);
+
+ 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_TRUE(IsTitlebarPaintedAsInactive(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)
+ HWND native_window = GetNativeWindow(panel);
+
+ LONG styles = ::GetWindowLong(native_window, GWL_STYLE);
+ EXPECT_EQ(0, styles & WS_MAXIMIZEBOX);
+ EXPECT_EQ(0, styles & WS_MINIMIZEBOX);
+ EXPECT_EQ(0, styles & WS_THICKFRAME);
+
+ 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) {
Panel* panel = CreatePanel("PanelTest");
- PanelBrowserView* browser_view = GetBrowserView(panel);
- PanelBrowserFrameView* frame_view = browser_view->GetFrameView();
- // The bounds animation should not be triggered when the panel is up for the
- // first time.
- EXPECT_FALSE(browser_view->bounds_animator_.get());
+ views::View* title_icon = GetTitleIcon(panel);
+ views::View* title_text = GetTitleText(panel);
+ views::View* settings_button = GetSettingsButton(panel);
+ views::View* close_button = GetCloseButton(panel);
// We should have icon, text, settings button and close button.
- EXPECT_EQ(4, frame_view->child_count());
- EXPECT_TRUE(frame_view->Contains(frame_view->title_icon_));
- EXPECT_TRUE(frame_view->Contains(frame_view->title_label_));
- EXPECT_TRUE(frame_view->Contains(frame_view->settings_button_));
- EXPECT_TRUE(frame_view->Contains(frame_view->close_button_));
+ EXPECT_EQ(4, GetControlCount(panel));
+ EXPECT_TRUE(ContainsControl(panel, title_icon));
+ EXPECT_TRUE(ContainsControl(panel, title_text));
+ EXPECT_TRUE(ContainsControl(panel, settings_button));
+ EXPECT_TRUE(ContainsControl(panel, close_button));
// These controls should be visible.
- EXPECT_TRUE(frame_view->title_icon_->IsVisible());
- EXPECT_TRUE(frame_view->title_label_->IsVisible());
- EXPECT_TRUE(frame_view->close_button_->IsVisible());
+ EXPECT_TRUE(title_icon->IsVisible());
+ EXPECT_TRUE(title_text->IsVisible());
+ EXPECT_TRUE(close_button->IsVisible());
// Validate their layouts.
- int titlebar_height = frame_view->NonClientTopBorderHeight() -
- frame_view->NonClientBorderThickness();
- EXPECT_GT(frame_view->title_icon_->width(), 0);
- EXPECT_GT(frame_view->title_icon_->height(), 0);
- EXPECT_LT(frame_view->title_icon_->height(), titlebar_height);
- EXPECT_GT(frame_view->title_label_->width(), 0);
- EXPECT_GT(frame_view->title_label_->height(), 0);
- EXPECT_LT(frame_view->title_label_->height(), titlebar_height);
- EXPECT_GT(frame_view->settings_button_->width(), 0);
- EXPECT_GT(frame_view->settings_button_->height(), 0);
- EXPECT_LT(frame_view->settings_button_->height(), titlebar_height);
- EXPECT_GT(frame_view->close_button_->width(), 0);
- EXPECT_GT(frame_view->close_button_->height(), 0);
- EXPECT_LT(frame_view->close_button_->height(), titlebar_height);
- EXPECT_LT(frame_view->title_icon_->x() + frame_view->title_icon_->width(),
- frame_view->title_label_->x());
- EXPECT_LT(frame_view->title_label_->x() + frame_view->title_label_->width(),
- frame_view->settings_button_->x());
- EXPECT_LT(
- frame_view->settings_button_->x() + frame_view->settings_button_->width(),
- frame_view->close_button_->x());
-
- // Validate that the controls should be updated when the activation state is
- // changed.
- frame_view->UpdateControlStyles(PanelBrowserFrameView::PAINT_AS_ACTIVE);
- SkColor title_label_color1 = frame_view->title_label_->GetColor();
- frame_view->UpdateControlStyles(PanelBrowserFrameView::PAINT_AS_INACTIVE);
- SkColor title_label_color2 = frame_view->title_label_->GetColor();
- EXPECT_NE(title_label_color1, title_label_color2);
-
- panel->Close();
+ 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(settings_button->width(), 0);
+ EXPECT_GT(settings_button->height(), 0);
+ EXPECT_LT(settings_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(), settings_button->x());
+ EXPECT_LT(settings_button->x() + settings_button->width(), close_button->x());
}
-IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, ShowPanelActiveOrInactive) {
- TestShowPanelActiveOrInactive();
+IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, Deactivate) {
+ // When a panel is created, it should be active at first.
+ Panel* panel = CreatePanel("PanelTest");
+ EXPECT_TRUE(panel->IsActive());
+
+ // When the panel is deactivated, the appearance of controls should be
+ // updated.
+ views::Label* title_text = GetTitleText(panel);
+ SkColor title_text_color_before = title_text->GetColor();
+
+ panel->Deactivate();
+ EXPECT_FALSE(panel->IsActive());
+
+ SkColor title_text_color_after = title_text->GetColor();
+ EXPECT_NE(title_text_color_before, title_text_color_after);
}
IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, ShowOrHideSettingsButton) {
Panel* panel = CreatePanel("PanelTest");
- PanelBrowserFrameView* frame_view = GetBrowserView(panel)->GetFrameView();
+ views::View* settings_button = GetSettingsButton(panel);
// Create and hook up the MockMouseWatcher so that we can simulate if the
// mouse is over the panel.
- MockMouseWatcher* mouse_watcher = new MockMouseWatcher(frame_view);
- frame_view->set_mouse_watcher(mouse_watcher);
+ MockMouseWatcher* mouse_watcher = CreateTitlebarMouseWatcher(panel);
// When the panel is created, it is active. Since we cannot programatically
// bring the panel back to active state once it is deactivated, we have to
@@ -408,40 +530,44 @@ IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, ShowOrHideSettingsButton) {
// When the panel is active, the settings button should always be visible.
mouse_watcher->MoveMouse(true);
- EXPECT_TRUE(frame_view->settings_button_->IsVisible());
+ EXPECT_TRUE(settings_button->IsVisible());
mouse_watcher->MoveMouse(false);
- EXPECT_TRUE(frame_view->settings_button_->IsVisible());
+ EXPECT_TRUE(settings_button->IsVisible());
// When the panel is inactive, the options button is active per the mouse over
// the panel or not.
panel->Deactivate();
EXPECT_FALSE(panel->IsActive());
- WaitTillSettingsAnimationFinished(frame_view);
- EXPECT_FALSE(frame_view->settings_button_->IsVisible());
+ WaitTillSettingsAnimationFinished(panel);
+ EXPECT_FALSE(settings_button->IsVisible());
mouse_watcher->MoveMouse(true);
- WaitTillSettingsAnimationFinished(frame_view);
- EXPECT_TRUE(frame_view->settings_button_->IsVisible());
+ WaitTillSettingsAnimationFinished(panel);
+ EXPECT_TRUE(settings_button->IsVisible());
mouse_watcher->MoveMouse(false);
- WaitTillSettingsAnimationFinished(frame_view);
- EXPECT_FALSE(frame_view->settings_button_->IsVisible());
+ WaitTillSettingsAnimationFinished(panel);
+ EXPECT_FALSE(settings_button->IsVisible());
}
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(browser_view->GetBounds());
+ 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);
- browser_view->SetPanelBounds(target_bounds);
- ASSERT_TRUE(browser_view->bounds_animator_.get());
- EXPECT_TRUE(browser_view->bounds_animator_->is_animating());
- EXPECT_NE(browser_view->GetBounds(), target_bounds);
- WaitTillBoundsAnimationFinished(browser_view);
- EXPECT_EQ(browser_view->GetBounds(), target_bounds);
+ 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.
@@ -449,7 +575,7 @@ IN_PROC_BROWSER_TEST_F(PanelBrowserViewTest, SetBoundsAnimation) {
target_bounds.x(), target_bounds.y()));
browser_view->OnTitlebarMouseDragged(gfx::Point(
target_bounds.x() + 5, target_bounds.y() + 5));
- EXPECT_FALSE(browser_view->bounds_animator_->is_animating());
+ EXPECT_FALSE(GetBoundsAnimator(panel)->is_animating());
browser_view->OnTitlebarMouseCaptureLost();
panel->Close();