Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(601)

Side by Side Diff: views/widget/widget_unittest.cc

Issue 7979035: Fix for black-hole. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: fix more tests, reset non_client_view when new contentview is set Created 9 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« views/widget/widget.cc ('K') | « views/widget/widget.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 Widget* CreateChildPlatformWidget(gfx::NativeView parent_native_view) { 125 Widget* CreateChildPlatformWidget(gfx::NativeView parent_native_view) {
126 Widget* child = new Widget; 126 Widget* child = new Widget;
127 Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL); 127 Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL);
128 child_params.native_widget = CreatePlatformNativeWidget(child); 128 child_params.native_widget = CreatePlatformNativeWidget(child);
129 child_params.parent = parent_native_view; 129 child_params.parent = parent_native_view;
130 child->Init(child_params); 130 child->Init(child_params);
131 child->SetContentsView(new View); 131 child->SetContentsView(new View);
132 return child; 132 return child;
133 } 133 }
134 134
135 Widget* CreateTopLevelNativeWidgetViews() {
136 Widget* toplevel = new Widget;
137 Widget::InitParams params(Widget::InitParams::TYPE_WINDOW);
138 params.native_widget = new NativeWidgetViews(toplevel);
139 toplevel->Init(params);
140 toplevel->SetContentsView(new View);
141 return toplevel;
142 }
143
135 Widget* CreateChildNativeWidgetViewsWithParent(Widget* parent) { 144 Widget* CreateChildNativeWidgetViewsWithParent(Widget* parent) {
136 Widget* child = new Widget; 145 Widget* child = new Widget;
137 Widget::InitParams params(Widget::InitParams::TYPE_CONTROL); 146 Widget::InitParams params(Widget::InitParams::TYPE_CONTROL);
138 params.native_widget = new NativeWidgetViews(child); 147 params.native_widget = new NativeWidgetViews(child);
139 params.parent_widget = parent; 148 params.parent_widget = parent;
140 child->Init(params); 149 child->Init(params);
141 child->SetContentsView(new View); 150 child->SetContentsView(new View);
142 return child; 151 return child;
143 } 152 }
144 153
(...skipping 26 matching lines...) Expand all
171 180
172 toplevel->CloseNow(); 181 toplevel->CloseNow();
173 // |child| should be automatically destroyed with |toplevel|. 182 // |child| should be automatically destroyed with |toplevel|.
174 } 183 }
175 184
176 TEST_F(WidgetTest, GetTopLevelWidget_Synthetic) { 185 TEST_F(WidgetTest, GetTopLevelWidget_Synthetic) {
177 // Create a hierarchy consisting of a top level platform native widget and a 186 // Create a hierarchy consisting of a top level platform native widget and a
178 // child NativeWidgetViews. 187 // child NativeWidgetViews.
179 Widget* toplevel = CreateTopLevelPlatformWidget(); 188 Widget* toplevel = CreateTopLevelPlatformWidget();
180 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); 189 widget_views_delegate().set_default_parent_view(toplevel->GetRootView());
181 Widget* child = CreateChildNativeWidgetViews(); 190 Widget* child = CreateTopLevelNativeWidgetViews();
182 191
183 EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget()); 192 EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget());
184 EXPECT_EQ(child, child->GetTopLevelWidget()); 193 EXPECT_EQ(child, child->GetTopLevelWidget());
185 194
186 toplevel->CloseNow(); 195 toplevel->CloseNow();
187 // |child| should be automatically destroyed with |toplevel|. 196 // |child| should be automatically destroyed with |toplevel|.
188 } 197 }
189 198
190 // Creates a hierarchy consisting of a top level platform native widget, a child 199 // Creates a hierarchy consisting of a desktop platform native widget, a
191 // NativeWidgetViews, and a child of that child, another NativeWidgetViews. 200 // toplevel NativeWidgetViews, and a child of that toplevel, another
192 TEST_F(WidgetTest, GetTopLevelWidget_SyntheticParent) { 201 // NativeWidgetViews.
193 Widget* toplevel = CreateTopLevelPlatformWidget(); 202 TEST_F(WidgetTest, GetTopLevelWidget_SyntheticDesktop) {
194 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); 203 // Create a hierarchy consisting of a desktop platform native widget,
204 // a toplevel NativeWidgetViews and a chlid NativeWidgetViews.
205 Widget* desktop = CreateTopLevelPlatformWidget();
206 widget_views_delegate().set_default_parent_view(desktop->GetRootView());
207 Widget* toplevel = CreateTopLevelNativeWidgetViews(); // Will be parented
208 // automatically to
209 // |toplevel|.
195 210
196 Widget* child1 = CreateChildNativeWidgetViews(); // Will be parented 211 Widget* child = CreateChildNativeWidgetViewsWithParent(toplevel);
197 // automatically to
198 // |toplevel|.
199 Widget* child11 = CreateChildNativeWidgetViewsWithParent(child1);
200 212
213 EXPECT_EQ(desktop, desktop->GetTopLevelWidget());
201 EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget()); 214 EXPECT_EQ(toplevel, toplevel->GetTopLevelWidget());
202 EXPECT_EQ(child1, child1->GetTopLevelWidget()); 215 EXPECT_EQ(toplevel, child->GetTopLevelWidget());
203 EXPECT_EQ(child1, child11->GetTopLevelWidget());
204 216
205 toplevel->CloseNow(); 217 desktop->CloseNow();
206 // |child1| and |child11| should be destroyed with |toplevel|. 218 // |toplevel|, |child| should be automatically destroyed with |toplevel|.
207 } 219 }
208 220
209 // This is flaky on touch build. See crbug.com/94137. 221 // This is flaky on touch build. See crbug.com/94137.
210 #if defined(TOUCH_UI) 222 #if defined(TOUCH_UI)
211 #define MAYBE_GrabUngrab DISABLED_GrabUngrab 223 #define MAYBE_GrabUngrab DISABLED_GrabUngrab
212 #else 224 #else
213 #define MAYBE_GrabUngrab GrabUngrab 225 #define MAYBE_GrabUngrab GrabUngrab
214 #endif 226 #endif
215 // Tests some grab/ungrab events. 227 // Tests some grab/ungrab events.
216 TEST_F(WidgetTest, MAYBE_GrabUngrab) { 228 TEST_F(WidgetTest, MAYBE_GrabUngrab) {
217 Widget* toplevel = CreateTopLevelPlatformWidget(); 229 Widget* toplevel = CreateTopLevelPlatformWidget();
218 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); 230 Widget* child1 = CreateChildNativeWidgetViewsWithParent(toplevel);
219 231 Widget* child2 = CreateChildNativeWidgetViewsWithParent(toplevel);
220 Widget* child1 = CreateChildNativeWidgetViews(); // Will be parented
221 // automatically to
222 // |toplevel|.
223 Widget* child2 = CreateChildNativeWidgetViews();
224 232
225 toplevel->SetBounds(gfx::Rect(0, 0, 500, 500)); 233 toplevel->SetBounds(gfx::Rect(0, 0, 500, 500));
226 234
227 child1->SetBounds(gfx::Rect(10, 10, 300, 300)); 235 child1->SetBounds(gfx::Rect(10, 10, 300, 300));
228 View* view = new MouseView(); 236 View* view = new MouseView();
229 view->SetBounds(0, 0, 300, 300); 237 view->SetBounds(0, 0, 300, 300);
230 child1->GetRootView()->AddChildView(view); 238 child1->GetRootView()->AddChildView(view);
231 239
232 child2->SetBounds(gfx::Rect(200, 10, 200, 200)); 240 child2->SetBounds(gfx::Rect(200, 10, 200, 200));
233 view = new MouseView(); 241 view = new MouseView();
(...skipping 409 matching lines...) Expand 10 before | Expand all | Expand 10 after
643 void reset() { 651 void reset() {
644 active_ = NULL; 652 active_ = NULL;
645 widget_closed_ = NULL; 653 widget_closed_ = NULL;
646 widget_activated_ = NULL; 654 widget_activated_ = NULL;
647 widget_deactivated_ = NULL; 655 widget_deactivated_ = NULL;
648 widget_shown_ = NULL; 656 widget_shown_ = NULL;
649 widget_hidden_ = NULL; 657 widget_hidden_ = NULL;
650 } 658 }
651 659
652 Widget* NewWidget() { 660 Widget* NewWidget() {
653 Widget* widget = CreateChildNativeWidgetViews(); 661 Widget* widget = CreateTopLevelNativeWidgetViews();
654 widget->AddObserver(this); 662 widget->AddObserver(this);
655 return widget; 663 return widget;
656 } 664 }
657 665
658 const Widget* active() const { return active_; } 666 const Widget* active() const { return active_; }
659 const Widget* widget_closed() const { return widget_closed_; } 667 const Widget* widget_closed() const { return widget_closed_; }
660 const Widget* widget_activated() const { return widget_activated_; } 668 const Widget* widget_activated() const { return widget_activated_; }
661 const Widget* widget_deactivated() const { return widget_deactivated_; } 669 const Widget* widget_deactivated() const { return widget_deactivated_; }
662 const Widget* widget_shown() const { return widget_shown_; } 670 const Widget* widget_shown() const { return widget_shown_; }
663 const Widget* widget_hidden() const { return widget_hidden_; } 671 const Widget* widget_hidden() const { return widget_hidden_; }
664 672
665 private: 673 private:
666 674
667 Widget* active_; 675 Widget* active_;
668 676
669 Widget* widget_closed_; 677 Widget* widget_closed_;
670 Widget* widget_activated_; 678 Widget* widget_activated_;
671 Widget* widget_deactivated_; 679 Widget* widget_deactivated_;
672 Widget* widget_shown_; 680 Widget* widget_shown_;
673 Widget* widget_hidden_; 681 Widget* widget_hidden_;
674 }; 682 };
675 683
676 TEST_F(WidgetObserverTest, ActivationChange) { 684 TEST_F(WidgetObserverTest, ActivationChange) {
677 Widget* toplevel = CreateTopLevelPlatformWidget(); 685 Widget* toplevel = CreateTopLevelPlatformWidget();
678 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); 686 widget_views_delegate().set_default_parent_view(toplevel->GetRootView());
679 687
680 Widget* child1 = NewWidget(); 688 Widget* toplevel1 = NewWidget();
681 Widget* child2 = NewWidget(); 689 Widget* toplevel2 = NewWidget();
690
691 toplevel1->Show();
692 toplevel2->Show();
682 693
683 reset(); 694 reset();
684 695
685 child1->Activate(); 696 toplevel1->Activate();
686 EXPECT_EQ(child1, widget_activated());
687 697
688 child2->Activate(); 698 RunPendingMessages();
689 EXPECT_EQ(child1, widget_deactivated()); 699 EXPECT_EQ(toplevel1, widget_activated());
690 EXPECT_EQ(child2, widget_activated()); 700
691 EXPECT_EQ(child2, active()); 701 toplevel2->Activate();
702 RunPendingMessages();
703 EXPECT_EQ(toplevel1, widget_deactivated());
704 EXPECT_EQ(toplevel2, widget_activated());
705 EXPECT_EQ(toplevel2, active());
706
707 toplevel->CloseNow();
692 } 708 }
693 709
694 TEST_F(WidgetObserverTest, VisibilityChange) { 710 TEST_F(WidgetObserverTest, VisibilityChange) {
695 Widget* toplevel = CreateTopLevelPlatformWidget(); 711 Widget* toplevel = CreateTopLevelPlatformWidget();
696 widget_views_delegate().set_default_parent_view(toplevel->GetRootView()); 712 widget_views_delegate().set_default_parent_view(toplevel->GetRootView());
697 713
698 Widget* child1 = NewWidget(); 714 Widget* child1 = NewWidget();
699 Widget* child2 = NewWidget(); 715 Widget* child2 = NewWidget();
700 716
701 reset(); 717 reset();
702 718
703 child1->Hide(); 719 child1->Hide();
704 EXPECT_EQ(child1, widget_hidden()); 720 EXPECT_EQ(child1, widget_hidden());
705 721
706 child2->Hide(); 722 child2->Hide();
707 EXPECT_EQ(child2, widget_hidden()); 723 EXPECT_EQ(child2, widget_hidden());
708 724
709 child1->Show(); 725 child1->Show();
710 EXPECT_EQ(child1, widget_shown()); 726 EXPECT_EQ(child1, widget_shown());
711 727
712 child2->Show(); 728 child2->Show();
713 EXPECT_EQ(child2, widget_shown()); 729 EXPECT_EQ(child2, widget_shown());
730
731 toplevel->CloseNow();
714 } 732 }
715 733
716 } // namespace 734 } // namespace
717 } // namespace views 735 } // namespace views
OLDNEW
« views/widget/widget.cc ('K') | « views/widget/widget.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698