Chromium Code Reviews| 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..bbef032ee6da503a409bfeaeb405469f0dc5ec57 100644 |
| --- a/chrome/browser/chromeos/settings/session_manager_operation.cc |
| +++ b/chrome/browser/chromeos/settings/session_manager_operation.cc |
| @@ -70,6 +70,28 @@ void SessionManagerOperation::StartLoading() { |
| } |
| } |
| +void SessionManagerOperation::LoadImmediately() { |
| + scoped_refptr<PublicKey> public_key(new PublicKey()); |
| + |
| + // Keep already-existing public key. |
| + if (public_key_.get() && public_key_->is_loaded()) { |
|
emaxx
2017/02/22 17:24:33
I believe you have to honor the force_key_load_ fl
Sergey Poromov
2017/02/28 14:01:17
Done.
|
| + public_key->data() = public_key_->data(); |
| + } |
| + if (!public_key->is_loaded() && owner_key_util_->IsPublicKeyPresent()) { |
| + if (!owner_key_util_->ImportPublicKey(&public_key->data())) |
| + LOG(ERROR) << "Failed to load public owner key."; |
| + } |
| + |
| + public_key_ = public_key; |
| + |
| + if (!public_key_.get() || !public_key_->is_loaded()) { |
| + ReportResult(DeviceSettingsService::STORE_KEY_UNAVAILABLE); |
| + return; |
| + } |
| + |
| + BlockingRetrieveDeviceSettings(); |
| +} |
| + |
| void SessionManagerOperation::ReportResult( |
| DeviceSettingsService::Status status) { |
| callback_.Run(this, status); |
| @@ -132,6 +154,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( |
| @@ -191,9 +218,14 @@ 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); |
| + } else { |
| + validator->StartValidation( |
| + base::Bind(&SessionManagerOperation::ReportValidatorStatus, |
| + weak_factory_.GetWeakPtr())); |
| + } |
| } |
| void SessionManagerOperation::ReportValidatorStatus( |
| @@ -219,16 +251,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( |