| Index: chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.cc
|
| diff --git a/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.cc b/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.cc
|
| index 1a6f976f51e85e99b5fd1a6aa46e96c542faad80..7dff688db08d1156e7a44888e3724eadfe55e9f5 100644
|
| --- a/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.cc
|
| +++ b/chrome/browser/chromeos/login/enrollment/auto_enrollment_controller.cc
|
| @@ -13,6 +13,9 @@
|
| #include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h"
|
| #include "chrome/browser/chromeos/policy/server_backed_state_keys_broker.h"
|
| #include "chromeos/chromeos_switches.h"
|
| +#include "chromeos/dbus/cryptohome/rpc.pb.h"
|
| +#include "chromeos/dbus/cryptohome_client.h"
|
| +#include "chromeos/dbus/dbus_thread_manager.h"
|
| #include "chromeos/system/statistics_provider.h"
|
| #include "components/policy/core/common/cloud/device_management_service.h"
|
| #include "net/url_request/url_request_context_getter.h"
|
| @@ -132,10 +135,7 @@ AutoEnrollmentController::Mode AutoEnrollmentController::GetMode() {
|
| return MODE_NONE;
|
| }
|
|
|
| -AutoEnrollmentController::AutoEnrollmentController()
|
| - : state_(policy::AUTO_ENROLLMENT_STATE_IDLE),
|
| - safeguard_timer_(false, false),
|
| - client_start_weak_factory_(this) {}
|
| +AutoEnrollmentController::AutoEnrollmentController() {}
|
|
|
| AutoEnrollmentController::~AutoEnrollmentController() {}
|
|
|
| @@ -178,9 +178,10 @@ void AutoEnrollmentController::Start() {
|
| }
|
|
|
| // Arm the belts-and-suspenders timer to avoid hangs.
|
| - safeguard_timer_.Start(
|
| - FROM_HERE, base::TimeDelta::FromSeconds(kSafeguardTimeoutSeconds),
|
| - base::Bind(&AutoEnrollmentController::Timeout, base::Unretained(this)));
|
| + safeguard_timer_.Start(FROM_HERE,
|
| + base::TimeDelta::FromSeconds(kSafeguardTimeoutSeconds),
|
| + base::Bind(&AutoEnrollmentController::Timeout,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
|
|
| // Start by checking if the device has already been owned.
|
| UpdateState(policy::AUTO_ENROLLMENT_STATE_PENDING);
|
| @@ -264,15 +265,12 @@ void AutoEnrollmentController::StartClient(
|
| power_initial = power_limit;
|
| }
|
|
|
| - client_.reset(new policy::AutoEnrollmentClient(
|
| + client_ = base::MakeUnique<policy::AutoEnrollmentClient>(
|
| base::Bind(&AutoEnrollmentController::UpdateState,
|
| - base::Unretained(this)),
|
| - service,
|
| - g_browser_process->local_state(),
|
| - g_browser_process->system_request_context(),
|
| - state_keys.front(),
|
| - power_initial,
|
| - power_limit));
|
| + weak_ptr_factory_.GetWeakPtr()),
|
| + service, g_browser_process->local_state(),
|
| + g_browser_process->system_request_context(), state_keys.front(),
|
| + power_initial, power_limit);
|
|
|
| VLOG(1) << "Starting auto-enrollment client.";
|
| client_->Start();
|
| @@ -296,6 +294,35 @@ void AutoEnrollmentController::UpdateState(
|
| break;
|
| }
|
|
|
| + if (state_ == policy::AUTO_ENROLLMENT_STATE_NO_ENROLLMENT) {
|
| + StartRemoveFirmwareManagementParameters();
|
| + } else {
|
| + progress_callbacks_.Notify(state_);
|
| + }
|
| +}
|
| +
|
| +void AutoEnrollmentController::StartRemoveFirmwareManagementParameters() {
|
| + DCHECK_EQ(policy::AUTO_ENROLLMENT_STATE_NO_ENROLLMENT, state_);
|
| +
|
| + cryptohome::RemoveFirmwareManagementParametersRequest request;
|
| + chromeos::DBusThreadManager::Get()
|
| + ->GetCryptohomeClient()
|
| + ->RemoveFirmwareManagementParametersFromTpm(
|
| + request,
|
| + base::Bind(
|
| + &AutoEnrollmentController::OnFirmwareManagementParametersRemoved,
|
| + weak_ptr_factory_.GetWeakPtr()));
|
| +}
|
| +
|
| +void AutoEnrollmentController::OnFirmwareManagementParametersRemoved(
|
| + chromeos::DBusMethodCallStatus call_status,
|
| + bool result,
|
| + const cryptohome::BaseReply& reply) {
|
| + if (!result) {
|
| + LOG(ERROR) << "Failed to remove firmware management parameters, error: "
|
| + << reply.error();
|
| + }
|
| +
|
| progress_callbacks_.Notify(state_);
|
| }
|
|
|
|
|