Commit 6eeb7d03 authored by Henrique Grandinetti's avatar Henrique Grandinetti Committed by Commit Bot

Treat clock updates to never add a negative usage window.

Bug: 899980
Change-Id: I196999915290fe07322d934423430a0782c7ba55
Reviewed-on: https://chromium-review.googlesource.com/c/1330224Reviewed-by: default avatarSergey Poromov <poromov@chromium.org>
Commit-Queue: Henrique Grandinetti <hgrandinetti@chromium.org>
Cr-Commit-Position: refs/heads/master@{#607732}
parent b524b3f6
......@@ -1190,8 +1190,19 @@ void DeviceStatusCollector::UpdateChildUsageTime() {
}
if (!last_active_check_.is_null() && last_state_active_) {
activity_storage_->AddActivityPeriod(last_active_check_, now, now,
GetUserForActivityReporting());
// If it's been too long since the last report, or if the activity is
// negative (which can happen when the clock changes), assume a single
// interval of activity. This is the same strategy used to enterprise users.
base::TimeDelta active_seconds = now - last_active_check_;
if (active_seconds < base::TimeDelta::FromSeconds(0) ||
active_seconds >= (2 * kUpdateChildActiveTimeInterval)) {
activity_storage_->AddActivityPeriod(now - kUpdateChildActiveTimeInterval,
now, now,
GetUserForActivityReporting());
} else {
activity_storage_->AddActivityPeriod(last_active_check_, now, now,
GetUserForActivityReporting());
}
activity_storage_->PruneActivityPeriods(
now, max_stored_past_activity_interval_,
......
......@@ -2794,4 +2794,22 @@ TEST_F(ConsumerDeviceStatusCollectorTimeLimitEnabledTest,
ExpectChildScreenTimeMilliseconds(0.5 * ActivePeriodMilliseconds());
}
TEST_F(ConsumerDeviceStatusCollectorTimeLimitEnabledTest, ClockChanged) {
DeviceStateTransitions test_states[1] = {
DeviceStateTransitions::kEnterSessionActive};
base::Time initial_time =
Time::Now().LocalMidnight() + base::TimeDelta::FromHours(1);
status_collector_->SetBaselineTime(initial_time);
SimulateStateChanges(test_states, 1);
// Simulate clock change.
status_collector_->SetBaselineTime(initial_time - TimeDelta::FromMinutes(30));
test_states[0] = DeviceStateTransitions::kLeaveSessionActive;
SimulateStateChanges(test_states, 1);
GetStatus();
ASSERT_EQ(1, device_status_.active_period_size());
ExpectChildScreenTimeMilliseconds(ActivePeriodMilliseconds());
}
} // namespace policy
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