Chromium Code Reviews| 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 1af72bb4ff1d0f944267bc615fd73172d3fbb414..cc16f6cc2fff4d359f8b40a97c78daf0a019a3a5 100644 |
| --- a/chrome/browser/chromeos/policy/device_status_collector.cc |
| +++ b/chrome/browser/chromeos/policy/device_status_collector.cc |
| @@ -23,6 +23,7 @@ |
| #include "chrome/common/pref_names.h" |
| #include "chromeos/network/device_state.h" |
| #include "chromeos/network/network_handler.h" |
| +#include "chromeos/network/network_state.h" |
| #include "chromeos/network/network_state_handler.h" |
| #include "chromeos/settings/cros_settings_names.h" |
| #include "chromeos/system/statistics_provider.h" |
| @@ -94,6 +95,7 @@ DeviceStatusCollector::DeviceStatusCollector( |
| report_location_(false), |
| report_network_interfaces_(false), |
| report_users_(false), |
| + report_hardware_status_(false), |
| weak_factory_(this) { |
| if (location_update_requester) |
| location_update_requester_ = *location_update_requester; |
| @@ -120,6 +122,8 @@ DeviceStatusCollector::DeviceStatusCollector( |
| chromeos::kReportDeviceNetworkInterfaces, callback); |
| users_subscription_ = cros_settings_->AddSettingsObserver( |
| chromeos::kReportDeviceUsers, callback); |
| + hardware_status_subscription_ = cros_settings_->AddSettingsObserver( |
| + chromeos::kReportDeviceHardwareStatus, callback); |
| // The last known location is persisted in local state. This makes location |
| // information available immediately upon startup and avoids the need to |
| @@ -182,6 +186,8 @@ void DeviceStatusCollector::UpdateReportingSettings() { |
| weak_factory_.GetWeakPtr()))) { |
| return; |
| } |
| + |
| + // All reporting settings default to 'enabled'. |
| if (!cros_settings_->GetBoolean( |
| chromeos::kReportDeviceVersionInfo, &report_version_info_)) { |
| report_version_info_ = true; |
| @@ -195,10 +201,6 @@ void DeviceStatusCollector::UpdateReportingSettings() { |
| report_boot_mode_ = true; |
| } |
| if (!cros_settings_->GetBoolean( |
| - chromeos::kReportDeviceLocation, &report_location_)) { |
| - report_location_ = false; |
| - } |
| - if (!cros_settings_->GetBoolean( |
| chromeos::kReportDeviceNetworkInterfaces, &report_network_interfaces_)) { |
| report_network_interfaces_ = true; |
| } |
| @@ -206,6 +208,17 @@ void DeviceStatusCollector::UpdateReportingSettings() { |
| chromeos::kReportDeviceUsers, &report_users_)) { |
| report_users_ = true; |
| } |
| + if (!cros_settings_->GetBoolean( |
| + chromeos::kReportDeviceHardwareStatus, &report_hardware_status_)) { |
| + report_hardware_status_ = true; |
| + } |
| + |
| + // Device location reporting is disabled by default because it is |
| + // not launched yet. |
| + if (!cros_settings_->GetBoolean( |
| + chromeos::kReportDeviceLocation, &report_location_)) { |
| + report_location_ = false; |
| + } |
| if (report_location_) { |
| ScheduleGeolocationUpdateRequest(); |
| @@ -383,7 +396,7 @@ void DeviceStatusCollector::GetLocation( |
| void DeviceStatusCollector::GetNetworkInterfaces( |
| em::DeviceStatusReportRequest* request) { |
| - // Maps flimflam device type strings to proto enum constants. |
| + // Maps shill device type strings to proto enum constants. |
| static const struct { |
| const char* type_string; |
| em::NetworkInterface::NetworkDeviceType type_constant; |
| @@ -395,9 +408,29 @@ void DeviceStatusCollector::GetNetworkInterfaces( |
| { shill::kTypeCellular, em::NetworkInterface::TYPE_CELLULAR, }, |
| }; |
| + // Maps shill device connection status to proto enum constants. |
| + static const struct { |
| + 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 }, |
| + }; |
| + |
| chromeos::NetworkStateHandler::DeviceStateList device_list; |
| - chromeos::NetworkHandler::Get()->network_state_handler()->GetDeviceList( |
| - &device_list); |
| + chromeos::NetworkStateHandler* network_state_handler = |
| + chromeos::NetworkHandler::Get()->network_state_handler(); |
| + network_state_handler->GetDeviceList(&device_list); |
| chromeos::NetworkStateHandler::DeviceStateList::const_iterator device; |
| for (device = device_list.begin(); device != device_list.end(); ++device) { |
| @@ -421,6 +454,37 @@ void DeviceStatusCollector::GetNetworkInterfaces( |
| interface->set_meid((*device)->meid()); |
| if (!(*device)->imei().empty()) |
| interface->set_imei((*device)->imei()); |
| + if (!(*device)->path().empty()) |
| + interface->set_device_path((*device)->path()); |
| + } |
| + |
| + // Walk the various networks and store their state in the status report. |
| + chromeos::NetworkStateHandler::NetworkStateList state_list; |
| + network_state_handler->GetNetworkListByType( |
| + chromeos::NetworkTypePattern::Default(), |
| + true, // configured_only |
| + false, // visible_only, |
| + 0, // no limit to number of results |
| + &state_list); |
| + |
| + for (const chromeos::NetworkState* state: state_list) { |
| + // Determine the connection state and signal strength for |state|. |
| + em::NetworkState::ConnectionState connection_state_enum = |
| + em::NetworkState::UNKNOWN; |
| + std::string connection_state_string(state->connection_state()); |
|
pneubeck (no reviews)
2014/12/12 02:02:47
optional nit: you could still change the type to '
Andrew T Wilson (Slow)
2014/12/15 17:00:49
Done.
|
| + for (size_t i = 0; i < arraysize(kConnectionStateMap); ++i) { |
| + if (connection_state_string == kConnectionStateMap[i].state_string) { |
| + connection_state_enum = kConnectionStateMap[i].state_constant; |
| + break; |
| + } |
| + } |
| + |
| + // Copy fields from NetworkState into the status report. |
| + em::NetworkState* proto_state = request->add_network_state(); |
| + proto_state->set_connection_state(connection_state_enum); |
| + proto_state->set_signal_strength(state->signal_strength()); |
| + if (!state->device_path().empty()) |
| + proto_state->set_device_path(state->device_path()); |
| } |
| } |
| @@ -447,12 +511,9 @@ void DeviceStatusCollector::GetUsers(em::DeviceStatusReportRequest* request) { |
| } |
| } |
| -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 |
| - // just assume whatever ends up in |request| gets submitted successfully. |
| - GetDeviceStatus(request); |
| - OnSubmittedSuccessfully(); |
| +void DeviceStatusCollector::GetHardwareStatus( |
| + em::DeviceStatusReportRequest* status) { |
| + // TODO(atwilson): Fill in hardware status fields. |
| } |
| bool DeviceStatusCollector::GetDeviceStatus( |
| @@ -476,6 +537,9 @@ bool DeviceStatusCollector::GetDeviceStatus( |
| GetUsers(status); |
| } |
| + if (report_hardware_status_) |
| + GetHardwareStatus(status); |
| + |
| return true; |
| } |