OLD | NEW |
| (Empty) |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | |
2 // Use of this source code is governed by a BSD-style license that can be | |
3 // found in the LICENSE file. | |
4 | |
5 #include "ash/ash_switches.h" | |
6 #include "ash/session_state_delegate.h" | |
7 #include "ash/shell.h" | |
8 #include "ash/shell_window_ids.h" | |
9 #include "ash/test/ash_test_base.h" | |
10 #include "ash/test/test_shell_delegate.h" | |
11 #include "ash/wm/lock_state_controller.h" | |
12 #include "ash/wm/lock_state_controller_impl2.h" | |
13 #include "ash/wm/power_button_controller.h" | |
14 #include "ash/wm/session_state_animator.h" | |
15 #include "base/command_line.h" | |
16 #include "base/memory/scoped_ptr.h" | |
17 #include "base/time/time.h" | |
18 #include "ui/aura/env.h" | |
19 #include "ui/aura/root_window.h" | |
20 #include "ui/aura/test/event_generator.h" | |
21 #include "ui/compositor/layer_animator.h" | |
22 #include "ui/compositor/scoped_animation_duration_scale_mode.h" | |
23 #include "ui/compositor/scoped_layer_animation_settings.h" | |
24 #include "ui/gfx/rect.h" | |
25 #include "ui/gfx/size.h" | |
26 | |
27 #if defined(OS_WIN) | |
28 #include "base/win/windows_version.h" | |
29 #endif | |
30 | |
31 namespace ash { | |
32 | |
33 using internal::SessionStateAnimator; | |
34 | |
35 namespace test { | |
36 | |
37 namespace { | |
38 | |
39 bool cursor_visible() { | |
40 return ash::Shell::GetInstance()->cursor_manager()->IsCursorVisible(); | |
41 } | |
42 | |
43 void CheckCalledCallback(bool* flag) { | |
44 if (flag) | |
45 (*flag) = true; | |
46 } | |
47 | |
48 aura::Window* GetContainer(int container ) { | |
49 aura::RootWindow* root_window = Shell::GetPrimaryRootWindow(); | |
50 return Shell::GetContainer(root_window, container); | |
51 } | |
52 | |
53 bool IsBackgroundHidden() { | |
54 return !GetContainer(internal::kShellWindowId_DesktopBackgroundContainer)-> | |
55 IsVisible(); | |
56 } | |
57 | |
58 void ShowBackground() { | |
59 ui::ScopedLayerAnimationSettings settings( | |
60 GetContainer(internal::kShellWindowId_DesktopBackgroundContainer)-> | |
61 layer()->GetAnimator()); | |
62 settings.SetTransitionDuration(base::TimeDelta()); | |
63 GetContainer(internal::kShellWindowId_DesktopBackgroundContainer)->Show(); | |
64 } | |
65 | |
66 void HideBackground() { | |
67 ui::ScopedLayerAnimationSettings settings( | |
68 GetContainer(internal::kShellWindowId_DesktopBackgroundContainer)-> | |
69 layer()->GetAnimator()); | |
70 settings.SetTransitionDuration(base::TimeDelta()); | |
71 GetContainer(internal::kShellWindowId_DesktopBackgroundContainer)->Hide(); | |
72 } | |
73 | |
74 } // namespace | |
75 | |
76 // Fake implementation of PowerButtonControllerDelegate that just logs requests | |
77 // to lock the screen and shut down the device. | |
78 class TestLockStateControllerDelegate : public LockStateControllerDelegate { | |
79 public: | |
80 TestLockStateControllerDelegate() | |
81 : num_lock_requests_(0), | |
82 num_shutdown_requests_(0) {} | |
83 | |
84 int num_lock_requests() const { return num_lock_requests_; } | |
85 int num_shutdown_requests() const { return num_shutdown_requests_; } | |
86 | |
87 // LockStateControllerDelegate implementation. | |
88 virtual void RequestLockScreen() OVERRIDE { | |
89 num_lock_requests_++; | |
90 } | |
91 virtual void RequestShutdown() OVERRIDE { | |
92 num_shutdown_requests_++; | |
93 } | |
94 | |
95 private: | |
96 int num_lock_requests_; | |
97 int num_shutdown_requests_; | |
98 | |
99 DISALLOW_COPY_AND_ASSIGN(TestLockStateControllerDelegate); | |
100 }; | |
101 | |
102 class LockStateControllerImpl2Test : public AshTestBase { | |
103 public: | |
104 LockStateControllerImpl2Test() : controller_(NULL), delegate_(NULL) {} | |
105 virtual ~LockStateControllerImpl2Test() {} | |
106 | |
107 virtual void SetUp() OVERRIDE { | |
108 CHECK(!CommandLine::ForCurrentProcess()->HasSwitch( | |
109 ash::switches::kAshDisableNewLockAnimations)); | |
110 | |
111 AshTestBase::SetUp(); | |
112 | |
113 // We would control animations in a fine way: | |
114 animation_duration_mode_.reset(new ui::ScopedAnimationDurationScaleMode( | |
115 ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION)); | |
116 // TODO(antrim) : restore | |
117 // animator_helper_ = ui::test::CreateLayerAnimatorHelperForTest(); | |
118 | |
119 // Temporary disable animations so that observer is always called, and | |
120 // no leaks happen during tests. | |
121 animation_duration_mode_.reset(new ui::ScopedAnimationDurationScaleMode( | |
122 ui::ScopedAnimationDurationScaleMode::ZERO_DURATION)); | |
123 // TODO(antrim): once there is a way to mock time and run animations, make | |
124 // sure that animations are finished even in simple tests. | |
125 | |
126 delegate_ = new TestLockStateControllerDelegate; | |
127 controller_ = Shell::GetInstance()->power_button_controller(); | |
128 lock_state_controller_ = static_cast<LockStateControllerImpl2*>( | |
129 Shell::GetInstance()->lock_state_controller()); | |
130 lock_state_controller_->SetDelegate(delegate_); // transfers ownership | |
131 test_api_.reset( | |
132 new LockStateControllerImpl2::TestApi(lock_state_controller_)); | |
133 animator_api_.reset( | |
134 new SessionStateAnimator::TestApi(lock_state_controller_-> | |
135 animator_.get())); | |
136 shell_delegate_ = reinterpret_cast<TestShellDelegate*>( | |
137 ash::Shell::GetInstance()->delegate()); | |
138 session_state_delegate_ = Shell::GetInstance()->session_state_delegate(); | |
139 } | |
140 | |
141 virtual void TearDown() { | |
142 // TODO(antrim) : restore | |
143 // animator_helper_->AdvanceUntilDone(); | |
144 AshTestBase::TearDown(); | |
145 } | |
146 | |
147 protected: | |
148 void GenerateMouseMoveEvent() { | |
149 aura::test::EventGenerator generator( | |
150 Shell::GetPrimaryRootWindow()); | |
151 generator.MoveMouseTo(10, 10); | |
152 } | |
153 | |
154 int NumShutdownRequests() { | |
155 return delegate_->num_shutdown_requests() + | |
156 shell_delegate_->num_exit_requests(); | |
157 } | |
158 | |
159 void Advance(SessionStateAnimator::AnimationSpeed speed) { | |
160 // TODO (antrim) : restore | |
161 // animator_helper_->Advance(SessionStateAnimator::GetDuration(speed)); | |
162 } | |
163 | |
164 void AdvancePartially(SessionStateAnimator::AnimationSpeed speed, | |
165 float factor) { | |
166 // TODO (antrim) : restore | |
167 // base::TimeDelta duration = SessionStateAnimator::GetDuration(speed); | |
168 // base::TimeDelta partial_duration = | |
169 // base::TimeDelta::FromInternalValue(duration.ToInternalValue() * factor); | |
170 // animator_helper_->Advance(partial_duration); | |
171 } | |
172 | |
173 void ExpectPreLockAnimationStarted() { | |
174 //TODO (antrim) : restore EXPECT_TRUE(animator_helper_->IsAnimating()); | |
175 EXPECT_TRUE( | |
176 animator_api_->ContainersAreAnimated( | |
177 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | |
178 SessionStateAnimator::ANIMATION_LIFT)); | |
179 EXPECT_TRUE( | |
180 animator_api_->ContainersAreAnimated( | |
181 SessionStateAnimator::LAUNCHER, | |
182 SessionStateAnimator::ANIMATION_FADE_OUT)); | |
183 EXPECT_TRUE( | |
184 animator_api_->ContainersAreAnimated( | |
185 SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | |
186 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY)); | |
187 EXPECT_TRUE(test_api_->is_animating_lock()); | |
188 } | |
189 | |
190 void ExpectPreLockAnimationCancel() { | |
191 EXPECT_TRUE( | |
192 animator_api_->ContainersAreAnimated( | |
193 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | |
194 SessionStateAnimator::ANIMATION_DROP)); | |
195 EXPECT_TRUE( | |
196 animator_api_->ContainersAreAnimated( | |
197 SessionStateAnimator::LAUNCHER, | |
198 SessionStateAnimator::ANIMATION_FADE_IN)); | |
199 } | |
200 | |
201 void ExpectPreLockAnimationFinished() { | |
202 //TODO (antrim) : restore EXPECT_FALSE(animator_helper_->IsAnimating()); | |
203 EXPECT_TRUE( | |
204 animator_api_->ContainersAreAnimated( | |
205 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | |
206 SessionStateAnimator::ANIMATION_LIFT)); | |
207 EXPECT_TRUE( | |
208 animator_api_->ContainersAreAnimated( | |
209 SessionStateAnimator::LAUNCHER, | |
210 SessionStateAnimator::ANIMATION_FADE_OUT)); | |
211 EXPECT_TRUE( | |
212 animator_api_->ContainersAreAnimated( | |
213 SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | |
214 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY)); | |
215 } | |
216 | |
217 void ExpectPostLockAnimationStarted() { | |
218 //TODO (antrim) : restore EXPECT_TRUE(animator_helper_->IsAnimating()); | |
219 EXPECT_TRUE( | |
220 animator_api_->ContainersAreAnimated( | |
221 SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | |
222 SessionStateAnimator::ANIMATION_RAISE_TO_SCREEN)); | |
223 } | |
224 | |
225 void ExpectPastLockAnimationFinished() { | |
226 //TODO (antrim) : restore EXPECT_FALSE(animator_helper_->IsAnimating()); | |
227 EXPECT_TRUE( | |
228 animator_api_->ContainersAreAnimated( | |
229 SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | |
230 SessionStateAnimator::ANIMATION_RAISE_TO_SCREEN)); | |
231 } | |
232 | |
233 void ExpectUnlockBeforeUIDestroyedAnimationStarted() { | |
234 //TODO (antrim) : restore EXPECT_TRUE(animator_helper_->IsAnimating()); | |
235 EXPECT_TRUE( | |
236 animator_api_->ContainersAreAnimated( | |
237 SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | |
238 SessionStateAnimator::ANIMATION_LIFT)); | |
239 } | |
240 | |
241 void ExpectUnlockBeforeUIDestroyedAnimationFinished() { | |
242 //TODO (antrim) : restore EXPECT_FALSE(animator_helper_->IsAnimating()); | |
243 EXPECT_TRUE( | |
244 animator_api_->ContainersAreAnimated( | |
245 SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | |
246 SessionStateAnimator::ANIMATION_LIFT)); | |
247 } | |
248 | |
249 void ExpectUnlockAfterUIDestroyedAnimationStarted() { | |
250 //TODO (antrim) : restore EXPECT_TRUE(animator_helper_->IsAnimating()); | |
251 EXPECT_TRUE( | |
252 animator_api_->ContainersAreAnimated( | |
253 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | |
254 SessionStateAnimator::ANIMATION_DROP)); | |
255 EXPECT_TRUE( | |
256 animator_api_->ContainersAreAnimated( | |
257 SessionStateAnimator::LAUNCHER, | |
258 SessionStateAnimator::ANIMATION_FADE_IN)); | |
259 } | |
260 | |
261 void ExpectUnlockAfterUIDestroyedAnimationFinished() { | |
262 //TODO (antrim) : restore EXPECT_FALSE(animator_helper_->IsAnimating()); | |
263 EXPECT_TRUE( | |
264 animator_api_->ContainersAreAnimated( | |
265 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | |
266 SessionStateAnimator::ANIMATION_DROP)); | |
267 EXPECT_TRUE( | |
268 animator_api_->ContainersAreAnimated( | |
269 SessionStateAnimator::LAUNCHER, | |
270 SessionStateAnimator::ANIMATION_FADE_IN)); | |
271 } | |
272 | |
273 void ExpectShutdownAnimationStarted() { | |
274 //TODO (antrim) : restore EXPECT_TRUE(animator_helper_->IsAnimating()); | |
275 EXPECT_TRUE( | |
276 animator_api_->RootWindowIsAnimated( | |
277 SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS)); | |
278 } | |
279 | |
280 void ExpectShutdownAnimationFinished() { | |
281 //TODO (antrim) : restore EXPECT_FALSE(animator_helper_->IsAnimating()); | |
282 EXPECT_TRUE( | |
283 animator_api_->RootWindowIsAnimated( | |
284 SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS)); | |
285 } | |
286 | |
287 void ExpectShutdownAnimationCancel() { | |
288 //TODO (antrim) : restore EXPECT_TRUE(animator_helper_->IsAnimating()); | |
289 EXPECT_TRUE( | |
290 animator_api_->RootWindowIsAnimated( | |
291 SessionStateAnimator::ANIMATION_UNDO_GRAYSCALE_BRIGHTNESS)); | |
292 } | |
293 | |
294 void ExpectBackgroundIsShowing() { | |
295 //TODO (antrim) : restore EXPECT_TRUE(animator_helper_->IsAnimating()); | |
296 EXPECT_TRUE( | |
297 animator_api_->ContainersAreAnimated( | |
298 SessionStateAnimator::DESKTOP_BACKGROUND, | |
299 SessionStateAnimator::ANIMATION_FADE_IN)); | |
300 } | |
301 | |
302 void ExpectBackgroundIsHiding() { | |
303 //TODO (antrim) : restore EXPECT_TRUE(animator_helper_->IsAnimating()); | |
304 EXPECT_TRUE( | |
305 animator_api_->ContainersAreAnimated( | |
306 SessionStateAnimator::DESKTOP_BACKGROUND, | |
307 SessionStateAnimator::ANIMATION_FADE_OUT)); | |
308 } | |
309 | |
310 void ExpectUnlockedState() { | |
311 //TODO (antrim) : restore EXPECT_FALSE(animator_helper_->IsAnimating()); | |
312 EXPECT_FALSE(session_state_delegate_->IsScreenLocked()); | |
313 | |
314 aura::Window::Windows containers; | |
315 | |
316 SessionStateAnimator::GetContainers( | |
317 SessionStateAnimator::LAUNCHER | | |
318 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | |
319 &containers); | |
320 for (aura::Window::Windows::const_iterator it = containers.begin(); | |
321 it != containers.end(); ++it) { | |
322 aura::Window* window = *it; | |
323 ui::Layer* layer = window->layer(); | |
324 EXPECT_EQ(1.0f, layer->opacity()); | |
325 EXPECT_EQ(0.0f, layer->layer_brightness()); | |
326 EXPECT_EQ(0.0f, layer->layer_saturation()); | |
327 EXPECT_EQ(gfx::Transform(), layer->transform()); | |
328 } | |
329 } | |
330 | |
331 void ExpectLockedState() { | |
332 //TODO (antrim) : restore EXPECT_FALSE(animator_helper_->IsAnimating()); | |
333 EXPECT_TRUE(session_state_delegate_->IsScreenLocked()); | |
334 | |
335 aura::Window::Windows containers; | |
336 | |
337 SessionStateAnimator::GetContainers( | |
338 SessionStateAnimator::LOCK_SCREEN_RELATED_CONTAINERS | | |
339 SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | |
340 &containers); | |
341 for (aura::Window::Windows::const_iterator it = containers.begin(); | |
342 it != containers.end(); ++it) { | |
343 aura::Window* window = *it; | |
344 ui::Layer* layer = window->layer(); | |
345 EXPECT_EQ(1.0f, layer->opacity()); | |
346 EXPECT_EQ(0.0f, layer->layer_brightness()); | |
347 EXPECT_EQ(0.0f, layer->layer_saturation()); | |
348 EXPECT_EQ(gfx::Transform(), layer->transform()); | |
349 } | |
350 } | |
351 | |
352 void PressPowerButton() { | |
353 controller_->OnPowerButtonEvent(true, base::TimeTicks::Now()); | |
354 //TODO (antrim) : restore animator_helper_->Advance(base::TimeDelta()); | |
355 } | |
356 | |
357 void ReleasePowerButton() { | |
358 controller_->OnPowerButtonEvent(false, base::TimeTicks::Now()); | |
359 //TODO (antrim) : restore animator_helper_->Advance(base::TimeDelta()); | |
360 } | |
361 | |
362 void PressLockButton() { | |
363 controller_->OnLockButtonEvent(true, base::TimeTicks::Now()); | |
364 } | |
365 | |
366 void ReleaseLockButton() { | |
367 controller_->OnLockButtonEvent(false, base::TimeTicks::Now()); | |
368 } | |
369 | |
370 void SystemLocks() { | |
371 lock_state_controller_->OnLockStateChanged(true); | |
372 session_state_delegate_->LockScreen(); | |
373 //TODO (antrim) : restore animator_helper_->Advance(base::TimeDelta()); | |
374 } | |
375 | |
376 void SuccessfulAuthentication(bool* call_flag) { | |
377 base::Closure closure = base::Bind(&CheckCalledCallback, call_flag); | |
378 lock_state_controller_->OnLockScreenHide(closure); | |
379 //TODO (antrim) : restore animator_helper_->Advance(base::TimeDelta()); | |
380 } | |
381 | |
382 void SystemUnlocks() { | |
383 lock_state_controller_->OnLockStateChanged(false); | |
384 session_state_delegate_->UnlockScreen(); | |
385 //TODO (antrim) : restore animator_helper_->Advance(base::TimeDelta()); | |
386 } | |
387 | |
388 void Initialize(bool legacy_button, user::LoginStatus status) { | |
389 controller_->set_has_legacy_power_button_for_test(legacy_button); | |
390 lock_state_controller_->OnLoginStateChanged(status); | |
391 SetUserLoggedIn(status != user::LOGGED_IN_NONE); | |
392 if (status == user::LOGGED_IN_GUEST) | |
393 SetCanLockScreen(false); | |
394 lock_state_controller_->OnLockStateChanged(false); | |
395 } | |
396 | |
397 PowerButtonController* controller_; // not owned | |
398 LockStateControllerImpl2* lock_state_controller_; // not owned | |
399 TestLockStateControllerDelegate* delegate_; // not owned | |
400 TestShellDelegate* shell_delegate_; // not owned | |
401 SessionStateDelegate* session_state_delegate_; // not owned | |
402 | |
403 scoped_ptr<ui::ScopedAnimationDurationScaleMode> animation_duration_mode_; | |
404 scoped_ptr<LockStateControllerImpl2::TestApi> test_api_; | |
405 scoped_ptr<SessionStateAnimator::TestApi> animator_api_; | |
406 // TODO(antrim) : restore | |
407 // scoped_ptr<ui::test::AnimationContainerTestHelper> animator_helper_; | |
408 | |
409 private: | |
410 DISALLOW_COPY_AND_ASSIGN(LockStateControllerImpl2Test); | |
411 }; | |
412 | |
413 // Test the lock-to-shutdown flow for non-Chrome-OS hardware that doesn't | |
414 // correctly report power button releases. We should lock immediately the first | |
415 // time the button is pressed and shut down when it's pressed from the locked | |
416 // state. | |
417 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
418 TEST_F(LockStateControllerImpl2Test, DISABLED_LegacyLockAndShutDown) { | |
419 Initialize(true, user::LOGGED_IN_USER); | |
420 | |
421 ExpectUnlockedState(); | |
422 | |
423 // We should request that the screen be locked immediately after seeing the | |
424 // power button get pressed. | |
425 PressPowerButton(); | |
426 | |
427 ExpectPreLockAnimationStarted(); | |
428 | |
429 EXPECT_FALSE(test_api_->is_lock_cancellable()); | |
430 | |
431 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
432 | |
433 ExpectPreLockAnimationFinished(); | |
434 EXPECT_EQ(1, delegate_->num_lock_requests()); | |
435 | |
436 // Notify that we locked successfully. | |
437 lock_state_controller_->OnStartingLock(); | |
438 // We had that animation already. | |
439 //TODO (antrim) : restore | |
440 // EXPECT_FALSE(animator_helper_->IsAnimating()); | |
441 | |
442 SystemLocks(); | |
443 | |
444 ExpectPostLockAnimationStarted(); | |
445 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
446 ExpectPastLockAnimationFinished(); | |
447 | |
448 // We shouldn't progress towards the shutdown state, however. | |
449 EXPECT_FALSE(test_api_->lock_to_shutdown_timer_is_running()); | |
450 EXPECT_FALSE(test_api_->shutdown_timer_is_running()); | |
451 | |
452 ReleasePowerButton(); | |
453 | |
454 // Hold the button again and check that we start shutting down. | |
455 PressPowerButton(); | |
456 | |
457 ExpectShutdownAnimationStarted(); | |
458 | |
459 EXPECT_EQ(0, NumShutdownRequests()); | |
460 // Make sure a mouse move event won't show the cursor. | |
461 GenerateMouseMoveEvent(); | |
462 EXPECT_FALSE(cursor_visible()); | |
463 | |
464 EXPECT_TRUE(test_api_->real_shutdown_timer_is_running()); | |
465 test_api_->trigger_real_shutdown_timeout(); | |
466 EXPECT_EQ(1, NumShutdownRequests()); | |
467 } | |
468 | |
469 // Test that we start shutting down immediately if the power button is pressed | |
470 // while we're not logged in on an unofficial system. | |
471 TEST_F(LockStateControllerImpl2Test, LegacyNotLoggedIn) { | |
472 Initialize(true, user::LOGGED_IN_NONE); | |
473 | |
474 PressPowerButton(); | |
475 ExpectShutdownAnimationStarted(); | |
476 | |
477 EXPECT_TRUE(test_api_->real_shutdown_timer_is_running()); | |
478 } | |
479 | |
480 // Test that we start shutting down immediately if the power button is pressed | |
481 // while we're logged in as a guest on an unofficial system. | |
482 TEST_F(LockStateControllerImpl2Test, LegacyGuest) { | |
483 Initialize(true, user::LOGGED_IN_GUEST); | |
484 | |
485 PressPowerButton(); | |
486 ExpectShutdownAnimationStarted(); | |
487 | |
488 EXPECT_TRUE(test_api_->real_shutdown_timer_is_running()); | |
489 } | |
490 | |
491 // When we hold the power button while the user isn't logged in, we should shut | |
492 // down the machine directly. | |
493 TEST_F(LockStateControllerImpl2Test, ShutdownWhenNotLoggedIn) { | |
494 Initialize(false, user::LOGGED_IN_NONE); | |
495 | |
496 // Press the power button and check that we start the shutdown timer. | |
497 PressPowerButton(); | |
498 EXPECT_FALSE(test_api_->is_animating_lock()); | |
499 EXPECT_TRUE(test_api_->shutdown_timer_is_running()); | |
500 ExpectShutdownAnimationStarted(); | |
501 | |
502 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN, 0.5f); | |
503 | |
504 // Release the power button before the shutdown timer fires. | |
505 ReleasePowerButton(); | |
506 | |
507 EXPECT_FALSE(test_api_->shutdown_timer_is_running()); | |
508 ExpectShutdownAnimationCancel(); | |
509 | |
510 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_REVERT, 0.5f); | |
511 | |
512 // Press the button again and make the shutdown timeout fire this time. | |
513 // Check that we start the timer for actually requesting the shutdown. | |
514 PressPowerButton(); | |
515 | |
516 EXPECT_TRUE(test_api_->shutdown_timer_is_running()); | |
517 | |
518 Advance(SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); | |
519 ExpectShutdownAnimationFinished(); | |
520 test_api_->trigger_shutdown_timeout(); | |
521 | |
522 EXPECT_TRUE(test_api_->real_shutdown_timer_is_running()); | |
523 EXPECT_EQ(0, NumShutdownRequests()); | |
524 | |
525 // When the timout fires, we should request a shutdown. | |
526 test_api_->trigger_real_shutdown_timeout(); | |
527 | |
528 EXPECT_EQ(1, NumShutdownRequests()); | |
529 } | |
530 | |
531 // Test that we lock the screen and deal with unlocking correctly. | |
532 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
533 TEST_F(LockStateControllerImpl2Test, DISABLED_LockAndUnlock) { | |
534 Initialize(false, user::LOGGED_IN_USER); | |
535 | |
536 ExpectUnlockedState(); | |
537 | |
538 // Press the power button and check that the lock timer is started and that we | |
539 // start lifting the non-screen-locker containers. | |
540 PressPowerButton(); | |
541 | |
542 ExpectPreLockAnimationStarted(); | |
543 EXPECT_TRUE(test_api_->is_lock_cancellable()); | |
544 EXPECT_EQ(0, delegate_->num_lock_requests()); | |
545 | |
546 Advance(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); | |
547 ExpectPreLockAnimationFinished(); | |
548 | |
549 EXPECT_EQ(1, delegate_->num_lock_requests()); | |
550 | |
551 // Notify that we locked successfully. | |
552 lock_state_controller_->OnStartingLock(); | |
553 // We had that animation already. | |
554 //TODO (antrim) : restore EXPECT_FALSE(animator_helper_->IsAnimating()); | |
555 | |
556 SystemLocks(); | |
557 | |
558 ExpectPostLockAnimationStarted(); | |
559 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
560 ExpectPastLockAnimationFinished(); | |
561 | |
562 // When we release the power button, the lock-to-shutdown timer should be | |
563 // stopped. | |
564 ExpectLockedState(); | |
565 EXPECT_TRUE(test_api_->lock_to_shutdown_timer_is_running()); | |
566 ReleasePowerButton(); | |
567 ExpectLockedState(); | |
568 EXPECT_FALSE(test_api_->lock_to_shutdown_timer_is_running()); | |
569 | |
570 // Notify that the screen has been unlocked. We should show the | |
571 // non-screen-locker windows. | |
572 bool called = false; | |
573 SuccessfulAuthentication(&called); | |
574 | |
575 ExpectUnlockBeforeUIDestroyedAnimationStarted(); | |
576 EXPECT_FALSE(called); | |
577 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
578 ExpectUnlockBeforeUIDestroyedAnimationFinished(); | |
579 | |
580 EXPECT_TRUE(called); | |
581 | |
582 SystemUnlocks(); | |
583 | |
584 ExpectUnlockAfterUIDestroyedAnimationStarted(); | |
585 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
586 ExpectUnlockAfterUIDestroyedAnimationFinished(); | |
587 | |
588 ExpectUnlockedState(); | |
589 } | |
590 | |
591 // Test that we deal with cancelling lock correctly. | |
592 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
593 TEST_F(LockStateControllerImpl2Test, DISABLED_LockAndCancel) { | |
594 Initialize(false, user::LOGGED_IN_USER); | |
595 | |
596 ExpectUnlockedState(); | |
597 | |
598 // Press the power button and check that the lock timer is started and that we | |
599 // start lifting the non-screen-locker containers. | |
600 PressPowerButton(); | |
601 | |
602 ExpectPreLockAnimationStarted(); | |
603 EXPECT_TRUE(test_api_->is_lock_cancellable()); | |
604 | |
605 // forward only half way through | |
606 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 0.5f); | |
607 | |
608 gfx::Transform transform_before_button_released = | |
609 GetContainer(internal::kShellWindowId_DefaultContainer)-> | |
610 layer()->transform(); | |
611 | |
612 // Release the button before the lock timer fires. | |
613 ReleasePowerButton(); | |
614 | |
615 ExpectPreLockAnimationCancel(); | |
616 | |
617 gfx::Transform transform_after_button_released = | |
618 GetContainer(internal::kShellWindowId_DefaultContainer)-> | |
619 layer()->transform(); | |
620 // Expect no flickering, animation should proceed from mid-state. | |
621 EXPECT_EQ(transform_before_button_released, transform_after_button_released); | |
622 | |
623 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
624 ExpectUnlockedState(); | |
625 EXPECT_EQ(0, delegate_->num_lock_requests()); | |
626 } | |
627 | |
628 // Test that we deal with cancelling lock correctly. | |
629 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
630 TEST_F(LockStateControllerImpl2Test, | |
631 DISABLED_LockAndCancelAndLockAgain) { | |
632 Initialize(false, user::LOGGED_IN_USER); | |
633 | |
634 ExpectUnlockedState(); | |
635 | |
636 // Press the power button and check that the lock timer is started and that we | |
637 // start lifting the non-screen-locker containers. | |
638 PressPowerButton(); | |
639 | |
640 ExpectPreLockAnimationStarted(); | |
641 EXPECT_TRUE(test_api_->is_lock_cancellable()); | |
642 | |
643 // forward only half way through | |
644 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 0.5f); | |
645 | |
646 // Release the button before the lock timer fires. | |
647 ReleasePowerButton(); | |
648 ExpectPreLockAnimationCancel(); | |
649 | |
650 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, 0.5f); | |
651 | |
652 PressPowerButton(); | |
653 ExpectPreLockAnimationStarted(); | |
654 EXPECT_TRUE(test_api_->is_lock_cancellable()); | |
655 | |
656 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 0.6f); | |
657 | |
658 EXPECT_EQ(0, delegate_->num_lock_requests()); | |
659 ExpectPreLockAnimationStarted(); | |
660 | |
661 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 0.6f); | |
662 ExpectPreLockAnimationFinished(); | |
663 EXPECT_EQ(1, delegate_->num_lock_requests()); | |
664 } | |
665 | |
666 // Hold the power button down from the unlocked state to eventual shutdown. | |
667 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
668 TEST_F(LockStateControllerImpl2Test, DISABLED_LockToShutdown) { | |
669 Initialize(false, user::LOGGED_IN_USER); | |
670 | |
671 // Hold the power button and lock the screen. | |
672 PressPowerButton(); | |
673 EXPECT_TRUE(test_api_->is_animating_lock()); | |
674 | |
675 Advance(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); | |
676 SystemLocks(); | |
677 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
678 | |
679 // When the lock-to-shutdown timeout fires, we should start the shutdown | |
680 // timer. | |
681 EXPECT_TRUE(test_api_->lock_to_shutdown_timer_is_running()); | |
682 | |
683 test_api_->trigger_lock_to_shutdown_timeout(); | |
684 | |
685 ExpectShutdownAnimationStarted(); | |
686 EXPECT_TRUE(test_api_->shutdown_timer_is_running()); | |
687 | |
688 // Fire the shutdown timeout and check that we request shutdown. | |
689 Advance(SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); | |
690 ExpectShutdownAnimationFinished(); | |
691 test_api_->trigger_shutdown_timeout(); | |
692 | |
693 EXPECT_TRUE(test_api_->real_shutdown_timer_is_running()); | |
694 EXPECT_EQ(0, NumShutdownRequests()); | |
695 test_api_->trigger_real_shutdown_timeout(); | |
696 EXPECT_EQ(1, NumShutdownRequests()); | |
697 } | |
698 | |
699 // Hold the power button down from the unlocked state to eventual shutdown, | |
700 // then release the button while system does locking. | |
701 TEST_F(LockStateControllerImpl2Test, CancelLockToShutdown) { | |
702 Initialize(false, user::LOGGED_IN_USER); | |
703 | |
704 PressPowerButton(); | |
705 | |
706 // Hold the power button and lock the screen. | |
707 EXPECT_TRUE(test_api_->is_animating_lock()); | |
708 | |
709 Advance(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); | |
710 SystemLocks(); | |
711 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, 0.5f); | |
712 | |
713 // Power button is released while system attempts to lock. | |
714 ReleasePowerButton(); | |
715 | |
716 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
717 | |
718 EXPECT_FALSE(lock_state_controller_->ShutdownRequested()); | |
719 EXPECT_FALSE(test_api_->lock_to_shutdown_timer_is_running()); | |
720 EXPECT_FALSE(test_api_->shutdown_timer_is_running()); | |
721 } | |
722 | |
723 // Test that we handle the case where lock requests are ignored. | |
724 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
725 TEST_F(LockStateControllerImpl2Test, DISABLED_Lock) { | |
726 // We require animations to have a duration for this test. | |
727 ui::ScopedAnimationDurationScaleMode normal_duration_mode( | |
728 ui::ScopedAnimationDurationScaleMode::NORMAL_DURATION); | |
729 | |
730 Initialize(false, user::LOGGED_IN_USER); | |
731 | |
732 // Hold the power button and lock the screen. | |
733 PressPowerButton(); | |
734 ExpectPreLockAnimationStarted(); | |
735 | |
736 Advance(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); | |
737 | |
738 EXPECT_EQ(1, delegate_->num_lock_requests()); | |
739 EXPECT_TRUE(test_api_->lock_fail_timer_is_running()); | |
740 // We shouldn't start the lock-to-shutdown timer until the screen has actually | |
741 // been locked and this was animated. | |
742 EXPECT_FALSE(test_api_->lock_to_shutdown_timer_is_running()); | |
743 | |
744 // Act as if the request timed out. We should restore the windows. | |
745 test_api_->trigger_lock_fail_timeout(); | |
746 | |
747 ExpectUnlockAfterUIDestroyedAnimationStarted(); | |
748 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
749 ExpectUnlockAfterUIDestroyedAnimationFinished(); | |
750 ExpectUnlockedState(); | |
751 } | |
752 | |
753 // Test the basic operation of the lock button (not logged in). | |
754 TEST_F(LockStateControllerImpl2Test, LockButtonBasicNotLoggedIn) { | |
755 // The lock button shouldn't do anything if we aren't logged in. | |
756 Initialize(false, user::LOGGED_IN_NONE); | |
757 | |
758 PressLockButton(); | |
759 EXPECT_FALSE(test_api_->is_animating_lock()); | |
760 ReleaseLockButton(); | |
761 EXPECT_EQ(0, delegate_->num_lock_requests()); | |
762 } | |
763 | |
764 // Test the basic operation of the lock button (guest). | |
765 TEST_F(LockStateControllerImpl2Test, LockButtonBasicGuest) { | |
766 // The lock button shouldn't do anything when we're logged in as a guest. | |
767 Initialize(false, user::LOGGED_IN_GUEST); | |
768 | |
769 PressLockButton(); | |
770 EXPECT_FALSE(test_api_->is_animating_lock()); | |
771 ReleaseLockButton(); | |
772 EXPECT_EQ(0, delegate_->num_lock_requests()); | |
773 } | |
774 | |
775 // Test the basic operation of the lock button. | |
776 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
777 TEST_F(LockStateControllerImpl2Test, DISABLED_LockButtonBasic) { | |
778 // If we're logged in as a regular user, we should start the lock timer and | |
779 // the pre-lock animation. | |
780 Initialize(false, user::LOGGED_IN_USER); | |
781 | |
782 PressLockButton(); | |
783 ExpectPreLockAnimationStarted(); | |
784 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 0.5f); | |
785 | |
786 // If the button is released immediately, we shouldn't lock the screen. | |
787 ReleaseLockButton(); | |
788 ExpectPreLockAnimationCancel(); | |
789 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
790 | |
791 ExpectUnlockedState(); | |
792 EXPECT_EQ(0, delegate_->num_lock_requests()); | |
793 | |
794 // Press the button again and let the lock timeout fire. We should request | |
795 // that the screen be locked. | |
796 PressLockButton(); | |
797 ExpectPreLockAnimationStarted(); | |
798 Advance(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); | |
799 EXPECT_EQ(1, delegate_->num_lock_requests()); | |
800 | |
801 // Pressing the lock button while we have a pending lock request shouldn't do | |
802 // anything. | |
803 ReleaseLockButton(); | |
804 PressLockButton(); | |
805 ExpectPreLockAnimationFinished(); | |
806 ReleaseLockButton(); | |
807 | |
808 // Pressing the button also shouldn't do anything after the screen is locked. | |
809 SystemLocks(); | |
810 ExpectPostLockAnimationStarted(); | |
811 | |
812 PressLockButton(); | |
813 ReleaseLockButton(); | |
814 ExpectPostLockAnimationStarted(); | |
815 | |
816 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
817 ExpectPastLockAnimationFinished(); | |
818 | |
819 PressLockButton(); | |
820 ReleaseLockButton(); | |
821 ExpectPastLockAnimationFinished(); | |
822 } | |
823 | |
824 // Test that the power button takes priority over the lock button. | |
825 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
826 TEST_F(LockStateControllerImpl2Test, | |
827 DISABLED_PowerButtonPreemptsLockButton) { | |
828 Initialize(false, user::LOGGED_IN_USER); | |
829 | |
830 // While the lock button is down, hold the power button. | |
831 PressLockButton(); | |
832 ExpectPreLockAnimationStarted(); | |
833 PressPowerButton(); | |
834 ExpectPreLockAnimationStarted(); | |
835 | |
836 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 0.5f); | |
837 | |
838 // The lock timer shouldn't be stopped when the lock button is released. | |
839 ReleaseLockButton(); | |
840 ExpectPreLockAnimationStarted(); | |
841 ReleasePowerButton(); | |
842 ExpectPreLockAnimationCancel(); | |
843 | |
844 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
845 ExpectUnlockedState(); | |
846 | |
847 // Now press the power button first and then the lock button. | |
848 PressPowerButton(); | |
849 ExpectPreLockAnimationStarted(); | |
850 PressLockButton(); | |
851 ExpectPreLockAnimationStarted(); | |
852 | |
853 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 0.5f); | |
854 | |
855 // Releasing the power button should stop the lock timer. | |
856 ReleasePowerButton(); | |
857 ExpectPreLockAnimationCancel(); | |
858 ReleaseLockButton(); | |
859 ExpectPreLockAnimationCancel(); | |
860 } | |
861 | |
862 // When the screen is locked without going through the usual power-button | |
863 // slow-close path (e.g. via the wrench menu), test that we still show the | |
864 // fast-close animation. | |
865 TEST_F(LockStateControllerImpl2Test, LockWithoutButton) { | |
866 Initialize(false, user::LOGGED_IN_USER); | |
867 lock_state_controller_->OnStartingLock(); | |
868 | |
869 ExpectPreLockAnimationStarted(); | |
870 EXPECT_FALSE(test_api_->is_lock_cancellable()); | |
871 | |
872 // TODO(antrim): After time-faking is fixed, let the pre-lock animation | |
873 // complete here and check that delegate_->num_lock_requests() is 0 to | |
874 // prevent http://crbug.com/172487 from regressing. | |
875 } | |
876 | |
877 // When we hear that the process is exiting but we haven't had a chance to | |
878 // display an animation, we should just blank the screen. | |
879 TEST_F(LockStateControllerImpl2Test, ShutdownWithoutButton) { | |
880 Initialize(false, user::LOGGED_IN_USER); | |
881 lock_state_controller_->OnAppTerminating(); | |
882 | |
883 EXPECT_TRUE( | |
884 animator_api_->ContainersAreAnimated( | |
885 SessionStateAnimator::kAllContainersMask, | |
886 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY)); | |
887 GenerateMouseMoveEvent(); | |
888 EXPECT_FALSE(cursor_visible()); | |
889 } | |
890 | |
891 // Test that we display the fast-close animation and shut down when we get an | |
892 // outside request to shut down (e.g. from the login or lock screen). | |
893 TEST_F(LockStateControllerImpl2Test, RequestShutdownFromLoginScreen) { | |
894 Initialize(false, user::LOGGED_IN_NONE); | |
895 | |
896 lock_state_controller_->RequestShutdown(); | |
897 | |
898 ExpectShutdownAnimationStarted(); | |
899 Advance(SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); | |
900 | |
901 GenerateMouseMoveEvent(); | |
902 EXPECT_FALSE(cursor_visible()); | |
903 | |
904 EXPECT_EQ(0, NumShutdownRequests()); | |
905 EXPECT_TRUE(test_api_->real_shutdown_timer_is_running()); | |
906 test_api_->trigger_real_shutdown_timeout(); | |
907 EXPECT_EQ(1, NumShutdownRequests()); | |
908 } | |
909 | |
910 TEST_F(LockStateControllerImpl2Test, RequestShutdownFromLockScreen) { | |
911 Initialize(false, user::LOGGED_IN_USER); | |
912 | |
913 SystemLocks(); | |
914 Advance(SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); | |
915 ExpectPastLockAnimationFinished(); | |
916 | |
917 lock_state_controller_->RequestShutdown(); | |
918 | |
919 ExpectShutdownAnimationStarted(); | |
920 Advance(SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); | |
921 | |
922 GenerateMouseMoveEvent(); | |
923 EXPECT_FALSE(cursor_visible()); | |
924 | |
925 EXPECT_EQ(0, NumShutdownRequests()); | |
926 EXPECT_TRUE(test_api_->real_shutdown_timer_is_running()); | |
927 test_api_->trigger_real_shutdown_timeout(); | |
928 EXPECT_EQ(1, NumShutdownRequests()); | |
929 } | |
930 | |
931 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
932 TEST_F(LockStateControllerImpl2Test, | |
933 DISABLED_RequestAndCancelShutdownFromLockScreen) { | |
934 Initialize(false, user::LOGGED_IN_USER); | |
935 | |
936 SystemLocks(); | |
937 Advance(SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); | |
938 ExpectLockedState(); | |
939 | |
940 // Press the power button and check that we start the shutdown timer. | |
941 PressPowerButton(); | |
942 EXPECT_FALSE(test_api_->is_animating_lock()); | |
943 EXPECT_TRUE(test_api_->shutdown_timer_is_running()); | |
944 | |
945 ExpectShutdownAnimationStarted(); | |
946 | |
947 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN, 0.5f); | |
948 | |
949 float grayscale_before_button_release = | |
950 Shell::GetPrimaryRootWindow()->layer()->layer_grayscale(); | |
951 | |
952 // Release the power button before the shutdown timer fires. | |
953 ReleasePowerButton(); | |
954 | |
955 EXPECT_FALSE(test_api_->shutdown_timer_is_running()); | |
956 | |
957 ExpectShutdownAnimationCancel(); | |
958 | |
959 float grayscale_after_button_release = | |
960 Shell::GetPrimaryRootWindow()->layer()->layer_grayscale(); | |
961 // Expect no flickering in undo animation. | |
962 EXPECT_EQ(grayscale_before_button_release, grayscale_after_button_release); | |
963 | |
964 Advance(SessionStateAnimator::ANIMATION_SPEED_REVERT); | |
965 ExpectLockedState(); | |
966 } | |
967 | |
968 // Test that we ignore power button presses when the screen is turned off. | |
969 TEST_F(LockStateControllerImpl2Test, IgnorePowerButtonIfScreenIsOff) { | |
970 Initialize(false, user::LOGGED_IN_USER); | |
971 | |
972 // When the screen brightness is at 0%, we shouldn't do anything in response | |
973 // to power button presses. | |
974 controller_->OnScreenBrightnessChanged(0.0); | |
975 | |
976 PressPowerButton(); | |
977 EXPECT_FALSE(test_api_->is_animating_lock()); | |
978 ReleasePowerButton(); | |
979 | |
980 // After increasing the brightness to 10%, we should start the timer like | |
981 // usual. | |
982 controller_->OnScreenBrightnessChanged(10.0); | |
983 | |
984 PressPowerButton(); | |
985 EXPECT_TRUE(test_api_->is_animating_lock()); | |
986 } | |
987 | |
988 // Test that hidden background appears and revers correctly on lock/cancel. | |
989 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
990 TEST_F(LockStateControllerImpl2Test, | |
991 DISABLED_TestHiddenBackgroundLockCancel) { | |
992 Initialize(false, user::LOGGED_IN_USER); | |
993 HideBackground(); | |
994 | |
995 EXPECT_TRUE(IsBackgroundHidden()); | |
996 ExpectUnlockedState(); | |
997 PressPowerButton(); | |
998 | |
999 ExpectPreLockAnimationStarted(); | |
1000 EXPECT_FALSE(IsBackgroundHidden()); | |
1001 ExpectBackgroundIsShowing(); | |
1002 | |
1003 // Forward only half way through. | |
1004 AdvancePartially(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, 0.5f); | |
1005 | |
1006 // Release the button before the lock timer fires. | |
1007 ReleasePowerButton(); | |
1008 ExpectPreLockAnimationCancel(); | |
1009 ExpectBackgroundIsHiding(); | |
1010 EXPECT_FALSE(IsBackgroundHidden()); | |
1011 | |
1012 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
1013 | |
1014 ExpectUnlockedState(); | |
1015 EXPECT_TRUE(IsBackgroundHidden()); | |
1016 } | |
1017 | |
1018 // Test that hidden background appears and revers correctly on lock/unlock. | |
1019 // TODO(antrim): Reenable this: http://crbug.com/167048 | |
1020 TEST_F(LockStateControllerImpl2Test, | |
1021 DISABLED_TestHiddenBackgroundLockUnlock) { | |
1022 Initialize(false, user::LOGGED_IN_USER); | |
1023 HideBackground(); | |
1024 | |
1025 EXPECT_TRUE(IsBackgroundHidden()); | |
1026 ExpectUnlockedState(); | |
1027 | |
1028 // Press the power button and check that the lock timer is started and that we | |
1029 // start lifting the non-screen-locker containers. | |
1030 PressPowerButton(); | |
1031 | |
1032 ExpectPreLockAnimationStarted(); | |
1033 EXPECT_FALSE(IsBackgroundHidden()); | |
1034 ExpectBackgroundIsShowing(); | |
1035 | |
1036 Advance(SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); | |
1037 | |
1038 ExpectPreLockAnimationFinished(); | |
1039 | |
1040 SystemLocks(); | |
1041 | |
1042 ReleasePowerButton(); | |
1043 | |
1044 ExpectPostLockAnimationStarted(); | |
1045 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
1046 ExpectPastLockAnimationFinished(); | |
1047 | |
1048 ExpectLockedState(); | |
1049 | |
1050 SuccessfulAuthentication(NULL); | |
1051 | |
1052 ExpectUnlockBeforeUIDestroyedAnimationStarted(); | |
1053 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
1054 ExpectUnlockBeforeUIDestroyedAnimationFinished(); | |
1055 | |
1056 SystemUnlocks(); | |
1057 | |
1058 ExpectUnlockAfterUIDestroyedAnimationStarted(); | |
1059 ExpectBackgroundIsHiding(); | |
1060 EXPECT_FALSE(IsBackgroundHidden()); | |
1061 | |
1062 Advance(SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS); | |
1063 ExpectUnlockAfterUIDestroyedAnimationFinished(); | |
1064 EXPECT_TRUE(IsBackgroundHidden()); | |
1065 | |
1066 ExpectUnlockedState(); | |
1067 } | |
1068 | |
1069 } // namespace test | |
1070 } // namespace ash | |
OLD | NEW |