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_ENROLLMENT_ENROLLMENT_SCREEN_ACTOR_H_
6#define CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_ENROLLMENT_SCREEN_ACTOR_H_
7
8#include <string>
9
10#include "base/basictypes.h"
11#include "base/callback_forward.h"
12#include "chrome/browser/chromeos/policy/enrollment_status_chromeos.h"
13
14class GoogleServiceAuthError;
15
16namespace chromeos {
17
18// Interface class for the enterprise enrollment screen actor.
19class EnrollmentScreenActor {
20 public:
21  // Enumeration of the possible errors that can occur during enrollment which
22  // are not covered by GoogleServiceAuthError or EnrollmentStatus.
23  enum UIError {
24    // Existing enrollment domain doesn't match authentication user.
25    UI_ERROR_DOMAIN_MISMATCH,
26    // Requested device mode not supported with auto enrollment.
27    UI_ERROR_AUTO_ENROLLMENT_BAD_MODE,
28    // Unexpected error condition, indicates a bug in the code.
29    UI_ERROR_FATAL,
30  };
31
32  // Describes the enrollment mode.  Must be kept in sync with
33  // |kEnrollmentModes| in enrollment_screen_handler.cc.
34  enum EnrollmentMode {
35    ENROLLMENT_MODE_MANUAL,    // Manually triggered enrollment.
36    ENROLLMENT_MODE_FORCED,    // Forced enrollment, user can't skip.
37    ENROLLMENT_MODE_AUTO,      // Auto-enrollment during first sign-in.
38    ENROLLMENT_MODE_RECOVERY,  // Recover from "spontaneous unenrollment".
39    ENROLLMENT_MODE_COUNT      // Counter must be last. Not an enrollment mode.
40  };
41
42  // This defines the interface for controllers which will be called back when
43  // something happens on the UI.
44  class Controller {
45   public:
46    virtual ~Controller() {}
47
48    virtual void OnLoginDone(const std::string& user) = 0;
49    virtual void OnAuthError(const GoogleServiceAuthError& error) = 0;
50    virtual void OnOAuthTokenAvailable(const std::string& oauth_token) = 0;
51    virtual void OnRetry() = 0;
52    virtual void OnCancel() = 0;
53    virtual void OnConfirmationClosed() = 0;
54  };
55
56  virtual ~EnrollmentScreenActor() {}
57
58  // Initializes the actor with parameters.
59  virtual void SetParameters(Controller* controller,
60                             EnrollmentMode enrollment_mode,
61                             const std::string& management_domain) = 0;
62
63  // Prepare the contents to showing.
64  virtual void PrepareToShow() = 0;
65
66  // Shows the contents of the screen.
67  virtual void Show() = 0;
68
69  // Hides the contents of the screen.
70  virtual void Hide() = 0;
71
72  // Starts fetching the OAuth token.
73  virtual void FetchOAuthToken() = 0;
74
75  // Resets the authentication state and invokes the passed callback on
76  // completion.
77  virtual void ResetAuth(const base::Closure& callback) = 0;
78
79  // Shows the signin screen.
80  virtual void ShowSigninScreen() = 0;
81
82  // Shows the spinner screen for enrollment.
83  virtual void ShowEnrollmentSpinnerScreen() = 0;
84
85  // Shows the spinner screen for login after auto-enrollment.
86  virtual void ShowLoginSpinnerScreen() = 0;
87
88  // Show an authentication error.
89  virtual void ShowAuthError(const GoogleServiceAuthError& error) = 0;
90
91  // Show non-authentication error.
92  virtual void ShowUIError(UIError error) = 0;
93
94  // Update the UI to report the |status| of the enrollment procedure.
95  virtual void ShowEnrollmentStatus(policy::EnrollmentStatus status) = 0;
96};
97
98}  // namespace chromeos
99
100#endif  // CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_ENROLLMENT_SCREEN_ACTOR_H_
101