Fix an issue found in https://chromiumcodereview.appspot.com/23205008/

Min granularity was still not being calculated right. Fix it again and add a unit test.

BUG=268300

Review URL: https://codereview.chromium.org/141883002

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@245611 0039d316-1c4b-4281-b951-d872f2087c98
parent 68185b3d
...@@ -328,11 +328,11 @@ void AlarmManager::ScheduleNextPoll() { ...@@ -328,11 +328,11 @@ void AlarmManager::ScheduleNextPoll() {
soonest_alarm_time = cur_alarm_time; soonest_alarm_time = cur_alarm_time;
if (l_it->granularity < min_granularity) if (l_it->granularity < min_granularity)
min_granularity = l_it->granularity; min_granularity = l_it->granularity;
base::TimeDelta cur_alarm_delta = cur_alarm_time - clock_->Now(); base::TimeDelta cur_alarm_delta = cur_alarm_time - last_poll_time_;
if (cur_alarm_delta < l_it->minimum_granularity)
cur_alarm_delta = l_it->minimum_granularity;
if (cur_alarm_delta < min_granularity) if (cur_alarm_delta < min_granularity)
min_granularity = cur_alarm_delta; min_granularity = cur_alarm_delta;
if (min_granularity < l_it->minimum_granularity)
min_granularity = l_it->minimum_granularity;
} }
} }
......
...@@ -122,6 +122,8 @@ class AlarmManager ...@@ -122,6 +122,8 @@ class AlarmManager
ReleasedExtensionPollsInfrequently); ReleasedExtensionPollsInfrequently);
FRIEND_TEST_ALL_PREFIXES(ExtensionAlarmsSchedulingTest, TimerRunning); FRIEND_TEST_ALL_PREFIXES(ExtensionAlarmsSchedulingTest, TimerRunning);
FRIEND_TEST_ALL_PREFIXES(ExtensionAlarmsSchedulingTest, MinimumGranularity); FRIEND_TEST_ALL_PREFIXES(ExtensionAlarmsSchedulingTest, MinimumGranularity);
FRIEND_TEST_ALL_PREFIXES(ExtensionAlarmsSchedulingTest,
DifferentMinimumGranularities);
friend class ProfileKeyedAPIFactory<AlarmManager>; friend class ProfileKeyedAPIFactory<AlarmManager>;
typedef std::string ExtensionId; typedef std::string ExtensionId;
......
...@@ -616,4 +616,29 @@ TEST_F(ExtensionAlarmsSchedulingTest, MinimumGranularity) { ...@@ -616,4 +616,29 @@ TEST_F(ExtensionAlarmsSchedulingTest, MinimumGranularity) {
alarm_manager_->test_next_poll_time_.ToJsTime()); alarm_manager_->test_next_poll_time_.ToJsTime());
} }
TEST_F(ExtensionAlarmsSchedulingTest, DifferentMinimumGranularities) {
test_clock_->SetNow(base::Time::FromJsTime(0));
// Create an alarm to go off in 12 seconds. This uses the default, unpacked
// extension - so there is no minimum granularity.
CreateAlarm("[\"a\", {\"periodInMinutes\": 0.2}]"); // 12 seconds.
// Create a new extension, which is packed, and has a granularity of 1 minute.
// CreateAlarm() uses extension_, so keep a ref of the old one around, and
// repopulate extension_.
scoped_refptr<Extension> extension2(extension_);
extension_ =
utils::CreateEmptyExtensionWithLocation(extensions::Manifest::INTERNAL);
CreateAlarm("[\"b\", {\"periodInMinutes\": 2}]");
alarm_manager_->last_poll_time_ = base::Time::FromJsTime(0);
alarm_manager_->ScheduleNextPoll();
// The next poll time should be 12 seconds from now - the time at which the
// first alarm should go off.
EXPECT_DOUBLE_EQ((alarm_manager_->last_poll_time_ +
base::TimeDelta::FromSeconds(12)).ToJsTime(),
alarm_manager_->test_next_poll_time_.ToJsTime());
}
} // namespace extensions } // namespace extensions
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