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 1594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1605 set_views_delegate(delegate); // ViewsTestBase takes ownership. | 1605 set_views_delegate(delegate); // ViewsTestBase takes ownership. |
1606 scoped_ptr<Widget> widget(new Widget); | 1606 scoped_ptr<Widget> widget(new Widget); |
1607 Widget::InitParams params = | 1607 Widget::InitParams params = |
1608 CreateParams(views::Widget::InitParams::TYPE_POPUP); | 1608 CreateParams(views::Widget::InitParams::TYPE_POPUP); |
1609 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 1609 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
1610 widget->Init(params); | 1610 widget->Init(params); |
1611 EXPECT_TRUE(delegate->on_before_init_called()); | 1611 EXPECT_TRUE(delegate->on_before_init_called()); |
1612 EXPECT_TRUE(delegate->is_top_level()); | 1612 EXPECT_TRUE(delegate->is_top_level()); |
1613 } | 1613 } |
1614 | 1614 |
| 1615 // A scumbag View that deletes its owning widget OnMousePressed. |
| 1616 class WidgetDeleterView : public View { |
| 1617 public: |
| 1618 WidgetDeleterView() : View() { } |
| 1619 |
| 1620 // Overridden from View. |
| 1621 bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE { |
| 1622 delete GetWidget(); |
| 1623 return true; |
| 1624 } |
| 1625 |
| 1626 private: |
| 1627 DISALLOW_COPY_AND_ASSIGN(WidgetDeleterView); |
| 1628 }; |
| 1629 |
| 1630 TEST_F(WidgetTest, TestWidgetDeletedInOnMousePressed) { |
| 1631 Widget* widget = new Widget; |
| 1632 Widget::InitParams params = |
| 1633 CreateParams(views::Widget::InitParams::TYPE_POPUP); |
| 1634 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 1635 widget->Init(params); |
| 1636 |
| 1637 widget->SetContentsView(new WidgetDeleterView); |
| 1638 |
| 1639 widget->SetSize(gfx::Size(100, 100)); |
| 1640 widget->Show(); |
| 1641 |
| 1642 gfx::Point click_location(45, 15); |
| 1643 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, click_location, click_location, |
| 1644 ui::EF_LEFT_MOUSE_BUTTON); |
| 1645 widget->OnMouseEvent(&press); |
| 1646 |
| 1647 // Yay we did not crash! |
| 1648 } |
| 1649 |
1615 } // namespace | 1650 } // namespace |
1616 } // namespace views | 1651 } // namespace views |
OLD | NEW |