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