diff options
author | rdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-17 20:53:25 +0000 |
---|---|---|
committer | rdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2014-01-17 20:53:25 +0000 |
commit | c03b8147dfa2752784d4096c856af79fe393eaa6 (patch) | |
tree | edb492e4b3cb0756fcf85bb17d6c5dd4ef7eb9fe /chrome/browser/extensions/api | |
parent | 68185b3d381cfe0124dbc5cbfdbcc43b8a130c80 (diff) | |
download | chromium_src-c03b8147dfa2752784d4096c856af79fe393eaa6.zip chromium_src-c03b8147dfa2752784d4096c856af79fe393eaa6.tar.gz chromium_src-c03b8147dfa2752784d4096c856af79fe393eaa6.tar.bz2 |
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
Diffstat (limited to 'chrome/browser/extensions/api')
3 files changed, 30 insertions, 3 deletions
diff --git a/chrome/browser/extensions/api/alarms/alarm_manager.cc b/chrome/browser/extensions/api/alarms/alarm_manager.cc index 582257c..22cca30 100644 --- a/chrome/browser/extensions/api/alarms/alarm_manager.cc +++ b/chrome/browser/extensions/api/alarms/alarm_manager.cc @@ -328,11 +328,11 @@ void AlarmManager::ScheduleNextPoll() { soonest_alarm_time = cur_alarm_time; if (l_it->granularity < min_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) min_granularity = cur_alarm_delta; - if (min_granularity < l_it->minimum_granularity) - min_granularity = l_it->minimum_granularity; } } diff --git a/chrome/browser/extensions/api/alarms/alarm_manager.h b/chrome/browser/extensions/api/alarms/alarm_manager.h index f278d286..d07e852 100644 --- a/chrome/browser/extensions/api/alarms/alarm_manager.h +++ b/chrome/browser/extensions/api/alarms/alarm_manager.h @@ -122,6 +122,8 @@ class AlarmManager ReleasedExtensionPollsInfrequently); FRIEND_TEST_ALL_PREFIXES(ExtensionAlarmsSchedulingTest, TimerRunning); FRIEND_TEST_ALL_PREFIXES(ExtensionAlarmsSchedulingTest, MinimumGranularity); + FRIEND_TEST_ALL_PREFIXES(ExtensionAlarmsSchedulingTest, + DifferentMinimumGranularities); friend class ProfileKeyedAPIFactory<AlarmManager>; typedef std::string ExtensionId; diff --git a/chrome/browser/extensions/api/alarms/alarms_api_unittest.cc b/chrome/browser/extensions/api/alarms/alarms_api_unittest.cc index fa71090..91dc06a 100644 --- a/chrome/browser/extensions/api/alarms/alarms_api_unittest.cc +++ b/chrome/browser/extensions/api/alarms/alarms_api_unittest.cc @@ -616,4 +616,29 @@ TEST_F(ExtensionAlarmsSchedulingTest, MinimumGranularity) { 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 |