1 // Copyright 2017 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 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_LOCK_VIEWS_SCREEN_LOCKER_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_LOCK_VIEWS_SCREEN_LOCKER_H_ 7 8 #include "base/callback_forward.h" 9 #include "base/memory/weak_ptr.h" 10 #include "base/timer/timer.h" 11 #include "chrome/browser/chromeos/lock_screen_apps/focus_cycler_delegate.h" 12 #include "chrome/browser/chromeos/login/lock/screen_locker.h" 13 #include "chrome/browser/chromeos/settings/cros_settings.h" 14 #include "chrome/browser/ui/ash/login_screen_client.h" 15 #include "chromeos/dbus/power/power_manager_client.h" 16 17 namespace chromeos { 18 19 class UserBoardViewMojo; 20 class UserSelectionScreen; 21 class MojoSystemInfoDispatcher; 22 23 // ViewsScreenLocker acts like LoginScreenClient::Delegate which handles method 24 // calls coming from ash into chrome. 25 // It is also a ScreenLocker::Delegate which handles calls from chrome into 26 // ash (views-based lockscreen). 27 class ViewsScreenLocker : public LoginScreenClient::Delegate, 28 public ScreenLocker::Delegate, 29 public PowerManagerClient::Observer, 30 public lock_screen_apps::FocusCyclerDelegate { 31 public: 32 explicit ViewsScreenLocker(ScreenLocker* screen_locker); 33 ~ViewsScreenLocker() override; 34 35 void Init(); 36 37 // ScreenLocker::Delegate: 38 void ShowErrorMessage(int error_msg_id, 39 HelpAppLauncher::HelpTopic help_topic_id) override; 40 void ClearErrors() override; 41 void OnAshLockAnimationFinished() override; 42 43 // LoginScreenClient::Delegate 44 void HandleAuthenticateUserWithPasswordOrPin( 45 const AccountId& account_id, 46 const std::string& password, 47 bool authenticated_by_pin, 48 base::OnceCallback<void(bool)> callback) override; 49 void HandleAuthenticateUserWithEasyUnlock( 50 const AccountId& account_id) override; 51 void HandleAuthenticateUserWithChallengeResponse( 52 const AccountId& account_id, 53 base::OnceCallback<void(bool)> callback) override; 54 void HandleHardlockPod(const AccountId& account_id) override; 55 void HandleOnFocusPod(const AccountId& account_id) override; 56 void HandleOnNoPodFocused() override; 57 bool HandleFocusLockScreenApps(bool reverse) override; 58 void HandleFocusOobeDialog() override; 59 void HandleLaunchPublicSession(const AccountId& account_id, 60 const std::string& locale, 61 const std::string& input_method) override; 62 63 // PowerManagerClient::Observer: 64 void SuspendDone(const base::TimeDelta& sleep_duration) override; 65 66 // lock_screen_apps::FocusCyclerDelegate: 67 void RegisterLockScreenAppFocusHandler( 68 const LockScreenAppFocusCallback& focus_handler) override; 69 void UnregisterLockScreenAppFocusHandler() override; 70 void HandleLockScreenAppFocusOut(bool reverse) override; 71 72 private: 73 void UpdatePinKeyboardState(const AccountId& account_id); 74 void UpdateChallengeResponseAuthAvailability(const AccountId& account_id); 75 void OnPinCanAuthenticate(const AccountId& account_id, bool can_authenticate); 76 77 std::unique_ptr<UserBoardViewMojo> user_board_view_mojo_; 78 std::unique_ptr<UserSelectionScreen> user_selection_screen_; 79 80 // The ScreenLocker that owns this instance. 81 ScreenLocker* const screen_locker_ = nullptr; 82 83 // Time when lock was initiated, required for metrics. 84 base::TimeTicks lock_time_; 85 86 // Callback registered as a lock screen apps focus handler - it should be 87 // called to hand focus over to lock screen apps. 88 LockScreenAppFocusCallback lock_screen_app_focus_handler_; 89 90 // Fetches system information and sends it to the UI over mojo. 91 std::unique_ptr<MojoSystemInfoDispatcher> system_info_updater_; 92 93 base::WeakPtrFactory<ViewsScreenLocker> weak_factory_{this}; 94 95 DISALLOW_COPY_AND_ASSIGN(ViewsScreenLocker); 96 }; 97 98 } // namespace chromeos 99 100 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_LOCK_VIEWS_SCREEN_LOCKER_H_ 101