| 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(
|
|
|