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