OLD | NEW |
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" |
(...skipping 14 matching lines...) Expand all Loading... |
25 } | 25 } |
26 | 26 |
27 NativeViewHost* host() { | 27 NativeViewHost* host() { |
28 return host_.get(); | 28 return host_.get(); |
29 } | 29 } |
30 | 30 |
31 Widget* child() { | 31 Widget* child() { |
32 return child_.get(); | 32 return child_.get(); |
33 } | 33 } |
34 | 34 |
| 35 aura::Window* clipping_window() { |
| 36 return native_host()->clipping_window_; |
| 37 } |
| 38 |
| 39 Widget* toplevel() { |
| 40 return toplevel_.get(); |
| 41 } |
| 42 |
35 void CreateHost() { | 43 void CreateHost() { |
36 // Create the top level widget. | 44 // Create the top level widget. |
37 toplevel_.reset(new Widget); | 45 toplevel_.reset(new Widget); |
38 Widget::InitParams toplevel_params = | 46 Widget::InitParams toplevel_params = |
39 CreateParams(Widget::InitParams::TYPE_WINDOW); | 47 CreateParams(Widget::InitParams::TYPE_WINDOW); |
40 toplevel_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 48 toplevel_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
41 toplevel_->Init(toplevel_params); | 49 toplevel_->Init(toplevel_params); |
42 | 50 |
43 // And the child widget. | 51 // And the child widget. |
44 View* test_view = new View; | 52 View* test_view = new View; |
45 child_.reset(new Widget); | 53 child_.reset(new Widget); |
46 Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL); | 54 Widget::InitParams child_params(Widget::InitParams::TYPE_CONTROL); |
47 child_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | 55 child_params.ownership = Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
48 child_params.parent = toplevel_->GetNativeView(); | 56 child_params.parent = toplevel_->GetNativeView(); |
49 child_->Init(child_params); | 57 child_->Init(child_params); |
50 child_->SetContentsView(test_view); | 58 child_->SetContentsView(test_view); |
51 | 59 |
52 // Owned by |toplevel|. | 60 // Owned by |toplevel|. |
53 host_.reset(new NativeViewHost); | 61 host_.reset(new NativeViewHost); |
54 toplevel_->GetRootView()->AddChildView(host_.get()); | 62 toplevel_->GetRootView()->AddChildView(host_.get()); |
55 host_->Attach(child_->GetNativeView()); | 63 host_->Attach(child_->GetNativeView()); |
56 } | 64 } |
57 | 65 |
58 void DestroyHost() { | 66 void DestroyHost() { |
59 host_.reset(); | 67 host_.reset(); |
60 } | 68 } |
61 | 69 |
| 70 gfx::Point CalculateNativeViewOrigin(gfx::Rect input_rect, |
| 71 gfx::Rect native_rect) { |
| 72 return native_host()->CalculateNativeViewOrigin(input_rect, native_rect); |
| 73 } |
| 74 |
62 private: | 75 private: |
63 scoped_ptr<Widget> toplevel_; | 76 scoped_ptr<Widget> toplevel_; |
64 scoped_ptr<NativeViewHost> host_; | 77 scoped_ptr<NativeViewHost> host_; |
65 scoped_ptr<Widget> child_; | 78 scoped_ptr<Widget> child_; |
66 | 79 |
67 DISALLOW_COPY_AND_ASSIGN(NativeViewHostAuraTest); | 80 DISALLOW_COPY_AND_ASSIGN(NativeViewHostAuraTest); |
68 }; | 81 }; |
69 | 82 |
70 // Verifies NativeViewHostAura stops observing native view on destruction. | 83 // Verifies NativeViewHostAura stops observing native view on destruction. |
71 TEST_F(NativeViewHostAuraTest, StopObservingNativeViewOnDestruct) { | 84 TEST_F(NativeViewHostAuraTest, StopObservingNativeViewOnDestruct) { |
(...skipping 16 matching lines...) Expand all Loading... |
88 host()->Detach(); | 101 host()->Detach(); |
89 EXPECT_FALSE(child_win->GetProperty(views::kHostViewKey)); | 102 EXPECT_FALSE(child_win->GetProperty(views::kHostViewKey)); |
90 | 103 |
91 host()->Attach(child_win); | 104 host()->Attach(child_win); |
92 EXPECT_EQ(host(), child_win->GetProperty(views::kHostViewKey)); | 105 EXPECT_EQ(host(), child_win->GetProperty(views::kHostViewKey)); |
93 | 106 |
94 DestroyHost(); | 107 DestroyHost(); |
95 EXPECT_FALSE(child_win->GetProperty(views::kHostViewKey)); | 108 EXPECT_FALSE(child_win->GetProperty(views::kHostViewKey)); |
96 } | 109 } |
97 | 110 |
| 111 // Tests that the values being calculated by CalculateNativeViewOrigin are |
| 112 // correct. |
| 113 TEST_F(NativeViewHostAuraTest, CalculateNewNativeViewOrigin) { |
| 114 CreateHost(); |
| 115 |
| 116 gfx::Rect clip_rect(0, 0, 50, 50); |
| 117 gfx::Rect contents_rect(50, 50, 100, 100); |
| 118 |
| 119 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_NORTHWEST); |
| 120 EXPECT_EQ(gfx::Point(0, 0), |
| 121 CalculateNativeViewOrigin(clip_rect, contents_rect)); |
| 122 |
| 123 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_NORTH); |
| 124 EXPECT_EQ(gfx::Point(-25, 0), |
| 125 CalculateNativeViewOrigin(clip_rect, contents_rect)); |
| 126 |
| 127 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_NORTHEAST); |
| 128 EXPECT_EQ(gfx::Point(-50, 0), |
| 129 CalculateNativeViewOrigin(clip_rect, contents_rect)); |
| 130 |
| 131 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_EAST); |
| 132 EXPECT_EQ(gfx::Point(-50, -25), |
| 133 CalculateNativeViewOrigin(clip_rect, contents_rect)); |
| 134 |
| 135 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_SOUTHEAST); |
| 136 EXPECT_EQ(gfx::Point(-50, -50), |
| 137 CalculateNativeViewOrigin(clip_rect, contents_rect)); |
| 138 |
| 139 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_SOUTH); |
| 140 EXPECT_EQ(gfx::Point(-25, -50), |
| 141 CalculateNativeViewOrigin(clip_rect, contents_rect)); |
| 142 |
| 143 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_SOUTHWEST); |
| 144 EXPECT_EQ(gfx::Point(0, -50), |
| 145 CalculateNativeViewOrigin(clip_rect, contents_rect)); |
| 146 |
| 147 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_WEST); |
| 148 EXPECT_EQ(gfx::Point(0, -25), |
| 149 CalculateNativeViewOrigin(clip_rect, contents_rect)); |
| 150 |
| 151 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_CENTER); |
| 152 EXPECT_EQ(gfx::Point(-25, -25), |
| 153 CalculateNativeViewOrigin(clip_rect, contents_rect)); |
| 154 |
| 155 DestroyHost(); |
| 156 } |
| 157 |
| 158 // Test that the fast resize path places the clipping and content windows were |
| 159 // they are supposed to be. |
| 160 TEST_F(NativeViewHostAuraTest, FastResizePath) { |
| 161 CreateHost(); |
| 162 host()->set_fast_resize(false); |
| 163 toplevel()->SetBounds(gfx::Rect(0, 0, 100, 100)); |
| 164 native_host()->ShowWidget(0, 0, 100, 100); |
| 165 host()->set_fast_resize(true); |
| 166 |
| 167 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_NORTHWEST); |
| 168 native_host()->ShowWidget(0, 0, 50, 50); |
| 169 EXPECT_EQ(gfx::Rect(0, 0, 100, 100), |
| 170 host()->native_view()->layer()->bounds()); |
| 171 EXPECT_EQ(gfx::Rect(0, 0, 50, 50), clipping_window()->layer()->bounds()); |
| 172 |
| 173 host()->set_fast_resize(false); |
| 174 native_host()->ShowWidget(0, 0, 100, 100); |
| 175 host()->set_fast_resize(true); |
| 176 |
| 177 host()->set_fast_resize_gravity(NativeViewHost::GRAVITY_SOUTHEAST); |
| 178 EXPECT_EQ(gfx::Rect(0, 0, 100, 100), |
| 179 host()->native_view()->layer()->bounds()); |
| 180 EXPECT_EQ(gfx::Rect(0, 0, 100, 100), clipping_window()->layer()->bounds()); |
| 181 |
| 182 native_host()->ShowWidget(0, 0, 50, 50); |
| 183 EXPECT_EQ(gfx::Rect(-50, -50, 100, 100), |
| 184 host()->native_view()->layer()->bounds()); |
| 185 EXPECT_EQ(gfx::Rect(0, 0, 50, 50), clipping_window()->layer()->bounds()); |
| 186 |
| 187 DestroyHost(); |
| 188 } |
| 189 |
98 } // namespace views | 190 } // namespace views |
OLD | NEW |