Chromium Code Reviews| Index: chrome/browser/chromeos/policy/consumer_unenrollment_handler.cc |
| diff --git a/chrome/browser/chromeos/policy/consumer_unenrollment_handler.cc b/chrome/browser/chromeos/policy/consumer_unenrollment_handler.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..825468c967ec874a11986c53f18c2a6ba1b5bd08 |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/policy/consumer_unenrollment_handler.cc |
| @@ -0,0 +1,79 @@ |
| + // Copyright 2014 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "chrome/browser/chromeos/policy/consumer_unenrollment_handler.h" |
| + |
| +#include "base/bind.h" |
| +#include "base/logging.h" |
| +#include "chrome/browser/browser_process.h" |
|
bartfab (slow)
2014/11/28 13:25:17
Nit: Not used.
davidyu
2014/12/01 17:05:22
Done.
|
| +#include "chrome/browser/browser_process_platform_part.h" |
|
bartfab (slow)
2014/11/28 13:25:17
Nit: Not used.
davidyu
2014/12/01 17:05:22
Done.
|
| +#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
|
bartfab (slow)
2014/11/28 13:25:17
Nit: Not used.
davidyu
2014/12/01 17:05:21
Done.
|
| +#include "chrome/browser/chromeos/policy/consumer_management_service.h" |
| +#include "chrome/browser/chromeos/policy/consumer_management_stage.h" |
| +#include "chrome/browser/chromeos/policy/device_cloud_policy_manager_chromeos.h" |
| +#include "chrome/browser/chromeos/settings/device_settings_service.h" |
| +#include "policy/proto/device_management_backend.pb.h" |
| + |
| +namespace em = enterprise_management; |
| + |
| +namespace policy { |
| + |
| +ConsumerUnenrollmentHandler::ConsumerUnenrollmentHandler( |
| + chromeos::DeviceSettingsService* device_settings_service, |
| + ConsumerManagementService* consumer_management_service, |
| + DeviceCloudPolicyManagerChromeOS* device_cloud_policy_manager) |
| + : device_settings_service_(device_settings_service), |
| + consumer_management_service_(consumer_management_service), |
| + device_cloud_policy_manager_(device_cloud_policy_manager), |
| + weak_factory_(this) { |
| +} |
| + |
| +ConsumerUnenrollmentHandler::~ConsumerUnenrollmentHandler() { |
| +} |
| + |
| +void ConsumerUnenrollmentHandler::Shutdown() { |
| +} |
| + |
| +void ConsumerUnenrollmentHandler::Start() { |
| + device_cloud_policy_manager_->Unregister( |
|
bartfab (slow)
2014/11/28 13:25:18
What if the user clicks the "unenroll" button agai
davidyu
2014/12/01 17:05:21
When the user clicks the unenroll button, it immed
|
| + base::Bind(&ConsumerUnenrollmentHandler::OnUnregistered, |
| + weak_factory_.GetWeakPtr())); |
| +} |
| + |
| +void ConsumerUnenrollmentHandler::OnUnregistered(bool success) { |
| + if (!success) { |
| + consumer_management_service_->SetStage(ConsumerManagementStage( |
| + ConsumerManagementStage::UNENROLLMENT_DM_SERVER_FAILED)); |
| + LOG(ERROR) << "Failed to unregister and disconnect device cloud policy " |
| + << "manager."; |
| + return; |
| + } |
| + |
| + device_settings_service_->SetManagementSettings( |
| + em::PolicyData::LOCAL_OWNER, |
| + "", // request token |
| + "", // device ID |
| + base::Bind(&ConsumerUnenrollmentHandler::OnManagementSettingsSet, |
| + weak_factory_.GetWeakPtr())); |
| +} |
| + |
| +void ConsumerUnenrollmentHandler::OnManagementSettingsSet() { |
| + if (device_settings_service_->status() != |
| + chromeos::DeviceSettingsService::STORE_SUCCESS) { |
| + consumer_management_service_->SetStage(ConsumerManagementStage( |
| + ConsumerManagementStage::UNENROLLMENT_UPDATE_DEVICE_SETTINGS_FAILED)); |
| + LOG(ERROR) << "Failed to unset request token and device ID."; |
| + return; |
| + } |
| + |
| + consumer_management_service_->SetStage(ConsumerManagementStage( |
| + ConsumerManagementStage::UNENROLLMENT_SUCCESS)); |
| + |
| + // Disconnecting the device cloud policy manager will restart the device |
| + // cloud policy initializer. So this must be done after the management |
| + // settings are updated, so that the initializer won't reconnect the manager. |
| + device_cloud_policy_manager_->Disconnect(); |
| +} |
| + |
| +} // namespace policy |