Chromium Code Reviews| Index: chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.cc |
| diff --git a/chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.cc b/chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..f340890b3d5b10fc9dbb359ff2f69ffc9b37ca34 |
| --- /dev/null |
| +++ b/chrome/browser/chromeos/arc/auth/arc_active_directory_enrollment_token_fetcher.cc |
| @@ -0,0 +1,84 @@ |
| +// Copyright 2017 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/arc/auth/arc_active_directory_enrollment_token_fetcher.h" |
| + |
| +#include <string> |
| + |
| +#include "base/bind.h" |
| +#include "base/memory/ptr_util.h" |
| +#include "chrome/browser/browser_process.h" |
| +#include "chrome/browser/chromeos/policy/browser_policy_connector_chromeos.h" |
| +#include "components/policy/core/common/cloud/device_management_service.h" |
| +#include "net/url_request/url_request_context_getter.h" |
| + |
| +namespace { |
| + |
| +policy::DeviceManagementService* GetDeviceManagementService() { |
| + policy::BrowserPolicyConnectorChromeOS* const connector = |
| + g_browser_process->platform_part()->browser_policy_connector_chromeos(); |
| + return connector->device_management_service(); |
| +} |
| + |
| +} // namespace |
| + |
| +namespace arc { |
| + |
| +ArcActiveDirectoryEnrollmentTokenFetcher:: |
| + ArcActiveDirectoryEnrollmentTokenFetcher() |
| + : weak_ptr_factory_(this) {} |
| + |
| +ArcActiveDirectoryEnrollmentTokenFetcher:: |
| + ~ArcActiveDirectoryEnrollmentTokenFetcher() = default; |
| + |
| +void ArcActiveDirectoryEnrollmentTokenFetcher::Fetch( |
| + const FetchCallback& callback) { |
| + callback_ = callback; |
|
Luis Héctor Chávez
2017/01/31 18:01:09
DCHECK(callback_.is_null()); (due to https://cs.ch
Marton Hunyady
2017/02/01 12:21:50
Done.
|
| + dm_token_storage_ = base::MakeUnique<policy::DMTokenStorage>( |
| + g_browser_process->local_state()); |
| + dm_token_storage_->RetrieveDMToken( |
| + base::Bind(&ArcActiveDirectoryEnrollmentTokenFetcher::OnDMTokenAvailable, |
| + weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| +void ArcActiveDirectoryEnrollmentTokenFetcher::OnDMTokenAvailable( |
| + const std::string& dm_token) { |
| + DCHECK(!fetch_request_job_); |
| + |
| + policy::DeviceManagementService* service = GetDeviceManagementService(); |
| + fetch_request_job_.reset( |
| + service->CreateJob(policy::DeviceManagementRequestJob:: |
| + TYPE_ACTIVE_DIRECTORY_ENROLL_PLAY_USER, |
| + g_browser_process->system_request_context())); |
| + |
| + fetch_request_job_->SetDMToken(dm_token); |
| + fetch_request_job_->Start( |
| + base::Bind(&ArcActiveDirectoryEnrollmentTokenFetcher:: |
| + OnFetchEnrollmentTokenCompleted, |
| + weak_ptr_factory_.GetWeakPtr())); |
| +} |
| + |
| +void ArcActiveDirectoryEnrollmentTokenFetcher::OnFetchEnrollmentTokenCompleted( |
| + policy::DeviceManagementStatus status, |
| + int net_error, |
| + const enterprise_management::DeviceManagementResponse& response) { |
| + fetch_request_job_.reset(); |
| + |
| + if (status == policy::DM_STATUS_SUCCESS && |
| + (!response.has_active_directory_enroll_play_user_response())) { |
| + LOG(WARNING) << "Invalid Active Directory enroll Play user response."; |
| + status = policy::DM_STATUS_RESPONSE_DECODING_ERROR; |
| + } |
| + |
| + if (status != policy::DM_STATUS_SUCCESS) { |
| + LOG(ERROR) << "Fetching an enrollment token failed. DM Status: " << status; |
| + callback_.Run(std::string()); |
| + return; |
| + } |
| + |
| + callback_.Run( |
|
Luis Héctor Chávez
2017/01/31 18:01:09
base::ResetAndReturn(&callback_).Run(...)
Same in
Marton Hunyady
2017/02/01 12:21:50
Done.
|
| + response.active_directory_enroll_play_user_response().enrollment_token()); |
| +} |
| + |
| +} // namespace arc |