Index: chrome/browser/chromeos/settings/session_manager_operation.cc |
diff --git a/chrome/browser/chromeos/settings/session_manager_operation.cc b/chrome/browser/chromeos/settings/session_manager_operation.cc |
index bfe8316c87e30cb90f995b6934152ddfec25c6e7..fd9b3babd7c98adc70e7a4697671d8f5341d389c 100644 |
--- a/chrome/browser/chromeos/settings/session_manager_operation.cc |
+++ b/chrome/browser/chromeos/settings/session_manager_operation.cc |
@@ -9,6 +9,7 @@ |
#include "base/bind.h" |
#include "base/bind_helpers.h" |
#include "base/files/file_path.h" |
+#include "base/memory/ptr_util.h" |
#include "base/message_loop/message_loop.h" |
#include "base/stl_util.h" |
#include "base/task_runner_util.h" |
@@ -70,6 +71,13 @@ void SessionManagerOperation::StartLoading() { |
} |
} |
+void SessionManagerOperation::LoadImmediately() { |
+ StorePublicKey( |
+ base::Bind(&SessionManagerOperation::BlockingRetrieveDeviceSettings, |
+ weak_factory_.GetWeakPtr()), |
+ LoadPublicKey(owner_key_util_, public_key_)); |
+} |
+ |
void SessionManagerOperation::ReportResult( |
DeviceSettingsService::Status status) { |
callback_.Run(this, status); |
@@ -132,6 +140,11 @@ void SessionManagerOperation::RetrieveDeviceSettings() { |
weak_factory_.GetWeakPtr())); |
} |
+void SessionManagerOperation::BlockingRetrieveDeviceSettings() { |
+ ValidateDeviceSettings( |
+ session_manager_client()->BlockingRetrieveDevicePolicy()); |
+} |
+ |
void SessionManagerOperation::ValidateDeviceSettings( |
const std::string& policy_blob) { |
std::unique_ptr<em::PolicyFetchResponse> policy( |
@@ -154,9 +167,10 @@ void SessionManagerOperation::ValidateDeviceSettings( |
pool->GetSequenceToken(), |
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN); |
- policy::DeviceCloudPolicyValidator* validator = |
- policy::DeviceCloudPolicyValidator::Create(std::move(policy), |
- background_task_runner); |
+ std::unique_ptr<policy::DeviceCloudPolicyValidator> validator = |
+ base::WrapUnique<policy::DeviceCloudPolicyValidator>( |
+ policy::DeviceCloudPolicyValidator::Create(std::move(policy), |
+ background_task_runner)); |
if (cloud_validations_) { |
// Policy auto-generated by session manager doesn't include a timestamp, so |
@@ -191,9 +205,15 @@ void SessionManagerOperation::ValidateDeviceSettings( |
validator->ValidatePolicyType(policy::dm_protocol::kChromeDevicePolicyType); |
validator->ValidatePayload(); |
- validator->StartValidation( |
- base::Bind(&SessionManagerOperation::ReportValidatorStatus, |
- weak_factory_.GetWeakPtr())); |
+ if (force_immediate_load_) { |
+ validator->RunValidation(); |
+ ReportValidatorStatus(validator.get()); |
+ } else { |
+ // The Validator will delete itself once validation is complete. |
+ validator.release()->StartValidation( |
+ base::Bind(&SessionManagerOperation::ReportValidatorStatus, |
+ weak_factory_.GetWeakPtr())); |
+ } |
} |
void SessionManagerOperation::ReportValidatorStatus( |
@@ -219,16 +239,21 @@ void SessionManagerOperation::ReportValidatorStatus( |
LoadSettingsOperation::LoadSettingsOperation(bool force_key_load, |
bool cloud_validations, |
+ bool force_immediate_load, |
const Callback& callback) |
: SessionManagerOperation(callback) { |
force_key_load_ = force_key_load; |
cloud_validations_ = cloud_validations; |
+ force_immediate_load_ = force_immediate_load; |
} |
LoadSettingsOperation::~LoadSettingsOperation() {} |
void LoadSettingsOperation::Run() { |
- StartLoading(); |
+ if (force_immediate_load_) |
+ LoadImmediately(); |
+ else |
+ StartLoading(); |
} |
StoreSettingsOperation::StoreSettingsOperation( |