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 3 // found in the LICENSE file. 4 5 #ifndef CHROME_BROWSER_CHROMEOS_LOGIN_USER_FLOW_H_ 6 #define CHROME_BROWSER_CHROMEOS_LOGIN_USER_FLOW_H_ 7 8 #include "base/compiler_specific.h" 9 #include "chrome/browser/profiles/profile.h" 10 #include "chromeos/login/auth/auth_status_consumer.h" 11 #include "components/user_manager/user.h" 12 13 namespace chromeos { 14 15 class UserContext; 16 17 class LoginDisplayHost; 18 // Defines possible variants of user flow upon logging in. 19 // See UserManager::SetUserFlow for usage contract. 20 class UserFlow { 21 public: 22 UserFlow(); 23 virtual ~UserFlow() = 0; 24 // Indicates if screen locking should be enabled or disabled for a flow. 25 virtual bool CanLockScreen() = 0; 26 virtual bool ShouldShowSettings() = 0; 27 virtual bool ShouldLaunchBrowser() = 0; 28 virtual bool ShouldSkipPostLoginScreens() = 0; 29 virtual bool SupportsEarlyRestartToApplyFlags() = 0; 30 virtual bool HandleLoginFailure(const AuthFailure& failure) = 0; 31 virtual void HandleLoginSuccess(const UserContext& context) = 0; 32 virtual bool HandlePasswordChangeDetected() = 0; 33 virtual void HandleOAuthTokenStatusChange( 34 user_manager::User::OAuthTokenStatus status) = 0; 35 virtual void LaunchExtraSteps(Profile* profile) = 0; 36 37 void set_host(LoginDisplayHost* host) { 38 host_ = host; 39 } 40 41 LoginDisplayHost* host() { 42 return host_; 43 } 44 45 private: 46 LoginDisplayHost* host_; 47 }; 48 49 // UserFlow implementation for regular login flow. 50 class DefaultUserFlow : public UserFlow { 51 public: 52 virtual ~DefaultUserFlow(); 53 54 virtual bool CanLockScreen() OVERRIDE; 55 virtual bool ShouldShowSettings() OVERRIDE; 56 virtual bool ShouldLaunchBrowser() OVERRIDE; 57 virtual bool ShouldSkipPostLoginScreens() OVERRIDE; 58 virtual bool SupportsEarlyRestartToApplyFlags() OVERRIDE; 59 virtual bool HandleLoginFailure(const AuthFailure& failure) OVERRIDE; 60 virtual void HandleLoginSuccess(const UserContext& context) OVERRIDE; 61 virtual bool HandlePasswordChangeDetected() OVERRIDE; 62 virtual void HandleOAuthTokenStatusChange( 63 user_manager::User::OAuthTokenStatus status) OVERRIDE; 64 virtual void LaunchExtraSteps(Profile* profile) OVERRIDE; 65 }; 66 67 // UserFlow stub for non-regular flows. 68 class ExtendedUserFlow : public UserFlow { 69 public: 70 explicit ExtendedUserFlow(const std::string& user_id); 71 virtual ~ExtendedUserFlow(); 72 73 virtual bool ShouldShowSettings() OVERRIDE; 74 75 protected: 76 // Subclasses can call this method to unregister flow in the next event. 77 virtual void UnregisterFlowSoon(); 78 std::string user_id() { 79 return user_id_; 80 } 81 82 private: 83 std::string user_id_; 84 }; 85 86 } // namespace chromeos 87 88 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_USER_FLOW_H_ 89