Home | History | Annotate | Download | only in login
      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