Index: chrome/browser/chromeos/settings/device_settings_service.cc |
diff --git a/chrome/browser/chromeos/settings/device_settings_service.cc b/chrome/browser/chromeos/settings/device_settings_service.cc |
index 73cd7567a3d06791ed78d67452bd804b6ba75897..d95ffbd9f3bcbf70d7f96f9476fda91283076b34 100644 |
--- a/chrome/browser/chromeos/settings/device_settings_service.cc |
+++ b/chrome/browser/chromeos/settings/device_settings_service.cc |
@@ -129,13 +129,27 @@ void DeviceSettingsService::Load() { |
EnqueueLoad(false); |
} |
+void DeviceSettingsService::LoadImmediately() { |
+ bool request_key_load = true; |
+ bool cloud_validations = true; |
+ if (device_mode_ == policy::DEVICE_MODE_ENTERPRISE_AD) { |
+ request_key_load = false; |
+ cloud_validations = false; |
+ } |
+ std::unique_ptr<SessionManagerOperation> operation(new LoadSettingsOperation( |
+ request_key_load, cloud_validations, true /*force_immediate_load*/, |
+ base::Bind(&DeviceSettingsService::HandleCompletedOperation, |
+ weak_factory_.GetWeakPtr(), base::Closure()))); |
+ operation->Start(session_manager_client_, owner_key_util_, public_key_); |
+} |
+ |
void DeviceSettingsService::Store( |
std::unique_ptr<em::PolicyFetchResponse> policy, |
const base::Closure& callback) { |
// On Active Directory managed devices policy is written only by authpolicyd. |
CHECK(device_mode_ != policy::DEVICE_MODE_ENTERPRISE_AD); |
Enqueue(linked_ptr<SessionManagerOperation>(new StoreSettingsOperation( |
- base::Bind(&DeviceSettingsService::HandleCompletedOperation, |
+ base::Bind(&DeviceSettingsService::HandleCompletedAsyncOperation, |
weak_factory_.GetWeakPtr(), callback), |
std::move(policy)))); |
} |
@@ -233,8 +247,8 @@ void DeviceSettingsService::EnqueueLoad(bool request_key_load) { |
cloud_validations = false; |
} |
linked_ptr<SessionManagerOperation> operation(new LoadSettingsOperation( |
- request_key_load, cloud_validations, |
- base::Bind(&DeviceSettingsService::HandleCompletedOperation, |
+ request_key_load, cloud_validations, false /*force_immediate_load*/, |
+ base::Bind(&DeviceSettingsService::HandleCompletedAsyncOperation, |
weak_factory_.GetWeakPtr(), base::Closure()))); |
Enqueue(operation); |
} |
@@ -254,12 +268,23 @@ void DeviceSettingsService::StartNextOperation() { |
} |
} |
-void DeviceSettingsService::HandleCompletedOperation( |
+void DeviceSettingsService::HandleCompletedAsyncOperation( |
const base::Closure& callback, |
SessionManagerOperation* operation, |
Status status) { |
DCHECK_EQ(operation, pending_operations_.front().get()); |
+ HandleCompletedOperation(callback, operation, status); |
+ // Only remove the pending operation here, so new operations triggered by |
+ // any of the callbacks above are queued up properly. |
+ pending_operations_.pop_front(); |
+ |
+ StartNextOperation(); |
+} |
+void DeviceSettingsService::HandleCompletedOperation( |
+ const base::Closure& callback, |
+ SessionManagerOperation* operation, |
+ Status status) { |
store_status_ = status; |
if (status == STORE_SUCCESS) { |
policy_data_ = std::move(operation->policy_data()); |
@@ -298,12 +323,6 @@ void DeviceSettingsService::HandleCompletedOperation( |
// filter self-triggered updates. |
if (!callback.is_null()) |
callback.Run(); |
- |
- // Only remove the pending operation here, so new operations triggered by any |
- // of the callbacks above are queued up properly. |
- pending_operations_.pop_front(); |
- |
- StartNextOperation(); |
} |
void DeviceSettingsService::HandleError(Status status, |