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