summaryrefslogtreecommitdiffstats
path: root/ash
diff options
context:
space:
mode:
authorpkotwicz <pkotwicz@chromium.org>2014-10-01 16:03:01 -0700
committerCommit bot <commit-bot@chromium.org>2014-10-01 23:03:09 +0000
commitffacfd8c2841480e1e5775c124b63b351bddca69 (patch)
tree13be1a52b0eb909b63029b47c3ae1f8248907d5f /ash
parent8c2c1ee0527a1becd6728b1ea7dae406062035f7 (diff)
downloadchromium_src-ffacfd8c2841480e1e5775c124b63b351bddca69.zip
chromium_src-ffacfd8c2841480e1e5775c124b63b351bddca69.tar.gz
chromium_src-ffacfd8c2841480e1e5775c124b63b351bddca69.tar.bz2
Make WindowState::CanMinimize() take into account WidgetDelegate::CanMinimize()
This has the side effect of disallowing minimizing bubbles (e.g. the bookmark bubble) via a gesture BUG=328241 TEST=Manual, see bug Review URL: https://codereview.chromium.org/613563002 Cr-Commit-Position: refs/heads/master@{#297732}
Diffstat (limited to 'ash')
-rw-r--r--ash/frame/caption_buttons/frame_caption_button_container_view.cc5
-rw-r--r--ash/frame/caption_buttons/frame_caption_button_container_view.h12
-rw-r--r--ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc40
-rw-r--r--ash/frame/caption_buttons/frame_size_button_unittest.cc4
-rw-r--r--ash/frame/custom_frame_view_ash.cc7
-rw-r--r--ash/frame/default_header_painter_unittest.cc3
-rw-r--r--ash/test/ash_test_base.cc1
-rw-r--r--ash/wm/panels/panel_frame_view.cc3
-rw-r--r--ash/wm/system_gesture_event_filter_unittest.cc1
-rw-r--r--ash/wm/toplevel_window_event_handler_unittest.cc17
-rw-r--r--ash/wm/window_state.cc10
11 files changed, 36 insertions, 67 deletions
diff --git a/ash/frame/caption_buttons/frame_caption_button_container_view.cc b/ash/frame/caption_buttons/frame_caption_button_container_view.cc
index dd9e3eb..e1672d3 100644
--- a/ash/frame/caption_buttons/frame_caption_button_container_view.cc
+++ b/ash/frame/caption_buttons/frame_caption_button_container_view.cc
@@ -109,8 +109,7 @@ const char FrameCaptionButtonContainerView::kViewClassName[] =
"FrameCaptionButtonContainerView";
FrameCaptionButtonContainerView::FrameCaptionButtonContainerView(
- views::Widget* frame,
- MinimizeAllowed minimize_allowed)
+ views::Widget* frame)
: frame_(frame),
minimize_button_(NULL),
size_button_(NULL),
@@ -127,7 +126,7 @@ FrameCaptionButtonContainerView::FrameCaptionButtonContainerView(
minimize_button_ = new FrameCaptionButton(this, CAPTION_BUTTON_ICON_MINIMIZE);
minimize_button_->SetAccessibleName(
l10n_util::GetStringUTF16(IDS_APP_ACCNAME_MINIMIZE));
- minimize_button_->SetVisible(minimize_allowed == MINIMIZE_ALLOWED);
+ minimize_button_->SetVisible(frame_->widget_delegate()->CanMinimize());
AddChildView(minimize_button_);
size_button_ = new FrameSizeButton(this, frame, this);
diff --git a/ash/frame/caption_buttons/frame_caption_button_container_view.h b/ash/frame/caption_buttons/frame_caption_button_container_view.h
index 658df05..1314f38 100644
--- a/ash/frame/caption_buttons/frame_caption_button_container_view.h
+++ b/ash/frame/caption_buttons/frame_caption_button_container_view.h
@@ -33,18 +33,8 @@ class ASH_EXPORT FrameCaptionButtonContainerView
public:
static const char kViewClassName[];
- // Whether the frame can be minimized (either via the maximize/restore button
- // or via a dedicated button).
- enum MinimizeAllowed {
- MINIMIZE_ALLOWED,
- MINIMIZE_DISALLOWED
- };
-
// |frame| is the views::Widget that the caption buttons act on.
- // |minimize_allowed| indicates whether the frame can be minimized (either via
- // the maximize/restore button or via a dedicated button).
- FrameCaptionButtonContainerView(views::Widget* frame,
- MinimizeAllowed minimize_allowed);
+ explicit FrameCaptionButtonContainerView(views::Widget* frame);
virtual ~FrameCaptionButtonContainerView();
// For testing.
diff --git a/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc b/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc
index 682883c..dc9e78a 100644
--- a/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc
+++ b/ash/frame/caption_buttons/frame_caption_button_container_view_unittest.cc
@@ -19,8 +19,8 @@ namespace {
class TestWidgetDelegate : public views::WidgetDelegateView {
public:
- explicit TestWidgetDelegate(bool can_maximize) : can_maximize_(can_maximize) {
- }
+ TestWidgetDelegate(bool can_maximize, bool can_minimize)
+ : can_maximize_(can_maximize), can_minimize_(can_minimize) {}
virtual ~TestWidgetDelegate() {
}
@@ -29,11 +29,12 @@ class TestWidgetDelegate : public views::WidgetDelegateView {
}
virtual bool CanMinimize() const OVERRIDE {
- return can_maximize_;
+ return can_minimize_;
}
private:
bool can_maximize_;
+ bool can_minimize_;
DISALLOW_COPY_AND_ASSIGN(TestWidgetDelegate);
};
@@ -47,6 +48,11 @@ class FrameCaptionButtonContainerViewTest : public ash::test::AshTestBase {
MAXIMIZE_DISALLOWED
};
+ enum MinimizeAllowed {
+ MINIMIZE_ALLOWED,
+ MINIMIZE_DISALLOWED
+ };
+
FrameCaptionButtonContainerViewTest() {
}
@@ -56,11 +62,13 @@ class FrameCaptionButtonContainerViewTest : public ash::test::AshTestBase {
// Creates a widget which allows maximizing based on |maximize_allowed|.
// The caller takes ownership of the returned widget.
views::Widget* CreateTestWidget(
- MaximizeAllowed maximize_allowed) WARN_UNUSED_RESULT {
+ MaximizeAllowed maximize_allowed,
+ MinimizeAllowed minimize_allowed) WARN_UNUSED_RESULT {
views::Widget* widget = new views::Widget;
views::Widget::InitParams params;
params.delegate = new TestWidgetDelegate(
- maximize_allowed == MAXIMIZE_ALLOWED);
+ maximize_allowed == MAXIMIZE_ALLOWED,
+ minimize_allowed == MINIMIZE_ALLOWED);
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
params.context = CurrentContext();
widget->Init(params);
@@ -110,10 +118,8 @@ class FrameCaptionButtonContainerViewTest : public ash::test::AshTestBase {
TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) {
// All the buttons should be visible when minimizing and maximizing are
// allowed.
- scoped_ptr<views::Widget> widget_can_maximize(
- CreateTestWidget(MAXIMIZE_ALLOWED));
- FrameCaptionButtonContainerView container1(widget_can_maximize.get(),
- FrameCaptionButtonContainerView::MINIMIZE_ALLOWED);
+ FrameCaptionButtonContainerView container1(
+ CreateTestWidget(MAXIMIZE_ALLOWED, MINIMIZE_ALLOWED));
SetMockImages(&container1);
container1.Layout();
FrameCaptionButtonContainerView::TestApi t1(&container1);
@@ -125,10 +131,8 @@ TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) {
// The minimize button should be visible when minimizing is allowed but
// maximizing is disallowed.
- scoped_ptr<views::Widget> widget_cannot_maximize(
- CreateTestWidget(MAXIMIZE_DISALLOWED));
- FrameCaptionButtonContainerView container2(widget_cannot_maximize.get(),
- FrameCaptionButtonContainerView::MINIMIZE_ALLOWED);
+ FrameCaptionButtonContainerView container2(
+ CreateTestWidget(MAXIMIZE_DISALLOWED, MINIMIZE_ALLOWED));
SetMockImages(&container2);
container2.Layout();
FrameCaptionButtonContainerView::TestApi t2(&container2);
@@ -140,8 +144,8 @@ TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) {
// Neither the minimize button nor the size button should be visible when
// neither minimizing nor maximizing are allowed.
- FrameCaptionButtonContainerView container3(widget_cannot_maximize.get(),
- FrameCaptionButtonContainerView::MINIMIZE_DISALLOWED);
+ FrameCaptionButtonContainerView container3(
+ CreateTestWidget(MAXIMIZE_DISALLOWED, MINIMIZE_DISALLOWED));
SetMockImages(&container3);
container3.Layout();
FrameCaptionButtonContainerView::TestApi t3(&container3);
@@ -156,10 +160,8 @@ TEST_F(FrameCaptionButtonContainerViewTest, ButtonVisibility) {
// correct placement of the buttons.
TEST_F(FrameCaptionButtonContainerViewTest,
TestUpdateSizeButtonVisibilityAnimation) {
- scoped_ptr<views::Widget> widget_can_maximize(
- CreateTestWidget(MAXIMIZE_ALLOWED));
- FrameCaptionButtonContainerView container(widget_can_maximize.get(),
- FrameCaptionButtonContainerView::MINIMIZE_ALLOWED);
+ FrameCaptionButtonContainerView container(
+ CreateTestWidget(MAXIMIZE_ALLOWED, MINIMIZE_ALLOWED));
SetMockImages(&container);
container.SetBoundsRect(gfx::Rect(container.GetPreferredSize()));
container.Layout();
diff --git a/ash/frame/caption_buttons/frame_size_button_unittest.cc b/ash/frame/caption_buttons/frame_size_button_unittest.cc
index 8736308..15cfc55 100644
--- a/ash/frame/caption_buttons/frame_size_button_unittest.cc
+++ b/ash/frame/caption_buttons/frame_size_button_unittest.cc
@@ -62,8 +62,8 @@ class TestWidgetDelegate : public views::WidgetDelegateView {
virtual void ViewHierarchyChanged(
const ViewHierarchyChangedDetails& details) OVERRIDE {
if (details.is_add && details.child == this) {
- caption_button_container_ = new FrameCaptionButtonContainerView(
- GetWidget(), FrameCaptionButtonContainerView::MINIMIZE_ALLOWED);
+ caption_button_container_ =
+ new FrameCaptionButtonContainerView(GetWidget());
// Set arbitrary images for the container's buttons so that the buttons
// have non-empty sizes.
diff --git a/ash/frame/custom_frame_view_ash.cc b/ash/frame/custom_frame_view_ash.cc
index f4422fc..169e8ae 100644
--- a/ash/frame/custom_frame_view_ash.cc
+++ b/ash/frame/custom_frame_view_ash.cc
@@ -202,12 +202,7 @@ CustomFrameViewAsh::HeaderView::HeaderView(views::Widget* frame)
avatar_icon_(NULL),
caption_button_container_(NULL),
fullscreen_visible_fraction_(0) {
- FrameCaptionButtonContainerView::MinimizeAllowed minimize_allowed =
- frame_->widget_delegate()->CanMinimize() ?
- FrameCaptionButtonContainerView::MINIMIZE_ALLOWED :
- FrameCaptionButtonContainerView::MINIMIZE_DISALLOWED;
- caption_button_container_ = new FrameCaptionButtonContainerView(frame_,
- minimize_allowed);
+ caption_button_container_ = new FrameCaptionButtonContainerView(frame_);
caption_button_container_->UpdateSizeButtonVisibility();
AddChildView(caption_button_container_);
diff --git a/ash/frame/default_header_painter_unittest.cc b/ash/frame/default_header_painter_unittest.cc
index 41ec4ff..c4e2106 100644
--- a/ash/frame/default_header_painter_unittest.cc
+++ b/ash/frame/default_header_painter_unittest.cc
@@ -36,8 +36,7 @@ class DefaultHeaderPainterTest : public ash::test::AshTestBase {
// Ensure the title text is vertically aligned with the window icon.
TEST_F(DefaultHeaderPainterTest, TitleIconAlignment) {
scoped_ptr<Widget> w(CreateTestWidget());
- ash::FrameCaptionButtonContainerView container(w.get(),
- ash::FrameCaptionButtonContainerView::MINIMIZE_ALLOWED);
+ ash::FrameCaptionButtonContainerView container(w.get());
views::StaticSizedView window_icon(gfx::Size(16, 16));
window_icon.SetBounds(0, 0, 16, 16);
w->SetBounds(gfx::Rect(0, 0, 500, 500));
diff --git a/ash/test/ash_test_base.cc b/ash/test/ash_test_base.cc
index e6ddbcf..48c18ee 100644
--- a/ash/test/ash_test_base.cc
+++ b/ash/test/ash_test_base.cc
@@ -261,6 +261,7 @@ aura::Window* AshTestBase::CreateTestWindowInShellWithDelegateAndType(
aura::client::ParentWindowWithContext(window, root, bounds);
}
window->SetProperty(aura::client::kCanMaximizeKey, true);
+ window->SetProperty(aura::client::kCanMinimizeKey, true);
return window;
}
diff --git a/ash/wm/panels/panel_frame_view.cc b/ash/wm/panels/panel_frame_view.cc
index 4f27091..733af9a 100644
--- a/ash/wm/panels/panel_frame_view.cc
+++ b/ash/wm/panels/panel_frame_view.cc
@@ -39,8 +39,7 @@ const char* PanelFrameView::GetClassName() const {
void PanelFrameView::InitHeaderPainter() {
header_painter_.reset(new DefaultHeaderPainter);
- caption_button_container_ = new FrameCaptionButtonContainerView(frame_,
- FrameCaptionButtonContainerView::MINIMIZE_ALLOWED);
+ caption_button_container_ = new FrameCaptionButtonContainerView(frame_);
AddChildView(caption_button_container_);
header_painter_->Init(frame_, this, caption_button_container_);
diff --git a/ash/wm/system_gesture_event_filter_unittest.cc b/ash/wm/system_gesture_event_filter_unittest.cc
index b2472b0..4000a63 100644
--- a/ash/wm/system_gesture_event_filter_unittest.cc
+++ b/ash/wm/system_gesture_event_filter_unittest.cc
@@ -100,6 +100,7 @@ class MaxSizeWidgetDelegate : public views::WidgetDelegateView {
private:
virtual bool CanResize() const OVERRIDE { return true; }
virtual bool CanMaximize() const OVERRIDE { return false; }
+ virtual bool CanMinimize() const OVERRIDE { return true; }
virtual void DeleteDelegate() OVERRIDE { delete this; }
virtual views::NonClientFrameView* CreateNonClientFrameView(
views::Widget* widget) OVERRIDE {
diff --git a/ash/wm/toplevel_window_event_handler_unittest.cc b/ash/wm/toplevel_window_event_handler_unittest.cc
index 7c4f4d6..7f3782a 100644
--- a/ash/wm/toplevel_window_event_handler_unittest.cc
+++ b/ash/wm/toplevel_window_event_handler_unittest.cc
@@ -8,7 +8,6 @@
#include "ash/shell.h"
#include "ash/shell_window_ids.h"
#include "ash/test/ash_test_base.h"
-#include "ash/wm/lock_state_controller.h"
#include "ash/wm/resize_shadow.h"
#include "ash/wm/resize_shadow_controller.h"
#include "ash/wm/window_state.h"
@@ -468,24 +467,16 @@ TEST_F(ToplevelWindowEventHandlerTest, GestureDrag) {
window_state->GetRestoreBoundsInScreen().ToString());
}
-// Tests that a gesture cannot minimize a window in login/lock screen.
-TEST_F(ToplevelWindowEventHandlerTest, GestureDragMinimizeLoginScreen) {
- LockStateController* state_controller =
- Shell::GetInstance()->lock_state_controller();
- state_controller->OnLoginStateChanged(user::LOGGED_IN_NONE);
- state_controller->OnLockStateChanged(false);
- SetUserLoggedIn(false);
-
+// Tests that a gesture cannot minimize an unminimizeable window.
+TEST_F(ToplevelWindowEventHandlerTest,
+ GestureAttemptMinimizeUnminimizeableWindow) {
scoped_ptr<aura::Window> target(CreateWindow(HTCAPTION));
- aura::Window* lock =
- RootWindowController::ForWindow(target.get())
- ->GetContainer(kShellWindowId_LockSystemModalContainer);
- lock->AddChild(target.get());
ui::test::EventGenerator generator(Shell::GetPrimaryRootWindow(),
target.get());
gfx::Rect old_bounds = target->bounds();
gfx::Point location(5, 5);
target->SetProperty(aura::client::kCanMaximizeKey, true);
+ target->SetProperty(aura::client::kCanMinimizeKey, false);
gfx::Point end = location;
end.Offset(0, 100);
diff --git a/ash/wm/window_state.cc b/ash/wm/window_state.cc
index e95dc40..827fa1a 100644
--- a/ash/wm/window_state.cc
+++ b/ash/wm/window_state.cc
@@ -153,15 +153,7 @@ bool WindowState::CanMaximize() const {
}
bool WindowState::CanMinimize() const {
- RootWindowController* controller = RootWindowController::ForWindow(window_);
- if (!controller)
- return false;
- aura::Window* lockscreen =
- controller->GetContainer(kShellWindowId_LockScreenContainersContainer);
- if (lockscreen->Contains(window_))
- return false;
-
- return true;
+ return window()->GetProperty(aura::client::kCanMinimizeKey);
}
bool WindowState::CanResize() const {