diff options
author | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-31 08:32:19 +0000 |
---|---|---|
committer | mnissler@chromium.org <mnissler@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-05-31 08:32:19 +0000 |
commit | 5396c21832b94c154155f0f4e7dd3f3a10fb1b4c (patch) | |
tree | c0ad0a35927ffa7e41476cdaacd376594a73ed5a /ui/views | |
parent | 287f0417b6f3a14cfde4673e2c61d53f37fb9bab (diff) | |
download | chromium_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.cc | 1 | ||||
-rw-r--r-- | ui/views/bubble/bubble_frame_view.cc | 14 | ||||
-rw-r--r-- | ui/views/bubble/bubble_frame_view_unittest.cc | 74 |
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. |