summaryrefslogtreecommitdiffstats
path: root/chromium/ash/wm/caption_buttons/frame_maximize_button_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/ash/wm/caption_buttons/frame_maximize_button_unittest.cc')
-rw-r--r--chromium/ash/wm/caption_buttons/frame_maximize_button_unittest.cc878
1 files changed, 0 insertions, 878 deletions
diff --git a/chromium/ash/wm/caption_buttons/frame_maximize_button_unittest.cc b/chromium/ash/wm/caption_buttons/frame_maximize_button_unittest.cc
deleted file mode 100644
index c0fd2a0a8a9..00000000000
--- a/chromium/ash/wm/caption_buttons/frame_maximize_button_unittest.cc
+++ /dev/null
@@ -1,878 +0,0 @@
-// Copyright 2013 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 "ash/wm/caption_buttons/frame_maximize_button.h"
-
-#include "ash/ash_switches.h"
-#include "ash/shell.h"
-#include "ash/test/ash_test_base.h"
-#include "ash/wm/caption_buttons/frame_caption_button_container_view.h"
-#include "ash/wm/caption_buttons/maximize_bubble_controller.h"
-#include "ash/wm/window_state.h"
-#include "ash/wm/window_util.h"
-#include "ash/wm/workspace/snap_sizer.h"
-#include "base/command_line.h"
-#include "ui/aura/client/focus_client.h"
-#include "ui/aura/root_window.h"
-#include "ui/aura/test/event_generator.h"
-#include "ui/aura/window.h"
-#include "ui/events/event_utils.h"
-#include "ui/events/gestures/gesture_configuration.h"
-#include "ui/views/widget/widget.h"
-#include "ui/views/widget/widget_delegate.h"
-
-namespace ash {
-namespace test {
-
-namespace {
-
-class CancelCallbackHandler {
- public:
- CancelCallbackHandler(int update_events_before_cancel,
- FrameMaximizeButton* maximize_button) :
- update_events_before_cancel_(update_events_before_cancel),
- maximize_button_(maximize_button) {}
- virtual ~CancelCallbackHandler() {}
-
- void CountedCancelCallback(ui::EventType event_type,
- const gfx::Vector2dF& pos) {
- if (event_type == ui::ET_GESTURE_SCROLL_UPDATE &&
- !(--update_events_before_cancel_)) {
- // Make sure that we are in the middle of a resizing operation, cancel it
- // and then test that it is exited.
- EXPECT_TRUE(maximize_button_->is_snap_enabled());
- maximize_button_->DestroyMaximizeMenu();
- EXPECT_FALSE(maximize_button_->is_snap_enabled());
- }
- }
-
- private:
- // When this counter reaches 0, the gesture maximize action gets cancelled.
- int update_events_before_cancel_;
-
- // The maximize button which needs to get informed of the gesture termination.
- FrameMaximizeButton* maximize_button_;
-
- DISALLOW_COPY_AND_ASSIGN(CancelCallbackHandler);
-};
-
-class TestWidgetDelegate : public views::WidgetDelegateView {
- public:
- TestWidgetDelegate() {}
- virtual ~TestWidgetDelegate() {}
-
- // views::WidgetDelegate overrides:
- virtual views::View* GetContentsView() OVERRIDE {
- return this;
- }
- virtual bool CanResize() const OVERRIDE {
- return true;
- }
- virtual bool CanMaximize() const OVERRIDE {
- return true;
- }
-
- ash::FrameCaptionButtonContainerView* caption_button_container() {
- return caption_button_container_;
- }
-
- private:
- // Overridden from views::View:
- virtual void Layout() OVERRIDE {
- caption_button_container_->Layout();
-
- // Right align the caption button container.
- gfx::Size preferred_size = caption_button_container_->GetPreferredSize();
- caption_button_container_->SetBounds(width() - preferred_size.width(), 0,
- preferred_size.width(), preferred_size.height());
- }
-
- virtual void ViewHierarchyChanged(
- const ViewHierarchyChangedDetails& details) OVERRIDE {
- if (details.is_add && details.child == this) {
- caption_button_container_ = new FrameCaptionButtonContainerView(
- GetWidget(), FrameCaptionButtonContainerView::MINIMIZE_ALLOWED);
- AddChildView(caption_button_container_);
- }
- }
-
- // Not owned.
- ash::FrameCaptionButtonContainerView* caption_button_container_;
-
- DISALLOW_COPY_AND_ASSIGN(TestWidgetDelegate);
-};
-
-} // namespace
-
-class FrameMaximizeButtonTest : public ash::test::AshTestBase {
- public:
- FrameMaximizeButtonTest() {}
- virtual ~FrameMaximizeButtonTest() {}
-
- // The returned widget takes ownership of |delegate|.
- views::Widget* CreateWidget(views::WidgetDelegate* delegate) {
- views::Widget::InitParams params(
- views::Widget::InitParams::TYPE_WINDOW_FRAMELESS);
- views::Widget* widget = new views::Widget;
- params.context = CurrentContext();
- params.delegate = delegate;
- params.bounds = gfx::Rect(10, 10, 100, 100);
- params.opacity = views::Widget::InitParams::TRANSLUCENT_WINDOW;
- widget->Init(params);
- widget->Show();
- return widget;
- }
-
- void CloseWidget() {
- if (widget_)
- widget_->CloseNow();
- widget_ = NULL;
- }
-
- virtual void SetUp() OVERRIDE {
- AshTestBase::SetUp();
-
- CommandLine::ForCurrentProcess()->AppendSwitch(
- switches::kAshDisableAlternateFrameCaptionButtonStyle);
-
- TestWidgetDelegate* delegate = new TestWidgetDelegate();
- widget_ = CreateWidget(delegate);
- FrameCaptionButtonContainerView* caption_button_container =
- delegate->caption_button_container();
-
- FrameCaptionButtonContainerView::TestApi test(caption_button_container);
- maximize_button_ = static_cast<FrameMaximizeButton*>(
- test.size_button());
- }
-
- virtual void TearDown() OVERRIDE {
- CloseWidget();
- AshTestBase::TearDown();
- }
-
- views::Widget* widget() { return widget_; }
-
- FrameMaximizeButton* maximize_button() { return maximize_button_; }
-
- private:
- views::Widget* widget_;
- FrameMaximizeButton* maximize_button_;
-
- DISALLOW_COPY_AND_ASSIGN(FrameMaximizeButtonTest);
-};
-
-// Tests that clicking on the resize-button toggles between maximize and normal
-// state.
-TEST_F(FrameMaximizeButtonTest, ResizeButtonToggleMaximize) {
- wm::WindowState* window_state =
- wm::GetWindowState(widget()->GetNativeWindow());
- views::View* view = maximize_button();
- gfx::Point center = view->GetBoundsInScreen().CenterPoint();
-
- aura::test::EventGenerator generator(
- window_state->window()->GetRootWindow(), center);
-
- EXPECT_FALSE(window_state->IsMaximized());
-
- generator.ClickLeftButton();
- RunAllPendingInMessageLoop();
- EXPECT_TRUE(window_state->IsMaximized());
-
- center = view->GetBoundsInScreen().CenterPoint();
- generator.MoveMouseTo(center);
- generator.ClickLeftButton();
- RunAllPendingInMessageLoop();
- EXPECT_FALSE(window_state->IsMaximized());
-
- generator.GestureTapAt(view->GetBoundsInScreen().CenterPoint());
- EXPECT_TRUE(window_state->IsMaximized());
-
- generator.GestureTapAt(view->GetBoundsInScreen().CenterPoint());
- EXPECT_FALSE(window_state->IsMaximized());
-
- generator.GestureTapDownAndUp(view->GetBoundsInScreen().CenterPoint());
- EXPECT_TRUE(window_state->IsMaximized());
-
- generator.GestureTapDownAndUp(view->GetBoundsInScreen().CenterPoint());
- EXPECT_FALSE(window_state->IsMaximized());
-}
-
-#if defined(OS_WIN)
-// RootWindow and Display can't resize on Windows Ash. http://crbug.com/165962
-#define MAYBE_ResizeButtonDrag DISABLED_ResizeButtonDrag
-#else
-#define MAYBE_ResizeButtonDrag ResizeButtonDrag
-#endif
-
-// Tests that click+dragging on the resize-button tiles or minimizes the window.
-TEST_F(FrameMaximizeButtonTest, MAYBE_ResizeButtonDrag) {
- aura::Window* window = widget()->GetNativeWindow();
- views::View* view = maximize_button();
- gfx::Point center = view->GetBoundsInScreen().CenterPoint();
-
- aura::test::EventGenerator generator(window->GetRootWindow(), center);
-
- wm::WindowState* window_state = wm::GetWindowState(window);
- EXPECT_TRUE(window_state->IsNormalShowState());
-
- // Snap right.
- {
- generator.PressLeftButton();
- generator.MoveMouseBy(10, 0);
- generator.ReleaseLeftButton();
- RunAllPendingInMessageLoop();
-
- EXPECT_FALSE(window_state->IsMaximized());
- EXPECT_FALSE(window_state->IsMinimized());
- internal::SnapSizer sizer(window_state, center,
- internal::SnapSizer::RIGHT_EDGE,
- internal::SnapSizer::OTHER_INPUT);
- EXPECT_EQ(sizer.target_bounds().ToString(), window->bounds().ToString());
- }
-
- // Snap left.
- {
- center = view->GetBoundsInScreen().CenterPoint();
- generator.MoveMouseTo(center);
- generator.PressLeftButton();
- generator.MoveMouseBy(-10, 0);
- generator.ReleaseLeftButton();
- RunAllPendingInMessageLoop();
-
- EXPECT_FALSE(window_state->IsMaximized());
- EXPECT_FALSE(window_state->IsMinimized());
- internal::SnapSizer sizer(window_state, center,
- internal::SnapSizer::LEFT_EDGE,
- internal::SnapSizer::OTHER_INPUT);
- EXPECT_EQ(sizer.target_bounds().ToString(), window->bounds().ToString());
- }
-
- // Minimize.
- {
- center = view->GetBoundsInScreen().CenterPoint();
- generator.MoveMouseTo(center);
- generator.PressLeftButton();
- generator.MoveMouseBy(0, 10);
- generator.ReleaseLeftButton();
- RunAllPendingInMessageLoop();
-
- EXPECT_TRUE(window_state->IsMinimized());
- }
-
- window_state->Restore();
-
- // Now test the same behaviour for gesture events.
-
- // Snap right.
- {
- center = view->GetBoundsInScreen().CenterPoint();
- gfx::Point end = center;
- end.Offset(80, 0);
- generator.GestureScrollSequence(center, end,
- base::TimeDelta::FromMilliseconds(100),
- 3);
- RunAllPendingInMessageLoop();
-
- EXPECT_FALSE(window_state->IsMaximized());
- EXPECT_FALSE(window_state->IsMinimized());
- // This is a short resizing distance and different touch behavior
- // applies which leads in half of the screen being used.
- EXPECT_EQ("400,0 400x553", window->bounds().ToString());
- }
-
- // Snap left.
- {
- center = view->GetBoundsInScreen().CenterPoint();
- gfx::Point end = center;
- end.Offset(-80, 0);
- generator.GestureScrollSequence(center, end,
- base::TimeDelta::FromMilliseconds(100),
- 3);
- RunAllPendingInMessageLoop();
-
- EXPECT_FALSE(window_state->IsMaximized());
- EXPECT_FALSE(window_state->IsMinimized());
- internal::SnapSizer sizer(window_state, center,
- internal::SnapSizer::LEFT_EDGE,
- internal::SnapSizer::OTHER_INPUT);
- EXPECT_EQ(sizer.target_bounds().ToString(), window->bounds().ToString());
- }
-
- // Minimize.
- {
- center = view->GetBoundsInScreen().CenterPoint();
- gfx::Point end = center;
- end.Offset(0, 40);
- generator.GestureScrollSequence(center, end,
- base::TimeDelta::FromMilliseconds(100),
- 3);
- RunAllPendingInMessageLoop();
-
- EXPECT_TRUE(window_state->IsMinimized());
- }
-
- // Test with gesture events.
-}
-
-#if defined(OS_WIN)
-// RootWindow and Display can't resize on Windows Ash. http://crbug.com/165962
-#define MAYBE_TouchDragResizeCloseToCornerDiffersFromMouse \
- DISABLED_TouchDragResizeCloseToCornerDiffersFromMouse
-#else
-#define MAYBE_TouchDragResizeCloseToCornerDiffersFromMouse \
- TouchDragResizeCloseToCornerDiffersFromMouse
-#endif
-
-// Tests Left/Right snapping with resize button touch dragging - which should
-// trigger dependent on the available drag distance.
-TEST_F(FrameMaximizeButtonTest,
- MAYBE_TouchDragResizeCloseToCornerDiffersFromMouse) {
- // The test is uninteresting when windows can only be snapped to a single
- // width because snapping the window via mouse and touch results in the same
- // final bounds.
- if (!CommandLine::ForCurrentProcess()->HasSwitch(
- switches::kAshMultipleSnapWindowWidths)) {
- return;
- }
-
- aura::Window* window = widget()->GetNativeWindow();
- views::View* view = maximize_button();
-
- gfx::Rect work_area = widget()->GetWorkAreaBoundsInScreen();
- gfx::Rect bounds = window->bounds();
- bounds.set_x(work_area.width() - bounds.width());
- widget()->SetBounds(bounds);
-
- gfx::Point start_point = view->GetBoundsInScreen().CenterPoint();
- // We want to move all the way to the right (the few pixels we have).
- gfx::Point end_point = gfx::Point(work_area.width(), start_point.y());
-
- aura::test::EventGenerator generator(window->GetRootWindow(), start_point);
- wm::WindowState* window_state = wm::GetWindowState(window);
-
- EXPECT_TRUE(window_state->IsNormalShowState());
-
- // Snap right with a touch drag.
- generator.GestureScrollSequence(start_point,
- end_point,
- base::TimeDelta::FromMilliseconds(100),
- 10);
- RunAllPendingInMessageLoop();
-
- EXPECT_FALSE(window_state->IsMaximized());
- EXPECT_FALSE(window_state->IsMinimized());
- gfx::Rect touch_result = window->bounds();
- EXPECT_NE(bounds.ToString(), touch_result.ToString());
-
- // Set the position back to where it was before and re-try with a mouse.
- widget()->SetBounds(bounds);
-
- generator.MoveMouseTo(start_point);
- generator.PressLeftButton();
- generator.MoveMouseTo(end_point, 10);
- generator.ReleaseLeftButton();
- RunAllPendingInMessageLoop();
-
- EXPECT_FALSE(window_state->IsMaximized());
- EXPECT_FALSE(window_state->IsMinimized());
- gfx::Rect mouse_result = window->bounds();
-
- // The difference between the two operations should be that the mouse
- // operation should have just started to resize and the touch operation is
- // already all the way down to the smallest possible size.
- EXPECT_NE(mouse_result.ToString(), touch_result.ToString());
- EXPECT_GT(mouse_result.width(), touch_result.width());
-}
-
-// Test that closing the (browser) window with an opened balloon does not
-// crash the system. In other words: Make sure that shutting down the frame
-// destroys the opened balloon in an orderly fashion.
-TEST_F(FrameMaximizeButtonTest, MaximizeButtonExternalShutDown) {
- aura::Window* window = widget()->GetNativeWindow();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100);
-
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos);
- EXPECT_FALSE(maximize_button->maximizer());
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalShowState());
-
- // Move the mouse cursor over the button to bring up the maximizer bubble.
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
-
- // Even though the widget is closing the bubble menu should not crash upon
- // its delayed destruction.
- CloseWidget();
-}
-
-// Test that maximizing the browser after hovering in does not crash the system
-// when the observer gets removed in the bubble destruction process.
-TEST_F(FrameMaximizeButtonTest, MaximizeOnHoverThenClick) {
- aura::Window* window = widget()->GetNativeWindow();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100);
-
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos);
- EXPECT_FALSE(maximize_button->maximizer());
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalShowState());
-
- // Move the mouse cursor over the button to bring up the maximizer bubble.
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
- generator.ClickLeftButton();
- EXPECT_TRUE(wm::GetWindowState(window)->IsMaximized());
-}
-
-// Test that hovering over a button in the balloon dialog will show the phantom
-// window. Moving then away from the button will hide it again. Then check that
-// pressing and dragging the button itself off the button will also release the
-// phantom window.
-TEST_F(FrameMaximizeButtonTest, MaximizeLeftButtonDragOut) {
- aura::Window* window = widget()->GetNativeWindow();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100);
-
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos);
- EXPECT_FALSE(maximize_button->maximizer());
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalShowState());
- EXPECT_FALSE(maximize_button->phantom_window_open());
-
- // Move the mouse cursor over the button to bring up the maximizer bubble.
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
-
- // Move the mouse over the left maximize button.
- gfx::Point left_max_pos = maximize_button->maximizer()->
- GetButtonForUnitTest(SNAP_LEFT)->GetBoundsInScreen().CenterPoint();
-
- generator.MoveMouseTo(left_max_pos);
- // Expect the phantom window to be open.
- EXPECT_TRUE(maximize_button->phantom_window_open());
-
- // Move away to see the window being destroyed.
- generator.MoveMouseTo(off_pos);
- EXPECT_FALSE(maximize_button->phantom_window_open());
-
- // Move back over the button.
- generator.MoveMouseTo(button_pos);
- generator.MoveMouseTo(left_max_pos);
- EXPECT_TRUE(maximize_button->phantom_window_open());
-
- // Press button and drag out of dialog.
- generator.PressLeftButton();
- generator.MoveMouseTo(off_pos);
- generator.ReleaseLeftButton();
-
- // Check that the phantom window is also gone.
- EXPECT_FALSE(maximize_button->phantom_window_open());
-}
-
-// Test that clicking a button in the maximizer bubble (in this case the
-// maximize left button) will do the requested action.
-TEST_F(FrameMaximizeButtonTest, MaximizeLeftByButton) {
- aura::Window* window = widget()->GetNativeWindow();
-
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100);
-
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos);
- EXPECT_FALSE(maximize_button->maximizer());
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalShowState());
- EXPECT_FALSE(maximize_button->phantom_window_open());
-
- // Move the mouse cursor over the button to bring up the maximizer bubble.
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
-
- // Move the mouse over the left maximize button.
- gfx::Point left_max_pos = maximize_button->maximizer()->
- GetButtonForUnitTest(SNAP_LEFT)->GetBoundsInScreen().CenterPoint();
- generator.MoveMouseTo(left_max_pos);
- EXPECT_TRUE(maximize_button->phantom_window_open());
- generator.ClickLeftButton();
-
- EXPECT_FALSE(maximize_button->maximizer());
- EXPECT_FALSE(maximize_button->phantom_window_open());
-
- wm::WindowState* window_state = wm::GetWindowState(window);
- EXPECT_FALSE(window_state->IsMaximized());
- EXPECT_FALSE(window_state->IsMinimized());
- internal::SnapSizer sizer(window_state, button_pos,
- internal::SnapSizer::LEFT_EDGE,
- internal::SnapSizer::OTHER_INPUT);
- sizer.SelectDefaultSizeAndDisableResize();
- EXPECT_EQ(sizer.target_bounds().ToString(), window->bounds().ToString());
-}
-
-// Test that the activation focus does not change when the bubble gets shown.
-TEST_F(FrameMaximizeButtonTest, MaximizeKeepFocus) {
- aura::Window* window = widget()->GetNativeWindow();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100);
-
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos);
- EXPECT_FALSE(maximize_button->maximizer());
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalShowState());
-
- aura::Window* active =
- aura::client::GetFocusClient(window)->GetFocusedWindow();
-
- // Move the mouse cursor over the button to bring up the maximizer bubble.
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
-
- // Check that the focused window is still the same.
- EXPECT_EQ(active, aura::client::GetFocusClient(window)->GetFocusedWindow());
-}
-
-TEST_F(FrameMaximizeButtonTest, MaximizeTap) {
- aura::Window* window = widget()->GetNativeWindow();
- aura::Window* root_window = window->GetRootWindow();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
-
- const int touch_default_radius =
- ui::GestureConfiguration::default_radius();
- ui::GestureConfiguration::set_default_radius(0);
-
- aura::WindowEventDispatcher* dispatcher = root_window->GetDispatcher();
- const int kTouchId = 2;
- ui::TouchEvent press(ui::ET_TOUCH_PRESSED,
- button_pos,
- kTouchId,
- ui::EventTimeForNow());
- dispatcher->AsRootWindowHostDelegate()->OnHostTouchEvent(&press);
-
- button_pos.Offset(9, 8);
- ui::TouchEvent release(
- ui::ET_TOUCH_RELEASED,
- button_pos,
- kTouchId,
- press.time_stamp() + base::TimeDelta::FromMilliseconds(50));
- dispatcher->AsRootWindowHostDelegate()->OnHostTouchEvent(&release);
-
- ui::GestureConfiguration::set_default_radius(touch_default_radius);
-}
-
-// Test that only the left button will activate the maximize button.
-TEST_F(FrameMaximizeButtonTest, OnlyLeftButtonMaximizes) {
- aura::Window* window = widget()->GetNativeWindow();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100);
-
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos);
- EXPECT_FALSE(maximize_button->maximizer());
- wm::WindowState* window_state = wm::GetWindowState(window);
- EXPECT_TRUE(window_state->IsNormalShowState());
- EXPECT_FALSE(window_state->IsMaximized());
-
- // Move the mouse cursor over the button.
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
- EXPECT_FALSE(maximize_button->phantom_window_open());
-
- // After pressing the left button the button should get triggered.
- generator.PressLeftButton();
- RunAllPendingInMessageLoop();
- EXPECT_TRUE(maximize_button->is_snap_enabled());
- EXPECT_FALSE(window_state->IsMaximized());
-
- // Pressing the right button then should cancel the operation.
- generator.PressRightButton();
- RunAllPendingInMessageLoop();
- EXPECT_FALSE(maximize_button->maximizer());
-
- // After releasing the second button the window shouldn't be maximized.
- generator.ReleaseRightButton();
- generator.ReleaseLeftButton();
- RunAllPendingInMessageLoop();
- EXPECT_FALSE(window_state->IsMaximized());
-
- // Second experiment: Starting with right should also not trigger.
- generator.MoveMouseTo(off_pos);
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
-
- // Pressing first the right button should not activate.
- generator.PressRightButton();
- RunAllPendingInMessageLoop();
- EXPECT_FALSE(maximize_button->is_snap_enabled());
-
- // Pressing then additionally the left button shouldn't activate either.
- generator.PressLeftButton();
- RunAllPendingInMessageLoop();
- EXPECT_FALSE(maximize_button->is_snap_enabled());
- generator.ReleaseRightButton();
- generator.ReleaseLeftButton();
- EXPECT_FALSE(window_state->IsMaximized());
-}
-
-// Click a button of window maximize functionality.
-// If |snap_type| is SNAP_NONE the FrameMaximizeButton gets clicked, otherwise
-// the associated snap button.
-// |Window| is the window which owns the maximize button.
-// |maximize_button| is the FrameMaximizeButton which controls the window.
-void ClickMaxButton(
- ash::FrameMaximizeButton* maximize_button,
- aura::Window* window,
- SnapType snap_type) {
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100);
-
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos);
- generator.MoveMouseTo(off_pos);
- EXPECT_FALSE(maximize_button->maximizer());
- EXPECT_FALSE(maximize_button->phantom_window_open());
-
- // Move the mouse cursor over the button.
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
- EXPECT_FALSE(maximize_button->phantom_window_open());
-
- if (snap_type != SNAP_NONE) {
- gfx::Point left_max_pos = maximize_button->maximizer()->
- GetButtonForUnitTest(snap_type)->GetBoundsInScreen().CenterPoint();
- generator.MoveMouseTo(left_max_pos);
- EXPECT_TRUE(maximize_button->phantom_window_open());
- }
- // After pressing the left button the button should get triggered.
- generator.ClickLeftButton();
- EXPECT_FALSE(maximize_button->maximizer());
-}
-
-// Test that the restore from left/right maximize is properly done.
-TEST_F(FrameMaximizeButtonTest, MaximizeLeftRestore) {
- aura::Window* window = widget()->GetNativeWindow();
- gfx::Rect initial_bounds = widget()->GetWindowBoundsInScreen();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
-
- ClickMaxButton(maximize_button, window, SNAP_LEFT);
- wm::WindowState* window_state = wm::GetWindowState(window);
- // The window should not be maximized.
- EXPECT_FALSE(window_state->IsMaximized());
- // But the bounds should be different.
- gfx::Rect new_bounds = widget()->GetWindowBoundsInScreen();
- EXPECT_EQ(0, new_bounds.x());
- EXPECT_EQ(0, new_bounds.y());
-
- // Now click the same button again to see that it restores.
- ClickMaxButton(maximize_button, window, SNAP_LEFT);
- // But the bounds should be restored.
- new_bounds = widget()->GetWindowBoundsInScreen();
- EXPECT_EQ(new_bounds.x(), initial_bounds.x());
- EXPECT_EQ(new_bounds.y(), initial_bounds.x());
- EXPECT_EQ(new_bounds.width(), initial_bounds.width());
- EXPECT_EQ(new_bounds.height(), initial_bounds.height());
- // Make sure that there is no restore rectangle left.
- EXPECT_FALSE(window_state->HasRestoreBounds());
-}
-
-// Maximize, left/right maximize and then restore should works.
-TEST_F(FrameMaximizeButtonTest, MaximizeMaximizeLeftRestore) {
- aura::Window* window = widget()->GetNativeWindow();
- gfx::Rect initial_bounds = widget()->GetWindowBoundsInScreen();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
-
- ClickMaxButton(maximize_button, window, SNAP_NONE);
-
- wm::WindowState* window_state = wm::GetWindowState(window);
- EXPECT_TRUE(window_state->IsMaximized());
-
- ClickMaxButton(maximize_button, window, SNAP_LEFT);
- EXPECT_FALSE(window_state->IsMaximized());
- gfx::Rect new_bounds = widget()->GetWindowBoundsInScreen();
- EXPECT_EQ(0, new_bounds.x());
- EXPECT_EQ(0, new_bounds.y());
-
- // Now click the same button again to see that it restores.
- ClickMaxButton(maximize_button, window, SNAP_LEFT);
- RunAllPendingInMessageLoop();
- // But the bounds should be restored.
- new_bounds = widget()->GetWindowBoundsInScreen();
- EXPECT_EQ(new_bounds.x(), initial_bounds.x());
- EXPECT_EQ(new_bounds.y(), initial_bounds.x());
- EXPECT_EQ(new_bounds.width(), initial_bounds.width());
- EXPECT_EQ(new_bounds.height(), initial_bounds.height());
- // Make sure that there is no restore rectangle left.
- EXPECT_FALSE(window_state->HasRestoreBounds());
-}
-
-// Left/right maximize, maximize and then restore should work.
-TEST_F(FrameMaximizeButtonTest, MaximizeSnapLeftRestore) {
- aura::Window* window = widget()->GetNativeWindow();
- gfx::Rect initial_bounds = widget()->GetWindowBoundsInScreen();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
-
- ClickMaxButton(maximize_button, window, SNAP_LEFT);
-
- wm::WindowState* window_state = wm::GetWindowState(window);
- EXPECT_FALSE(window_state->IsMaximized());
-
- ClickMaxButton(maximize_button, window, SNAP_NONE);
- EXPECT_TRUE(window_state->IsMaximized());
-
- ClickMaxButton(maximize_button, window, SNAP_NONE);
- EXPECT_FALSE(window_state->IsMaximized());
- gfx::Rect new_bounds = widget()->GetWindowBoundsInScreen();
- EXPECT_EQ(new_bounds.x(), initial_bounds.x());
- EXPECT_EQ(new_bounds.y(), initial_bounds.x());
- EXPECT_EQ(new_bounds.width(), initial_bounds.width());
- EXPECT_EQ(new_bounds.height(), initial_bounds.height());
- // Make sure that there is no restore rectangle left.
- EXPECT_FALSE(window_state->HasRestoreBounds());
-}
-
-// Test that minimizing the window per keyboard closes the maximize bubble.
-TEST_F(FrameMaximizeButtonTest, MinimizePerKeyClosesBubble) {
- aura::Window* window = widget()->GetNativeWindow();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
-
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100);
-
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos);
- generator.MoveMouseTo(off_pos);
- EXPECT_FALSE(maximize_button->maximizer());
-
- // Move the mouse cursor over the maximize button.
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
-
- // We simulate the keystroke by calling minimizeWindow directly.
- wm::WindowState* window_state = wm::GetWindowState(window);
- window_state->Minimize();
-
- EXPECT_TRUE(window_state->IsMinimized());
- EXPECT_FALSE(maximize_button->maximizer());
-}
-
-// Tests that dragging down on the maximize button minimizes the window.
-TEST_F(FrameMaximizeButtonTest, MaximizeButtonDragDownMinimizes) {
- aura::Window* window = widget()->GetNativeWindow();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
-
- wm::WindowState* window_state = wm::GetWindowState(window);
- // Drag down on a maximized window.
- window_state->Maximize();
- EXPECT_TRUE(window_state->IsMaximized());
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x(), button_pos.y() + 100);
-
- aura::test::EventGenerator generator(window->GetRootWindow());
- generator.GestureScrollSequence(button_pos, off_pos,
- base::TimeDelta::FromMilliseconds(0), 1);
-
- EXPECT_TRUE(window_state->IsMinimized());
- EXPECT_FALSE(maximize_button->maximizer());
-
- // Drag down on a restored window.
- window_state->Restore();
-
- button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- off_pos = gfx::Point(button_pos.x(), button_pos.y() + 200);
- generator.GestureScrollSequence(button_pos, off_pos,
- base::TimeDelta::FromMilliseconds(10), 1);
- EXPECT_TRUE(window_state->IsMinimized());
- EXPECT_FALSE(maximize_button->maximizer());
-}
-
-// Tests that dragging Left and pressing ESC does properly abort.
-TEST_F(FrameMaximizeButtonTest, MaximizeButtonDragLeftEscapeExits) {
- aura::Window* window = widget()->GetNativeWindow();
- gfx::Rect initial_bounds = widget()->GetWindowBoundsInScreen();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
-
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() - button_pos.x() / 2, button_pos.y());
-
- const int kGestureSteps = 10;
- CancelCallbackHandler cancel_handler(kGestureSteps / 2, maximize_button);
- aura::test::EventGenerator generator(window->GetRootWindow());
- generator.GestureScrollSequenceWithCallback(
- button_pos,
- off_pos,
- base::TimeDelta::FromMilliseconds(0),
- kGestureSteps,
- base::Bind(&CancelCallbackHandler::CountedCancelCallback,
- base::Unretained(&cancel_handler)));
-
- // Check that there was no size change.
- EXPECT_EQ(widget()->GetWindowBoundsInScreen().size().ToString(),
- initial_bounds.size().ToString());
- // Check that there is no phantom window left open.
- EXPECT_FALSE(maximize_button->phantom_window_open());
-}
-
-// Test that hovering over a button in the maximizer bubble and switching
-// activation without moving the mouse properly aborts.
-TEST_F(FrameMaximizeButtonTest, LossOfActivationWhileMaximizeBubbleOpenAborts) {
- aura::Window* window = widget()->GetNativeWindow();
- ash::FrameMaximizeButton* maximize_button =
- FrameMaximizeButtonTest::maximize_button();
- maximize_button->set_bubble_appearance_delay_ms(0);
-
- gfx::Rect initial_bounds = window->GetBoundsInScreen();
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalShowState());
- EXPECT_TRUE(widget()->IsActive());
-
- // Move the mouse over the maximize button in order to bring up the maximizer
- // bubble.
- gfx::Point button_pos = maximize_button->GetBoundsInScreen().CenterPoint();
- gfx::Point off_pos(button_pos.x() + 100, button_pos.y() + 100);
- aura::test::EventGenerator generator(window->GetRootWindow(), off_pos);
- generator.MoveMouseTo(button_pos);
- EXPECT_TRUE(maximize_button->maximizer());
-
- // Hover the mouse over the left maximize button in the maximizer bubble to
- // show the phantom window.
- gfx::Point left_max_pos = maximize_button->maximizer()->
- GetButtonForUnitTest(SNAP_LEFT)->GetBoundsInScreen().CenterPoint();
- generator.MoveMouseTo(left_max_pos);
- EXPECT_TRUE(maximize_button->phantom_window_open());
-
- // Change activation by creating a new window. This could be done via an
- // accelerator. The root window takes ownership of |just_created|.
- views::Widget* just_created = views::Widget::CreateWindowWithContextAndBounds(
- NULL, widget()->GetNativeWindow(), gfx::Rect(100, 100));
- just_created->Show();
- just_created->Activate();
- EXPECT_FALSE(widget()->IsActive());
-
- // Test that we have properly reset the state of the now inactive window.
- EXPECT_FALSE(maximize_button->maximizer());
- EXPECT_FALSE(maximize_button->phantom_window_open());
- EXPECT_TRUE(wm::GetWindowState(window)->IsNormalShowState());
- EXPECT_EQ(initial_bounds.ToString(), window->GetBoundsInScreen().ToString());
-}
-
-} // namespace test
-} // namespace ash