summaryrefslogtreecommitdiffstats
path: root/chrome/browser/policy
diff options
context:
space:
mode:
authordubroy@chromium.org <dubroy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-19 16:11:03 +0000
committerdubroy@chromium.org <dubroy@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2012-01-19 16:11:03 +0000
commit03394c7ce3612de7b5b6cb7cea95bc689abd2205 (patch)
treeb27f551a180897d9c1dbc8da5e521cdb6131524a /chrome/browser/policy
parentc5e22aee57bd524acf0fb620192a05cdcfc4c1ab (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/policy/browser_policy_connector.cc4
-rw-r--r--chrome/browser/policy/device_status_collector.cc19
-rw-r--r--chrome/browser/policy/device_status_collector.h13
-rw-r--r--chrome/browser/policy/device_status_collector_unittest.cc58
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