• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
state()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_
96