Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1515)

Unified Diff: chrome/browser/chromeos/settings/session_manager_operation.cc

Issue 2714493002: Load DeviceLocalAccount policy and DeviceSettings immediately on restore after Chrome crash. (Closed)
Patch Set: wrap Validator in unique_ptr Created 3 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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(

Powered by Google App Engine
This is Rietveld 408576698