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/chromeos/login/auth/login_status_consumer.h" 10 #include "chrome/browser/chromeos/login/users/user.h" 11 #include "chrome/browser/profiles/profile.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 HandleLoginFailure(const LoginFailure& failure) = 0; 30 virtual void HandleLoginSuccess(const UserContext& context) = 0; 31 virtual bool HandlePasswordChangeDetected() = 0; 32 virtual void HandleOAuthTokenStatusChange(User::OAuthTokenStatus status) = 0; 33 virtual void LaunchExtraSteps(Profile* profile) = 0; 34 set_host(LoginDisplayHost * host)35 void set_host(LoginDisplayHost* host) { 36 host_ = host; 37 } 38 host()39 LoginDisplayHost* host() { 40 return host_; 41 } 42 43 private: 44 LoginDisplayHost* host_; 45 }; 46 47 // UserFlow implementation for regular login flow. 48 class DefaultUserFlow : public UserFlow { 49 public: 50 virtual ~DefaultUserFlow(); 51 52 virtual bool CanLockScreen() OVERRIDE; 53 virtual bool ShouldShowSettings() OVERRIDE; 54 virtual bool ShouldLaunchBrowser() OVERRIDE; 55 virtual bool ShouldSkipPostLoginScreens() OVERRIDE; 56 virtual bool HandleLoginFailure(const LoginFailure& failure) OVERRIDE; 57 virtual void HandleLoginSuccess(const UserContext& context) OVERRIDE; 58 virtual bool HandlePasswordChangeDetected() OVERRIDE; 59 virtual void HandleOAuthTokenStatusChange(User::OAuthTokenStatus status) 60 OVERRIDE; 61 virtual void LaunchExtraSteps(Profile* profile) OVERRIDE; 62 }; 63 64 // UserFlow stub for non-regular flows. 65 class ExtendedUserFlow : public UserFlow { 66 public: 67 explicit ExtendedUserFlow(const std::string& user_id); 68 virtual ~ExtendedUserFlow(); 69 70 virtual bool ShouldShowSettings() OVERRIDE; 71 72 protected: 73 // Subclasses can call this method to unregister flow in the next event. 74 virtual void UnregisterFlowSoon(); user_id()75 std::string user_id() { 76 return user_id_; 77 } 78 79 private: 80 std::string user_id_; 81 }; 82 83 } // namespace chromeos 84 85 #endif // CHROME_BROWSER_CHROMEOS_LOGIN_USER_FLOW_H_ 86