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

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

Issue 26770002: Report logged in users on enterprise managed devices. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: ran update_policies.py Created 7 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 c77d3cf51c5ff01e9489292ec6b5424547884c29..72273bac2b743484da581eb02043b7a94a9c81ab 100644
--- a/chrome/browser/chromeos/policy/device_status_collector.cc
+++ b/chrome/browser/chromeos/policy/device_status_collector.cc
@@ -15,7 +15,12 @@
#include "base/prefs/pref_service.h"
#include "base/strings/string_number_conversions.h"
#include "base/values.h"
+#include "chrome/browser/browser_process.h"
+#include "chrome/browser/chromeos/login/user.h"
+#include "chrome/browser/chromeos/login/user_manager.h"
#include "chrome/browser/chromeos/settings/cros_settings.h"
+#include "chrome/browser/policy/browser_policy_connector.h"
+#include "chrome/browser/policy/cloud/cloud_policy_constants.h"
#include "chrome/browser/policy/proto/cloud/device_management_backend.pb.h"
#include "chrome/browser/prefs/scoped_user_pref_update.h"
#include "chrome/common/chrome_version_info.h"
@@ -67,6 +72,9 @@ int64 TimestampToDayKey(Time timestamp) {
return (Time::FromUTCExploded(exploded) - Time::UnixEpoch()).InMilliseconds();
}
+// Maximum number of users to report.
+const int kMaxUserCount = 5;
+
} // namespace
namespace policy {
@@ -130,6 +138,7 @@ DeviceStatusCollector::DeviceStatusCollector(
report_boot_mode_(false),
report_location_(false),
report_network_interfaces_(false),
+ report_users_(false),
context_(new Context()) {
if (location_update_requester) {
location_update_requester_ = *location_update_requester;
@@ -158,6 +167,8 @@ DeviceStatusCollector::DeviceStatusCollector(
chromeos::kReportDeviceLocation, callback);
network_interfaces_subscription_ = cros_settings_->AddSettingsObserver(
chromeos::kReportDeviceNetworkInterfaces, callback);
+ users_subscription_ = cros_settings_->AddSettingsObserver(
+ chromeos::kReportDeviceUsers, callback);
// The last known location is persisted in local state. This makes location
// information available immediately upon startup and avoids the need to
@@ -230,6 +241,8 @@ void DeviceStatusCollector::UpdateReportingSettings() {
chromeos::kReportDeviceLocation, &report_location_);
cros_settings_->GetBoolean(
chromeos::kReportDeviceNetworkInterfaces, &report_network_interfaces_);
+ cros_settings_->GetBoolean(
+ chromeos::kReportDeviceUsers, &report_users_);
if (report_location_) {
ScheduleGeolocationUpdateRequest();
@@ -448,6 +461,32 @@ void DeviceStatusCollector::GetNetworkInterfaces(
}
}
+void DeviceStatusCollector::GetUsers(em::DeviceStatusReportRequest* request) {
+ BrowserPolicyConnector* connector =
+ g_browser_process->browser_policy_connector();
+ bool found_managed_user = false;
+ const chromeos::UserList& users = chromeos::UserManager::Get()->GetUsers();
+ chromeos::UserList::const_iterator user;
+ for (user = users.begin(); user != users.end(); ++user) {
+ em::DeviceUser* device_user = request->add_user();
+ const std::string& email = (*user)->email();
+ if (connector->GetUserAffiliation(email) == USER_AFFILIATION_MANAGED) {
+ device_user->set_type(em::DeviceUser::USER_TYPE_MANAGED);
+ device_user->set_email(email);
+ found_managed_user = true;
+ } else {
+ device_user->set_type(em::DeviceUser::USER_TYPE_UNMANAGED);
+ // Do not report the email address of unmanaged users.
+ }
+
+ // Add only kMaxUserCount entries, unless no managed users are found in the
+ // first kMaxUserCount users. In that case, continue until at least one
+ // managed user is found.
+ if (request->user_size() >= kMaxUserCount && found_managed_user)
+ break;
+ }
+}
+
void DeviceStatusCollector::GetStatus(em::DeviceStatusReportRequest* request) {
// TODO(mnissler): Remove once the old cloud policy stack is retired. The old
// stack doesn't support reporting successful submissions back to here, so
@@ -473,6 +512,9 @@ bool DeviceStatusCollector::GetDeviceStatus(
if (report_network_interfaces_)
GetNetworkInterfaces(status);
+ if (report_users_)
+ GetUsers(status);
+
return true;
}

Powered by Google App Engine
This is Rietveld 408576698