user_flow.h revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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/profiles/profile.h"
11
12namespace chromeos {
13
14class LoginDisplayHost;
15// Defines possible variants of user flow upon logging in.
16// See UserManager::SetUserFlow for usage contract.
17class UserFlow {
18 public:
19  virtual ~UserFlow() = 0;
20  virtual bool ShouldLaunchBrowser() = 0;
21  virtual bool ShouldSkipPostLoginScreens() = 0;
22  virtual bool HandleLoginFailure(const LoginFailure& failure,
23      LoginDisplayHost* host) = 0;
24  virtual bool HandlePasswordChangeDetected(LoginDisplayHost* host) = 0;
25  virtual void LaunchExtraSteps(Profile* profile, LoginDisplayHost* host) = 0;
26};
27
28// UserFlow implementation for regular login flow.
29class DefaultUserFlow : public UserFlow {
30 public:
31  virtual ~DefaultUserFlow();
32
33  virtual bool ShouldLaunchBrowser() OVERRIDE;
34  virtual bool ShouldSkipPostLoginScreens() OVERRIDE;
35  virtual bool HandleLoginFailure(const LoginFailure& failure,
36      LoginDisplayHost* host) OVERRIDE;
37  virtual bool HandlePasswordChangeDetected(LoginDisplayHost* host) OVERRIDE;
38  virtual void LaunchExtraSteps(Profile* profile,
39      LoginDisplayHost* host) OVERRIDE;
40};
41
42// UserFlow stub for non-regular flows.
43class ExtendedUserFlow : public UserFlow {
44 public:
45  explicit ExtendedUserFlow(const std::string& user_id);
46  virtual ~ExtendedUserFlow();
47
48 protected:
49  // Subclasses can call this method to unregister flow in the next event.
50  virtual void UnregisterFlowSoon();
51  std::string user_id() {
52    return user_id_;
53  };
54
55 private:
56  std::string user_id_;
57};
58
59}  // namespace chromeos
60
61#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_USER_FLOW_H_
62