OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "ui/base/events/event_utils.h" | 10 #include "ui/base/events/event_utils.h" |
(...skipping 1697 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1708 set_views_delegate(delegate); // ViewsTestBase takes ownership. | 1708 set_views_delegate(delegate); // ViewsTestBase takes ownership. |
1709 scoped_ptr<Widget> widget(new Widget); | 1709 scoped_ptr<Widget> widget(new Widget); |
1710 Widget::InitParams params = | 1710 Widget::InitParams params = |
1711 CreateParams(views::Widget::InitParams::TYPE_POPUP); | 1711 CreateParams(views::Widget::InitParams::TYPE_POPUP); |
1712 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 1712 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
1713 widget->Init(params); | 1713 widget->Init(params); |
1714 EXPECT_TRUE(delegate->on_before_init_called()); | 1714 EXPECT_TRUE(delegate->on_before_init_called()); |
1715 EXPECT_TRUE(delegate->is_top_level()); | 1715 EXPECT_TRUE(delegate->is_top_level()); |
1716 } | 1716 } |
1717 | 1717 |
| 1718 // A scumbag View that deletes its owning widget OnMousePressed. |
| 1719 class WidgetDeleterView : public View { |
| 1720 public: |
| 1721 WidgetDeleterView() : View() {} |
| 1722 |
| 1723 // Overridden from View. |
| 1724 bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE { |
| 1725 delete GetWidget(); |
| 1726 return true; |
| 1727 } |
| 1728 |
| 1729 private: |
| 1730 DISALLOW_COPY_AND_ASSIGN(WidgetDeleterView); |
| 1731 }; |
| 1732 |
| 1733 TEST_F(WidgetTest, TestWidgetDeletedInOnMousePressed) { |
| 1734 Widget* widget = new Widget; |
| 1735 Widget::InitParams params = |
| 1736 CreateParams(views::Widget::InitParams::TYPE_POPUP); |
| 1737 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 1738 widget->Init(params); |
| 1739 |
| 1740 widget->SetContentsView(new WidgetDeleterView); |
| 1741 |
| 1742 widget->SetSize(gfx::Size(100, 100)); |
| 1743 widget->Show(); |
| 1744 |
| 1745 gfx::Point click_location(45, 15); |
| 1746 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, click_location, click_location, |
| 1747 ui::EF_LEFT_MOUSE_BUTTON); |
| 1748 widget->OnMouseEvent(&press); |
| 1749 |
| 1750 // Yay we did not crash! |
| 1751 } |
| 1752 |
1718 } // namespace | 1753 } // namespace |
1719 } // namespace views | 1754 } // namespace views |
OLD | NEW |