summaryrefslogtreecommitdiffstats
path: root/chrome/browser/extensions/api
diff options
context:
space:
mode:
authorrdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-17 20:53:25 +0000
committerrdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-01-17 20:53:25 +0000
commitc03b8147dfa2752784d4096c856af79fe393eaa6 (patch)
treeedb492e4b3cb0756fcf85bb17d6c5dd4ef7eb9fe /chrome/browser/extensions/api
parent68185b3d381cfe0124dbc5cbfdbcc43b8a130c80 (diff)
downloadchromium_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')
-rw-r--r--chrome/browser/extensions/api/alarms/alarm_manager.cc6
-rw-r--r--chrome/browser/extensions/api/alarms/alarm_manager.h2
-rw-r--r--chrome/browser/extensions/api/alarms/alarms_api_unittest.cc25
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