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

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

Issue 2383763002: Report ARC status asynchronously via DeviceStatusCollector (Closed)
Patch Set: Nits addressed Created 4 years, 2 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..48025385d0c65fdeff8d3f1879b4b7fb50509e09 100644
--- a/chrome/browser/chromeos/policy/device_status_collector.cc
+++ b/chrome/browser/chromeos/policy/device_status_collector.cc
@@ -21,7 +21,6 @@
#include "base/logging.h"
#include "base/macros.h"
#include "base/memory/ptr_util.h"
-#include "base/memory/ref_counted.h"
#include "base/posix/eintr_wrapper.h"
#include "base/strings/string_number_conversions.h"
#include "base/strings/string_util.h"
@@ -48,6 +47,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"
@@ -216,6 +217,21 @@ std::vector<em::CPUTempInfo> ReadCPUTempInfo() {
return contents;
}
+bool ReadAndroidStatus(
+ const policy::DeviceStatusCollector::AndroidStatusReceiver& receiver) {
+ auto* const arc_service = arc::ArcBridgeService::Get();
+ if (!arc_service)
+ return false;
+ auto* const instance_holder = arc_service->enterprise_reporting();
+ if (!instance_holder)
+ return false;
+ auto* const instance = instance_holder->GetInstanceForMethod("GetStatus", 1);
+ if (!instance)
+ return false;
+ instance->GetStatus(receiver);
+ return true;
+}
+
// Returns the DeviceLocalAccount associated with the current kiosk session.
// Returns null if there is no active kiosk session, or if that kiosk
// session has been removed from policy since the session started, in which
@@ -338,6 +354,13 @@ class GetStatusState : public base::RefCountedThreadSafe<GetStatusState> {
base::Bind(&GetStatusState::OnCPUTempInfoReceived, this));
}
+ bool FetchAndroidStatus(
+ const policy::DeviceStatusCollector::AndroidStatusFetcher&
+ android_status_fetcher) {
+ return android_status_fetcher.Run(
+ base::Bind(&GetStatusState::OnAndroidInfoReceived, this));
+ }
+
private:
friend class RefCountedThreadSafe<GetStatusState>;
@@ -366,6 +389,14 @@ class GetStatusState : public base::RefCountedThreadSafe<GetStatusState> {
*device_status_->add_cpu_temp_info() = info;
}
+ void OnAndroidInfoReceived(mojo::String status,
+ mojo::String droid_guard_info) {
+ em::AndroidStatus* const 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 +410,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 +419,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),
@@ -405,6 +438,9 @@ DeviceStatusCollector::DeviceStatusCollector(
if (cpu_temp_fetcher_.is_null())
cpu_temp_fetcher_ = base::Bind(&ReadCPUTempInfo);
+ if (android_status_fetcher_.is_null())
+ android_status_fetcher_ = base::Bind(&ReadAndroidStatus);
+
idle_poll_timer_.Start(FROM_HERE,
TimeDelta::FromSeconds(kIdlePollIntervalSeconds),
this, &DeviceStatusCollector::CheckIdleState);
@@ -510,11 +546,14 @@ void DeviceStatusCollector::UpdateReportingSettings() {
report_hardware_status_ = true;
}
- if (!cros_settings_->GetBoolean(
- chromeos::kReportDeviceSessionStatus, &report_session_status_)) {
- report_session_status_ = true;
+ if (!cros_settings_->GetBoolean(chromeos::kReportDeviceSessionStatus,
+ &report_kiosk_session_status_)) {
+ report_kiosk_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) {
@@ -1037,7 +1076,7 @@ void DeviceStatusCollector::GetDeviceAndSessionStatusAsync(
// Gather device status (might queue some async queries)
GetDeviceStatus(state);
- // Gather device status (might queue some async queries)
+ // Gather session status (might queue some async queries)
GetSessionStatus(state);
// If there are no outstanding async queries, e.g. from GetHardwareStatus(),
@@ -1085,15 +1124,17 @@ void DeviceStatusCollector::GetSessionStatus(
em::SessionStatusReportRequest* status = state->session_status();
bool anything_reported = false;
- if (report_session_status_)
- anything_reported |= GetAccountStatus(status);
+ if (report_kiosk_session_status_)
+ anything_reported |= GetKioskSessionStatus(status);
+ if (report_android_status_)
+ anything_reported |= GetAndroidStatus(status, state);
// Wipe pointer if we didn't actually add any data.
if (!anything_reported)
state->ResetSessionStatus();
}
-bool DeviceStatusCollector::GetAccountStatus(
+bool DeviceStatusCollector::GetKioskSessionStatus(
em::SessionStatusReportRequest* status) {
std::unique_ptr<const DeviceLocalAccount> account =
GetAutoLaunchedKioskSessionInfo();
@@ -1117,6 +1158,12 @@ bool DeviceStatusCollector::GetAccountStatus(
return true;
}
+bool DeviceStatusCollector::GetAndroidStatus(
+ em::SessionStatusReportRequest* status,
+ const scoped_refptr<GetStatusState>& state) {
+ return state->FetchAndroidStatus(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