Upstream version 7.35.139.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / login / enrollment / auto_enrollment_controller.h
1 // Copyright 2014 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_AUTO_ENROLLMENT_CONTROLLER_H_
6 #define CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_AUTO_ENROLLMENT_CONTROLLER_H_
7
8 #include "base/callback_list.h"
9 #include "base/macros.h"
10 #include "base/memory/scoped_ptr.h"
11 #include "base/memory/weak_ptr.h"
12 #include "chrome/browser/chromeos/policy/auto_enrollment_client.h"
13 #include "chrome/browser/chromeos/settings/device_settings_service.h"
14
15 namespace chromeos {
16
17 // Drives the auto-enrollment check, running an AutoEnrollmentClient if
18 // appropriate to make a decision.
19 class AutoEnrollmentController {
20  public:
21   typedef base::CallbackList<void(policy::AutoEnrollmentState)>
22       ProgressCallbackList;
23
24   // Parameter values for the kEnterpriseEnableForcedReEnrollment flag.
25   static const char kForcedReEnrollmentAlways[];
26   static const char kForcedReEnrollmentLegacy[];
27   static const char kForcedReEnrollmentNever[];
28   static const char kForcedReEnrollmentOfficialBuild[];
29
30   // Auto-enrollment modes.
31   enum Mode {
32     // No automatic enrollment.
33     MODE_NONE,
34     // Legacy auto-enrollment.
35     MODE_LEGACY_AUTO_ENROLLMENT,
36     // Forced re-enrollment.
37     MODE_FORCED_RE_ENROLLMENT,
38   };
39
40   // Gets the auto-enrollment mode based on command-line flags and official
41   // build status.
42   static Mode GetMode();
43
44   AutoEnrollmentController();
45   ~AutoEnrollmentController();
46
47   // Starts the auto-enrollment check.
48   void Start();
49
50   // Stops any pending auto-enrollment checking.
51   void Cancel();
52
53   // Retry checking.
54   void Retry();
55
56   // Registers a callback to invoke on state changes.
57   scoped_ptr<ProgressCallbackList::Subscription> RegisterProgressCallback(
58       const ProgressCallbackList::CallbackType& callback);
59
60   // Checks whether legacy auto-enrollment should be performed.
61   bool ShouldEnrollSilently();
62
63   policy::AutoEnrollmentState state() const { return state_; }
64
65  private:
66   // Callback for the ownership status check.
67   void OnOwnershipStatusCheckDone(
68       DeviceSettingsService::OwnershipStatus status);
69
70   // Sets |state_| and notifies |progress_callbacks_|.
71   void UpdateState(policy::AutoEnrollmentState state);
72
73   policy::AutoEnrollmentState state_;
74   ProgressCallbackList progress_callbacks_;
75
76   base::WeakPtrFactory<AutoEnrollmentController> weak_factory_;
77
78   scoped_ptr<policy::AutoEnrollmentClient> client_;
79
80   DISALLOW_COPY_AND_ASSIGN(AutoEnrollmentController);
81 };
82
83 }  // namespace chromeos
84
85 #endif  // CHROME_BROWSER_CHROMEOS_LOGIN_ENROLLMENT_AUTO_ENROLLMENT_CONTROLLER_H_