Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2127)

Unified Diff: chrome/browser/chromeos/policy/consumer_management_service.cc

Issue 493613002: Add an enrolling state for consumer management section in settings page. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@dn
Patch Set: Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/policy/consumer_management_service.cc
diff --git a/chrome/browser/chromeos/policy/consumer_management_service.cc b/chrome/browser/chromeos/policy/consumer_management_service.cc
index 8e9a0dcb232f38888430f02d519dc9a71e0c72d8..d072de560a3080981d980f935e36d65384b785f1 100644
--- a/chrome/browser/chromeos/policy/consumer_management_service.cc
+++ b/chrome/browser/chromeos/policy/consumer_management_service.cc
@@ -8,6 +8,7 @@
#include "base/callback.h"
#include "base/location.h"
#include "base/logging.h"
+#include "base/macros.h"
bartfab (slow) 2014/08/21 11:39:35 Nit: Already included by the header file.
davidyu 2014/08/22 05:14:13 Done.
#include "base/message_loop/message_loop.h"
#include "base/prefs/pref_registry_simple.h"
#include "base/prefs/pref_service.h"
@@ -65,52 +66,113 @@ const char kEnrollmentNotificationUrl[] = "chrome://consumer-management/enroll";
// management enrollment/unenrollment confirmation overlay.
const char kConsumerManagementOverlay[] = "consumer-management-overlay";
+// The string of Status enum.
+const char* kStatusString[] = {
+ "STATUS_UNKNOWN",
+ "STATUS_ENROLLED",
+ "STATUS_ENROLLING",
+ "STATUS_UNENROLLED",
+ "STATUS_UNENROLLING",
+};
+
+COMPILE_ASSERT(
+ arraysize(kStatusString) == policy::ConsumerManagementService::STATUS_LAST,
+ "invalid kStatusString array size.");
+
} // namespace
+namespace em = enterprise_management;
+
namespace policy {
ConsumerManagementService::ConsumerManagementService(
- chromeos::CryptohomeClient* client)
+ chromeos::CryptohomeClient* client,
+ chromeos::DeviceSettingsService* device_settings_service)
: Consumer("consumer_management_service"),
client_(client),
+ device_settings_service_(device_settings_service),
enrolling_profile_(NULL),
weak_ptr_factory_(this) {
registrar_.Add(this,
chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED,
content::NotificationService::AllSources());
+ // A NULL value may be passed in the test.
bartfab (slow) 2014/08/21 11:39:35 Nit: s/the test/tests/
davidyu 2014/08/22 05:14:13 Done.
+ if (device_settings_service_)
+ device_settings_service_->AddObserver(this);
}
ConsumerManagementService::~ConsumerManagementService() {
- registrar_.Remove(this,
- chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED,
- content::NotificationService::AllSources());
if (enrolling_profile_) {
ProfileOAuth2TokenServiceFactory::GetForProfile(enrolling_profile_)->
RemoveObserver(this);
}
+ if (device_settings_service_)
+ device_settings_service_->RemoveObserver(this);
+ registrar_.Remove(this,
+ chrome::NOTIFICATION_LOGIN_USER_PROFILE_PREPARED,
+ content::NotificationService::AllSources());
}
// static
void ConsumerManagementService::RegisterPrefs(PrefRegistrySimple* registry) {
registry->RegisterIntegerPref(
- prefs::kConsumerManagementEnrollmentState, ENROLLMENT_NONE);
+ prefs::kConsumerManagementEnrollmentStage, ENROLLMENT_STAGE_NONE);
+}
+
+void ConsumerManagementService::AddObserver(Observer* observer) {
+ observers_.AddObserver(observer);
+}
+
+void ConsumerManagementService::RemoveObserver(Observer* observer) {
+ observers_.RemoveObserver(observer);
+}
+
+ConsumerManagementService::Status
+ConsumerManagementService::GetStatus() const {
+ if (!device_settings_service_)
+ return STATUS_UNKNOWN;
+
+ const enterprise_management::PolicyData* policy_data =
+ device_settings_service_->policy_data();
+ if (!policy_data)
+ return STATUS_UNKNOWN;
+
+ if (policy_data->management_mode() == em::PolicyData::CONSUMER_MANAGED) {
+ // TODO(davidyu): Check if unenrollment is in progress.
+ // http://crbug.com/353050.
+ return STATUS_ENROLLED;
+ } else {
bartfab (slow) 2014/08/21 11:39:35 Nit: The style guide forbids else after a return i
davidyu 2014/08/22 05:14:13 Done.
+ EnrollmentStage stage = GetEnrollmentStage();
+ if (stage > ENROLLMENT_STAGE_NONE && stage < ENROLLMENT_STAGE_SUCCESS)
+ return STATUS_ENROLLING;
+ else
bartfab (slow) 2014/08/21 11:39:35 Nit: The style guide forbids else after a return i
davidyu 2014/08/22 05:14:13 Done.
+ return STATUS_UNENROLLED;
+ }
}
-ConsumerManagementService::ConsumerEnrollmentState
-ConsumerManagementService::GetEnrollmentState() const {
+// static
+std::string ConsumerManagementService::GetStatusString(Status status) {
+ if (status < 0 || status >= STATUS_LAST)
+ status = STATUS_UNKNOWN;
+ return kStatusString[status];
+}
+
+ConsumerManagementService::EnrollmentStage
+ConsumerManagementService::GetEnrollmentStage() const {
const PrefService* prefs = g_browser_process->local_state();
- int state = prefs->GetInteger(prefs::kConsumerManagementEnrollmentState);
- if (state < 0 || state >= ENROLLMENT_LAST) {
- LOG(ERROR) << "Unknown enrollment state: " << state;
- state = 0;
+ int stage = prefs->GetInteger(prefs::kConsumerManagementEnrollmentStage);
+ if (stage < 0 || stage >= ENROLLMENT_STAGE_LAST) {
+ LOG(ERROR) << "Unknown enrollment stage: " << stage;
+ stage = 0;
}
- return static_cast<ConsumerEnrollmentState>(state);
+ return static_cast<EnrollmentStage>(stage);
}
-void ConsumerManagementService::SetEnrollmentState(
- ConsumerEnrollmentState state) {
+void ConsumerManagementService::SetEnrollmentStage(EnrollmentStage stage) {
PrefService* prefs = g_browser_process->local_state();
- prefs->SetInteger(prefs::kConsumerManagementEnrollmentState, state);
+ prefs->SetInteger(prefs::kConsumerManagementEnrollmentStage, stage);
+
+ NotifyStatusChanged();
}
void ConsumerManagementService::GetOwner(const GetOwnerCallback& callback) {
@@ -135,6 +197,13 @@ void ConsumerManagementService::SetOwner(const std::string& user_id,
callback));
}
+void ConsumerManagementService::OwnershipStatusChanged() {
+}
+
+void ConsumerManagementService::DeviceSettingsUpdated() {
+ NotifyStatusChanged();
+}
+
void ConsumerManagementService::Observe(
int type,
const content::NotificationSource& source,
@@ -177,7 +246,7 @@ void ConsumerManagementService::OnGetTokenFailure(
base::MessageLoop::current()->DeleteSoon(FROM_HERE, token_request_.release());
LOG(ERROR) << "Failed to get the access token: " << error.ToString();
- EndEnrollment(ENROLLMENT_GET_TOKEN_FAILED);
+ EndEnrollment(ENROLLMENT_STAGE_GET_TOKEN_FAILED);
}
ConsumerManagementService::DesktopNotificationDelegate::
@@ -268,28 +337,28 @@ void ConsumerManagementService::OnFlushAndSignBootAttributesDone(
}
void ConsumerManagementService::OnOwnerSignin(Profile* profile) {
- const ConsumerEnrollmentState state = GetEnrollmentState();
- switch (state) {
- case ENROLLMENT_NONE:
+ const EnrollmentStage stage = GetEnrollmentStage();
+ switch (stage) {
+ case ENROLLMENT_STAGE_NONE:
// Do nothing.
return;
- case ENROLLMENT_OWNER_STORED:
+ case ENROLLMENT_STAGE_OWNER_STORED:
// Continue the enrollment process after the owner signs in.
ContinueEnrollmentProcess(profile);
return;
- case ENROLLMENT_SUCCESS:
- case ENROLLMENT_CANCELED:
- case ENROLLMENT_BOOT_LOCKBOX_FAILED:
- case ENROLLMENT_DM_SERVER_FAILED:
- case ENROLLMENT_GET_TOKEN_FAILED:
- ShowDesktopNotificationAndResetState(state, profile);
+ case ENROLLMENT_STAGE_SUCCESS:
+ case ENROLLMENT_STAGE_CANCELED:
+ case ENROLLMENT_STAGE_BOOT_LOCKBOX_FAILED:
+ case ENROLLMENT_STAGE_DM_SERVER_FAILED:
+ case ENROLLMENT_STAGE_GET_TOKEN_FAILED:
+ ShowDesktopNotificationAndResetStage(stage, profile);
return;
- case ENROLLMENT_REQUESTED:
- case ENROLLMENT_LAST:
- NOTREACHED() << "Unexpected enrollment state " << state;
+ case ENROLLMENT_STAGE_REQUESTED:
+ case ENROLLMENT_STAGE_LAST:
+ NOTREACHED() << "Unexpected enrollment stage " << stage;
return;
}
}
@@ -351,30 +420,30 @@ void ConsumerManagementService::OnEnrollmentCompleted(EnrollmentStatus status) {
<< " http_status=" << status.http_status()
<< " store_status=" << status.store_status()
<< " validation_status=" << status.validation_status();
- EndEnrollment(ENROLLMENT_DM_SERVER_FAILED);
+ EndEnrollment(ENROLLMENT_STAGE_DM_SERVER_FAILED);
return;
}
- EndEnrollment(ENROLLMENT_SUCCESS);
+ EndEnrollment(ENROLLMENT_STAGE_SUCCESS);
}
-void ConsumerManagementService::EndEnrollment(ConsumerEnrollmentState state) {
+void ConsumerManagementService::EndEnrollment(EnrollmentStage stage) {
Profile* profile = enrolling_profile_;
enrolling_profile_ = NULL;
- SetEnrollmentState(state);
+ SetEnrollmentStage(stage);
if (user_manager::UserManager::Get()->IsCurrentUserOwner())
- ShowDesktopNotificationAndResetState(state, profile);
+ ShowDesktopNotificationAndResetStage(stage, profile);
}
-void ConsumerManagementService::ShowDesktopNotificationAndResetState(
- ConsumerEnrollmentState state, Profile* profile) {
+void ConsumerManagementService::ShowDesktopNotificationAndResetStage(
+ EnrollmentStage stage, Profile* profile) {
base::string16 title;
base::string16 body;
base::string16 button_label;
base::Closure button_click_callback;
- if (state == ENROLLMENT_SUCCESS) {
+ if (stage == ENROLLMENT_STAGE_SUCCESS) {
title = l10n_util::GetStringUTF16(
IDS_CONSUMER_MANAGEMENT_ENROLLMENT_NOTIFICATION_TITLE);
body = l10n_util::GetStringUTF16(
@@ -418,7 +487,7 @@ void ConsumerManagementService::ShowDesktopNotificationAndResetState(
notification.SetSystemPriority();
g_browser_process->notification_ui_manager()->Add(notification, profile);
- SetEnrollmentState(ENROLLMENT_NONE);
+ SetEnrollmentStage(ENROLLMENT_STAGE_NONE);
}
void ConsumerManagementService::OpenSettingsPage(Profile* profile) const {
@@ -443,4 +512,12 @@ const std::string& ConsumerManagementService::GetAccountIdFromProfile(
GetAuthenticatedAccountId();
}
+void ConsumerManagementService::NotifyStatusChanged() {
+ Status status = GetStatus();
+
+ FOR_EACH_OBSERVER(Observer,
+ observers_,
+ OnConsumerManagementStatusChanged(status));
+}
+
} // namespace policy

Powered by Google App Engine
This is Rietveld 408576698