- add sources.
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / user_flow.h
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/login_status_consumer.h"
10 #include "chrome/browser/chromeos/login/user.h"
11 #include "chrome/browser/profiles/profile.h"
12
13 namespace chromeos {
14
15 class LoginDisplayHost;
16 // Defines possible variants of user flow upon logging in.
17 // See UserManager::SetUserFlow for usage contract.
18 class UserFlow {
19  public:
20   UserFlow();
21   virtual ~UserFlow() = 0;
22   virtual bool ShouldShowSettings() = 0;
23   virtual bool ShouldLaunchBrowser() = 0;
24   virtual bool ShouldSkipPostLoginScreens() = 0;
25   virtual bool HandleLoginFailure(const LoginFailure& failure) = 0;
26   virtual bool HandlePasswordChangeDetected() = 0;
27   virtual void HandleOAuthTokenStatusChange(User::OAuthTokenStatus status) = 0;
28   virtual void LaunchExtraSteps(Profile* profile) = 0;
29
30   void set_host(LoginDisplayHost* host) {
31     host_ = host;
32   }
33
34   LoginDisplayHost* host() {
35     return host_;
36   }
37
38  private:
39   LoginDisplayHost* host_;
40 };
41
42 // UserFlow implementation for regular login flow.
43 class DefaultUserFlow : public UserFlow {
44  public:
45   virtual ~DefaultUserFlow();
46
47   virtual bool ShouldShowSettings() OVERRIDE;
48   virtual bool ShouldLaunchBrowser() OVERRIDE;
49   virtual bool ShouldSkipPostLoginScreens() OVERRIDE;
50   virtual bool HandleLoginFailure(const LoginFailure& failure) OVERRIDE;
51   virtual bool HandlePasswordChangeDetected() OVERRIDE;
52   virtual void HandleOAuthTokenStatusChange(User::OAuthTokenStatus status)
53       OVERRIDE;
54   virtual void LaunchExtraSteps(Profile* profile) OVERRIDE;
55 };
56
57 // UserFlow stub for non-regular flows.
58 class ExtendedUserFlow : public UserFlow {
59  public:
60   explicit ExtendedUserFlow(const std::string& user_id);
61   virtual ~ExtendedUserFlow();
62
63   virtual bool ShouldShowSettings() OVERRIDE;
64
65  protected:
66   // Subclasses can call this method to unregister flow in the next event.
67   virtual void UnregisterFlowSoon();
68   std::string user_id() {
69     return user_id_;
70   };
71
72  private:
73   std::string user_id_;
74 };
75
76 }  // namespace chromeos
77
78 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USER_FLOW_H_