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

Unified Diff: chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc

Issue 769703003: SetManagementSettings() is moved to OwnerSettingsServiceChromeOS. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Management settings-related tests are moved to OwnerSettingsService's test suite. Created 6 years 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/ownership/owner_settings_service_chromeos.cc
diff --git a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
index f2b266485a86e94be1f639cba479736e2fecb1c3..9f4a2cdde71728f2cfbb10ec909393828a41de31 100644
--- a/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
+++ b/chrome/browser/chromeos/ownership/owner_settings_service_chromeos.cc
@@ -148,8 +148,42 @@ void DoesPrivateKeyExistAsync(
callback);
}
+// Returns true if it is okay to transfer from the current mode to the new
+// mode. This function should be called in SetManagementMode().
+bool CheckManagementModeTransition(em::PolicyData::ManagementMode current_mode,
+ em::PolicyData::ManagementMode new_mode) {
+ // Mode is not changed.
+ if (current_mode == new_mode)
+ return true;
+
+ switch (current_mode) {
+ case em::PolicyData::LOCAL_OWNER:
+ // For consumer management enrollment.
+ return new_mode == em::PolicyData::CONSUMER_MANAGED;
+
+ case em::PolicyData::ENTERPRISE_MANAGED:
+ // Management mode cannot be set when it is currently ENTERPRISE_MANAGED.
+ return false;
+
+ case em::PolicyData::CONSUMER_MANAGED:
+ // For consumer management unenrollment.
+ return new_mode == em::PolicyData::LOCAL_OWNER;
+ }
+
+ NOTREACHED();
+ return false;
+}
+
} // namespace
+OwnerSettingsServiceChromeOS::ManagementSettingsSetRequest::
+ ManagementSettingsSetRequest() {
+}
+
+OwnerSettingsServiceChromeOS::ManagementSettingsSetRequest::
+ ~ManagementSettingsSetRequest() {
+}
+
OwnerSettingsServiceChromeOS::OwnerSettingsServiceChromeOS(
DeviceSettingsService* device_settings_service,
Profile* profile,
@@ -289,6 +323,17 @@ void OwnerSettingsServiceChromeOS::OnDeviceSettingsServiceShutdown() {
device_settings_service_ = nullptr;
}
+void OwnerSettingsServiceChromeOS::SetManagementSettings(
+ const ManagementSettingsSetRequest& request) {
+ if (!IsOwner() && !IsOwnerInTests(user_id_)) {
+ if (!request.callback.is_null())
+ request.callback.Run(false /* success */);
+ return;
+ }
+ pending_management_settings_set_requests_.push_back(request);
+ StorePendingChanges();
+}
+
// static
void OwnerSettingsServiceChromeOS::IsOwnerForSafeModeAsync(
const std::string& user_hash,
@@ -617,6 +662,26 @@ void OwnerSettingsServiceChromeOS::StorePendingChanges() {
scoped_ptr<em::PolicyData> policy = AssemblePolicy(
user_id_, device_settings_service_->policy_data(), &settings);
+
+ pending_callbacks_.clear();
+ for (const auto& change : pending_management_settings_set_requests_) {
+ em::PolicyData::ManagementMode current_mode = em::PolicyData::LOCAL_OWNER;
+ if (policy->has_management_mode())
+ current_mode = policy->management_mode();
Mattias Nissler (ping if slow) 2014/12/02 08:52:40 I think the preceding 3 lines should use David's n
ygorshenin1 2014/12/02 19:18:58 Done.
+ if (!CheckManagementModeTransition(current_mode, change.management_mode)) {
+ LOG(ERROR) << "Invalid management mode transition: current mode = "
+ << current_mode << ", new mode = " << change.management_mode;
+ if (!change.callback.is_null())
+ change.callback.Run(false /* success */);
+ continue;
+ }
+ policy->set_management_mode(change.management_mode);
+ policy->set_request_token(change.request_token);
+ policy->set_device_id(change.device_id);
+ pending_callbacks_.push_back(change.callback);
+ }
+ pending_management_settings_set_requests_.clear();
+
bool rv = AssembleAndSignPolicyAsync(
content::BrowserThread::GetBlockingPool(), policy.Pass(),
base::Bind(&OwnerSettingsServiceChromeOS::OnPolicyAssembledAndSigned,
@@ -641,7 +706,7 @@ void OwnerSettingsServiceChromeOS::OnPolicyAssembledAndSigned(
void OwnerSettingsServiceChromeOS::OnSignedPolicyStored(bool success) {
CHECK(device_settings_service_);
ReportStatusAndContinueStoring(success &&
- device_settings_service_->status() !=
+ device_settings_service_->status() ==
DeviceSettingsService::STORE_SUCCESS);
}
@@ -650,6 +715,10 @@ void OwnerSettingsServiceChromeOS::ReportStatusAndContinueStoring(
store_settings_factory_.InvalidateWeakPtrs();
FOR_EACH_OBSERVER(OwnerSettingsService::Observer, observers_,
OnSignedPolicyStored(success));
+ for (const auto& callback : pending_callbacks_) {
+ if (!callback.is_null())
+ callback.Run(success);
+ }
StorePendingChanges();
}

Powered by Google App Engine
This is Rietveld 408576698