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 d5f03d1bb8c2b7a3ac55d96dfeb7763de4298b9c..6f4768afc73f61a1e67b79ef146b8e86b677be02 100644 |
--- a/components/policy/core/common/cloud/cloud_policy_client.cc |
+++ b/components/policy/core/common/cloud/cloud_policy_client.cc |
@@ -45,8 +45,6 @@ CloudPolicyClient::Observer::~Observer() {} |
void CloudPolicyClient::Observer::OnRobotAuthCodesFetched( |
CloudPolicyClient* client) {} |
-CloudPolicyClient::StatusProvider::~StatusProvider() {} |
- |
CloudPolicyClient::CloudPolicyClient( |
const std::string& machine_id, |
const std::string& machine_model, |
@@ -186,18 +184,6 @@ void CloudPolicyClient::FetchPolicy() { |
} |
} |
- // Add status data. |
- if (status_provider_) { |
- if (!status_provider_->GetDeviceStatus( |
- request->mutable_device_status_report_request())) { |
- request->clear_device_status_report_request(); |
- } |
- if (!status_provider_->GetSessionStatus( |
- request->mutable_session_status_report_request())) { |
- request->clear_session_status_report_request(); |
- } |
- } |
- |
// Add device state keys. |
if (!state_keys_to_upload_.empty()) { |
em::DeviceStateKeyUpdateRequest* key_update_request = |
@@ -276,6 +262,36 @@ void CloudPolicyClient::UploadCertificate( |
request_job_->Start(job_callback); |
} |
+void CloudPolicyClient::UploadDeviceStatus( |
+ const em::DeviceStatusReportRequest* device_status, |
+ const em::SessionStatusReportRequest* session_status, |
+ const CloudPolicyClient::StatusCallback& callback) { |
+ CHECK(is_registered()); |
+ // Should pass in at least one type of status. |
+ DCHECK(device_status || session_status); |
+ request_job_.reset( |
+ service_->CreateJob(DeviceManagementRequestJob::TYPE_UPLOAD_STATUS, |
+ GetRequestContext())); |
+ request_job_->SetDMToken(dm_token_); |
+ request_job_->SetClientID(client_id_); |
+ |
+ em::DeviceManagementRequest* request = request_job_->GetRequest(); |
+ if (device_status) |
+ *request->mutable_device_status_report_request() = *device_status; |
+ if (session_status) |
+ *request->mutable_session_status_report_request() = *session_status; |
+ |
+ DeviceManagementRequestJob::Callback job_callback = base::Bind( |
+ &CloudPolicyClient::OnStatusUploadCompleted, |
+ base::Unretained(this), |
+ callback); |
+ |
+ // TODO(atwilson): Change CloudPolicyClient to support multiple requests in |
+ // parallel, so status upload requests don't get cancelled by things like |
+ // policy fetches (http://crbug.com/452563). |
+ request_job_->Start(job_callback); |
+} |
+ |
void CloudPolicyClient::AddObserver(Observer* observer) { |
observers_.AddObserver(observer); |
} |
@@ -284,14 +300,6 @@ void CloudPolicyClient::RemoveObserver(Observer* observer) { |
observers_.RemoveObserver(observer); |
} |
-void CloudPolicyClient::SetStatusProvider(scoped_ptr<StatusProvider> provider) { |
- status_provider_ = provider.Pass(); |
-} |
- |
-bool CloudPolicyClient::HasStatusProviderForTest() { |
- return status_provider_; |
-} |
- |
void CloudPolicyClient::AddPolicyTypeToFetch( |
const std::string& policy_type, |
const std::string& settings_entity_id) { |
@@ -423,8 +431,6 @@ void CloudPolicyClient::OnPolicyFetchCompleted( |
} |
responses_[key] = new em::PolicyFetchResponse(response); |
} |
- if (status_provider_) |
- status_provider_->OnSubmittedSuccessfully(); |
state_keys_to_upload_.clear(); |
NotifyPolicyFetched(); |
} else { |
@@ -470,6 +476,18 @@ void CloudPolicyClient::OnCertificateUploadCompleted( |
callback.Run(true); |
} |
+void CloudPolicyClient::OnStatusUploadCompleted( |
+ const CloudPolicyClient::StatusCallback& callback, |
+ DeviceManagementStatus status, |
+ int net_error, |
+ const enterprise_management::DeviceManagementResponse& response) { |
+ status_ = status; |
+ if (status != DM_STATUS_SUCCESS) |
+ NotifyClientError(); |
+ |
+ callback.Run(status == DM_STATUS_SUCCESS); |
+} |
+ |
void CloudPolicyClient::NotifyPolicyFetched() { |
FOR_EACH_OBSERVER(Observer, observers_, OnPolicyFetched(this)); |
} |