Commit 75645bae authored by Lutz Justen's avatar Lutz Justen Committed by Commit Bot

DeviceStatusCollector: Add channel

Adds channel information ("stable", "beta", "dev", 'cannary") next to
the browser version.

BUG=chromium:849803
TEST=browser_tests --gtest_filter=*DeviceStatusCollector*

Change-Id: I30c4b78950ad1540169835bc4e295bc9ba0ea483
Reviewed-on: https://chromium-review.googlesource.com/1124162Reviewed-by: default avatarPavol Marko <pmarko@chromium.org>
Reviewed-by: default avatarJulian Pastarmov <pastarmovj@chromium.org>
Reviewed-by: default avatarSergey Poromov <poromov@chromium.org>
Commit-Queue: Lutz Justen <ljusten@chromium.org>
Cr-Commit-Position: refs/heads/master@{#578612}
parent 2fd35dd9
......@@ -44,6 +44,7 @@
#include "chrome/browser/policy/profile_policy_connector.h"
#include "chrome/browser/policy/profile_policy_connector_factory.h"
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/common/channel_info.h"
#include "chrome/common/chrome_features.h"
#include "chrome/common/pref_names.h"
#include "chromeos/audio/cras_audio_handler.h"
......@@ -63,6 +64,7 @@
#include "components/arc/arc_service_manager.h"
#include "components/arc/common/enterprise_reporting.mojom.h"
#include "components/policy/core/common/cloud/cloud_policy_constants.h"
#include "components/policy/core/common/cloud/cloud_policy_util.h"
#include "components/policy/proto/device_management_backend.pb.h"
#include "components/prefs/pref_change_registrar.h"
#include "components/prefs/pref_registry_simple.h"
......@@ -719,17 +721,16 @@ DeviceStatusCollector::DeviceStatusCollector(
android_status_fetcher_ = base::Bind(&ReadAndroidStatus);
idle_poll_timer_.Start(FROM_HERE,
TimeDelta::FromSeconds(kIdlePollIntervalSeconds),
this, &DeviceStatusCollector::CheckIdleState);
TimeDelta::FromSeconds(kIdlePollIntervalSeconds), this,
&DeviceStatusCollector::CheckIdleState);
resource_usage_sampling_timer_.Start(
FROM_HERE, TimeDelta::FromSeconds(kResourceUsageSampleIntervalSeconds),
this, &DeviceStatusCollector::SampleResourceUsage);
// Watch for changes to the individual policies that control what the status
// reports contain.
base::Closure callback =
base::Bind(&DeviceStatusCollector::UpdateReportingSettings,
base::Unretained(this));
base::Closure callback = base::Bind(
&DeviceStatusCollector::UpdateReportingSettings, base::Unretained(this));
version_info_subscription_ = cros_settings_->AddSettingsObserver(
chromeos::kReportDeviceVersionInfo, callback);
activity_times_subscription_ = cros_settings_->AddSettingsObserver(
......@@ -764,9 +765,8 @@ DeviceStatusCollector::DeviceStatusCollector(
base::Bind(&chromeos::version_loader::GetFirmware),
base::Bind(&DeviceStatusCollector::OnOSFirmware,
weak_factory_.GetWeakPtr()));
chromeos::version_loader::GetTpmVersion(
base::BindOnce(&DeviceStatusCollector::OnTpmVersion,
weak_factory_.GetWeakPtr()));
chromeos::version_loader::GetTpmVersion(base::BindOnce(
&DeviceStatusCollector::OnTpmVersion, weak_factory_.GetWeakPtr()));
// If doing enterprise device-level reporting, observe the list of users to be
// reported. Consumer reporting is enforced for the signed-in registered user
......@@ -787,8 +787,7 @@ DeviceStatusCollector::DeviceStatusCollector(
: prefs::kUserActivityTimes));
}
DeviceStatusCollector::~DeviceStatusCollector() {
}
DeviceStatusCollector::~DeviceStatusCollector() {}
// static
void DeviceStatusCollector::RegisterPrefs(PrefRegistrySimple* registry) {
......@@ -805,8 +804,8 @@ void DeviceStatusCollector::RegisterProfilePrefs(PrefRegistrySimple* registry) {
void DeviceStatusCollector::CheckIdleState() {
CalculateIdleState(kIdleStateThresholdSeconds,
base::Bind(&DeviceStatusCollector::IdleStateCallback,
base::Unretained(this)));
base::Bind(&DeviceStatusCollector::IdleStateCallback,
base::Unretained(this)));
}
void DeviceStatusCollector::UpdateReportingSettings() {
......@@ -815,13 +814,13 @@ void DeviceStatusCollector::UpdateReportingSettings() {
// back when they are available.
if (chromeos::CrosSettingsProvider::TRUSTED !=
cros_settings_->PrepareTrustedValues(
base::Bind(&DeviceStatusCollector::UpdateReportingSettings,
weak_factory_.GetWeakPtr()))) {
base::Bind(&DeviceStatusCollector::UpdateReportingSettings,
weak_factory_.GetWeakPtr()))) {
return;
}
if (!cros_settings_->GetBoolean(
chromeos::kReportDeviceVersionInfo, &report_version_info_)) {
if (!cros_settings_->GetBoolean(chromeos::kReportDeviceVersionInfo,
&report_version_info_)) {
report_version_info_ = true;
}
if (!is_enterprise_reporting_) {
......@@ -832,8 +831,8 @@ void DeviceStatusCollector::UpdateReportingSettings() {
&report_activity_times_)) {
report_activity_times_ = true;
}
if (!cros_settings_->GetBoolean(
chromeos::kReportDeviceBootMode, &report_boot_mode_)) {
if (!cros_settings_->GetBoolean(chromeos::kReportDeviceBootMode,
&report_boot_mode_)) {
report_boot_mode_ = true;
}
if (!cros_settings_->GetBoolean(chromeos::kReportDeviceSessionStatus,
......@@ -852,8 +851,8 @@ void DeviceStatusCollector::UpdateReportingSettings() {
}
// Hardware status is reported for enterprise devices only by default.
const bool already_reporting_hardware_status = report_hardware_status_;
if (!cros_settings_->GetBoolean(
chromeos::kReportDeviceHardwareStatus, &report_hardware_status_)) {
if (!cros_settings_->GetBoolean(chromeos::kReportDeviceHardwareStatus,
&report_hardware_status_)) {
report_hardware_status_ = is_enterprise_reporting_;
}
......@@ -1088,6 +1087,7 @@ bool DeviceStatusCollector::GetVersionInfo(
// Enterprise-only version reporting below.
status->set_browser_version(version_info::GetVersionNumber());
status->set_channel(ConvertToProtoChannel(chrome::GetChannel()));
status->set_firmware_version(firmware_version_);
em::TpmVersionInfo* const tpm_version_info =
......@@ -1135,18 +1135,17 @@ bool DeviceStatusCollector::GetNetworkInterfaces(
const char* state_string;
em::NetworkState::ConnectionState state_constant;
} kConnectionStateMap[] = {
{ shill::kStateIdle, em::NetworkState::IDLE },
{ shill::kStateCarrier, em::NetworkState::CARRIER },
{ shill::kStateAssociation, em::NetworkState::ASSOCIATION },
{ shill::kStateConfiguration, em::NetworkState::CONFIGURATION },
{ shill::kStateReady, em::NetworkState::READY },
{ shill::kStatePortal, em::NetworkState::PORTAL },
{ shill::kStateOffline, em::NetworkState::OFFLINE },
{ shill::kStateOnline, em::NetworkState::ONLINE },
{ shill::kStateDisconnect, em::NetworkState::DISCONNECT },
{ shill::kStateFailure, em::NetworkState::FAILURE },
{ shill::kStateActivationFailure,
em::NetworkState::ACTIVATION_FAILURE },
{shill::kStateIdle, em::NetworkState::IDLE},
{shill::kStateCarrier, em::NetworkState::CARRIER},
{shill::kStateAssociation, em::NetworkState::ASSOCIATION},
{shill::kStateConfiguration, em::NetworkState::CONFIGURATION},
{shill::kStateReady, em::NetworkState::READY},
{shill::kStatePortal, em::NetworkState::PORTAL},
{shill::kStateOffline, em::NetworkState::OFFLINE},
{shill::kStateOnline, em::NetworkState::ONLINE},
{shill::kStateDisconnect, em::NetworkState::DISCONNECT},
{shill::kStateFailure, em::NetworkState::FAILURE},
{shill::kStateActivationFailure, em::NetworkState::ACTIVATION_FAILURE},
};
chromeos::NetworkStateHandler::DeviceStateList device_list;
......@@ -1549,9 +1548,8 @@ bool DeviceStatusCollector::GetAndroidStatus(
std::string DeviceStatusCollector::GetAppVersion(
const std::string& kiosk_app_id) {
Profile* const profile =
chromeos::ProfileHelper::Get()->GetProfileByUser(
user_manager::UserManager::Get()->GetActiveUser());
Profile* const profile = chromeos::ProfileHelper::Get()->GetProfileByUser(
user_manager::UserManager::Get()->GetActiveUser());
const extensions::ExtensionRegistry* const registry =
extensions::ExtensionRegistry::Get(profile);
const extensions::Extension* const extension = registry->GetExtensionById(
......
......@@ -91,11 +91,17 @@ const char kKioskAppId[] = "kiosk_app_id";
const char kArcKioskPackageName[] = "com.test.kioskapp";
const char kExternalMountPoint[] = "/a/b/c";
const char kPublicAccountId[] = "public_user@localhost";
const char kArcStatus[] = "{\"applications\":[ { "
"\"packageName\":\"com.android.providers.telephony\","
"\"versionName\":\"6.0.1\","
"\"permissions\": [\"android.permission.INTERNET\"] }],"
"\"userEmail\":\"xxx@google.com\"}";
const char kArcStatus[] = R"(
{
"applications":[
{
"packageName":"com.android.providers.telephony",
"versionName":"6.0.1",
"permissions":[ "android.permission.INTERNET" ]
}
],
"userEmail":"xxx@google.com"
})";
const char kDroidGuardInfo[] = "{\"droid_guard_info\":42}";
const char kShillFakeProfilePath[] = "/profile/user1/shill";
const char kShillFakeUserhash[] = "user1";
......@@ -182,7 +188,7 @@ class TestingDeviceStatusCollector : public policy::DeviceStatusCollector {
Time GetCurrentTime() override {
int poll_interval = policy::DeviceStatusCollector::kIdlePollIntervalSeconds;
return baseline_time_ +
TimeDelta::FromSeconds(poll_interval * baseline_offset_periods_++);
TimeDelta::FromSeconds(poll_interval * baseline_offset_periods_++);
}
private:
......@@ -390,9 +396,7 @@ class DeviceStatusCollectorTest : public testing::Test {
false);
}
void TearDown() override {
settings_helper_.RestoreProvider();
}
void TearDown() override { settings_helper_.RestoreProvider(); }
protected:
void AddMountPoint(const std::string& mount_point) {
......@@ -1002,6 +1006,7 @@ TEST_F(DeviceStatusCollectorTest, VersionInfo) {
// Expect the version info to be reported by default.
GetStatus();
EXPECT_TRUE(device_status_.has_browser_version());
EXPECT_TRUE(device_status_.has_channel());
EXPECT_TRUE(device_status_.has_os_version());
EXPECT_TRUE(device_status_.has_firmware_version());
EXPECT_TRUE(device_status_.has_tpm_version_info());
......@@ -1011,6 +1016,7 @@ TEST_F(DeviceStatusCollectorTest, VersionInfo) {
settings_helper_.SetBoolean(chromeos::kReportDeviceVersionInfo, false);
GetStatus();
EXPECT_FALSE(device_status_.has_browser_version());
EXPECT_FALSE(device_status_.has_channel());
EXPECT_FALSE(device_status_.has_os_version());
EXPECT_FALSE(device_status_.has_firmware_version());
EXPECT_FALSE(device_status_.has_tpm_version_info());
......@@ -1018,13 +1024,13 @@ TEST_F(DeviceStatusCollectorTest, VersionInfo) {
settings_helper_.SetBoolean(chromeos::kReportDeviceVersionInfo, true);
GetStatus();
EXPECT_TRUE(device_status_.has_browser_version());
EXPECT_TRUE(device_status_.has_channel());
EXPECT_TRUE(device_status_.has_os_version());
EXPECT_TRUE(device_status_.has_firmware_version());
EXPECT_TRUE(device_status_.has_tpm_version_info());
// Check that the browser version is not empty. OS version & firmware
// don't have any reasonable values inside the unit test, so those
// aren't checked.
// Check that the browser version is not empty. OS version & firmware don't
// have any reasonable values inside the unit test, so those aren't checked.
EXPECT_NE("", device_status_.browser_version());
}
......@@ -1084,7 +1090,7 @@ TEST_F(DeviceStatusCollectorTest, TestVolumeInfo) {
std::vector<em::VolumeInfo> expected_volume_info;
int size = 12345678;
for (const auto& mount_info :
DiskMountManager::GetInstance()->mount_points()) {
DiskMountManager::GetInstance()->mount_points()) {
expected_mount_points.push_back(mount_info.first);
}
expected_mount_points.push_back(kExternalMountPoint);
......@@ -1249,7 +1255,7 @@ TEST_F(DeviceStatusCollectorTest, KioskAndroidReporting) {
GetStatus();
EXPECT_EQ(kArcStatus, session_status_.android_status().status_payload());
EXPECT_EQ(kDroidGuardInfo,
session_status_.android_status().droid_guard_info());
session_status_.android_status().droid_guard_info());
// Expect no User DM Token for kiosk sessions.
EXPECT_FALSE(session_status_.has_user_dm_token());
}
......@@ -1946,6 +1952,7 @@ TEST_F(ConsumerDeviceStatusCollectorTimeLimitDisabledTest,
// Should only report OS version.
EXPECT_TRUE(device_status_.has_os_version());
EXPECT_FALSE(device_status_.has_browser_version());
EXPECT_FALSE(device_status_.has_channel());
EXPECT_FALSE(device_status_.has_firmware_version());
EXPECT_FALSE(device_status_.has_tpm_version_info());
}
......
......@@ -82,7 +82,7 @@ void AppendAdditionalBrowserInformation(em::ChromeDesktopReportRequest* request,
version_info::GetVersionNumber());
// Set Chrome channel
request->mutable_browser_report()->set_channel(
static_cast<em::BrowserReport_Channel>(chrome::GetChannel()));
policy::ConvertToProtoChannel(chrome::GetChannel()));
// Set Chrome executable path
request->mutable_browser_report()->set_executable_path(GetChromePath());
......
......@@ -46,9 +46,9 @@
#if defined(OS_MACOSX)
#include "base/mac/scoped_cftyperef.h"
#include "base/sys_info.h"
#include "base/strings/string_util.h"
#include "base/strings/sys_string_conversions.h"
#include "base/sys_info.h"
#endif
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
......@@ -57,6 +57,8 @@
namespace policy {
namespace em = enterprise_management;
std::string GetMachineName() {
#if defined(OS_LINUX) && !defined(OS_CHROMEOS)
char hostname[HOST_NAME_MAX];
......@@ -156,4 +158,19 @@ std::string GetOSUsername() {
#endif
}
em::Channel ConvertToProtoChannel(version_info::Channel channel) {
switch (channel) {
case version_info::Channel::UNKNOWN:
return em::CHANNEL_UNKNOWN;
case version_info::Channel::CANARY:
return em::CHANNEL_CANARY;
case version_info::Channel::DEV:
return em::CHANNEL_DEV;
case version_info::Channel::BETA:
return em::CHANNEL_BETA;
case version_info::Channel::STABLE:
return em::CHANNEL_STABLE;
}
}
} // namespace policy
......@@ -8,6 +8,8 @@
#include <string>
#include "components/policy/policy_export.h"
#include "components/policy/proto/device_management_backend.pb.h"
#include "components/version_info/channel.h"
namespace policy {
......@@ -28,6 +30,10 @@ POLICY_EXPORT std::string GetOSArchitecture();
// the domain, whereas on POSIX, this just returns the username.
POLICY_EXPORT std::string GetOSUsername();
// Converts |version_info::Channel| to |enterprise_management::Channel|.
POLICY_EXPORT enterprise_management::Channel ConvertToProtoChannel(
version_info::Channel channel);
} // namespace policy
#endif // COMPONENTS_POLICY_CORE_COMMON_CLOUD_CLOUD_POLICY_UTIL_H_
......@@ -748,6 +748,15 @@ message CPUTempInfo {
optional int32 cpu_temp = 2;
}
// Chrome release channel, shared for different reports.
enum Channel {
CHANNEL_UNKNOWN = 0;
CHANNEL_CANARY = 1;
CHANNEL_DEV = 2;
CHANNEL_BETA = 3;
CHANNEL_STABLE = 4;
}
// Report device level status.
message DeviceStatusReportRequest {
reserved 4, 7, 13, 20;
......@@ -807,6 +816,9 @@ message DeviceStatusReportRequest {
// TPM version information.
optional TpmVersionInfo tpm_version_info = 21;
// Release channel (stable, beta, etc.).
optional Channel channel = 22;
}
message OsUpdateStatus {
......@@ -890,14 +902,7 @@ message BrowserReport {
// user agent.
optional string browser_version = 1;
// Chrome browser channel,
enum Channel {
UNKNOWN = 0;
CANARY = 1;
DEV = 2;
BETA = 3;
STABLE = 4;
}
// Release channel (stable, beta, etc.).
optional Channel channel = 2;
// Required. The path to the browser executable so that we can uniquely
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment