 Chromium Code Reviews
 Chromium Code Reviews Issue 104573003:
  Make ComboboxListener work around being deleted from OnSelectedIndexChanged().  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src
    
  
    Issue 104573003:
  Make ComboboxListener work around being deleted from OnSelectedIndexChanged().  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src| Index: ui/views/controls/combobox/combobox_unittest.cc | 
| diff --git a/ui/views/controls/combobox/combobox_unittest.cc b/ui/views/controls/combobox/combobox_unittest.cc | 
| index 3637c087b1db6a7dd602668317659201339920e1..9e9e7ccf7651984bba7bec88cde7c39327afa182 100644 | 
| --- a/ui/views/controls/combobox/combobox_unittest.cc | 
| +++ b/ui/views/controls/combobox/combobox_unittest.cc | 
| @@ -10,6 +10,7 @@ | 
| #include "ui/base/models/combobox_model.h" | 
| #include "ui/events/event.h" | 
| #include "ui/events/keycodes/keyboard_codes.h" | 
| +#include "ui/views/controls/combobox/combobox_listener.h" | 
| #include "ui/views/ime/mock_input_method.h" | 
| #include "ui/views/test/views_test_base.h" | 
| #include "ui/views/widget/widget.h" | 
| @@ -340,4 +341,30 @@ TEST_F(ComboboxTest, SelectValue) { | 
| EXPECT_EQ(1, combobox_->selected_index()); | 
| } | 
| +class EvilListener : public ComboboxListener { | 
| + public: | 
| + EvilListener() : deleted_(false) {}; | 
| + virtual ~EvilListener() {}; | 
| + | 
| + // ComboboxListener: | 
| + virtual void OnSelectedIndexChanged(Combobox* combobox) OVERRIDE { | 
| + delete combobox; | 
| + deleted_ = true; | 
| + } | 
| + | 
| + bool deleted() const { return deleted_; } | 
| + | 
| + private: | 
| + bool deleted_; | 
| +}; | 
| 
sky
2013/12/05 04:07:30
nit: DISALLOW...
 
Dan Beam
2013/12/05 17:05:33
Done.
 | 
| + | 
| +TEST_F(ComboboxTest, ListenerHandlesDelete) { | 
| + TestComboboxModel model; | 
| + TestCombobox* combobox = new TestCombobox(&model); // Deleted on change. | 
| + EvilListener evil_listener; | 
| + combobox->set_listener(&evil_listener); | 
| + ASSERT_NO_FATAL_FAILURE(combobox->ExecuteCommand(2)); | 
| + EXPECT_TRUE(evil_listener.deleted()); | 
| +} | 
| + | 
| } // namespace views |