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 "ash/wm/workspace/multi_window_resize_controller.h" | 5 #include "ash/wm/workspace/multi_window_resize_controller.h" |
6 | 6 |
7 #include "ash/ash_constants.h" | |
8 #include "ash/frame/custom_frame_view_ash.h" | |
7 #include "ash/shell.h" | 9 #include "ash/shell.h" |
8 #include "ash/test/ash_test_base.h" | 10 #include "ash/test/ash_test_base.h" |
9 #include "ash/test/shell_test_api.h" | 11 #include "ash/test/shell_test_api.h" |
10 #include "ash/wm/window_util.h" | 12 #include "ash/wm/window_util.h" |
11 #include "ash/wm/workspace/workspace_event_handler_test_helper.h" | 13 #include "ash/wm/workspace/workspace_event_handler_test_helper.h" |
12 #include "ash/wm/workspace_controller.h" | 14 #include "ash/wm/workspace_controller.h" |
13 #include "ash/wm/workspace_controller_test_helper.h" | 15 #include "ash/wm/workspace_controller_test_helper.h" |
14 #include "ui/aura/test/test_window_delegate.h" | 16 #include "ui/aura/test/test_window_delegate.h" |
15 #include "ui/aura/window.h" | 17 #include "ui/aura/window.h" |
16 #include "ui/base/hit_test.h" | 18 #include "ui/base/hit_test.h" |
17 #include "ui/events/test/event_generator.h" | 19 #include "ui/events/test/event_generator.h" |
18 #include "ui/gfx/screen.h" | 20 #include "ui/gfx/screen.h" |
19 #include "ui/views/widget/widget.h" | 21 #include "ui/views/widget/widget.h" |
22 #include "ui/views/widget/widget_delegate.h" | |
20 | 23 |
21 namespace ash { | 24 namespace ash { |
22 | 25 |
26 namespace { | |
27 | |
28 // WidgetDelegate for a resizable widget which creates a NonClientFrameView | |
29 // which is actually used in Ash. | |
30 class TestWidgetDelegate : public views::WidgetDelegateView { | |
31 public: | |
32 TestWidgetDelegate() {} | |
33 ~TestWidgetDelegate() override {} | |
34 | |
35 bool CanResize() const override { | |
36 return true; | |
37 } | |
38 | |
39 views::NonClientFrameView* CreateNonClientFrameView( | |
40 views::Widget* widget) override { | |
41 return new CustomFrameViewAsh(widget); | |
42 } | |
43 | |
44 private: | |
45 DISALLOW_COPY_AND_ASSIGN(TestWidgetDelegate); | |
46 }; | |
47 | |
48 } // namespace | |
49 | |
23 class MultiWindowResizeControllerTest : public test::AshTestBase { | 50 class MultiWindowResizeControllerTest : public test::AshTestBase { |
24 public: | 51 public: |
25 MultiWindowResizeControllerTest() : resize_controller_(NULL) {} | 52 MultiWindowResizeControllerTest() : resize_controller_(NULL) {} |
26 ~MultiWindowResizeControllerTest() override {} | 53 ~MultiWindowResizeControllerTest() override {} |
27 | 54 |
28 void SetUp() override { | 55 void SetUp() override { |
29 test::AshTestBase::SetUp(); | 56 test::AshTestBase::SetUp(); |
30 WorkspaceController* wc = | 57 WorkspaceController* wc = |
31 test::ShellTestApi(Shell::GetInstance()).workspace_controller(); | 58 test::ShellTestApi(Shell::GetInstance()).workspace_controller(); |
32 WorkspaceEventHandler* event_handler = | 59 WorkspaceEventHandler* event_handler = |
(...skipping 19 matching lines...) Expand all Loading... | |
52 } | 79 } |
53 | 80 |
54 bool IsShowing() { | 81 bool IsShowing() { |
55 return resize_controller_->IsShowing(); | 82 return resize_controller_->IsShowing(); |
56 } | 83 } |
57 | 84 |
58 bool HasPendingShow() { | 85 bool HasPendingShow() { |
59 return resize_controller_->show_timer_.IsRunning(); | 86 return resize_controller_->show_timer_.IsRunning(); |
60 } | 87 } |
61 | 88 |
62 bool HasPendingHide() { | |
63 return resize_controller_->hide_timer_.IsRunning(); | |
64 } | |
65 | |
66 void Hide() { | 89 void Hide() { |
67 resize_controller_->Hide(); | 90 resize_controller_->Hide(); |
68 } | 91 } |
69 | 92 |
70 bool HasTarget(aura::Window* window) { | 93 bool HasTarget(aura::Window* window) { |
71 if (!resize_controller_->windows_.is_valid()) | 94 if (!resize_controller_->windows_.is_valid()) |
72 return false; | 95 return false; |
73 if ((resize_controller_->windows_.window1 == window || | 96 if ((resize_controller_->windows_.window1 == window || |
74 resize_controller_->windows_.window2 == window)) | 97 resize_controller_->windows_.window2 == window)) |
75 return true; | 98 return true; |
(...skipping 26 matching lines...) Expand all Loading... | |
102 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); | 125 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); |
103 delegate1.set_window_component(HTRIGHT); | 126 delegate1.set_window_component(HTRIGHT); |
104 aura::test::TestWindowDelegate delegate2; | 127 aura::test::TestWindowDelegate delegate2; |
105 scoped_ptr<aura::Window> w2( | 128 scoped_ptr<aura::Window> w2( |
106 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); | 129 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); |
107 delegate2.set_window_component(HTRIGHT); | 130 delegate2.set_window_component(HTRIGHT); |
108 ui::test::EventGenerator generator(w1->GetRootWindow()); | 131 ui::test::EventGenerator generator(w1->GetRootWindow()); |
109 generator.MoveMouseTo(w1->bounds().CenterPoint()); | 132 generator.MoveMouseTo(w1->bounds().CenterPoint()); |
110 EXPECT_TRUE(HasPendingShow()); | 133 EXPECT_TRUE(HasPendingShow()); |
111 EXPECT_TRUE(IsShowing()); | 134 EXPECT_TRUE(IsShowing()); |
112 EXPECT_FALSE(HasPendingHide()); | |
113 | 135 |
114 // Force a show now. | 136 // Force a show now. |
115 ShowNow(); | 137 ShowNow(); |
116 EXPECT_FALSE(HasPendingShow()); | 138 EXPECT_FALSE(HasPendingShow()); |
117 EXPECT_TRUE(IsShowing()); | 139 EXPECT_TRUE(IsShowing()); |
118 EXPECT_FALSE(HasPendingHide()); | |
119 | 140 |
120 EXPECT_FALSE(IsOverWindows(gfx::Point(200, 200))); | 141 EXPECT_FALSE(IsOverWindows(gfx::Point(200, 200))); |
121 | 142 |
122 // Have to explicitly invoke this as MouseWatcher listens for native events. | 143 // Have to explicitly invoke this as MouseWatcher listens for native events. |
123 resize_controller_->MouseMovedOutOfHost(); | 144 resize_controller_->MouseMovedOutOfHost(); |
124 EXPECT_FALSE(HasPendingShow()); | 145 EXPECT_FALSE(HasPendingShow()); |
125 EXPECT_FALSE(IsShowing()); | 146 EXPECT_FALSE(IsShowing()); |
126 EXPECT_FALSE(HasPendingHide()); | 147 } |
148 | |
149 // Test the behavior of IsOverWindows(). | |
150 TEST_F(MultiWindowResizeControllerTest, IsOverWindows) { | |
151 // Create the following layout: | |
152 // __________________ | |
153 // | w1 | w2 | | |
154 // | |________| | |
155 // | | w3 | | |
156 // |________|________| | |
157 scoped_ptr<views::Widget> w1(new views::Widget); | |
158 views::Widget::InitParams params1; | |
159 params1.delegate = new TestWidgetDelegate; | |
160 params1.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | |
161 params1.bounds = gfx::Rect(100, 200); | |
162 params1.context = CurrentContext(); | |
163 w1->Init(params1); | |
164 w1->Show(); | |
165 | |
166 scoped_ptr<views::Widget> w2(new views::Widget); | |
167 views::Widget::InitParams params2; | |
168 params2.delegate = new TestWidgetDelegate; | |
169 params2.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | |
170 params2.bounds = gfx::Rect(100, 0, 100, 100); | |
171 params2.context = CurrentContext(); | |
172 w2->Init(params2); | |
173 w2->Show(); | |
174 | |
175 scoped_ptr<views::Widget> w3(new views::Widget); | |
176 views::Widget::InitParams params3; | |
177 params3.delegate = new TestWidgetDelegate; | |
178 params3.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | |
179 params3.bounds = gfx::Rect(100, 100, 100, 100); | |
180 params3.context = CurrentContext(); | |
181 w3->Init(params3); | |
182 w3->Show(); | |
183 | |
184 ui::test::EventGenerator& generator = GetEventGenerator(); | |
185 generator.MoveMouseTo(gfx::Point(100, 150)); | |
186 EXPECT_TRUE(HasPendingShow()); | |
187 EXPECT_TRUE(IsShowing()); | |
188 ShowNow(); | |
189 EXPECT_TRUE(IsShowing()); | |
190 | |
191 // Check that the multi-window resize handle does not hide while the mouse is | |
192 // over a window's resize area. A window's resize area extends outside the | |
193 // window's bounds. | |
194 EXPECT_TRUE(w3->IsActive()); | |
195 ASSERT_LT(kResizeInsideBoundsSize, kResizeOutsideBoundsSize); | |
196 | |
197 EXPECT_TRUE(IsOverWindows(gfx::Point(100, 150))); | |
198 EXPECT_TRUE(IsOverWindows(gfx::Point(100 - kResizeOutsideBoundsSize, 150))); | |
199 EXPECT_FALSE( | |
200 IsOverWindows(gfx::Point(100 - kResizeOutsideBoundsSize - 1, 150))); | |
201 EXPECT_TRUE( | |
202 IsOverWindows(gfx::Point(100 + kResizeInsideBoundsSize - 1, 150))); | |
203 EXPECT_FALSE(IsOverWindows(gfx::Point(100 + kResizeInsideBoundsSize, 150))); | |
204 EXPECT_FALSE( | |
205 IsOverWindows(gfx::Point(100 + kResizeOutsideBoundsSize - 1, 150))); | |
flackr
2014/12/01 20:19:36
This last expect is probably redundant given kResi
| |
206 | |
207 w1->Activate(); | |
208 EXPECT_TRUE(IsOverWindows(gfx::Point(100, 150))); | |
209 EXPECT_TRUE(IsOverWindows(gfx::Point(100 - kResizeInsideBoundsSize, 150))); | |
210 EXPECT_FALSE( | |
211 IsOverWindows(gfx::Point(100 - kResizeInsideBoundsSize - 1, 150))); | |
212 EXPECT_FALSE(IsOverWindows(gfx::Point(100 - kResizeOutsideBoundsSize, 150))); | |
213 EXPECT_TRUE( | |
214 IsOverWindows(gfx::Point(100 + kResizeOutsideBoundsSize - 1, 150))); | |
215 EXPECT_FALSE(IsOverWindows(gfx::Point(100 + kResizeOutsideBoundsSize, 150))); | |
216 | |
217 // Check that the multi-window resize handles eventually hide if the mouse | |
218 // moves between |w1| and |w2|. | |
219 EXPECT_FALSE(IsOverWindows(gfx::Point(100, 50))); | |
127 } | 220 } |
128 | 221 |
129 // Makes sure deleting a window hides. | 222 // Makes sure deleting a window hides. |
130 TEST_F(MultiWindowResizeControllerTest, DeleteWindow) { | 223 TEST_F(MultiWindowResizeControllerTest, DeleteWindow) { |
131 aura::test::TestWindowDelegate delegate1; | 224 aura::test::TestWindowDelegate delegate1; |
132 scoped_ptr<aura::Window> w1( | 225 scoped_ptr<aura::Window> w1( |
133 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); | 226 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); |
134 delegate1.set_window_component(HTRIGHT); | 227 delegate1.set_window_component(HTRIGHT); |
135 aura::test::TestWindowDelegate delegate2; | 228 aura::test::TestWindowDelegate delegate2; |
136 scoped_ptr<aura::Window> w2( | 229 scoped_ptr<aura::Window> w2( |
137 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); | 230 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); |
138 delegate2.set_window_component(HTRIGHT); | 231 delegate2.set_window_component(HTRIGHT); |
139 ui::test::EventGenerator generator(w1->GetRootWindow()); | 232 ui::test::EventGenerator generator(w1->GetRootWindow()); |
140 generator.MoveMouseTo(w1->bounds().CenterPoint()); | 233 generator.MoveMouseTo(w1->bounds().CenterPoint()); |
141 EXPECT_TRUE(HasPendingShow()); | 234 EXPECT_TRUE(HasPendingShow()); |
142 EXPECT_TRUE(IsShowing()); | 235 EXPECT_TRUE(IsShowing()); |
143 EXPECT_FALSE(HasPendingHide()); | |
144 | 236 |
145 // Force a show now. | 237 // Force a show now. |
146 ShowNow(); | 238 ShowNow(); |
147 EXPECT_FALSE(HasPendingShow()); | 239 EXPECT_FALSE(HasPendingShow()); |
148 EXPECT_TRUE(IsShowing()); | 240 EXPECT_TRUE(IsShowing()); |
149 EXPECT_FALSE(HasPendingHide()); | |
150 | 241 |
151 // Move the mouse over the resize widget. | 242 // Move the mouse over the resize widget. |
152 ASSERT_TRUE(resize_widget()); | 243 ASSERT_TRUE(resize_widget()); |
153 gfx::Rect bounds(resize_widget()->GetWindowBoundsInScreen()); | 244 gfx::Rect bounds(resize_widget()->GetWindowBoundsInScreen()); |
154 generator.MoveMouseTo(bounds.x() + 1, bounds.y() + 1); | 245 generator.MoveMouseTo(bounds.x() + 1, bounds.y() + 1); |
155 EXPECT_FALSE(HasPendingShow()); | 246 EXPECT_FALSE(HasPendingShow()); |
156 EXPECT_TRUE(IsShowing()); | 247 EXPECT_TRUE(IsShowing()); |
157 EXPECT_FALSE(HasPendingHide()); | |
158 | 248 |
159 // Move the resize widget | 249 // Move the resize widget |
160 generator.PressLeftButton(); | 250 generator.PressLeftButton(); |
161 generator.MoveMouseTo(bounds.x() + 10, bounds.y() + 10); | 251 generator.MoveMouseTo(bounds.x() + 10, bounds.y() + 10); |
162 | 252 |
163 // Delete w2. | 253 // Delete w2. |
164 w2.reset(); | 254 w2.reset(); |
165 EXPECT_TRUE(resize_widget() == NULL); | 255 EXPECT_TRUE(resize_widget() == NULL); |
166 EXPECT_FALSE(HasPendingShow()); | 256 EXPECT_FALSE(HasPendingShow()); |
167 EXPECT_FALSE(IsShowing()); | 257 EXPECT_FALSE(IsShowing()); |
168 EXPECT_FALSE(HasPendingHide()); | |
169 EXPECT_FALSE(HasTarget(w1.get())); | 258 EXPECT_FALSE(HasTarget(w1.get())); |
170 } | 259 } |
171 | 260 |
172 // Tests resizing. | 261 // Tests resizing. |
173 TEST_F(MultiWindowResizeControllerTest, Drag) { | 262 TEST_F(MultiWindowResizeControllerTest, Drag) { |
174 aura::test::TestWindowDelegate delegate1; | 263 aura::test::TestWindowDelegate delegate1; |
175 scoped_ptr<aura::Window> w1( | 264 scoped_ptr<aura::Window> w1( |
176 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); | 265 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); |
177 delegate1.set_window_component(HTRIGHT); | 266 delegate1.set_window_component(HTRIGHT); |
178 aura::test::TestWindowDelegate delegate2; | 267 aura::test::TestWindowDelegate delegate2; |
179 scoped_ptr<aura::Window> w2( | 268 scoped_ptr<aura::Window> w2( |
180 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); | 269 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); |
181 delegate2.set_window_component(HTRIGHT); | 270 delegate2.set_window_component(HTRIGHT); |
182 ui::test::EventGenerator generator(w1->GetRootWindow()); | 271 ui::test::EventGenerator generator(w1->GetRootWindow()); |
183 generator.MoveMouseTo(w1->bounds().CenterPoint()); | 272 generator.MoveMouseTo(w1->bounds().CenterPoint()); |
184 EXPECT_TRUE(HasPendingShow()); | 273 EXPECT_TRUE(HasPendingShow()); |
185 EXPECT_TRUE(IsShowing()); | 274 EXPECT_TRUE(IsShowing()); |
186 EXPECT_FALSE(HasPendingHide()); | |
187 | 275 |
188 // Force a show now. | 276 // Force a show now. |
189 ShowNow(); | 277 ShowNow(); |
190 EXPECT_FALSE(HasPendingShow()); | 278 EXPECT_FALSE(HasPendingShow()); |
191 EXPECT_TRUE(IsShowing()); | 279 EXPECT_TRUE(IsShowing()); |
192 EXPECT_FALSE(HasPendingHide()); | |
193 | 280 |
194 // Move the mouse over the resize widget. | 281 // Move the mouse over the resize widget. |
195 ASSERT_TRUE(resize_widget()); | 282 ASSERT_TRUE(resize_widget()); |
196 gfx::Rect bounds(resize_widget()->GetWindowBoundsInScreen()); | 283 gfx::Rect bounds(resize_widget()->GetWindowBoundsInScreen()); |
197 generator.MoveMouseTo(bounds.x() + 1, bounds.y() + 1); | 284 generator.MoveMouseTo(bounds.x() + 1, bounds.y() + 1); |
198 EXPECT_FALSE(HasPendingShow()); | 285 EXPECT_FALSE(HasPendingShow()); |
199 EXPECT_TRUE(IsShowing()); | 286 EXPECT_TRUE(IsShowing()); |
200 EXPECT_FALSE(HasPendingHide()); | |
201 | 287 |
202 // Move the resize widget | 288 // Move the resize widget |
203 generator.PressLeftButton(); | 289 generator.PressLeftButton(); |
204 generator.MoveMouseTo(bounds.x() + 11, bounds.y() + 10); | 290 generator.MoveMouseTo(bounds.x() + 11, bounds.y() + 10); |
205 generator.ReleaseLeftButton(); | 291 generator.ReleaseLeftButton(); |
206 | 292 |
207 EXPECT_TRUE(resize_widget()); | 293 EXPECT_TRUE(resize_widget()); |
208 EXPECT_FALSE(HasPendingShow()); | 294 EXPECT_FALSE(HasPendingShow()); |
209 EXPECT_TRUE(IsShowing()); | 295 EXPECT_TRUE(IsShowing()); |
210 EXPECT_FALSE(HasPendingHide()); | |
211 EXPECT_EQ("0,0 110x100", w1->bounds().ToString()); | 296 EXPECT_EQ("0,0 110x100", w1->bounds().ToString()); |
212 EXPECT_EQ("110,0 100x100", w2->bounds().ToString()); | 297 EXPECT_EQ("110,0 100x100", w2->bounds().ToString()); |
213 } | 298 } |
214 | 299 |
215 // Makes sure three windows are picked up. | 300 // Makes sure three windows are picked up. |
216 TEST_F(MultiWindowResizeControllerTest, Three) { | 301 TEST_F(MultiWindowResizeControllerTest, Three) { |
217 aura::test::TestWindowDelegate delegate1; | 302 aura::test::TestWindowDelegate delegate1; |
218 scoped_ptr<aura::Window> w1( | 303 scoped_ptr<aura::Window> w1( |
219 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); | 304 CreateTestWindow(&delegate1, gfx::Rect(0, 0, 100, 100))); |
220 delegate1.set_window_component(HTRIGHT); | 305 delegate1.set_window_component(HTRIGHT); |
221 aura::test::TestWindowDelegate delegate2; | 306 aura::test::TestWindowDelegate delegate2; |
222 scoped_ptr<aura::Window> w2( | 307 scoped_ptr<aura::Window> w2( |
223 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); | 308 CreateTestWindow(&delegate2, gfx::Rect(100, 0, 100, 100))); |
224 delegate2.set_window_component(HTRIGHT); | 309 delegate2.set_window_component(HTRIGHT); |
225 aura::test::TestWindowDelegate delegate3; | 310 aura::test::TestWindowDelegate delegate3; |
226 scoped_ptr<aura::Window> w3( | 311 scoped_ptr<aura::Window> w3( |
227 CreateTestWindow(&delegate3, gfx::Rect(200, 0, 100, 100))); | 312 CreateTestWindow(&delegate3, gfx::Rect(200, 0, 100, 100))); |
228 delegate3.set_window_component(HTRIGHT); | 313 delegate3.set_window_component(HTRIGHT); |
229 | 314 |
230 ui::test::EventGenerator generator(w1->GetRootWindow()); | 315 ui::test::EventGenerator generator(w1->GetRootWindow()); |
231 generator.MoveMouseTo(w1->bounds().CenterPoint()); | 316 generator.MoveMouseTo(w1->bounds().CenterPoint()); |
232 EXPECT_TRUE(HasPendingShow()); | 317 EXPECT_TRUE(HasPendingShow()); |
233 EXPECT_TRUE(IsShowing()); | 318 EXPECT_TRUE(IsShowing()); |
234 EXPECT_FALSE(HasPendingHide()); | |
235 EXPECT_FALSE(HasTarget(w3.get())); | 319 EXPECT_FALSE(HasTarget(w3.get())); |
236 | 320 |
237 ShowNow(); | 321 ShowNow(); |
238 EXPECT_FALSE(HasPendingShow()); | 322 EXPECT_FALSE(HasPendingShow()); |
239 EXPECT_TRUE(IsShowing()); | 323 EXPECT_TRUE(IsShowing()); |
240 EXPECT_FALSE(HasPendingHide()); | |
241 | 324 |
242 // w3 should be picked up when resize is started. | 325 // w3 should be picked up when resize is started. |
243 gfx::Rect bounds(resize_widget()->GetWindowBoundsInScreen()); | 326 gfx::Rect bounds(resize_widget()->GetWindowBoundsInScreen()); |
244 generator.MoveMouseTo(bounds.x() + 1, bounds.y() + 1); | 327 generator.MoveMouseTo(bounds.x() + 1, bounds.y() + 1); |
245 generator.PressLeftButton(); | 328 generator.PressLeftButton(); |
246 generator.MoveMouseTo(bounds.x() + 11, bounds.y() + 10); | 329 generator.MoveMouseTo(bounds.x() + 11, bounds.y() + 10); |
247 | 330 |
248 EXPECT_TRUE(HasTarget(w3.get())); | 331 EXPECT_TRUE(HasTarget(w3.get())); |
249 | 332 |
250 // Release the mouse. The resizer should still be visible and a subsequent | 333 // Release the mouse. The resizer should still be visible and a subsequent |
251 // press should not trigger a DCHECK. | 334 // press should not trigger a DCHECK. |
252 generator.ReleaseLeftButton(); | 335 generator.ReleaseLeftButton(); |
253 EXPECT_TRUE(IsShowing()); | 336 EXPECT_TRUE(IsShowing()); |
254 generator.PressLeftButton(); | 337 generator.PressLeftButton(); |
255 } | 338 } |
256 | 339 |
257 } // namespace ash | 340 } // namespace ash |
OLD | NEW |