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

Side by Side Diff: ui/views/controls/native/native_view_host_aura_unittest.cc

Issue 24299004: Implement features in NativeViewHostAura for scroll end effect (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix nits from xiyuan Created 7 years, 2 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
OLDNEW
1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2013 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 "ui/views/controls/native/native_view_host_aura.h" 5 #include "ui/views/controls/native/native_view_host_aura.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 "ui/aura/window.h" 9 #include "ui/aura/window.h"
10 #include "ui/views/controls/native/native_view_host.h" 10 #include "ui/views/controls/native/native_view_host.h"
11 #include "ui/views/test/views_test_base.h" 11 #include "ui/views/test/views_test_base.h"
12 #include "ui/views/view.h" 12 #include "ui/views/view.h"
13 #include "ui/views/view_constants_aura.h" 13 #include "ui/views/view_constants_aura.h"
14 #include "ui/views/widget/widget.h" 14 #include "ui/views/widget/widget.h"
15 15
16 namespace {
17
18 // Static class used to track if the NativeViewHostTesting has been destroyed.
19 class DestroyedCount {
sky 2013/10/10 20:25:32 Why have this in a separate object rather than par
rharrison 2013/10/13 13:54:57 No good reason, Done.
20 public:
21 static void Increment() {
22 count_++;
23 }
24
25 static void Reset() {
26 count_ = 0;
27 }
28
29 static int count() {
30 return count_;
31 }
32
33 private:
34 static int count_;
35 };
36 int DestroyedCount::count_ = 0;
37
38 } // namespace
39
16 namespace views { 40 namespace views {
17 41
42 // Testing wrapper of the NativeViewHost
43 class NativeViewHostTesting : public NativeViewHost {
44 public:
45 NativeViewHostTesting() {}
46 virtual ~NativeViewHostTesting() {
47 DestroyedCount::Increment();
48 }
49 };
50
18 class NativeViewHostAuraTest : public ViewsTestBase { 51 class NativeViewHostAuraTest : public ViewsTestBase {
19 public: 52 public:
20 NativeViewHostAuraTest() { 53 NativeViewHostAuraTest() {
21 } 54 }
22 55
23 NativeViewHostAura* native_host() { 56 NativeViewHostAura* native_host() {
24 return static_cast<NativeViewHostAura*>(host_->native_wrapper_.get()); 57 return static_cast<NativeViewHostAura*>(host_->native_wrapper_.get());
25 } 58 }
26 59
27 NativeViewHost* host() { 60 NativeViewHost* host() {
28 return host_.get(); 61 return host_.get();
29 } 62 }
30 63
31 Widget* child() { 64 Widget* child() {
32 return child_.get(); 65 return child_.get();
33 } 66 }
34 67
68 aura::Window* clipping_window() {
69 return &(native_host()->clipping_window_);
70 }
71
72 Widget* toplevel() {
73 return toplevel_.get();
74 }
75
35 void CreateHost() { 76 void CreateHost() {
36 // Create the top level widget. 77 // Create the top level widget.
37 toplevel_.reset(new Widget); 78 toplevel_.reset(new Widget);
38 Widget::InitParams toplevel_params = 79 Widget::InitParams toplevel_params =
39 CreateParams(Widget::InitParams::TYPE_WINDOW); 80 CreateParams(Widget::InitParams::TYPE_WINDOW);
40 toplevel_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 81 toplevel_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
41 toplevel_->Init(toplevel_params); 82 toplevel_->Init(toplevel_params);
42 83
43 // And the child widget. 84 // And the child widget.
44 View* test_view = new View; 85 View* test_view = new View;
45 child_.reset(new Widget); 86 child_.reset(new Widget);
46 Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL); 87 Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL);
47 child_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; 88 child_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET;
48 child_params.parent = toplevel_->GetNativeView(); 89 child_params.parent = toplevel_->GetNativeView();
49 child_->Init(child_params); 90 child_->Init(child_params);
50 child_->SetContentsView(test_view); 91 child_->SetContentsView(test_view);
51 92
52 // Owned by |toplevel|. 93 // Owned by |toplevel|.
53 host_.reset(new NativeViewHost); 94 host_.reset(new NativeViewHostTesting);
54 toplevel_->GetRootView()->AddChildView(host_.get()); 95 toplevel_->GetRootView()->AddChildView(host_.get());
55 host_->Attach(child_->GetNativeView()); 96 host_->Attach(child_->GetNativeView());
56 } 97 }
57 98
58 void DestroyHost() { 99 void DestroyHost() {
59 host_.reset(); 100 host_.reset();
60 } 101 }
61 102
103 NativeViewHostTesting* ReleaseHost() {
104 return host_.release();
105 }
106
107 void DestroyTopLevel() {
108 toplevel_.reset();
109 }
110
111 gfx::Point CalculateNativeViewOrigin(gfx::Rect input_rect,
112 gfx::Rect native_rect) {
113 return native_host()->CalculateNativeViewOrigin(input_rect, native_rect);
114 }
115
62 private: 116 private:
63 scoped_ptr<Widget> toplevel_; 117 scoped_ptr<Widget> toplevel_;
64 scoped_ptr<NativeViewHost> host_; 118 scoped_ptr<NativeViewHostTesting> host_;
65 scoped_ptr<Widget> child_; 119 scoped_ptr<Widget> child_;
66 120
67 DISALLOW_COPY_AND_ASSIGN(NativeViewHostAuraTest); 121 DISALLOW_COPY_AND_ASSIGN(NativeViewHostAuraTest);
68 }; 122 };
69 123
70 // Verifies NativeViewHostAura stops observing native view on destruction. 124 // Verifies NativeViewHostAura stops observing native view on destruction.
71 TEST_F(NativeViewHostAuraTest, StopObservingNativeViewOnDestruct) { 125 TEST_F(NativeViewHostAuraTest, StopObservingNativeViewOnDestruct) {
72 CreateHost(); 126 CreateHost();
73 aura::Window* child_win = child()->GetNativeView(); 127 aura::Window* child_win = child()->GetNativeView();
74 NativeViewHostAura* aura_host = native_host(); 128 NativeViewHostAura* aura_host = native_host();
(...skipping 13 matching lines...) Expand all
88 host()->Detach(); 142 host()->Detach();
89 EXPECT_FALSE(child_win->GetProperty(views::kHostViewKey)); 143 EXPECT_FALSE(child_win->GetProperty(views::kHostViewKey));
90 144
91 host()->Attach(child_win); 145 host()->Attach(child_win);
92 EXPECT_EQ(host(), child_win->GetProperty(views::kHostViewKey)); 146 EXPECT_EQ(host(), child_win->GetProperty(views::kHostViewKey));
93 147
94 DestroyHost(); 148 DestroyHost();
95 EXPECT_FALSE(child_win->GetProperty(views::kHostViewKey)); 149 EXPECT_FALSE(child_win->GetProperty(views::kHostViewKey));
96 } 150 }
97 151
152 // Tests that the values being calculated by CalculateNativeViewOrigin are
153 // correct.
154 TEST_F(NativeViewHostAuraTest, CalculateNewNativeViewOrigin) {
155 CreateHost();
156
157 gfx::Rect clip_rect(0, 0, 50, 50);
158 gfx::Rect contents_rect(50, 50, 100, 100);
159
160 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_NORTHWEST);
161 EXPECT_EQ(gfx::Point(0, 0),
sky 2013/10/10 20:25:32 Comparing strinsg (ToString()) on all points (and
rharrison 2013/10/13 13:54:57 Done.
162 CalculateNativeViewOrigin(clip_rect, contents_rect));
163
164 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_NORTH);
165 EXPECT_EQ(gfx::Point(-25, 0),
166 CalculateNativeViewOrigin(clip_rect, contents_rect));
167
168 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_NORTHEAST);
169 EXPECT_EQ(gfx::Point(-50, 0),
170 CalculateNativeViewOrigin(clip_rect, contents_rect));
171
172 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_EAST);
173 EXPECT_EQ(gfx::Point(-50, -25),
174 CalculateNativeViewOrigin(clip_rect, contents_rect));
175
176 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_SOUTHEAST);
177 EXPECT_EQ(gfx::Point(-50, -50),
178 CalculateNativeViewOrigin(clip_rect, contents_rect));
179
180 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_SOUTH);
181 EXPECT_EQ(gfx::Point(-25, -50),
182 CalculateNativeViewOrigin(clip_rect, contents_rect));
183
184 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_SOUTHWEST);
185 EXPECT_EQ(gfx::Point(0, -50),
186 CalculateNativeViewOrigin(clip_rect, contents_rect));
187
188 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_WEST);
189 EXPECT_EQ(gfx::Point(0, -25),
190 CalculateNativeViewOrigin(clip_rect, contents_rect));
191
192 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_CENTER);
193 EXPECT_EQ(gfx::Point(-25, -25),
194 CalculateNativeViewOrigin(clip_rect, contents_rect));
195
196 DestroyHost();
197 }
198
199 // Test that the fast resize path places the clipping and content windows were
200 // they are supposed to be.
201 TEST_F(NativeViewHostAuraTest, FastResizePath) {
202 CreateHost();
203 host()->set_fast_resize(false);
204 toplevel()->SetBounds(gfx::Rect(0, 0, 100, 100));
205 native_host()->ShowWidget(0, 0, 100, 100);
206 host()->set_fast_resize(true);
207
208 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_CENTER);
209 EXPECT_EQ(gfx::Rect(0, 0, 100, 100),
210 host()->native_view()->layer()->bounds());
211 EXPECT_EQ(gfx::Rect(0, 0, 100, 100), clipping_window()->layer()->bounds());
212 LOG(ERROR) << clipping_window()->layer()->bounds().ToString();
213
214
215 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_NORTHWEST);
216 native_host()->ShowWidget(0, 0, 50, 50);
217 EXPECT_EQ(gfx::Rect(0, 0, 100, 100),
218 host()->native_view()->layer()->bounds());
219 EXPECT_EQ(gfx::Rect(0, 0, 50, 50), clipping_window()->layer()->bounds());
220
221 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_SOUTHEAST);
222 native_host()->ShowWidget(0, 0, 50, 50);
223 EXPECT_EQ(gfx::Rect(-50, -50, 100, 100),
224 host()->native_view()->layer()->bounds());
225 EXPECT_EQ(gfx::Rect(0, 0, 50, 50), clipping_window()->layer()->bounds());
226
227 DestroyHost();
228 }
229
230 // Test that destroying the top level widget before destroying the attached
231 // NativeViewHost works correctly. Specifically the associated NVH should be
232 // destroyed and there shouldn't be any errors.
233 TEST_F(NativeViewHostAuraTest, DestroyWidget) {
234 DestroyedCount::Reset();
235 CreateHost();
236 ReleaseHost();
237 EXPECT_EQ(0, DestroyedCount::count());
238 DestroyTopLevel();
239 EXPECT_EQ(1, DestroyedCount::count());
240 }
241
98 } // namespace views 242 } // namespace views
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698