| 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/session_state_controller_impl2.h" | 5 #include "ash/wm/session_lock_state_controller_impl2.h" |
| 6 | 6 |
| 7 #include "ash/ash_switches.h" | 7 #include "ash/ash_switches.h" |
| 8 #include "ash/cancel_mode.h" | 8 #include "ash/cancel_mode.h" |
| 9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
| 10 #include "ash/shell_delegate.h" | 10 #include "ash/shell_delegate.h" |
| 11 #include "ash/shell_window_ids.h" | 11 #include "ash/shell_window_ids.h" |
| 12 #include "ash/wm/session_state_animator.h" | 12 #include "ash/wm/session_state_animator.h" |
| 13 #include "base/bind_helpers.h" | 13 #include "base/bind_helpers.h" |
| 14 #include "base/command_line.h" | 14 #include "base/command_line.h" |
| 15 #include "base/timer.h" | 15 #include "base/timer.h" |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 128 // Number of sequences either ended or aborted. | 128 // Number of sequences either ended or aborted. |
| 129 int sequences_completed_; | 129 int sequences_completed_; |
| 130 | 130 |
| 131 bool paused_; | 131 bool paused_; |
| 132 | 132 |
| 133 DISALLOW_COPY_AND_ASSIGN(AnimationFinishedObserver); | 133 DISALLOW_COPY_AND_ASSIGN(AnimationFinishedObserver); |
| 134 }; | 134 }; |
| 135 | 135 |
| 136 } // namespace | 136 } // namespace |
| 137 | 137 |
| 138 SessionStateControllerImpl2::TestApi::TestApi( | 138 SessionLockStateControllerImpl2::TestApi::TestApi( |
| 139 SessionStateControllerImpl2* controller) | 139 SessionLockStateControllerImpl2* controller) |
| 140 : controller_(controller) { | 140 : controller_(controller) { |
| 141 } | 141 } |
| 142 | 142 |
| 143 SessionStateControllerImpl2::TestApi::~TestApi() { | 143 SessionLockStateControllerImpl2::TestApi::~TestApi() { |
| 144 } | 144 } |
| 145 | 145 |
| 146 SessionStateControllerImpl2::SessionStateControllerImpl2() | 146 SessionLockStateControllerImpl2::SessionLockStateControllerImpl2() |
| 147 : login_status_(user::LOGGED_IN_NONE), | 147 : login_status_(user::LOGGED_IN_NONE), |
| 148 system_is_locked_(false), | 148 system_is_locked_(false), |
| 149 shutting_down_(false), | 149 shutting_down_(false), |
| 150 shutdown_after_lock_(false), | 150 shutdown_after_lock_(false), |
| 151 animating_lock_(false), | 151 animating_lock_(false), |
| 152 can_cancel_lock_animation_(false) { | 152 can_cancel_lock_animation_(false) { |
| 153 Shell::GetPrimaryRootWindow()->AddRootWindowObserver(this); | 153 Shell::GetPrimaryRootWindow()->AddRootWindowObserver(this); |
| 154 } | 154 } |
| 155 | 155 |
| 156 SessionStateControllerImpl2::~SessionStateControllerImpl2() { | 156 SessionLockStateControllerImpl2::~SessionLockStateControllerImpl2() { |
| 157 Shell::GetPrimaryRootWindow()->RemoveRootWindowObserver(this); | 157 Shell::GetPrimaryRootWindow()->RemoveRootWindowObserver(this); |
| 158 } | 158 } |
| 159 | 159 |
| 160 void SessionStateControllerImpl2::OnLoginStateChanged( | 160 void SessionLockStateControllerImpl2::OnLoginStateChanged( |
| 161 user::LoginStatus status) { | 161 user::LoginStatus status) { |
| 162 if (status != user::LOGGED_IN_LOCKED) | 162 if (status != user::LOGGED_IN_LOCKED) |
| 163 login_status_ = status; | 163 login_status_ = status; |
| 164 system_is_locked_ = (status == user::LOGGED_IN_LOCKED); | 164 system_is_locked_ = (status == user::LOGGED_IN_LOCKED); |
| 165 } | 165 } |
| 166 | 166 |
| 167 void SessionStateControllerImpl2::OnAppTerminating() { | 167 void SessionLockStateControllerImpl2::OnAppTerminating() { |
| 168 // If we hear that Chrome is exiting but didn't request it ourselves, all we | 168 // If we hear that Chrome is exiting but didn't request it ourselves, all we |
| 169 // can really hope for is that we'll have time to clear the screen. | 169 // can really hope for is that we'll have time to clear the screen. |
| 170 // This is also the case when the user signs off. | 170 // This is also the case when the user signs off. |
| 171 if (!shutting_down_) { | 171 if (!shutting_down_) { |
| 172 shutting_down_ = true; | 172 shutting_down_ = true; |
| 173 Shell* shell = ash::Shell::GetInstance(); | 173 Shell* shell = ash::Shell::GetInstance(); |
| 174 shell->env_filter()->set_cursor_hidden_by_filter(false); | 174 shell->env_filter()->set_cursor_hidden_by_filter(false); |
| 175 shell->cursor_manager()->HideCursor(); | 175 shell->cursor_manager()->HideCursor(); |
| 176 animator_->StartAnimation( | 176 animator_->StartAnimation( |
| 177 internal::SessionStateAnimator::kAllContainersMask, | 177 internal::SessionStateAnimator::kAllContainersMask, |
| 178 internal::SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, | 178 internal::SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, |
| 179 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); | 179 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); |
| 180 } | 180 } |
| 181 } | 181 } |
| 182 | 182 |
| 183 void SessionStateControllerImpl2::OnLockStateChanged(bool locked) { | 183 void SessionLockStateControllerImpl2::OnLockStateChanged(bool locked) { |
| 184 if (shutting_down_ || (system_is_locked_ == locked)) | 184 if (shutting_down_ || (system_is_locked_ == locked)) |
| 185 return; | 185 return; |
| 186 | 186 |
| 187 system_is_locked_ = locked; | 187 system_is_locked_ = locked; |
| 188 | 188 |
| 189 if (locked) { | 189 if (locked) { |
| 190 StartPostLockAnimation(); | 190 StartPostLockAnimation(); |
| 191 lock_fail_timer_.Stop(); | 191 lock_fail_timer_.Stop(); |
| 192 } else { | 192 } else { |
| 193 StartUnlockAnimationAfterUIDestroyed(); | 193 StartUnlockAnimationAfterUIDestroyed(); |
| 194 } | 194 } |
| 195 } | 195 } |
| 196 | 196 |
| 197 void SessionStateControllerImpl2::SetLockScreenDisplayedCallback( | 197 void SessionLockStateControllerImpl2::SetLockScreenDisplayedCallback( |
| 198 base::Closure& callback) { | 198 base::Closure& callback) { |
| 199 lock_screen_displayed_callback_ = callback; | 199 lock_screen_displayed_callback_ = callback; |
| 200 } | 200 } |
| 201 | 201 |
| 202 void SessionStateControllerImpl2::OnStartingLock() { | 202 void SessionLockStateControllerImpl2::OnStartingLock() { |
| 203 if (shutting_down_ || system_is_locked_) | 203 if (shutting_down_ || system_is_locked_) |
| 204 return; | 204 return; |
| 205 if (animating_lock_) | 205 if (animating_lock_) |
| 206 return; | 206 return; |
| 207 StartImmediatePreLockAnimation(false /* request_lock_on_completion */); | 207 StartImmediatePreLockAnimation(false /* request_lock_on_completion */); |
| 208 } | 208 } |
| 209 | 209 |
| 210 void SessionStateControllerImpl2::StartLockAnimationAndLockImmediately() { | 210 void SessionLockStateControllerImpl2::StartLockAnimationAndLockImmediately() { |
| 211 if (animating_lock_) | 211 if (animating_lock_) |
| 212 return; | 212 return; |
| 213 StartImmediatePreLockAnimation(true /* request_lock_on_completion */); | 213 StartImmediatePreLockAnimation(true /* request_lock_on_completion */); |
| 214 } | 214 } |
| 215 | 215 |
| 216 void SessionStateControllerImpl2::StartLockAnimation(bool shutdown_after_lock) { | 216 void SessionLockStateControllerImpl2::StartLockAnimation( |
| 217 bool shutdown_after_lock) { |
| 217 if (animating_lock_) | 218 if (animating_lock_) |
| 218 return; | 219 return; |
| 219 shutdown_after_lock_ = shutdown_after_lock; | 220 shutdown_after_lock_ = shutdown_after_lock; |
| 220 can_cancel_lock_animation_ = true; | 221 can_cancel_lock_animation_ = true; |
| 221 | 222 |
| 222 StartCancellablePreLockAnimation(); | 223 StartCancellablePreLockAnimation(); |
| 223 } | 224 } |
| 224 | 225 |
| 225 bool SessionStateControllerImpl2::LockRequested() { | 226 bool SessionLockStateControllerImpl2::LockRequested() { |
| 226 return lock_fail_timer_.IsRunning(); | 227 return lock_fail_timer_.IsRunning(); |
| 227 } | 228 } |
| 228 | 229 |
| 229 bool SessionStateControllerImpl2::ShutdownRequested() { | 230 bool SessionLockStateControllerImpl2::ShutdownRequested() { |
| 230 return shutting_down_; | 231 return shutting_down_; |
| 231 } | 232 } |
| 232 | 233 |
| 233 bool SessionStateControllerImpl2::CanCancelLockAnimation() { | 234 bool SessionLockStateControllerImpl2::CanCancelLockAnimation() { |
| 234 return can_cancel_lock_animation_; | 235 return can_cancel_lock_animation_; |
| 235 } | 236 } |
| 236 | 237 |
| 237 void SessionStateControllerImpl2::CancelLockAnimation() { | 238 void SessionLockStateControllerImpl2::CancelLockAnimation() { |
| 238 if (!CanCancelLockAnimation()) | 239 if (!CanCancelLockAnimation()) |
| 239 return; | 240 return; |
| 240 shutdown_after_lock_ = false; | 241 shutdown_after_lock_ = false; |
| 241 animating_lock_ = false; | 242 animating_lock_ = false; |
| 242 CancelPreLockAnimation(); | 243 CancelPreLockAnimation(); |
| 243 } | 244 } |
| 244 | 245 |
| 245 bool SessionStateControllerImpl2::CanCancelShutdownAnimation() { | 246 bool SessionLockStateControllerImpl2::CanCancelShutdownAnimation() { |
| 246 return pre_shutdown_timer_.IsRunning() || | 247 return pre_shutdown_timer_.IsRunning() || |
| 247 shutdown_after_lock_ || | 248 shutdown_after_lock_ || |
| 248 lock_to_shutdown_timer_.IsRunning(); | 249 lock_to_shutdown_timer_.IsRunning(); |
| 249 } | 250 } |
| 250 | 251 |
| 251 void SessionStateControllerImpl2::StartShutdownAnimation() { | 252 void SessionLockStateControllerImpl2::StartShutdownAnimation() { |
| 252 StartCancellableShutdownAnimation(); | 253 StartCancellableShutdownAnimation(); |
| 253 } | 254 } |
| 254 | 255 |
| 255 void SessionStateControllerImpl2::CancelShutdownAnimation() { | 256 void SessionLockStateControllerImpl2::CancelShutdownAnimation() { |
| 256 if (!CanCancelShutdownAnimation()) | 257 if (!CanCancelShutdownAnimation()) |
| 257 return; | 258 return; |
| 258 if (lock_to_shutdown_timer_.IsRunning()) { | 259 if (lock_to_shutdown_timer_.IsRunning()) { |
| 259 lock_to_shutdown_timer_.Stop(); | 260 lock_to_shutdown_timer_.Stop(); |
| 260 return; | 261 return; |
| 261 } | 262 } |
| 262 if (shutdown_after_lock_) { | 263 if (shutdown_after_lock_) { |
| 263 shutdown_after_lock_ = false; | 264 shutdown_after_lock_ = false; |
| 264 return; | 265 return; |
| 265 } | 266 } |
| 266 | 267 |
| 267 animator_->StartGlobalAnimation( | 268 animator_->StartGlobalAnimation( |
| 268 internal::SessionStateAnimator::ANIMATION_UNDO_GRAYSCALE_BRIGHTNESS, | 269 internal::SessionStateAnimator::ANIMATION_UNDO_GRAYSCALE_BRIGHTNESS, |
| 269 internal::SessionStateAnimator::ANIMATION_SPEED_REVERT_SHUTDOWN); | 270 internal::SessionStateAnimator::ANIMATION_SPEED_REVERT_SHUTDOWN); |
| 270 pre_shutdown_timer_.Stop(); | 271 pre_shutdown_timer_.Stop(); |
| 271 } | 272 } |
| 272 | 273 |
| 273 void SessionStateControllerImpl2::RequestShutdown() { | 274 void SessionLockStateControllerImpl2::RequestShutdown() { |
| 274 if (!shutting_down_) | 275 if (!shutting_down_) |
| 275 RequestShutdownImpl(); | 276 RequestShutdownImpl(); |
| 276 } | 277 } |
| 277 | 278 |
| 278 void SessionStateControllerImpl2::RequestShutdownImpl() { | 279 void SessionLockStateControllerImpl2::RequestShutdownImpl() { |
| 279 DCHECK(!shutting_down_); | 280 DCHECK(!shutting_down_); |
| 280 shutting_down_ = true; | 281 shutting_down_ = true; |
| 281 | 282 |
| 282 Shell* shell = ash::Shell::GetInstance(); | 283 Shell* shell = ash::Shell::GetInstance(); |
| 283 shell->env_filter()->set_cursor_hidden_by_filter(false); | 284 shell->env_filter()->set_cursor_hidden_by_filter(false); |
| 284 shell->cursor_manager()->HideCursor(); | 285 shell->cursor_manager()->HideCursor(); |
| 285 | 286 |
| 286 StartShutdownAnimationImpl(); | 287 StartShutdownAnimationImpl(); |
| 287 } | 288 } |
| 288 | 289 |
| 289 void SessionStateControllerImpl2::OnRootWindowHostCloseRequested( | 290 void SessionLockStateControllerImpl2::OnRootWindowHostCloseRequested( |
| 290 const aura::RootWindow*) { | 291 const aura::RootWindow*) { |
| 291 Shell::GetInstance()->delegate()->Exit(); | 292 Shell::GetInstance()->delegate()->Exit(); |
| 292 } | 293 } |
| 293 | 294 |
| 294 void SessionStateControllerImpl2::OnLockFailTimeout() { | 295 void SessionLockStateControllerImpl2::OnLockFailTimeout() { |
| 295 DCHECK(!system_is_locked_); | 296 DCHECK(!system_is_locked_); |
| 296 // Undo lock animation. | 297 // Undo lock animation. |
| 297 StartUnlockAnimationAfterUIDestroyed(); | 298 StartUnlockAnimationAfterUIDestroyed(); |
| 298 } | 299 } |
| 299 | 300 |
| 300 void SessionStateControllerImpl2::StartLockToShutdownTimer() { | 301 void SessionLockStateControllerImpl2::StartLockToShutdownTimer() { |
| 301 shutdown_after_lock_ = false; | 302 shutdown_after_lock_ = false; |
| 302 lock_to_shutdown_timer_.Stop(); | 303 lock_to_shutdown_timer_.Stop(); |
| 303 lock_to_shutdown_timer_.Start( | 304 lock_to_shutdown_timer_.Start( |
| 304 FROM_HERE, | 305 FROM_HERE, |
| 305 base::TimeDelta::FromMilliseconds(kLockToShutdownTimeoutMs), | 306 base::TimeDelta::FromMilliseconds(kLockToShutdownTimeoutMs), |
| 306 this, &SessionStateControllerImpl2::OnLockToShutdownTimeout); | 307 this, &SessionLockStateControllerImpl2::OnLockToShutdownTimeout); |
| 307 } | 308 } |
| 308 | 309 |
| 309 void SessionStateControllerImpl2::OnLockToShutdownTimeout() { | 310 void SessionLockStateControllerImpl2::OnLockToShutdownTimeout() { |
| 310 DCHECK(system_is_locked_); | 311 DCHECK(system_is_locked_); |
| 311 StartCancellableShutdownAnimation(); | 312 StartCancellableShutdownAnimation(); |
| 312 } | 313 } |
| 313 | 314 |
| 314 void SessionStateControllerImpl2::StartCancellableShutdownAnimation() { | 315 void SessionLockStateControllerImpl2::StartCancellableShutdownAnimation() { |
| 315 Shell* shell = ash::Shell::GetInstance(); | 316 Shell* shell = ash::Shell::GetInstance(); |
| 316 // Hide cursor, but let it reappear if the mouse moves. | 317 // Hide cursor, but let it reappear if the mouse moves. |
| 317 shell->env_filter()->set_cursor_hidden_by_filter(true); | 318 shell->env_filter()->set_cursor_hidden_by_filter(true); |
| 318 shell->cursor_manager()->HideCursor(); | 319 shell->cursor_manager()->HideCursor(); |
| 319 | 320 |
| 320 animator_->StartGlobalAnimation( | 321 animator_->StartGlobalAnimation( |
| 321 internal::SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS, | 322 internal::SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS, |
| 322 internal::SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); | 323 internal::SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); |
| 323 StartPreShutdownAnimationTimer(); | 324 StartPreShutdownAnimationTimer(); |
| 324 } | 325 } |
| 325 | 326 |
| 326 void SessionStateControllerImpl2::StartShutdownAnimationImpl() { | 327 void SessionLockStateControllerImpl2::StartShutdownAnimationImpl() { |
| 327 animator_->StartGlobalAnimation( | 328 animator_->StartGlobalAnimation( |
| 328 internal::SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS, | 329 internal::SessionStateAnimator::ANIMATION_GRAYSCALE_BRIGHTNESS, |
| 329 internal::SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); | 330 internal::SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); |
| 330 StartRealShutdownTimer(true); | 331 StartRealShutdownTimer(true); |
| 331 } | 332 } |
| 332 | 333 |
| 333 void SessionStateControllerImpl2::StartPreShutdownAnimationTimer() { | 334 void SessionLockStateControllerImpl2::StartPreShutdownAnimationTimer() { |
| 334 pre_shutdown_timer_.Stop(); | 335 pre_shutdown_timer_.Stop(); |
| 335 pre_shutdown_timer_.Start( | 336 pre_shutdown_timer_.Start( |
| 336 FROM_HERE, | 337 FROM_HERE, |
| 337 animator_-> | 338 animator_-> |
| 338 GetDuration(internal::SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN), | 339 GetDuration(internal::SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN), |
| 339 this, | 340 this, |
| 340 &SessionStateControllerImpl2::OnPreShutdownAnimationTimeout); | 341 &SessionLockStateControllerImpl2::OnPreShutdownAnimationTimeout); |
| 341 } | 342 } |
| 342 | 343 |
| 343 void SessionStateControllerImpl2::OnPreShutdownAnimationTimeout() { | 344 void SessionLockStateControllerImpl2::OnPreShutdownAnimationTimeout() { |
| 344 shutting_down_ = true; | 345 shutting_down_ = true; |
| 345 | 346 |
| 346 Shell* shell = ash::Shell::GetInstance(); | 347 Shell* shell = ash::Shell::GetInstance(); |
| 347 shell->env_filter()->set_cursor_hidden_by_filter(false); | 348 shell->env_filter()->set_cursor_hidden_by_filter(false); |
| 348 shell->cursor_manager()->HideCursor(); | 349 shell->cursor_manager()->HideCursor(); |
| 349 | 350 |
| 350 StartRealShutdownTimer(false); | 351 StartRealShutdownTimer(false); |
| 351 } | 352 } |
| 352 | 353 |
| 353 void SessionStateControllerImpl2::StartRealShutdownTimer( | 354 void SessionLockStateControllerImpl2::StartRealShutdownTimer( |
| 354 bool with_animation_time) { | 355 bool with_animation_time) { |
| 355 base::TimeDelta duration = | 356 base::TimeDelta duration = |
| 356 base::TimeDelta::FromMilliseconds(kShutdownRequestDelayMs); | 357 base::TimeDelta::FromMilliseconds(kShutdownRequestDelayMs); |
| 357 if (with_animation_time) { | 358 if (with_animation_time) { |
| 358 duration += animator_->GetDuration( | 359 duration += animator_->GetDuration( |
| 359 internal::SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); | 360 internal::SessionStateAnimator::ANIMATION_SPEED_SHUTDOWN); |
| 360 } | 361 } |
| 361 real_shutdown_timer_.Start( | 362 real_shutdown_timer_.Start( |
| 362 FROM_HERE, | 363 FROM_HERE, |
| 363 duration, | 364 duration, |
| 364 this, | 365 this, |
| 365 &SessionStateControllerImpl2::OnRealShutdownTimeout); | 366 &SessionLockStateControllerImpl2::OnRealShutdownTimeout); |
| 366 } | 367 } |
| 367 | 368 |
| 368 void SessionStateControllerImpl2::OnRealShutdownTimeout() { | 369 void SessionLockStateControllerImpl2::OnRealShutdownTimeout() { |
| 369 DCHECK(shutting_down_); | 370 DCHECK(shutting_down_); |
| 370 #if defined(OS_CHROMEOS) | 371 #if defined(OS_CHROMEOS) |
| 371 if (!base::chromeos::IsRunningOnChromeOS()) { | 372 if (!base::chromeos::IsRunningOnChromeOS()) { |
| 372 ShellDelegate* delegate = Shell::GetInstance()->delegate(); | 373 ShellDelegate* delegate = Shell::GetInstance()->delegate(); |
| 373 if (delegate) { | 374 if (delegate) { |
| 374 delegate->Exit(); | 375 delegate->Exit(); |
| 375 return; | 376 return; |
| 376 } | 377 } |
| 377 } | 378 } |
| 378 #endif | 379 #endif |
| 379 Shell::GetInstance()->delegate()->RecordUserMetricsAction( | 380 Shell::GetInstance()->delegate()->RecordUserMetricsAction( |
| 380 UMA_ACCEL_SHUT_DOWN_POWER_BUTTON); | 381 UMA_ACCEL_SHUT_DOWN_POWER_BUTTON); |
| 381 delegate_->RequestShutdown(); | 382 delegate_->RequestShutdown(); |
| 382 } | 383 } |
| 383 | 384 |
| 384 void SessionStateControllerImpl2::OnLockScreenHide( | 385 void SessionLockStateControllerImpl2::OnLockScreenHide( |
| 385 base::Callback<void(void)>& callback) { | 386 base::Callback<void(void)>& callback) { |
| 386 StartUnlockAnimationBeforeUIDestroyed(callback); | 387 StartUnlockAnimationBeforeUIDestroyed(callback); |
| 387 } | 388 } |
| 388 | 389 |
| 389 void SessionStateControllerImpl2::LockAnimationCancelled() { | 390 void SessionLockStateControllerImpl2::LockAnimationCancelled() { |
| 390 can_cancel_lock_animation_ = false; | 391 can_cancel_lock_animation_ = false; |
| 391 RestoreUnlockedProperties(); | 392 RestoreUnlockedProperties(); |
| 392 } | 393 } |
| 393 | 394 |
| 394 void SessionStateControllerImpl2::PreLockAnimationFinished(bool request_lock) { | 395 void SessionLockStateControllerImpl2::PreLockAnimationFinished( |
| 396 bool request_lock) { |
| 395 can_cancel_lock_animation_ = false; | 397 can_cancel_lock_animation_ = false; |
| 396 | 398 |
| 397 if (request_lock) { | 399 if (request_lock) { |
| 398 Shell::GetInstance()->delegate()->RecordUserMetricsAction( | 400 Shell::GetInstance()->delegate()->RecordUserMetricsAction( |
| 399 shutdown_after_lock_ ? | 401 shutdown_after_lock_ ? |
| 400 UMA_ACCEL_LOCK_SCREEN_POWER_BUTTON : | 402 UMA_ACCEL_LOCK_SCREEN_POWER_BUTTON : |
| 401 UMA_ACCEL_LOCK_SCREEN_LOCK_BUTTON); | 403 UMA_ACCEL_LOCK_SCREEN_LOCK_BUTTON); |
| 402 delegate_->RequestLockScreen(); | 404 delegate_->RequestLockScreen(); |
| 403 } | 405 } |
| 404 | 406 |
| 405 lock_fail_timer_.Start( | 407 lock_fail_timer_.Start( |
| 406 FROM_HERE, | 408 FROM_HERE, |
| 407 base::TimeDelta::FromMilliseconds(kLockFailTimeoutMs), | 409 base::TimeDelta::FromMilliseconds(kLockFailTimeoutMs), |
| 408 this, | 410 this, |
| 409 &SessionStateControllerImpl2::OnLockFailTimeout); | 411 &SessionLockStateControllerImpl2::OnLockFailTimeout); |
| 410 } | 412 } |
| 411 | 413 |
| 412 void SessionStateControllerImpl2::PostLockAnimationFinished() { | 414 void SessionLockStateControllerImpl2::PostLockAnimationFinished() { |
| 413 animating_lock_ = false; | 415 animating_lock_ = false; |
| 414 | 416 |
| 415 FOR_EACH_OBSERVER(SessionStateObserver, observers_, | 417 FOR_EACH_OBSERVER(SessionLockStateObserver, observers_, |
| 416 OnSessionStateEvent( | 418 OnSessionLockStateEvent( |
| 417 SessionStateObserver::EVENT_LOCK_ANIMATION_FINISHED)); | 419 SessionLockStateObserver::EVENT_LOCK_ANIMATION_FINISHED)); |
| 418 if (!lock_screen_displayed_callback_.is_null()) { | 420 if (!lock_screen_displayed_callback_.is_null()) { |
| 419 lock_screen_displayed_callback_.Run(); | 421 lock_screen_displayed_callback_.Run(); |
| 420 lock_screen_displayed_callback_.Reset(); | 422 lock_screen_displayed_callback_.Reset(); |
| 421 } | 423 } |
| 422 if (shutdown_after_lock_) { | 424 if (shutdown_after_lock_) { |
| 423 shutdown_after_lock_ = false; | 425 shutdown_after_lock_ = false; |
| 424 StartLockToShutdownTimer(); | 426 StartLockToShutdownTimer(); |
| 425 } | 427 } |
| 426 } | 428 } |
| 427 | 429 |
| 428 void SessionStateControllerImpl2::UnlockAnimationAfterUIDestroyedFinished() { | 430 void SessionLockStateControllerImpl2:: |
| 431 UnlockAnimationAfterUIDestroyedFinished() { |
| 429 RestoreUnlockedProperties(); | 432 RestoreUnlockedProperties(); |
| 430 } | 433 } |
| 431 | 434 |
| 432 void SessionStateControllerImpl2::StartImmediatePreLockAnimation( | 435 void SessionLockStateControllerImpl2::StartImmediatePreLockAnimation( |
| 433 bool request_lock_on_completion) { | 436 bool request_lock_on_completion) { |
| 434 animating_lock_ = true; | 437 animating_lock_ = true; |
| 435 | 438 |
| 436 StoreUnlockedProperties(); | 439 StoreUnlockedProperties(); |
| 437 | 440 |
| 438 base::Closure next_animation_starter = | 441 base::Closure next_animation_starter = |
| 439 base::Bind(&SessionStateControllerImpl2::PreLockAnimationFinished, | 442 base::Bind(&SessionLockStateControllerImpl2::PreLockAnimationFinished, |
| 440 base::Unretained(this), request_lock_on_completion); | 443 base::Unretained(this), request_lock_on_completion); |
| 441 AnimationFinishedObserver* observer = | 444 AnimationFinishedObserver* observer = |
| 442 new AnimationFinishedObserver(next_animation_starter); | 445 new AnimationFinishedObserver(next_animation_starter); |
| 443 | 446 |
| 444 observer->Pause(); | 447 observer->Pause(); |
| 445 | 448 |
| 446 animator_->StartAnimationWithObserver( | 449 animator_->StartAnimationWithObserver( |
| 447 internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | 450 internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, |
| 448 internal::SessionStateAnimator::ANIMATION_LIFT, | 451 internal::SessionStateAnimator::ANIMATION_LIFT, |
| 449 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, | 452 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, |
| 450 observer); | 453 observer); |
| 451 animator_->StartAnimationWithObserver( | 454 animator_->StartAnimationWithObserver( |
| 452 internal::SessionStateAnimator::LAUNCHER, | 455 internal::SessionStateAnimator::LAUNCHER, |
| 453 internal::SessionStateAnimator::ANIMATION_FADE_OUT, | 456 internal::SessionStateAnimator::ANIMATION_FADE_OUT, |
| 454 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, | 457 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, |
| 455 observer); | 458 observer); |
| 456 // Hide the screen locker containers so we can raise them later. | 459 // Hide the screen locker containers so we can raise them later. |
| 457 animator_->StartAnimation( | 460 animator_->StartAnimation( |
| 458 internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | 461 internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, |
| 459 internal::SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, | 462 internal::SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, |
| 460 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); | 463 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); |
| 461 AnimateBackgroundAppearanceIfNecessary( | 464 AnimateBackgroundAppearanceIfNecessary( |
| 462 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, | 465 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, |
| 463 observer); | 466 observer); |
| 464 | 467 |
| 465 observer->Unpause(); | 468 observer->Unpause(); |
| 466 | 469 |
| 467 DispatchCancelMode(); | 470 DispatchCancelMode(); |
| 468 FOR_EACH_OBSERVER(SessionStateObserver, observers_, | 471 FOR_EACH_OBSERVER(SessionLockStateObserver, observers_, |
| 469 OnSessionStateEvent(SessionStateObserver::EVENT_LOCK_ANIMATION_STARTED)); | 472 OnSessionLockStateEvent( |
| 473 SessionLockStateObserver::EVENT_LOCK_ANIMATION_STARTED)); |
| 470 } | 474 } |
| 471 | 475 |
| 472 void SessionStateControllerImpl2::StartCancellablePreLockAnimation() { | 476 void SessionLockStateControllerImpl2::StartCancellablePreLockAnimation() { |
| 473 animating_lock_ = true; | 477 animating_lock_ = true; |
| 474 StoreUnlockedProperties(); | 478 StoreUnlockedProperties(); |
| 475 | 479 |
| 476 base::Closure next_animation_starter = | 480 base::Closure next_animation_starter = |
| 477 base::Bind(&SessionStateControllerImpl2::PreLockAnimationFinished, | 481 base::Bind(&SessionLockStateControllerImpl2::PreLockAnimationFinished, |
| 478 base::Unretained(this), true /* request_lock */); | 482 base::Unretained(this), true /* request_lock */); |
| 479 AnimationFinishedObserver* observer = | 483 AnimationFinishedObserver* observer = |
| 480 new AnimationFinishedObserver(next_animation_starter); | 484 new AnimationFinishedObserver(next_animation_starter); |
| 481 | 485 |
| 482 observer->Pause(); | 486 observer->Pause(); |
| 483 | 487 |
| 484 animator_->StartAnimationWithObserver( | 488 animator_->StartAnimationWithObserver( |
| 485 internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | 489 internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, |
| 486 internal::SessionStateAnimator::ANIMATION_LIFT, | 490 internal::SessionStateAnimator::ANIMATION_LIFT, |
| 487 internal::SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, | 491 internal::SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, |
| 488 observer); | 492 observer); |
| 489 animator_->StartAnimationWithObserver( | 493 animator_->StartAnimationWithObserver( |
| 490 internal::SessionStateAnimator::LAUNCHER, | 494 internal::SessionStateAnimator::LAUNCHER, |
| 491 internal::SessionStateAnimator::ANIMATION_FADE_OUT, | 495 internal::SessionStateAnimator::ANIMATION_FADE_OUT, |
| 492 internal::SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, | 496 internal::SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, |
| 493 observer); | 497 observer); |
| 494 // Hide the screen locker containers so we can raise them later. | 498 // Hide the screen locker containers so we can raise them later. |
| 495 animator_->StartAnimation( | 499 animator_->StartAnimation( |
| 496 internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | 500 internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, |
| 497 internal::SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, | 501 internal::SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, |
| 498 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); | 502 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); |
| 499 AnimateBackgroundAppearanceIfNecessary( | 503 AnimateBackgroundAppearanceIfNecessary( |
| 500 internal::SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, | 504 internal::SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, |
| 501 observer); | 505 observer); |
| 502 | 506 |
| 503 DispatchCancelMode(); | 507 DispatchCancelMode(); |
| 504 FOR_EACH_OBSERVER(SessionStateObserver, observers_, | 508 FOR_EACH_OBSERVER(SessionLockStateObserver, observers_, |
| 505 OnSessionStateEvent( | 509 OnSessionLockStateEvent( |
| 506 SessionStateObserver::EVENT_PRELOCK_ANIMATION_STARTED)); | 510 SessionLockStateObserver::EVENT_PRELOCK_ANIMATION_STARTED)); |
| 507 observer->Unpause(); | 511 observer->Unpause(); |
| 508 } | 512 } |
| 509 | 513 |
| 510 void SessionStateControllerImpl2::CancelPreLockAnimation() { | 514 void SessionLockStateControllerImpl2::CancelPreLockAnimation() { |
| 511 base::Closure next_animation_starter = | 515 base::Closure next_animation_starter = |
| 512 base::Bind(&SessionStateControllerImpl2::LockAnimationCancelled, | 516 base::Bind(&SessionLockStateControllerImpl2::LockAnimationCancelled, |
| 513 base::Unretained(this)); | 517 base::Unretained(this)); |
| 514 AnimationFinishedObserver* observer = | 518 AnimationFinishedObserver* observer = |
| 515 new AnimationFinishedObserver(next_animation_starter); | 519 new AnimationFinishedObserver(next_animation_starter); |
| 516 | 520 |
| 517 observer->Pause(); | 521 observer->Pause(); |
| 518 | 522 |
| 519 animator_->StartAnimationWithObserver( | 523 animator_->StartAnimationWithObserver( |
| 520 internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | 524 internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, |
| 521 internal::SessionStateAnimator::ANIMATION_UNDO_LIFT, | 525 internal::SessionStateAnimator::ANIMATION_UNDO_LIFT, |
| 522 internal::SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, | 526 internal::SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, |
| 523 observer); | 527 observer); |
| 524 animator_->StartAnimationWithObserver( | 528 animator_->StartAnimationWithObserver( |
| 525 internal::SessionStateAnimator::LAUNCHER, | 529 internal::SessionStateAnimator::LAUNCHER, |
| 526 internal::SessionStateAnimator::ANIMATION_FADE_IN, | 530 internal::SessionStateAnimator::ANIMATION_FADE_IN, |
| 527 internal::SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, | 531 internal::SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, |
| 528 observer); | 532 observer); |
| 529 AnimateBackgroundHidingIfNecessary( | 533 AnimateBackgroundHidingIfNecessary( |
| 530 internal::SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, | 534 internal::SessionStateAnimator::ANIMATION_SPEED_UNDO_MOVE_WINDOWS, |
| 531 observer); | 535 observer); |
| 532 | 536 |
| 533 observer->Unpause(); | 537 observer->Unpause(); |
| 534 } | 538 } |
| 535 | 539 |
| 536 void SessionStateControllerImpl2::StartPostLockAnimation() { | 540 void SessionLockStateControllerImpl2::StartPostLockAnimation() { |
| 537 base::Closure next_animation_starter = | 541 base::Closure next_animation_starter = |
| 538 base::Bind(&SessionStateControllerImpl2::PostLockAnimationFinished, | 542 base::Bind(&SessionLockStateControllerImpl2::PostLockAnimationFinished, |
| 539 base::Unretained(this)); | 543 base::Unretained(this)); |
| 540 | 544 |
| 541 AnimationFinishedObserver* observer = | 545 AnimationFinishedObserver* observer = |
| 542 new AnimationFinishedObserver(next_animation_starter); | 546 new AnimationFinishedObserver(next_animation_starter); |
| 543 | 547 |
| 544 observer->Pause(); | 548 observer->Pause(); |
| 545 animator_->StartAnimationWithObserver( | 549 animator_->StartAnimationWithObserver( |
| 546 internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | 550 internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, |
| 547 internal::SessionStateAnimator::ANIMATION_RAISE_TO_SCREEN, | 551 internal::SessionStateAnimator::ANIMATION_RAISE_TO_SCREEN, |
| 548 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, | 552 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, |
| 549 observer); | 553 observer); |
| 550 observer->Unpause(); | 554 observer->Unpause(); |
| 551 } | 555 } |
| 552 | 556 |
| 553 void SessionStateControllerImpl2::StartUnlockAnimationBeforeUIDestroyed( | 557 void SessionLockStateControllerImpl2::StartUnlockAnimationBeforeUIDestroyed( |
| 554 base::Closure& callback) { | 558 base::Closure& callback) { |
| 555 animator_->StartAnimationWithCallback( | 559 animator_->StartAnimationWithCallback( |
| 556 internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | 560 internal::SessionStateAnimator::LOCK_SCREEN_CONTAINERS, |
| 557 internal::SessionStateAnimator::ANIMATION_LIFT, | 561 internal::SessionStateAnimator::ANIMATION_LIFT, |
| 558 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, | 562 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, |
| 559 callback); | 563 callback); |
| 560 } | 564 } |
| 561 | 565 |
| 562 void SessionStateControllerImpl2::StartUnlockAnimationAfterUIDestroyed() { | 566 void SessionLockStateControllerImpl2::StartUnlockAnimationAfterUIDestroyed() { |
| 563 base::Closure next_animation_starter = | 567 base::Closure next_animation_starter = |
| 564 base::Bind( | 568 base::Bind( |
| 565 &SessionStateControllerImpl2::UnlockAnimationAfterUIDestroyedFinished, | 569 &SessionLockStateControllerImpl2:: |
| 566 base::Unretained(this)); | 570 UnlockAnimationAfterUIDestroyedFinished, |
| 571 base::Unretained(this)); |
| 567 | 572 |
| 568 AnimationFinishedObserver* observer = | 573 AnimationFinishedObserver* observer = |
| 569 new AnimationFinishedObserver(next_animation_starter); | 574 new AnimationFinishedObserver(next_animation_starter); |
| 570 | 575 |
| 571 observer->Pause(); | 576 observer->Pause(); |
| 572 | 577 |
| 573 animator_->StartAnimationWithObserver( | 578 animator_->StartAnimationWithObserver( |
| 574 internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | 579 internal::SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, |
| 575 internal::SessionStateAnimator::ANIMATION_DROP, | 580 internal::SessionStateAnimator::ANIMATION_DROP, |
| 576 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, | 581 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, |
| 577 observer); | 582 observer); |
| 578 animator_->StartAnimationWithObserver( | 583 animator_->StartAnimationWithObserver( |
| 579 internal::SessionStateAnimator::LAUNCHER, | 584 internal::SessionStateAnimator::LAUNCHER, |
| 580 internal::SessionStateAnimator::ANIMATION_FADE_IN, | 585 internal::SessionStateAnimator::ANIMATION_FADE_IN, |
| 581 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, | 586 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, |
| 582 observer); | 587 observer); |
| 583 AnimateBackgroundHidingIfNecessary( | 588 AnimateBackgroundHidingIfNecessary( |
| 584 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, | 589 internal::SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, |
| 585 observer); | 590 observer); |
| 586 observer->Unpause(); | 591 observer->Unpause(); |
| 587 } | 592 } |
| 588 | 593 |
| 589 void SessionStateControllerImpl2::StoreUnlockedProperties() { | 594 void SessionLockStateControllerImpl2::StoreUnlockedProperties() { |
| 590 if (!unlocked_properties_) { | 595 if (!unlocked_properties_) { |
| 591 unlocked_properties_.reset(new UnlockedStateProperties()); | 596 unlocked_properties_.reset(new UnlockedStateProperties()); |
| 592 unlocked_properties_->background_is_hidden = IsBackgroundHidden(); | 597 unlocked_properties_->background_is_hidden = IsBackgroundHidden(); |
| 593 } | 598 } |
| 594 if (unlocked_properties_->background_is_hidden) { | 599 if (unlocked_properties_->background_is_hidden) { |
| 595 // Hide background so that it can be animated later. | 600 // Hide background so that it can be animated later. |
| 596 animator_->StartAnimation( | 601 animator_->StartAnimation( |
| 597 internal::SessionStateAnimator::DESKTOP_BACKGROUND, | 602 internal::SessionStateAnimator::DESKTOP_BACKGROUND, |
| 598 internal::SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, | 603 internal::SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, |
| 599 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); | 604 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); |
| 600 ShowBackground(); | 605 ShowBackground(); |
| 601 } | 606 } |
| 602 } | 607 } |
| 603 | 608 |
| 604 void SessionStateControllerImpl2::RestoreUnlockedProperties() { | 609 void SessionLockStateControllerImpl2::RestoreUnlockedProperties() { |
| 605 if (!unlocked_properties_) | 610 if (!unlocked_properties_) |
| 606 return; | 611 return; |
| 607 if (unlocked_properties_->background_is_hidden) { | 612 if (unlocked_properties_->background_is_hidden) { |
| 608 HideBackground(); | 613 HideBackground(); |
| 609 // Restore background visibility. | 614 // Restore background visibility. |
| 610 animator_->StartAnimation( | 615 animator_->StartAnimation( |
| 611 internal::SessionStateAnimator::DESKTOP_BACKGROUND, | 616 internal::SessionStateAnimator::DESKTOP_BACKGROUND, |
| 612 internal::SessionStateAnimator::ANIMATION_FADE_IN, | 617 internal::SessionStateAnimator::ANIMATION_FADE_IN, |
| 613 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); | 618 internal::SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); |
| 614 } | 619 } |
| 615 unlocked_properties_.reset(); | 620 unlocked_properties_.reset(); |
| 616 } | 621 } |
| 617 | 622 |
| 618 void SessionStateControllerImpl2::AnimateBackgroundAppearanceIfNecessary( | 623 void SessionLockStateControllerImpl2::AnimateBackgroundAppearanceIfNecessary( |
| 619 internal::SessionStateAnimator::AnimationSpeed speed, | 624 internal::SessionStateAnimator::AnimationSpeed speed, |
| 620 ui::LayerAnimationObserver* observer) { | 625 ui::LayerAnimationObserver* observer) { |
| 621 if (unlocked_properties_.get() && | 626 if (unlocked_properties_.get() && |
| 622 unlocked_properties_->background_is_hidden) { | 627 unlocked_properties_->background_is_hidden) { |
| 623 animator_->StartAnimationWithObserver( | 628 animator_->StartAnimationWithObserver( |
| 624 internal::SessionStateAnimator::DESKTOP_BACKGROUND, | 629 internal::SessionStateAnimator::DESKTOP_BACKGROUND, |
| 625 internal::SessionStateAnimator::ANIMATION_FADE_IN, | 630 internal::SessionStateAnimator::ANIMATION_FADE_IN, |
| 626 speed, | 631 speed, |
| 627 observer); | 632 observer); |
| 628 } | 633 } |
| 629 } | 634 } |
| 630 | 635 |
| 631 void SessionStateControllerImpl2::AnimateBackgroundHidingIfNecessary( | 636 void SessionLockStateControllerImpl2::AnimateBackgroundHidingIfNecessary( |
| 632 internal::SessionStateAnimator::AnimationSpeed speed, | 637 internal::SessionStateAnimator::AnimationSpeed speed, |
| 633 ui::LayerAnimationObserver* observer) { | 638 ui::LayerAnimationObserver* observer) { |
| 634 if (unlocked_properties_.get() && | 639 if (unlocked_properties_.get() && |
| 635 unlocked_properties_->background_is_hidden) { | 640 unlocked_properties_->background_is_hidden) { |
| 636 animator_->StartAnimationWithObserver( | 641 animator_->StartAnimationWithObserver( |
| 637 internal::SessionStateAnimator::DESKTOP_BACKGROUND, | 642 internal::SessionStateAnimator::DESKTOP_BACKGROUND, |
| 638 internal::SessionStateAnimator::ANIMATION_FADE_OUT, | 643 internal::SessionStateAnimator::ANIMATION_FADE_OUT, |
| 639 speed, | 644 speed, |
| 640 observer); | 645 observer); |
| 641 } | 646 } |
| 642 } | 647 } |
| 643 | 648 |
| 644 } // namespace ash | 649 } // namespace ash |
| OLD | NEW |