summaryrefslogtreecommitdiffstats
path: root/ui/views
diff options
context:
space:
mode:
authormnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-31 08:32:19 +0000
committermnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-05-31 08:32:19 +0000
commit5396c21832b94c154155f0f4e7dd3f3a10fb1b4c (patch)
treec0ad0a35927ffa7e41476cdaacd376594a73ed5a /ui/views
parent287f0417b6f3a14cfde4673e2c61d53f37fb9bab (diff)
downloadchromium_src-5396c21832b94c154155f0f4e7dd3f3a10fb1b4c.zip
chromium_src-5396c21832b94c154155f0f4e7dd3f3a10fb1b4c.tar.gz
chromium_src-5396c21832b94c154155f0f4e7dd3f3a10fb1b4c.tar.bz2
Revert "Restore Views dialog dragging and titlebar system menus."
Several Win bots are failing, and ASAN found a use-after-free: http://build.chromium.org/p/chromium.win/buildstatus?builder=Win%207%20Tests%20x64%20%283%29&number=6194 http://build.chromium.org/p/chromium.win/builders/Win7%20Tests%20%28dbg%29%281%29/builds/19257/steps/views_unittests/logs/stdio http://build.chromium.org/p/chromium.memory/builders/Linux%20Chromium%20OS%20ASAN%20Tests%20%281%29/builds/8262/steps/views_unittests/logs/stdio BUG=chromium:244676 TBR=msw@chromium.org Review URL: https://codereview.chromium.org/15700010 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@203372 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui/views')
-rw-r--r--ui/views/bubble/bubble_delegate.cc1
-rw-r--r--ui/views/bubble/bubble_frame_view.cc14
-rw-r--r--ui/views/bubble/bubble_frame_view_unittest.cc74
3 files changed, 26 insertions, 63 deletions
diff --git a/ui/views/bubble/bubble_delegate.cc b/ui/views/bubble/bubble_delegate.cc
index e262990..706475f 100644
--- a/ui/views/bubble/bubble_delegate.cc
+++ b/ui/views/bubble/bubble_delegate.cc
@@ -61,7 +61,6 @@ class BubbleBorderDelegate : public WidgetDelegate,
}
// WidgetDelegate overrides:
- virtual bool CanResize() const OVERRIDE { return bubble_->CanResize(); }
virtual bool CanActivate() const OVERRIDE { return false; }
virtual void DeleteDelegate() OVERRIDE { delete this; }
virtual Widget* GetWidget() OVERRIDE { return widget_; }
diff --git a/ui/views/bubble/bubble_frame_view.cc b/ui/views/bubble/bubble_frame_view.cc
index ac9af32..a6e56ad 100644
--- a/ui/views/bubble/bubble_frame_view.cc
+++ b/ui/views/bubble/bubble_frame_view.cc
@@ -94,16 +94,14 @@ int BubbleFrameView::NonClientHitTest(const gfx::Point& point) {
return HTNOWHERE;
if (close_->visible() && close_->GetMirroredBounds().Contains(point))
return HTCLOSE;
+ if (!GetWidget()->widget_delegate()->CanResize())
+ return GetWidget()->client_view()->NonClientHitTest(point);
+
const int size = bubble_border_->GetBorderThickness() + 4;
- const int sizes = GetHTComponentForFrame(point, size, size, size, size, true);
- if (GetWidget()->widget_delegate()->CanResize() && sizes != HTNOWHERE)
- return sizes;
- // Allow dialogs with bubble frames to be dragged and show the system menu.
- const int move = std::max(title_->bounds().bottom(), size + 4);
- if (GetWidget()->widget_delegate()->AsDialogDelegate() != NULL &&
- GetHTComponentForFrame(point, move, move, move, move, true) != HTNOWHERE)
+ const int hit = GetHTComponentForFrame(point, size, size, size, size, true);
+ if (hit == HTNOWHERE && point.y() < title_->bounds().bottom())
return HTCAPTION;
- return GetWidget()->client_view()->NonClientHitTest(point);
+ return hit;
}
void BubbleFrameView::GetWindowMask(const gfx::Size& size,
diff --git a/ui/views/bubble/bubble_frame_view_unittest.cc b/ui/views/bubble/bubble_frame_view_unittest.cc
index ef41b19..bcb853f 100644
--- a/ui/views/bubble/bubble_frame_view_unittest.cc
+++ b/ui/views/bubble/bubble_frame_view_unittest.cc
@@ -22,48 +22,28 @@ const int kBubbleHeight = 200;
const SkColor kColor = SK_ColorRED;
const int kMargin = 6;
-class TestBubbleDelegateView : public BubbleDelegateView {
+class SizedBubbleDelegateView : public BubbleDelegateView {
public:
- explicit TestBubbleDelegateView(View* anchor_view);
- virtual ~TestBubbleDelegateView();
+ SizedBubbleDelegateView(View* anchor_view);
+ virtual ~SizedBubbleDelegateView();
// View overrides:
virtual gfx::Size GetPreferredSize() OVERRIDE;
- // BubbleDelegateView overrides:
- virtual bool CanResize() const OVERRIDE;
- virtual DialogDelegate* AsDialogDelegate() OVERRIDE;
-
- void set_can_resize(bool can_resize) { can_resize_ = can_resize; }
-
private:
- bool can_resize_;
-
- DISALLOW_COPY_AND_ASSIGN(TestBubbleDelegateView);
+ DISALLOW_COPY_AND_ASSIGN(SizedBubbleDelegateView);
};
-TestBubbleDelegateView::TestBubbleDelegateView(View* anchor_view)
- : BubbleDelegateView(anchor_view, BubbleBorder::TOP_LEFT),
- can_resize_(false) {
+SizedBubbleDelegateView::SizedBubbleDelegateView(View* anchor_view)
+ : BubbleDelegateView(anchor_view, BubbleBorder::TOP_LEFT) {
}
-TestBubbleDelegateView::~TestBubbleDelegateView() {}
+SizedBubbleDelegateView::~SizedBubbleDelegateView() {}
-gfx::Size TestBubbleDelegateView::GetPreferredSize() {
+gfx::Size SizedBubbleDelegateView::GetPreferredSize() {
return gfx::Size(kBubbleWidth, kBubbleHeight);
}
-bool TestBubbleDelegateView::CanResize() const {
- return can_resize_;
-}
-
-DialogDelegate* TestBubbleDelegateView::AsDialogDelegate() {
- // This hack lets the bubble frame view be tested as its used with dialogs.
- // In particular, this is checked while hit-testing for the ability to drag.
- // The value should never be dereferenced in any of the tests below.
- return reinterpret_cast<DialogDelegate*>(1);
-}
-
class TestBubbleFrameView : public BubbleFrameView {
public:
TestBubbleFrameView();
@@ -105,38 +85,24 @@ TEST_F(BubbleFrameViewTest, GetBoundsForClientView) {
}
TEST_F(BubbleFrameViewTest, NonClientHitTest) {
- // Create the anchor view, its parent widget is needed on Aura.
+ // Create the anchor and parent widgets.
Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_WINDOW);
params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
scoped_ptr<Widget> anchor_widget(new Widget);
anchor_widget->Init(params);
anchor_widget->Show();
- TestBubbleDelegateView bubble(anchor_widget->GetContentsView());
- BubbleDelegateView::CreateBubble(&bubble);
- BubbleFrameView* frame = bubble.GetBubbleFrameView();
- const int border = frame->bubble_border()->GetBorderThickness();
-
- struct {
- const int point;
- const int cannot_resize_hit;
- const int can_resize_hit;
- } cases[] = {
- { border, HTCAPTION, HTTOPLEFT },
- { border + 3, HTCAPTION, HTTOPLEFT },
- { border + 4, HTCAPTION, HTCAPTION },
- { border + 8, HTCAPTION, HTCAPTION },
- { border + 50, HTCLIENT, HTCLIENT },
- { 1000, HTNOWHERE, HTNOWHERE },
- };
-
- for (size_t i = 0; i < ARRAYSIZE_UNSAFE(cases); ++i) {
- gfx::Point point(cases[i].point, cases[i].point);
- bubble.set_can_resize(false);
- EXPECT_EQ(cases[i].cannot_resize_hit, frame->NonClientHitTest(point));
- bubble.set_can_resize(true);
- EXPECT_EQ(cases[i].can_resize_hit, frame->NonClientHitTest(point));
- }
+ BubbleDelegateView* delegate =
+ new SizedBubbleDelegateView(anchor_widget->GetContentsView());
+ Widget* widget(BubbleDelegateView::CreateBubble(delegate));
+ widget->Show();
+ gfx::Point kPtInBound(100, 100);
+ gfx::Point kPtOutsideBound(1000, 1000);
+ BubbleFrameView* bubble_frame_view = delegate->GetBubbleFrameView();
+ EXPECT_EQ(HTCLIENT, bubble_frame_view->NonClientHitTest(kPtInBound));
+ EXPECT_EQ(HTNOWHERE, bubble_frame_view->NonClientHitTest(kPtOutsideBound));
+ widget->CloseNow();
+ RunPendingMessages();
}
// Tests that the arrow is mirrored as needed to better fit the screen.