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/gfx/native_widget_types.h" | 10 #include "ui/gfx/native_widget_types.h" |
(...skipping 808 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
819 toplevel->CloseNow(); | 819 toplevel->CloseNow(); |
820 | 820 |
821 // The NativeWidget won't be deleted until after a return to the message loop | 821 // The NativeWidget won't be deleted until after a return to the message loop |
822 // so we have to run pending messages before testing the destruction status. | 822 // so we have to run pending messages before testing the destruction status. |
823 RunPendingMessages(); | 823 RunPendingMessages(); |
824 | 824 |
825 EXPECT_TRUE(state.widget_deleted); | 825 EXPECT_TRUE(state.widget_deleted); |
826 EXPECT_TRUE(state.native_widget_deleted); | 826 EXPECT_TRUE(state.native_widget_deleted); |
827 } | 827 } |
828 | 828 |
| 829 // Widget owns its NativeWidget and has a WidgetDelegateView as its contents. |
| 830 TEST_F(WidgetOwnershipTest, |
| 831 Ownership_WidgetOwnsNativeWidgetWithWithWidgetDelegateView) { |
| 832 OwnershipTestState state; |
| 833 |
| 834 WidgetDelegateView* delegate_view = new WidgetDelegateView; |
| 835 |
| 836 scoped_ptr<Widget> widget(new OwnershipTestWidget(&state)); |
| 837 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); |
| 838 params.native_widget = |
| 839 new OwnershipTestNativeWidgetPlatform(widget.get(), &state); |
| 840 params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 841 params.delegate = delegate_view; |
| 842 widget->Init(params); |
| 843 widget->SetContentsView(delegate_view); |
| 844 |
| 845 // Now delete the Widget. There should be no crash or use-after-free. |
| 846 widget.reset(); |
| 847 |
| 848 EXPECT_TRUE(state.widget_deleted); |
| 849 EXPECT_TRUE(state.native_widget_deleted); |
| 850 } |
| 851 |
829 //////////////////////////////////////////////////////////////////////////////// | 852 //////////////////////////////////////////////////////////////////////////////// |
830 // Widget observer tests. | 853 // Widget observer tests. |
831 // | 854 // |
832 | 855 |
833 class WidgetObserverTest : public WidgetTest, public WidgetObserver { | 856 class WidgetObserverTest : public WidgetTest, public WidgetObserver { |
834 public: | 857 public: |
835 WidgetObserverTest() | 858 WidgetObserverTest() |
836 : active_(NULL), | 859 : active_(NULL), |
837 widget_closed_(NULL), | 860 widget_closed_(NULL), |
838 widget_activated_(NULL), | 861 widget_activated_(NULL), |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
895 | 918 |
896 const Widget* active() const { return active_; } | 919 const Widget* active() const { return active_; } |
897 const Widget* widget_closed() const { return widget_closed_; } | 920 const Widget* widget_closed() const { return widget_closed_; } |
898 const Widget* widget_activated() const { return widget_activated_; } | 921 const Widget* widget_activated() const { return widget_activated_; } |
899 const Widget* widget_deactivated() const { return widget_deactivated_; } | 922 const Widget* widget_deactivated() const { return widget_deactivated_; } |
900 const Widget* widget_shown() const { return widget_shown_; } | 923 const Widget* widget_shown() const { return widget_shown_; } |
901 const Widget* widget_hidden() const { return widget_hidden_; } | 924 const Widget* widget_hidden() const { return widget_hidden_; } |
902 const Widget* widget_bounds_changed() const { return widget_bounds_changed_; } | 925 const Widget* widget_bounds_changed() const { return widget_bounds_changed_; } |
903 | 926 |
904 private: | 927 private: |
905 | |
906 Widget* active_; | 928 Widget* active_; |
907 | 929 |
908 Widget* widget_closed_; | 930 Widget* widget_closed_; |
909 Widget* widget_activated_; | 931 Widget* widget_activated_; |
910 Widget* widget_deactivated_; | 932 Widget* widget_deactivated_; |
911 Widget* widget_shown_; | 933 Widget* widget_shown_; |
912 Widget* widget_hidden_; | 934 Widget* widget_hidden_; |
913 Widget* widget_bounds_changed_; | 935 Widget* widget_bounds_changed_; |
914 }; | 936 }; |
915 | 937 |
(...skipping 454 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1370 EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_BEGIN)); | 1392 EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_BEGIN)); |
1371 EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_UPDATE)); | 1393 EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_UPDATE)); |
1372 EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_END)); | 1394 EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_END)); |
1373 } | 1395 } |
1374 | 1396 |
1375 widget->CloseNow(); | 1397 widget->CloseNow(); |
1376 } | 1398 } |
1377 | 1399 |
1378 } // namespace | 1400 } // namespace |
1379 } // namespace views | 1401 } // namespace views |
OLD | NEW |