Home | History | Annotate | Download | only in enrollment
      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, bool first_boot);
     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   scoped_ptr<policy::AutoEnrollmentClient> client_;
     87 
     88   base::WeakPtrFactory<AutoEnrollmentController> client_start_weak_factory_;
     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