| OLD | NEW |
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 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 | 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/lock_state_controller.h" | 5 #include "ash/wm/lock_state_controller.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <utility> | 9 #include <utility> |
| 10 | 10 |
| 11 #include "ash/accessibility_delegate.h" | 11 #include "ash/accessibility_delegate.h" |
| 12 #include "ash/cancel_mode.h" | 12 #include "ash/cancel_mode.h" |
| 13 #include "ash/public/cpp/shell_window_ids.h" | 13 #include "ash/public/cpp/shell_window_ids.h" |
| 14 #include "ash/public/interfaces/shutdown.mojom.h" | 14 #include "ash/public/interfaces/shutdown.mojom.h" |
| 15 #include "ash/shell.h" | 15 #include "ash/shell.h" |
| 16 #include "ash/shell_delegate.h" | 16 #include "ash/shell_delegate.h" |
| 17 #include "ash/shell_port.h" |
| 17 #include "ash/shutdown_controller.h" | 18 #include "ash/shutdown_controller.h" |
| 18 #include "ash/wm/session_state_animator.h" | 19 #include "ash/wm/session_state_animator.h" |
| 19 #include "ash/wm/session_state_animator_impl.h" | 20 #include "ash/wm/session_state_animator_impl.h" |
| 20 #include "ash/wm_shell.h" | |
| 21 #include "base/bind.h" | 21 #include "base/bind.h" |
| 22 #include "base/bind_helpers.h" | 22 #include "base/bind_helpers.h" |
| 23 #include "base/command_line.h" | 23 #include "base/command_line.h" |
| 24 #include "base/location.h" | 24 #include "base/location.h" |
| 25 #include "base/logging.h" | 25 #include "base/logging.h" |
| 26 #include "base/metrics/histogram_macros.h" | 26 #include "base/metrics/histogram_macros.h" |
| 27 #include "base/strings/string_util.h" | 27 #include "base/strings/string_util.h" |
| 28 #include "base/sys_info.h" | 28 #include "base/sys_info.h" |
| 29 #include "base/timer/timer.h" | 29 #include "base/timer/timer.h" |
| 30 #include "chromeos/dbus/dbus_thread_manager.h" | 30 #include "chromeos/dbus/dbus_thread_manager.h" |
| (...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 292 duration = std::max(duration, sound_duration); | 292 duration = std::max(duration, sound_duration); |
| 293 | 293 |
| 294 real_shutdown_timer_.Start( | 294 real_shutdown_timer_.Start( |
| 295 FROM_HERE, duration, base::Bind(&LockStateController::OnRealPowerTimeout, | 295 FROM_HERE, duration, base::Bind(&LockStateController::OnRealPowerTimeout, |
| 296 base::Unretained(this))); | 296 base::Unretained(this))); |
| 297 } | 297 } |
| 298 | 298 |
| 299 void LockStateController::OnRealPowerTimeout() { | 299 void LockStateController::OnRealPowerTimeout() { |
| 300 VLOG(1) << "OnRealPowerTimeout"; | 300 VLOG(1) << "OnRealPowerTimeout"; |
| 301 DCHECK(shutting_down_); | 301 DCHECK(shutting_down_); |
| 302 WmShell::Get()->RecordUserMetricsAction(UMA_ACCEL_SHUT_DOWN_POWER_BUTTON); | 302 ShellPort::Get()->RecordUserMetricsAction(UMA_ACCEL_SHUT_DOWN_POWER_BUTTON); |
| 303 // Shut down or reboot based on device policy. | 303 // Shut down or reboot based on device policy. |
| 304 shutdown_controller_->ShutDownOrReboot(); | 304 shutdown_controller_->ShutDownOrReboot(); |
| 305 } | 305 } |
| 306 | 306 |
| 307 void LockStateController::StartCancellableShutdownAnimation() { | 307 void LockStateController::StartCancellableShutdownAnimation() { |
| 308 Shell* shell = Shell::Get(); | 308 Shell* shell = Shell::Get(); |
| 309 // Hide cursor, but let it reappear if the mouse moves. | 309 // Hide cursor, but let it reappear if the mouse moves. |
| 310 if (shell->cursor_manager()) | 310 if (shell->cursor_manager()) |
| 311 shell->cursor_manager()->HideCursor(); | 311 shell->cursor_manager()->HideCursor(); |
| 312 | 312 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 339 // Hide the screen locker containers so we can raise them later. | 339 // Hide the screen locker containers so we can raise them later. |
| 340 animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | 340 animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS, |
| 341 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, | 341 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, |
| 342 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); | 342 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); |
| 343 AnimateWallpaperAppearanceIfNecessary( | 343 AnimateWallpaperAppearanceIfNecessary( |
| 344 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, animation_sequence); | 344 SessionStateAnimator::ANIMATION_SPEED_MOVE_WINDOWS, animation_sequence); |
| 345 | 345 |
| 346 animation_sequence->EndSequence(); | 346 animation_sequence->EndSequence(); |
| 347 | 347 |
| 348 DispatchCancelMode(); | 348 DispatchCancelMode(); |
| 349 WmShell::Get()->OnLockStateEvent( | 349 ShellPort::Get()->OnLockStateEvent( |
| 350 LockStateObserver::EVENT_LOCK_ANIMATION_STARTED); | 350 LockStateObserver::EVENT_LOCK_ANIMATION_STARTED); |
| 351 } | 351 } |
| 352 | 352 |
| 353 void LockStateController::StartCancellablePreLockAnimation() { | 353 void LockStateController::StartCancellablePreLockAnimation() { |
| 354 animating_lock_ = true; | 354 animating_lock_ = true; |
| 355 StoreUnlockedProperties(); | 355 StoreUnlockedProperties(); |
| 356 VLOG(1) << "StartCancellablePreLockAnimation"; | 356 VLOG(1) << "StartCancellablePreLockAnimation"; |
| 357 base::Closure next_animation_starter = | 357 base::Closure next_animation_starter = |
| 358 base::Bind(&LockStateController::PreLockAnimationFinished, | 358 base::Bind(&LockStateController::PreLockAnimationFinished, |
| 359 weak_ptr_factory_.GetWeakPtr(), true /* request_lock */); | 359 weak_ptr_factory_.GetWeakPtr(), true /* request_lock */); |
| 360 SessionStateAnimator::AnimationSequence* animation_sequence = | 360 SessionStateAnimator::AnimationSequence* animation_sequence = |
| 361 animator_->BeginAnimationSequence(next_animation_starter); | 361 animator_->BeginAnimationSequence(next_animation_starter); |
| 362 | 362 |
| 363 animation_sequence->StartAnimation( | 363 animation_sequence->StartAnimation( |
| 364 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, | 364 SessionStateAnimator::NON_LOCK_SCREEN_CONTAINERS, |
| 365 SessionStateAnimator::ANIMATION_LIFT, | 365 SessionStateAnimator::ANIMATION_LIFT, |
| 366 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); | 366 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); |
| 367 animation_sequence->StartAnimation( | 367 animation_sequence->StartAnimation( |
| 368 SessionStateAnimator::LAUNCHER, SessionStateAnimator::ANIMATION_FADE_OUT, | 368 SessionStateAnimator::LAUNCHER, SessionStateAnimator::ANIMATION_FADE_OUT, |
| 369 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); | 369 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE); |
| 370 // Hide the screen locker containers so we can raise them later. | 370 // Hide the screen locker containers so we can raise them later. |
| 371 animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS, | 371 animator_->StartAnimation(SessionStateAnimator::LOCK_SCREEN_CONTAINERS, |
| 372 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, | 372 SessionStateAnimator::ANIMATION_HIDE_IMMEDIATELY, |
| 373 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); | 373 SessionStateAnimator::ANIMATION_SPEED_IMMEDIATE); |
| 374 AnimateWallpaperAppearanceIfNecessary( | 374 AnimateWallpaperAppearanceIfNecessary( |
| 375 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, animation_sequence); | 375 SessionStateAnimator::ANIMATION_SPEED_UNDOABLE, animation_sequence); |
| 376 | 376 |
| 377 DispatchCancelMode(); | 377 DispatchCancelMode(); |
| 378 WmShell::Get()->OnLockStateEvent( | 378 ShellPort::Get()->OnLockStateEvent( |
| 379 LockStateObserver::EVENT_PRELOCK_ANIMATION_STARTED); | 379 LockStateObserver::EVENT_PRELOCK_ANIMATION_STARTED); |
| 380 animation_sequence->EndSequence(); | 380 animation_sequence->EndSequence(); |
| 381 } | 381 } |
| 382 | 382 |
| 383 void LockStateController::CancelPreLockAnimation() { | 383 void LockStateController::CancelPreLockAnimation() { |
| 384 VLOG(1) << "CancelPreLockAnimation"; | 384 VLOG(1) << "CancelPreLockAnimation"; |
| 385 base::Closure next_animation_starter = | 385 base::Closure next_animation_starter = |
| 386 base::Bind(&LockStateController::LockAnimationCancelled, | 386 base::Bind(&LockStateController::LockAnimationCancelled, |
| 387 weak_ptr_factory_.GetWeakPtr()); | 387 weak_ptr_factory_.GetWeakPtr()); |
| 388 SessionStateAnimator::AnimationSequence* animation_sequence = | 388 SessionStateAnimator::AnimationSequence* animation_sequence = |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 457 | 457 |
| 458 // Don't do anything (including starting the lock-fail timer) if the screen | 458 // Don't do anything (including starting the lock-fail timer) if the screen |
| 459 // was already locked while the animation was going. | 459 // was already locked while the animation was going. |
| 460 if (system_is_locked_) { | 460 if (system_is_locked_) { |
| 461 DCHECK(!request_lock) << "Got request to lock already-locked system " | 461 DCHECK(!request_lock) << "Got request to lock already-locked system " |
| 462 << "at completion of pre-lock animation"; | 462 << "at completion of pre-lock animation"; |
| 463 return; | 463 return; |
| 464 } | 464 } |
| 465 | 465 |
| 466 if (request_lock) { | 466 if (request_lock) { |
| 467 WmShell::Get()->RecordUserMetricsAction( | 467 ShellPort::Get()->RecordUserMetricsAction( |
| 468 shutdown_after_lock_ ? UMA_ACCEL_LOCK_SCREEN_POWER_BUTTON | 468 shutdown_after_lock_ ? UMA_ACCEL_LOCK_SCREEN_POWER_BUTTON |
| 469 : UMA_ACCEL_LOCK_SCREEN_LOCK_BUTTON); | 469 : UMA_ACCEL_LOCK_SCREEN_LOCK_BUTTON); |
| 470 chromeos::DBusThreadManager::Get() | 470 chromeos::DBusThreadManager::Get() |
| 471 ->GetSessionManagerClient() | 471 ->GetSessionManagerClient() |
| 472 ->RequestLockScreen(); | 472 ->RequestLockScreen(); |
| 473 } | 473 } |
| 474 | 474 |
| 475 base::TimeDelta timeout = | 475 base::TimeDelta timeout = |
| 476 base::TimeDelta::FromMilliseconds(kLockFailTimeoutMs); | 476 base::TimeDelta::FromMilliseconds(kLockFailTimeoutMs); |
| 477 // Increase lock timeout for slower hardware, see http://crbug.com/350628 | 477 // Increase lock timeout for slower hardware, see http://crbug.com/350628 |
| 478 // The devices with boards "x86-mario", "daisy", "x86-alex" and "x86-zgb" have | 478 // The devices with boards "x86-mario", "daisy", "x86-alex" and "x86-zgb" have |
| 479 // slower hardware. For "x86-alex" and "x86-zgb" there are some modifications | 479 // slower hardware. For "x86-alex" and "x86-zgb" there are some modifications |
| 480 // like "x86-alex-he". Also there's "daisy", "daisy_spring" and "daisy_skate", | 480 // like "x86-alex-he". Also there's "daisy", "daisy_spring" and "daisy_skate", |
| 481 // but they are all different devices and only "daisy" has slower hardware. | 481 // but they are all different devices and only "daisy" has slower hardware. |
| 482 const std::string board = base::SysInfo::GetStrippedReleaseBoard(); | 482 const std::string board = base::SysInfo::GetStrippedReleaseBoard(); |
| 483 if (board == "x86-mario" || board == "daisy" || | 483 if (board == "x86-mario" || board == "daisy" || |
| 484 base::StartsWith(board, "x86-alex", base::CompareCase::SENSITIVE) || | 484 base::StartsWith(board, "x86-alex", base::CompareCase::SENSITIVE) || |
| 485 base::StartsWith(board, "x86-zgb", base::CompareCase::SENSITIVE)) { | 485 base::StartsWith(board, "x86-zgb", base::CompareCase::SENSITIVE)) { |
| 486 timeout *= 2; | 486 timeout *= 2; |
| 487 } | 487 } |
| 488 lock_fail_timer_.Start(FROM_HERE, timeout, this, | 488 lock_fail_timer_.Start(FROM_HERE, timeout, this, |
| 489 &LockStateController::OnLockFailTimeout); | 489 &LockStateController::OnLockFailTimeout); |
| 490 | 490 |
| 491 lock_duration_timer_.reset(new base::ElapsedTimer()); | 491 lock_duration_timer_.reset(new base::ElapsedTimer()); |
| 492 } | 492 } |
| 493 | 493 |
| 494 void LockStateController::PostLockAnimationFinished() { | 494 void LockStateController::PostLockAnimationFinished() { |
| 495 animating_lock_ = false; | 495 animating_lock_ = false; |
| 496 VLOG(1) << "PostLockAnimationFinished"; | 496 VLOG(1) << "PostLockAnimationFinished"; |
| 497 WmShell::Get()->OnLockStateEvent( | 497 ShellPort::Get()->OnLockStateEvent( |
| 498 LockStateObserver::EVENT_LOCK_ANIMATION_FINISHED); | 498 LockStateObserver::EVENT_LOCK_ANIMATION_FINISHED); |
| 499 if (!lock_screen_displayed_callback_.is_null()) { | 499 if (!lock_screen_displayed_callback_.is_null()) { |
| 500 lock_screen_displayed_callback_.Run(); | 500 lock_screen_displayed_callback_.Run(); |
| 501 lock_screen_displayed_callback_.Reset(); | 501 lock_screen_displayed_callback_.Reset(); |
| 502 } | 502 } |
| 503 CHECK(!views::MenuController::GetActiveInstance()); | 503 CHECK(!views::MenuController::GetActiveInstance()); |
| 504 if (shutdown_after_lock_) { | 504 if (shutdown_after_lock_) { |
| 505 shutdown_after_lock_ = false; | 505 shutdown_after_lock_ = false; |
| 506 StartLockToShutdownTimer(); | 506 StartLockToShutdownTimer(); |
| 507 } | 507 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 552 SessionStateAnimator::AnimationSpeed speed, | 552 SessionStateAnimator::AnimationSpeed speed, |
| 553 SessionStateAnimator::AnimationSequence* animation_sequence) { | 553 SessionStateAnimator::AnimationSequence* animation_sequence) { |
| 554 if (unlocked_properties_.get() && unlocked_properties_->wallpaper_is_hidden) { | 554 if (unlocked_properties_.get() && unlocked_properties_->wallpaper_is_hidden) { |
| 555 animation_sequence->StartAnimation(SessionStateAnimator::WALLPAPER, | 555 animation_sequence->StartAnimation(SessionStateAnimator::WALLPAPER, |
| 556 SessionStateAnimator::ANIMATION_FADE_OUT, | 556 SessionStateAnimator::ANIMATION_FADE_OUT, |
| 557 speed); | 557 speed); |
| 558 } | 558 } |
| 559 } | 559 } |
| 560 | 560 |
| 561 } // namespace ash | 561 } // namespace ash |
| OLD | NEW |