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