| Index: components/policy/core/common/cloud/cloud_policy_client.cc
|
| diff --git a/components/policy/core/common/cloud/cloud_policy_client.cc b/components/policy/core/common/cloud/cloud_policy_client.cc
|
| index 6f7fbf931c2f28f4de5b44f83d147bf8cd7d8337..687c36ba0199394f833fd9071daca135749382aa 100644
|
| --- a/components/policy/core/common/cloud/cloud_policy_client.cc
|
| +++ b/components/policy/core/common/cloud/cloud_policy_client.cc
|
| @@ -5,6 +5,7 @@
|
| #include "components/policy/core/common/cloud/cloud_policy_client.h"
|
|
|
| #include "base/bind.h"
|
| +#include "base/bind_helpers.h"
|
| #include "base/guid.h"
|
| #include "base/logging.h"
|
| #include "base/stl_util.h"
|
| @@ -261,11 +262,10 @@ void CloudPolicyClient::UploadCertificate(
|
| request->mutable_cert_upload_request()->set_device_certificate(
|
| certificate_data);
|
|
|
| - DeviceManagementRequestJob::Callback job_callback = base::Bind(
|
| - &CloudPolicyClient::OnCertificateUploadCompleted,
|
| - base::Unretained(this),
|
| - request_job.get(),
|
| - callback);
|
| + const DeviceManagementRequestJob::Callback job_callback =
|
| + base::Bind(&CloudPolicyClient::OnCertificateUploadCompleted,
|
| + base::Unretained(this), request_job.get(), callback);
|
| +
|
| request_jobs_.push_back(request_job.Pass());
|
| request_jobs_.back()->Start(job_callback);
|
| }
|
| @@ -289,11 +289,37 @@ void CloudPolicyClient::UploadDeviceStatus(
|
| if (session_status)
|
| *request->mutable_session_status_report_request() = *session_status;
|
|
|
| - DeviceManagementRequestJob::Callback job_callback = base::Bind(
|
| - &CloudPolicyClient::OnStatusUploadCompleted,
|
| - base::Unretained(this),
|
| - request_job.get(),
|
| - callback);
|
| + const DeviceManagementRequestJob::Callback job_callback =
|
| + base::Bind(&CloudPolicyClient::OnStatusUploadCompleted,
|
| + base::Unretained(this), request_job.get(), callback);
|
| +
|
| + request_jobs_.push_back(request_job.Pass());
|
| + request_jobs_.back()->Start(job_callback);
|
| +}
|
| +
|
| +void CloudPolicyClient::FetchRemoteCommands(
|
| + scoped_ptr<RemoteCommandJob::UniqueIDType> last_command_id,
|
| + const std::vector<em::RemoteCommandResult>& command_results,
|
| + const RemoteCommandCallback& callback) {
|
| + CHECK(is_registered());
|
| + scoped_ptr<DeviceManagementRequestJob> request_job(service_->CreateJob(
|
| + DeviceManagementRequestJob::TYPE_REMOTE_COMMANDS, GetRequestContext()));
|
| +
|
| + request_job->SetDMToken(dm_token_);
|
| + request_job->SetClientID(client_id_);
|
| +
|
| + em::DeviceRemoteCommandRequest* const request =
|
| + request_job->GetRequest()->mutable_remote_command_request();
|
| +
|
| + if (last_command_id)
|
| + request->set_last_command_unique_id(*last_command_id);
|
| +
|
| + for (const auto& command_result : command_results)
|
| + *request->add_command_results() = command_result;
|
| +
|
| + const DeviceManagementRequestJob::Callback job_callback =
|
| + base::Bind(&CloudPolicyClient::OnRemoteCommandsFetched,
|
| + base::Unretained(this), request_job.get(), callback);
|
|
|
| request_jobs_.push_back(request_job.Pass());
|
| request_jobs_.back()->Start(job_callback);
|
| @@ -516,6 +542,26 @@ void CloudPolicyClient::OnStatusUploadCompleted(
|
| RemoveJob(job);
|
| }
|
|
|
| +void CloudPolicyClient::OnRemoteCommandsFetched(
|
| + const DeviceManagementRequestJob* job,
|
| + const RemoteCommandCallback& callback,
|
| + DeviceManagementStatus status,
|
| + int net_error,
|
| + const enterprise_management::DeviceManagementResponse& response) {
|
| + std::vector<enterprise_management::RemoteCommand> commands;
|
| + if (status == DM_STATUS_SUCCESS) {
|
| + if (response.has_remote_command_response()) {
|
| + for (const auto& command : response.remote_command_response().commands())
|
| + commands.push_back(command);
|
| + } else {
|
| + status = DM_STATUS_RESPONSE_DECODING_ERROR;
|
| + }
|
| + }
|
| + callback.Run(status, commands);
|
| + // Must call RemoveJob() last, because it frees |callback|.
|
| + RemoveJob(job);
|
| +}
|
| +
|
| void CloudPolicyClient::NotifyPolicyFetched() {
|
| FOR_EACH_OBSERVER(Observer, observers_, OnPolicyFetched(this));
|
| }
|
|
|