OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "views/widget/native_widget_views.h" | 5 #include "views/widget/native_widget_views.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
9 #include "base/message_loop.h" | 9 #include "base/message_loop.h" |
10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
11 #include "views/test/test_views_delegate.h" | 11 #include "views/test/test_views_delegate.h" |
| 12 #include "views/test/views_test_base.h" |
12 #include "views/views_delegate.h" | 13 #include "views/views_delegate.h" |
13 | 14 |
14 #if defined(OS_WIN) | 15 #if defined(OS_WIN) |
15 #include "views/widget/native_widget_win.h" | 16 #include "views/widget/native_widget_win.h" |
16 #elif defined(TOOLKIT_USES_GTK) | 17 #elif defined(TOOLKIT_USES_GTK) |
17 #include "views/widget/native_widget_gtk.h" | 18 #include "views/widget/native_widget_gtk.h" |
18 #endif | 19 #endif |
19 | 20 |
20 namespace views { | 21 namespace views { |
21 namespace { | 22 namespace { |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 virtual View* GetDefaultParentView() OVERRIDE { | 74 virtual View* GetDefaultParentView() OVERRIDE { |
74 return default_parent_view_; | 75 return default_parent_view_; |
75 } | 76 } |
76 | 77 |
77 private: | 78 private: |
78 View* default_parent_view_; | 79 View* default_parent_view_; |
79 | 80 |
80 DISALLOW_COPY_AND_ASSIGN(WidgetTestViewsDelegate); | 81 DISALLOW_COPY_AND_ASSIGN(WidgetTestViewsDelegate); |
81 }; | 82 }; |
82 | 83 |
83 class WidgetTest : public testing::Test { | 84 class WidgetTest : public ViewsTestBase { |
84 public: | 85 public: |
85 WidgetTest() { | 86 WidgetTest() { |
86 #if defined(OS_WIN) | |
87 OleInitialize(NULL); | |
88 #endif | |
89 } | 87 } |
90 virtual ~WidgetTest() { | 88 virtual ~WidgetTest() { |
91 #if defined(OS_WIN) | |
92 OleUninitialize(); | |
93 #endif | |
94 } | 89 } |
95 | 90 |
96 virtual void TearDown() { | 91 virtual void SetUp() OVERRIDE { |
97 // Flush the message loop because we have pending release tasks | 92 set_views_delegate(new WidgetTestViewsDelegate()); |
98 // and these tasks if un-executed would upset Valgrind. | 93 ViewsTestBase::SetUp(); |
99 RunPendingMessages(); | |
100 } | 94 } |
101 | 95 |
102 void RunPendingMessages() { | 96 WidgetTestViewsDelegate& widget_views_delegate() const { |
103 message_loop_.RunAllPending(); | 97 return static_cast<WidgetTestViewsDelegate&>(views_delegate()); |
104 } | 98 } |
105 | 99 |
106 protected: | |
107 WidgetTestViewsDelegate views_delegate; | |
108 | |
109 private: | 100 private: |
110 MessageLoopForUI message_loop_; | |
111 | |
112 DISALLOW_COPY_AND_ASSIGN(WidgetTest); | 101 DISALLOW_COPY_AND_ASSIGN(WidgetTest); |
113 }; | 102 }; |
114 | 103 |
115 NativeWidget* CreatePlatformNativeWidget( | 104 NativeWidget* CreatePlatformNativeWidget( |
116 internal::NativeWidgetDelegate* delegate) { | 105 internal::NativeWidgetDelegate* delegate) { |
117 #if defined(OS_WIN) | 106 #if defined(OS_WIN) |
118 return new NativeWidgetWin(delegate); | 107 return new NativeWidgetWin(delegate); |
119 #elif defined(TOOLKIT_USES_GTK) | 108 #elif defined(TOOLKIT_USES_GTK) |
120 return new NativeWidgetGtkCapture(delegate); | 109 return new NativeWidgetGtkCapture(delegate); |
121 #endif | 110 #endif |
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
177 EXPECT_EQ(toplevel, child->GetTopLevelWidget()); | 166 EXPECT_EQ(toplevel, child->GetTopLevelWidget()); |
178 | 167 |
179 toplevel->CloseNow(); | 168 toplevel->CloseNow(); |
180 // |child| should be automatically destroyed with |toplevel|. | 169 // |child| should be automatically destroyed with |toplevel|. |
181 } | 170 } |
182 | 171 |
183 TEST_F(WidgetTest, GetTopLevelWidget_Synthetic) { | 172 TEST_F(WidgetTest, GetTopLevelWidget_Synthetic) { |
184 // Create a hierarchy consisting of a top level platform native widget and a | 173 // Create a hierarchy consisting of a top level platform native widget and a |
185 // child NativeWidgetViews. | 174 // child NativeWidgetViews. |
186 Widget* toplevel = CreateTopLevelPlatformWidget(); | 175 Widget* toplevel = CreateTopLevelPlatformWidget(); |
187 views_delegate.set_default_parent_view(toplevel->GetRootView()); | 176 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); |
188 Widget* child = CreateChildNativeWidgetViews(); | 177 Widget* child = CreateChildNativeWidgetViews(); |
189 | 178 |
190 EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget()); | 179 EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget()); |
191 EXPECT_EQ(child, child->GetTopLevelWidget()); | 180 EXPECT_EQ(child, child->GetTopLevelWidget()); |
192 | 181 |
193 toplevel->CloseNow(); | 182 toplevel->CloseNow(); |
194 // |child| should be automatically destroyed with |toplevel|. | 183 // |child| should be automatically destroyed with |toplevel|. |
195 } | 184 } |
196 | 185 |
197 // Creates a hierarchy consisting of a top level platform native widget, a child | 186 // Creates a hierarchy consisting of a top level platform native widget, a child |
198 // NativeWidgetViews, and a child of that child, another NativeWidgetViews. | 187 // NativeWidgetViews, and a child of that child, another NativeWidgetViews. |
199 TEST_F(WidgetTest, GetTopLevelWidget_SyntheticParent) { | 188 TEST_F(WidgetTest, GetTopLevelWidget_SyntheticParent) { |
200 Widget* toplevel = CreateTopLevelPlatformWidget(); | 189 Widget* toplevel = CreateTopLevelPlatformWidget(); |
201 views_delegate.set_default_parent_view(toplevel->GetRootView()); | 190 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); |
202 | 191 |
203 Widget* child1 = CreateChildNativeWidgetViews(); // Will be parented | 192 Widget* child1 = CreateChildNativeWidgetViews(); // Will be parented |
204 // automatically to | 193 // automatically to |
205 // |toplevel|. | 194 // |toplevel|. |
206 Widget* child11 = CreateChildNativeWidgetViewsWithParent(child1); | 195 Widget* child11 = CreateChildNativeWidgetViewsWithParent(child1); |
207 | 196 |
208 EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget()); | 197 EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget()); |
209 EXPECT_EQ(child1, child1->GetTopLevelWidget()); | 198 EXPECT_EQ(child1, child1->GetTopLevelWidget()); |
210 EXPECT_EQ(child1, child11->GetTopLevelWidget()); | 199 EXPECT_EQ(child1, child11->GetTopLevelWidget()); |
211 | 200 |
212 toplevel->CloseNow(); | 201 toplevel->CloseNow(); |
213 // |child1| and |child11| should be destroyed with |toplevel|. | 202 // |child1| and |child11| should be destroyed with |toplevel|. |
214 } | 203 } |
215 | 204 |
| 205 // This is flaky on touch build. See crbug.com/94137. |
| 206 #if defined(TOUCH_UI) |
| 207 #define MAYBE_GrabUngrab DISABLED_GrabUngrab |
| 208 #else |
| 209 #define MAYBE_GrabUngrab GrabUngrab |
| 210 #endif |
216 // Tests some grab/ungrab events. | 211 // Tests some grab/ungrab events. |
217 TEST_F(WidgetTest, GrabUngrab) { | 212 TEST_F(WidgetTest, MAYBE_GrabUngrab) { |
218 Widget* toplevel = CreateTopLevelPlatformWidget(); | 213 Widget* toplevel = CreateTopLevelPlatformWidget(); |
219 views_delegate.set_default_parent_view(toplevel->GetRootView()); | 214 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); |
220 | 215 |
221 Widget* child1 = CreateChildNativeWidgetViews(); // Will be parented | 216 Widget* child1 = CreateChildNativeWidgetViews(); // Will be parented |
222 // automatically to | 217 // automatically to |
223 // |toplevel|. | 218 // |toplevel|. |
224 Widget* child2 = CreateChildNativeWidgetViews(); | 219 Widget* child2 = CreateChildNativeWidgetViews(); |
225 | 220 |
226 toplevel->SetBounds(gfx::Rect(0, 0, 500, 500)); | 221 toplevel->SetBounds(gfx::Rect(0, 0, 500, 500)); |
227 | 222 |
228 child1->SetBounds(gfx::Rect(10, 10, 300, 300)); | 223 child1->SetBounds(gfx::Rect(10, 10, 300, 300)); |
229 View* view = new MouseView(); | 224 View* view = new MouseView(); |
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
278 // InitParams::Ownership param. | 273 // InitParams::Ownership param. |
279 | 274 |
280 // A WidgetTest that supplies a toplevel widget for NativeWidgetViews to parent | 275 // A WidgetTest that supplies a toplevel widget for NativeWidgetViews to parent |
281 // to. | 276 // to. |
282 class WidgetOwnershipTest : public WidgetTest { | 277 class WidgetOwnershipTest : public WidgetTest { |
283 public: | 278 public: |
284 WidgetOwnershipTest() {} | 279 WidgetOwnershipTest() {} |
285 virtual ~WidgetOwnershipTest() {} | 280 virtual ~WidgetOwnershipTest() {} |
286 | 281 |
287 virtual void SetUp() { | 282 virtual void SetUp() { |
| 283 WidgetTest::SetUp(); |
288 desktop_widget_ = CreateTopLevelPlatformWidget(); | 284 desktop_widget_ = CreateTopLevelPlatformWidget(); |
289 views_delegate.set_default_parent_view(desktop_widget_->GetRootView()); | 285 widget_views_delegate().set_default_parent_view( |
| 286 desktop_widget_->GetRootView()); |
290 } | 287 } |
291 | 288 |
292 virtual void TearDown() { | 289 virtual void TearDown() { |
293 desktop_widget_->CloseNow(); | 290 desktop_widget_->CloseNow(); |
294 WidgetTest::TearDown(); | 291 WidgetTest::TearDown(); |
295 } | 292 } |
296 | 293 |
297 private: | 294 private: |
298 Widget* desktop_widget_; | 295 Widget* desktop_widget_; |
299 | 296 |
(...skipping 333 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
633 | 630 |
634 Widget* widget_closed_; | 631 Widget* widget_closed_; |
635 Widget* widget_activated_; | 632 Widget* widget_activated_; |
636 Widget* widget_deactivated_; | 633 Widget* widget_deactivated_; |
637 Widget* widget_shown_; | 634 Widget* widget_shown_; |
638 Widget* widget_hidden_; | 635 Widget* widget_hidden_; |
639 }; | 636 }; |
640 | 637 |
641 TEST_F(WidgetObserverTest, ActivationChange) { | 638 TEST_F(WidgetObserverTest, ActivationChange) { |
642 Widget* toplevel = CreateTopLevelPlatformWidget(); | 639 Widget* toplevel = CreateTopLevelPlatformWidget(); |
643 views_delegate.set_default_parent_view(toplevel->GetRootView()); | 640 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); |
644 | 641 |
645 Widget* child1 = NewWidget(); | 642 Widget* child1 = NewWidget(); |
646 Widget* child2 = NewWidget(); | 643 Widget* child2 = NewWidget(); |
647 | 644 |
648 reset(); | 645 reset(); |
649 | 646 |
650 child1->Activate(); | 647 child1->Activate(); |
651 EXPECT_EQ(child1, widget_activated()); | 648 EXPECT_EQ(child1, widget_activated()); |
652 | 649 |
653 child2->Activate(); | 650 child2->Activate(); |
654 EXPECT_EQ(child1, widget_deactivated()); | 651 EXPECT_EQ(child1, widget_deactivated()); |
655 EXPECT_EQ(child2, widget_activated()); | 652 EXPECT_EQ(child2, widget_activated()); |
656 EXPECT_EQ(child2, active()); | 653 EXPECT_EQ(child2, active()); |
657 } | 654 } |
658 | 655 |
659 TEST_F(WidgetObserverTest, VisibilityChange) { | 656 TEST_F(WidgetObserverTest, VisibilityChange) { |
660 Widget* toplevel = CreateTopLevelPlatformWidget(); | 657 Widget* toplevel = CreateTopLevelPlatformWidget(); |
661 views_delegate.set_default_parent_view(toplevel->GetRootView()); | 658 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); |
662 | 659 |
663 Widget* child1 = NewWidget(); | 660 Widget* child1 = NewWidget(); |
664 Widget* child2 = NewWidget(); | 661 Widget* child2 = NewWidget(); |
665 | 662 |
666 reset(); | 663 reset(); |
667 | 664 |
668 child1->Hide(); | 665 child1->Hide(); |
669 EXPECT_EQ(child1, widget_hidden()); | 666 EXPECT_EQ(child1, widget_hidden()); |
670 | 667 |
671 child2->Hide(); | 668 child2->Hide(); |
672 EXPECT_EQ(child2, widget_hidden()); | 669 EXPECT_EQ(child2, widget_hidden()); |
673 | 670 |
674 child1->Show(); | 671 child1->Show(); |
675 EXPECT_EQ(child1, widget_shown()); | 672 EXPECT_EQ(child1, widget_shown()); |
676 | 673 |
677 child2->Show(); | 674 child2->Show(); |
678 EXPECT_EQ(child2, widget_shown()); | 675 EXPECT_EQ(child2, widget_shown()); |
679 } | 676 } |
680 | 677 |
681 } // namespace | 678 } // namespace |
682 } // namespace views | 679 } // namespace views |
OLD | NEW |