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_POLICY_ENROLLMENT_STATUS_CHROMEOS_H_
6#define CHROME_BROWSER_CHROMEOS_POLICY_ENROLLMENT_STATUS_CHROMEOS_H_
7
8#include "components/policy/core/common/cloud/cloud_policy_constants.h"
9#include "components/policy/core/common/cloud/cloud_policy_store.h"
10#include "components/policy/core/common/cloud/cloud_policy_validator.h"
11
12namespace policy {
13
14// Describes the result of an enrollment operation, including the relevant error
15// codes received from the involved components.
16class EnrollmentStatus {
17 public:
18  // Enrollment status codes.
19  enum Status {
20    STATUS_SUCCESS,                     // Enrollment succeeded.
21    STATUS_NO_STATE_KEYS,               // Server-backed state keys unavailable.
22    STATUS_REGISTRATION_FAILED,         // DM registration failed.
23    STATUS_REGISTRATION_BAD_MODE,       // Bad device mode.
24    STATUS_ROBOT_AUTH_FETCH_FAILED,     // API OAuth2 auth code failure.
25    STATUS_ROBOT_REFRESH_FETCH_FAILED,  // API OAuth2 refresh token failure.
26    STATUS_ROBOT_REFRESH_STORE_FAILED,  // Failed to store API OAuth2 token.
27    STATUS_POLICY_FETCH_FAILED,         // DM policy fetch failed.
28    STATUS_VALIDATION_FAILED,           // Policy validation failed.
29    STATUS_LOCK_ERROR,                  // Cryptohome failed to lock the device.
30    STATUS_LOCK_TIMEOUT,                // Timeout while waiting for the lock.
31    STATUS_LOCK_WRONG_USER,             // Locked to different domain.
32    STATUS_STORE_ERROR,                 // Failed to store the policy.
33    STATUS_STORE_TOKEN_AND_ID_FAILED,   // Failed to store DM token and device
34                                        // ID.
35  };
36
37  // Helpers for constructing errors for relevant cases.
38  static EnrollmentStatus ForStatus(Status status);
39  static EnrollmentStatus ForRegistrationError(
40      DeviceManagementStatus client_status);
41  static EnrollmentStatus ForFetchError(DeviceManagementStatus client_status);
42  static EnrollmentStatus ForRobotAuthFetchError(
43      DeviceManagementStatus client_status);
44  static EnrollmentStatus ForRobotRefreshFetchError(int http_status);
45  static EnrollmentStatus ForValidationError(
46      CloudPolicyValidatorBase::Status validation_status);
47  static EnrollmentStatus ForStoreError(
48      CloudPolicyStore::Status store_error,
49      CloudPolicyValidatorBase::Status validation_status);
50
51  Status status() const { return status_; }
52  DeviceManagementStatus client_status() const { return client_status_; }
53  int http_status() const { return http_status_; }
54  CloudPolicyStore::Status store_status() const { return store_status_; }
55  CloudPolicyValidatorBase::Status validation_status() const {
56    return validation_status_;
57  }
58
59 private:
60  EnrollmentStatus(Status status,
61                   DeviceManagementStatus client_status,
62                   int http_status,
63                   CloudPolicyStore::Status store_status,
64                   CloudPolicyValidatorBase::Status validation_status);
65
66  Status status_;
67  DeviceManagementStatus client_status_;
68  int http_status_;
69  CloudPolicyStore::Status store_status_;
70  CloudPolicyValidatorBase::Status validation_status_;
71};
72
73}  // namespace policy
74
75#endif  // CHROME_BROWSER_CHROMEOS_POLICY_ENROLLMENT_STATUS_CHROMEOS_H_
76