diff options
author | dubroy@chromium.org <dubroy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-19 16:11:03 +0000 |
---|---|---|
committer | dubroy@chromium.org <dubroy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-19 16:11:03 +0000 |
commit | 03394c7ce3612de7b5b6cb7cea95bc689abd2205 (patch) | |
tree | b27f551a180897d9c1dbc8da5e521cdb6131524a /chrome/browser/policy | |
parent | c5e22aee57bd524acf0fb620192a05cdcfc4c1ab (diff) | |
download | chromium_src-03394c7ce3612de7b5b6cb7cea95bc689abd2205.zip chromium_src-03394c7ce3612de7b5b6cb7cea95bc689abd2205.tar.gz chromium_src-03394c7ce3612de7b5b6cb7cea95bc689abd2205.tar.bz2 |
Add dev switch boot mode to device policy status reports.
Also modified NameValuePairsParser to support reading the output from /usr/bin/crossystem.
BUG=chromium-os:22035
TEST=New unit test added to DeviceStatusCollectorTest & new unit_test added to
NamesValuePairsParser unit test.
Review URL: http://codereview.chromium.org/8961012
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@118302 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/policy')
4 files changed, 80 insertions, 14 deletions
diff --git a/chrome/browser/policy/browser_policy_connector.cc b/chrome/browser/policy/browser_policy_connector.cc index 8e2c3ce9..e94f0d6 100644 --- a/chrome/browser/policy/browser_policy_connector.cc +++ b/chrome/browser/policy/browser_policy_connector.cc @@ -442,7 +442,9 @@ void BrowserPolicyConnector::CompleteInitialization() { kServiceInitializationStartupDelay); } device_data_store_->set_device_status_collector( - new DeviceStatusCollector(g_browser_process->local_state())); + new DeviceStatusCollector( + g_browser_process->local_state(), + chromeos::system::StatisticsProvider::GetInstance())); #endif } diff --git a/chrome/browser/policy/device_status_collector.cc b/chrome/browser/policy/device_status_collector.cc index 44722a2..3d82084 100644 --- a/chrome/browser/policy/device_status_collector.cc +++ b/chrome/browser/policy/device_status_collector.cc @@ -7,6 +7,7 @@ #include "base/bind.h" #include "base/callback.h" #include "base/string_number_conversions.h" +#include "chrome/browser/chromeos/system/statistics_provider.h" #include "chrome/browser/policy/proto/device_management_backend.pb.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/browser/prefs/scoped_user_pref_update.h" @@ -42,11 +43,14 @@ bool GetTimestamp(const ListValue* list, int index, int64* out_value) { namespace policy { -DeviceStatusCollector::DeviceStatusCollector(PrefService* local_state) +DeviceStatusCollector::DeviceStatusCollector( + PrefService* local_state, + chromeos::system::StatisticsProvider* provider) : max_stored_active_periods_(kMaxStoredActivePeriods), local_state_(local_state), last_idle_check_(Time()), - last_idle_state_(IDLE_STATE_UNKNOWN) { + last_idle_state_(IDLE_STATE_UNKNOWN), + statistics_provider_(provider) { timer_.Start(FROM_HERE, TimeDelta::FromSeconds( DeviceStatusCollector::kPollIntervalSeconds), @@ -131,6 +135,7 @@ void DeviceStatusCollector::IdleStateCallback(IdleState state) { } void DeviceStatusCollector::GetStatus(em::DeviceStatusReportRequest* request) { + // Report device active periods. const ListValue* active_periods = local_state_->GetList(kPrefDeviceActivePeriods); em::TimePeriod* time_period; @@ -159,6 +164,16 @@ void DeviceStatusCollector::GetStatus(em::DeviceStatusReportRequest* request) { request->set_browser_version(version_info.Version()); request->set_os_version(os_version_); request->set_firmware_version(firmware_version_); + + // Report the state of the dev switch at boot. + std::string dev_switch_mode; + if (statistics_provider_->GetMachineStatistic( + "devsw_boot", &dev_switch_mode)) { + if (dev_switch_mode == "1") + request->set_boot_mode("Dev"); + else if (dev_switch_mode == "0") + request->set_boot_mode("Verified"); + } } void DeviceStatusCollector::OnOSVersion(VersionLoader::Handle handle, diff --git a/chrome/browser/policy/device_status_collector.h b/chrome/browser/policy/device_status_collector.h index 2be0a15..4f1c772 100644 --- a/chrome/browser/policy/device_status_collector.h +++ b/chrome/browser/policy/device_status_collector.h @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -11,6 +11,12 @@ #include "chrome/browser/chromeos/version_loader.h" #include "chrome/browser/idle.h" +namespace chromeos { +namespace system { +class StatisticsProvider; +} +} + namespace enterprise_management { class DeviceStatusReportRequest; } @@ -22,7 +28,8 @@ namespace policy { // Collects and summarizes the status of an enterprised-managed ChromeOS device. class DeviceStatusCollector { public: - explicit DeviceStatusCollector(PrefService* local_state); + DeviceStatusCollector(PrefService* local_state, + chromeos::system::StatisticsProvider* provider); virtual ~DeviceStatusCollector(); void GetStatus(enterprise_management::DeviceStatusReportRequest* request); @@ -73,6 +80,8 @@ class DeviceStatusCollector { std::string os_version_; std::string firmware_version_; + chromeos::system::StatisticsProvider* statistics_provider_; + DISALLOW_COPY_AND_ASSIGN(DeviceStatusCollector); }; diff --git a/chrome/browser/policy/device_status_collector_unittest.cc b/chrome/browser/policy/device_status_collector_unittest.cc index 8bda4b8..1dde8b6 100644 --- a/chrome/browser/policy/device_status_collector_unittest.cc +++ b/chrome/browser/policy/device_status_collector_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2011 The Chromium Authors. All rights reserved. +// Copyright (c) 2012 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -7,9 +7,11 @@ #include "base/message_loop.h" #include "base/time.h" #include "chrome/browser/idle.h" +#include "chrome/browser/chromeos/system/mock_statistics_provider.h" #include "chrome/browser/policy/proto/device_management_backend.pb.h" #include "chrome/browser/prefs/pref_service.h" #include "chrome/test/base/testing_pref_service.h" +#include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" using base::TimeDelta; @@ -21,8 +23,10 @@ namespace { class TestingDeviceStatusCollector : public policy::DeviceStatusCollector { public: - explicit TestingDeviceStatusCollector(PrefService* local_state) - : policy::DeviceStatusCollector(local_state), + TestingDeviceStatusCollector( + PrefService* local_state, + chromeos::system::StatisticsProvider* provider) + : policy::DeviceStatusCollector(local_state, provider), local_state_(local_state), baseline_time_(Time::Now()) { } @@ -79,13 +83,19 @@ int64 GetActiveMilliseconds(em::DeviceStatusReportRequest& status) { namespace policy { +using ::testing::_; +using ::testing::NotNull; +using ::testing::Return; +using ::testing::SetArgPointee; + class DeviceStatusCollectorTest : public testing::Test { public: DeviceStatusCollectorTest() - : message_loop_(new MessageLoop), - prefs_(), - status_collector_(&prefs_) { + : prefs_(), + status_collector_(&prefs_, &statistics_provider_) { DeviceStatusCollector::RegisterPrefs(&prefs_); + EXPECT_CALL(statistics_provider_, GetMachineStatistic(_, NotNull())) + .WillRepeatedly(Return(false)); } protected: @@ -94,9 +104,9 @@ class DeviceStatusCollectorTest : public testing::Test { return policy::DeviceStatusCollector::kPollIntervalSeconds * 1000; } - scoped_ptr<MessageLoop> message_loop_; - + MessageLoop message_loop_; TestingPrefService prefs_; + chromeos::system::MockStatisticsProvider statistics_provider_; TestingDeviceStatusCollector status_collector_; em::DeviceStatusReportRequest status_; }; @@ -180,7 +190,8 @@ TEST_F(DeviceStatusCollectorTest, StateKeptInPref) { // Process the list a second time with a different collector. // It should be able to count the active periods found by the first // collector, because the results are stored in a pref. - TestingDeviceStatusCollector second_collector(&prefs_); + TestingDeviceStatusCollector second_collector(&prefs_, + &statistics_provider_); second_collector.Simulate(test_states, sizeof(test_states) / sizeof(IdleState)); @@ -226,4 +237,33 @@ TEST_F(DeviceStatusCollectorTest, MaxStoredPeriods) { EXPECT_EQ(static_cast<int>(max_periods), status_.active_time_size()); } +TEST_F(DeviceStatusCollectorTest, DevSwitchBootMode) { + status_collector_.GetStatus(&status_); + EXPECT_EQ(false, status_.has_boot_mode()); + + EXPECT_CALL(statistics_provider_, + GetMachineStatistic("devsw_boot", NotNull())) + .WillOnce(DoAll(SetArgPointee<1>("(error)"), Return(true))); + status_collector_.GetStatus(&status_); + EXPECT_EQ(false, status_.has_boot_mode()); + + EXPECT_CALL(statistics_provider_, + GetMachineStatistic("devsw_boot", NotNull())) + .WillOnce(DoAll(SetArgPointee<1>(" "), Return(true))); + status_collector_.GetStatus(&status_); + EXPECT_EQ(false, status_.has_boot_mode()); + + EXPECT_CALL(statistics_provider_, + GetMachineStatistic("devsw_boot", NotNull())) + .WillOnce(DoAll(SetArgPointee<1>("0"), Return(true))); + status_collector_.GetStatus(&status_); + EXPECT_EQ("Verified", status_.boot_mode()); + + EXPECT_CALL(statistics_provider_, + GetMachineStatistic("devsw_boot", NotNull())) + .WillOnce(DoAll(SetArgPointee<1>("1"), Return(true))); + status_collector_.GetStatus(&status_); + EXPECT_EQ("Dev", status_.boot_mode()); +} + } // namespace policy |