Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(225)

Unified Diff: chrome/browser/chromeos/policy/device_status_collector.cc

Issue 2383763002: Report ARC status asynchronously via DeviceStatusCollector (Closed)
Patch Set: Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/policy/device_status_collector.cc
diff --git a/chrome/browser/chromeos/policy/device_status_collector.cc b/chrome/browser/chromeos/policy/device_status_collector.cc
index 616aa251950bd8636c01e7e18d2226da5ecdb9ab..0c28bbcba1bcd20bf023b0ff78322c059286c1f9 100644
--- a/chrome/browser/chromeos/policy/device_status_collector.cc
+++ b/chrome/browser/chromeos/policy/device_status_collector.cc
@@ -48,6 +48,8 @@
#include "chromeos/network/network_state_handler.h"
#include "chromeos/settings/cros_settings_names.h"
#include "chromeos/system/statistics_provider.h"
+#include "components/arc/arc_bridge_service.h"
+#include "components/arc/common/enterprise_reporting.mojom.h"
#include "components/policy/core/common/cloud/cloud_policy_constants.h"
#include "components/policy/proto/device_management_backend.pb.h"
#include "components/prefs/pref_registry_simple.h"
@@ -338,6 +340,30 @@ class GetStatusState : public base::RefCountedThreadSafe<GetStatusState> {
base::Bind(&GetStatusState::OnCPUTempInfoReceived, this));
}
+ bool SampleAndroidInfo(
+ const policy::DeviceStatusCollector::AndroidStatusFetcher&
+ android_status_fetcher) {
+ if (android_status_fetcher.is_null()) {
ljusten (tachyonic) 2016/10/04 08:56:45 A more elegant approach would be to make android_s
phweiss 2016/10/05 15:34:22 Done.
+ arc::ArcBridgeService *arc_service = arc::ArcBridgeService::Get();
+ if (arc_service == nullptr) return false;
+ arc::InstanceHolder<arc::mojom::EnterpriseReportingInstance>
+ *instance_holder = arc_service->enterprise_reporting();
+ if (instance_holder == nullptr) return false;
+ arc::mojom::EnterpriseReportingInstance *instance =
+ instance_holder->GetInstanceForMethod("GetStatus", 1);
+ if (instance == nullptr) return false;
+ instance->GetStatus(
+ base::Bind(&GetStatusState::OnAndroidInfoReceived, this));
+ return true;
+ } else {
+ base::PostTaskAndReplyWithResult(
+ content::BrowserThread::GetBlockingPool(), FROM_HERE,
+ android_status_fetcher,
+ base::Bind(&GetStatusState::OnAndroidInfoPairReceived, this));
+ return true;
+ }
+ }
+
private:
friend class RefCountedThreadSafe<GetStatusState>;
@@ -366,6 +392,18 @@ class GetStatusState : public base::RefCountedThreadSafe<GetStatusState> {
*device_status_->add_cpu_temp_info() = info;
}
+ void OnAndroidInfoPairReceived(std::pair<mojo::String, mojo::String> status) {
ljusten (tachyonic) 2016/10/04 08:56:45 Nit: Is it possible to change the signature of moj
phweiss 2016/10/05 15:34:22 No, mojo can connect C++ and Java, so their interf
+ OnAndroidInfoReceived(status.first, status.second);
+ }
+
+ void OnAndroidInfoReceived(mojo::String status,
+ mojo::String droid_guard_info) {
+ em::AndroidStatus *android_status =
+ session_status_->mutable_android_status();
+ android_status->set_status_payload(status);
+ android_status->set_droid_guard_info(droid_guard_info);
+ }
+
const scoped_refptr<base::SequencedTaskRunner> task_runner_;
policy::DeviceStatusCollector::StatusCallback response_;
std::unique_ptr<em::DeviceStatusReportRequest> device_status_ =
@@ -379,7 +417,8 @@ DeviceStatusCollector::DeviceStatusCollector(
chromeos::system::StatisticsProvider* provider,
const VolumeInfoFetcher& volume_info_fetcher,
const CPUStatisticsFetcher& cpu_statistics_fetcher,
- const CPUTempFetcher& cpu_temp_fetcher)
+ const CPUTempFetcher& cpu_temp_fetcher,
+ const AndroidStatusFetcher& android_status_fetcher)
: max_stored_past_activity_days_(kMaxStoredPastActivityDays),
max_stored_future_activity_days_(kMaxStoredFutureActivityDays),
local_state_(local_state),
@@ -387,6 +426,7 @@ DeviceStatusCollector::DeviceStatusCollector(
volume_info_fetcher_(volume_info_fetcher),
cpu_statistics_fetcher_(cpu_statistics_fetcher),
cpu_temp_fetcher_(cpu_temp_fetcher),
+ android_status_fetcher_(android_status_fetcher),
statistics_provider_(provider),
cros_settings_(chromeos::CrosSettings::Get()),
task_runner_(nullptr),
@@ -515,6 +555,9 @@ void DeviceStatusCollector::UpdateReportingSettings() {
report_session_status_ = true;
}
+ // TODO(phweiss): Create policy to control this, and turn it on by default.
+ report_android_status_ = false;
+
if (!report_hardware_status_) {
ClearCachedResourceUsage();
} else if (!already_reporting_hardware_status) {
@@ -1085,8 +1128,11 @@ void DeviceStatusCollector::GetSessionStatus(
em::SessionStatusReportRequest* status = state->session_status();
bool anything_reported = false;
- if (report_session_status_)
+ if (report_session_status_) {
anything_reported |= GetAccountStatus(status);
+ if (report_android_status_)
+ anything_reported |= GetAndroidStatus(status, state);
+ }
// Wipe pointer if we didn't actually add any data.
if (!anything_reported)
@@ -1117,6 +1163,12 @@ bool DeviceStatusCollector::GetAccountStatus(
return true;
}
+bool DeviceStatusCollector::GetAndroidStatus(
+ em::SessionStatusReportRequest* status,
+ scoped_refptr<GetStatusState> state) {
+ return state->SampleAndroidInfo(android_status_fetcher_);
+}
+
std::string DeviceStatusCollector::GetAppVersion(
const std::string& kiosk_app_id) {
Profile* const profile =

Powered by Google App Engine
This is Rietveld 408576698