| 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 |