Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(92)

Side by Side Diff: chrome/browser/extensions/api/alarms/alarms_api_unittest.cc

Issue 12314056: Make chrome/browser/extensions use base::Clock instead of MockTimeProvider (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Add include Created 7 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 // This file tests the chrome.alarms extension API. 5 // This file tests the chrome.alarms extension API.
6 6
7 #include "base/test/mock_time_provider.h" 7 #include "base/test/simple_test_clock.h"
8 #include "base/values.h" 8 #include "base/values.h"
9 #include "chrome/browser/extensions/api/alarms/alarm_manager.h" 9 #include "chrome/browser/extensions/api/alarms/alarm_manager.h"
10 #include "chrome/browser/extensions/api/alarms/alarms_api.h" 10 #include "chrome/browser/extensions/api/alarms/alarms_api.h"
11 #include "chrome/browser/extensions/extension_function_test_utils.h" 11 #include "chrome/browser/extensions/extension_function_test_utils.h"
12 #include "chrome/browser/extensions/test_extension_system.h" 12 #include "chrome/browser/extensions/test_extension_system.h"
13 #include "chrome/browser/profiles/profile_manager.h" 13 #include "chrome/browser/profiles/profile_manager.h"
14 #include "chrome/browser/ui/browser.h" 14 #include "chrome/browser/ui/browser.h"
15 #include "chrome/browser/ui/tabs/tab_strip_model.h" 15 #include "chrome/browser/ui/tabs/tab_strip_model.h"
16 #include "chrome/common/extensions/extension_messages.h" 16 #include "chrome/common/extensions/extension_messages.h"
17 #include "chrome/test/base/browser_with_test_window_test.h" 17 #include "chrome/test/base/browser_with_test_window_test.h"
(...skipping 26 matching lines...) Expand all
44 44
45 } // namespace 45 } // namespace
46 46
47 class ExtensionAlarmsTest : public BrowserWithTestWindowTest { 47 class ExtensionAlarmsTest : public BrowserWithTestWindowTest {
48 public: 48 public:
49 virtual void SetUp() { 49 virtual void SetUp() {
50 BrowserWithTestWindowTest::SetUp(); 50 BrowserWithTestWindowTest::SetUp();
51 51
52 TestExtensionSystem* system = static_cast<TestExtensionSystem*>( 52 TestExtensionSystem* system = static_cast<TestExtensionSystem*>(
53 ExtensionSystem::Get(browser()->profile())); 53 ExtensionSystem::Get(browser()->profile()));
54 system->CreateAlarmManager(&base::MockTimeProvider::StaticNow); 54 system->CreateAlarmManager(&test_clock_);
55 alarm_manager_ = system->alarm_manager(); 55 alarm_manager_ = system->alarm_manager();
56 56
57 alarm_delegate_ = new AlarmDelegate(); 57 alarm_delegate_ = new AlarmDelegate();
58 alarm_manager_->set_delegate(alarm_delegate_); 58 alarm_manager_->set_delegate(alarm_delegate_);
59 59
60 extension_ = utils::CreateEmptyExtensionWithLocation( 60 extension_ = utils::CreateEmptyExtensionWithLocation(
61 extensions::Manifest::LOAD); 61 extensions::Manifest::LOAD);
62 62
63 // Make sure there's a RenderViewHost for alarms to warn into. 63 // Make sure there's a RenderViewHost for alarms to warn into.
64 AddTab(browser(), extension_->GetBackgroundURL()); 64 AddTab(browser(), extension_->GetBackgroundURL());
65 contents_ = browser()->tab_strip_model()->GetActiveWebContents(); 65 contents_ = browser()->tab_strip_model()->GetActiveWebContents();
66 66
67 current_time_ = base::Time::FromDoubleT(10); 67 test_clock_.SetNow(base::Time::FromDoubleT(10));
68 ON_CALL(mock_time_, Now())
69 .WillByDefault(testing::ReturnPointee(&current_time_));
70 } 68 }
71 69
72 base::Value* RunFunctionWithExtension( 70 base::Value* RunFunctionWithExtension(
73 UIThreadExtensionFunction* function, const std::string& args) { 71 UIThreadExtensionFunction* function, const std::string& args) {
74 scoped_refptr<UIThreadExtensionFunction> delete_function(function); 72 scoped_refptr<UIThreadExtensionFunction> delete_function(function);
75 function->set_extension(extension_.get()); 73 function->set_extension(extension_.get());
76 function->SetRenderViewHost(contents_->GetRenderViewHost()); 74 function->SetRenderViewHost(contents_->GetRenderViewHost());
77 return utils::RunFunctionAndReturnSingleResult(function, args, browser()); 75 return utils::RunFunctionAndReturnSingleResult(function, args, browser());
78 } 76 }
79 77
(...skipping 15 matching lines...) Expand all
95 } 93 }
96 94
97 std::string RunFunctionAndReturnError(UIThreadExtensionFunction* function, 95 std::string RunFunctionAndReturnError(UIThreadExtensionFunction* function,
98 const std::string& args) { 96 const std::string& args) {
99 function->set_extension(extension_.get()); 97 function->set_extension(extension_.get());
100 function->SetRenderViewHost(contents_->GetRenderViewHost()); 98 function->SetRenderViewHost(contents_->GetRenderViewHost());
101 return utils::RunFunctionAndReturnError(function, args, browser()); 99 return utils::RunFunctionAndReturnError(function, args, browser());
102 } 100 }
103 101
104 void CreateAlarm(const std::string& args) { 102 void CreateAlarm(const std::string& args) {
105 RunFunction(new AlarmsCreateFunction(&base::MockTimeProvider::StaticNow), 103 RunFunction(new AlarmsCreateFunction(&test_clock_), args);
106 args);
107 } 104 }
108 105
109 // Takes a JSON result from a function and converts it to a vector of 106 // Takes a JSON result from a function and converts it to a vector of
110 // JsAlarms. 107 // JsAlarms.
111 std::vector<linked_ptr<JsAlarm> > ToAlarmList(base::ListValue* value) { 108 std::vector<linked_ptr<JsAlarm> > ToAlarmList(base::ListValue* value) {
112 std::vector<linked_ptr<JsAlarm> > list; 109 std::vector<linked_ptr<JsAlarm> > list;
113 for (size_t i = 0; i < value->GetSize(); ++i) { 110 for (size_t i = 0; i < value->GetSize(); ++i) {
114 linked_ptr<JsAlarm> alarm(new JsAlarm); 111 linked_ptr<JsAlarm> alarm(new JsAlarm);
115 base::DictionaryValue* alarm_value; 112 base::DictionaryValue* alarm_value;
116 if (!value->GetDictionary(i, &alarm_value)) { 113 if (!value->GetDictionary(i, &alarm_value)) {
(...skipping 10 matching lines...) Expand all
127 void CreateAlarms(size_t num_alarms) { 124 void CreateAlarms(size_t num_alarms) {
128 CHECK(num_alarms <= 3); 125 CHECK(num_alarms <= 3);
129 126
130 const char* kCreateArgs[] = { 127 const char* kCreateArgs[] = {
131 "[null, {\"periodInMinutes\": 0.001}]", 128 "[null, {\"periodInMinutes\": 0.001}]",
132 "[\"7\", {\"periodInMinutes\": 7}]", 129 "[\"7\", {\"periodInMinutes\": 7}]",
133 "[\"0\", {\"delayInMinutes\": 0}]", 130 "[\"0\", {\"delayInMinutes\": 0}]",
134 }; 131 };
135 for (size_t i = 0; i < num_alarms; ++i) { 132 for (size_t i = 0; i < num_alarms; ++i) {
136 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict( 133 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict(
137 new AlarmsCreateFunction(&base::MockTimeProvider::StaticNow), 134 new AlarmsCreateFunction(&test_clock_), kCreateArgs[i]));
138 kCreateArgs[i]));
139 EXPECT_FALSE(result.get()); 135 EXPECT_FALSE(result.get());
140 } 136 }
141 } 137 }
142 138
143 protected: 139 protected:
144 base::Time current_time_; 140 base::SimpleTestClock test_clock_;
145 testing::NiceMock<base::MockTimeProvider> mock_time_;
146 AlarmManager* alarm_manager_; 141 AlarmManager* alarm_manager_;
147 AlarmDelegate* alarm_delegate_; 142 AlarmDelegate* alarm_delegate_;
148 scoped_refptr<extensions::Extension> extension_; 143 scoped_refptr<extensions::Extension> extension_;
149 content::WebContents* contents_; 144 content::WebContents* contents_;
150 }; 145 };
151 146
152 TEST_F(ExtensionAlarmsTest, Create) { 147 TEST_F(ExtensionAlarmsTest, Create) {
153 current_time_ = base::Time::FromDoubleT(10); 148 test_clock_.SetNow(base::Time::FromDoubleT(10));
154 // Create 1 non-repeating alarm. 149 // Create 1 non-repeating alarm.
155 CreateAlarm("[null, {\"delayInMinutes\": 0}]"); 150 CreateAlarm("[null, {\"delayInMinutes\": 0}]");
156 151
157 const Alarm* alarm = 152 const Alarm* alarm =
158 alarm_manager_->GetAlarm(extension_->id(), ""); 153 alarm_manager_->GetAlarm(extension_->id(), "");
159 ASSERT_TRUE(alarm); 154 ASSERT_TRUE(alarm);
160 EXPECT_EQ("", alarm->js_alarm->name); 155 EXPECT_EQ("", alarm->js_alarm->name);
161 EXPECT_DOUBLE_EQ(10000, alarm->js_alarm->scheduled_time); 156 EXPECT_DOUBLE_EQ(10000, alarm->js_alarm->scheduled_time);
162 EXPECT_FALSE(alarm->js_alarm->period_in_minutes.get()); 157 EXPECT_FALSE(alarm->js_alarm->period_in_minutes.get());
163 158
164 // Now wait for the alarm to fire. Our test delegate will quit the 159 // Now wait for the alarm to fire. Our test delegate will quit the
165 // MessageLoop when that happens. 160 // MessageLoop when that happens.
166 MessageLoop::current()->Run(); 161 MessageLoop::current()->Run();
167 162
168 ASSERT_EQ(1u, alarm_delegate_->alarms_seen.size()); 163 ASSERT_EQ(1u, alarm_delegate_->alarms_seen.size());
169 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]); 164 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]);
170 165
171 // Ensure the alarm is gone. 166 // Ensure the alarm is gone.
172 { 167 {
173 const AlarmManager::AlarmList* alarms = 168 const AlarmManager::AlarmList* alarms =
174 alarm_manager_->GetAllAlarms(extension_->id()); 169 alarm_manager_->GetAllAlarms(extension_->id());
175 ASSERT_FALSE(alarms); 170 ASSERT_FALSE(alarms);
176 } 171 }
177 } 172 }
178 173
179 TEST_F(ExtensionAlarmsTest, CreateRepeating) { 174 TEST_F(ExtensionAlarmsTest, CreateRepeating) {
180 current_time_ = base::Time::FromDoubleT(10); 175 test_clock_.SetNow(base::Time::FromDoubleT(10));
181 176
182 // Create 1 repeating alarm. 177 // Create 1 repeating alarm.
183 CreateAlarm("[null, {\"periodInMinutes\": 0.001}]"); 178 CreateAlarm("[null, {\"periodInMinutes\": 0.001}]");
184 179
185 const Alarm* alarm = 180 const Alarm* alarm =
186 alarm_manager_->GetAlarm(extension_->id(), ""); 181 alarm_manager_->GetAlarm(extension_->id(), "");
187 ASSERT_TRUE(alarm); 182 ASSERT_TRUE(alarm);
188 EXPECT_EQ("", alarm->js_alarm->name); 183 EXPECT_EQ("", alarm->js_alarm->name);
189 EXPECT_DOUBLE_EQ(10060, alarm->js_alarm->scheduled_time); 184 EXPECT_DOUBLE_EQ(10060, alarm->js_alarm->scheduled_time);
190 EXPECT_THAT(alarm->js_alarm->period_in_minutes, 185 EXPECT_THAT(alarm->js_alarm->period_in_minutes,
191 testing::Pointee(testing::DoubleEq(0.001))); 186 testing::Pointee(testing::DoubleEq(0.001)));
192 187
193 current_time_ += base::TimeDelta::FromSeconds(1); 188 test_clock_.Advance(base::TimeDelta::FromSeconds(1));
194 // Now wait for the alarm to fire. Our test delegate will quit the 189 // Now wait for the alarm to fire. Our test delegate will quit the
195 // MessageLoop when that happens. 190 // MessageLoop when that happens.
196 MessageLoop::current()->Run(); 191 MessageLoop::current()->Run();
197 192
198 current_time_ += base::TimeDelta::FromSeconds(1); 193 test_clock_.Advance(base::TimeDelta::FromSeconds(1));
199 // Wait again, and ensure the alarm fires again. 194 // Wait again, and ensure the alarm fires again.
200 alarm_manager_->ScheduleNextPoll(); 195 alarm_manager_->ScheduleNextPoll();
201 MessageLoop::current()->Run(); 196 MessageLoop::current()->Run();
202 197
203 ASSERT_EQ(2u, alarm_delegate_->alarms_seen.size()); 198 ASSERT_EQ(2u, alarm_delegate_->alarms_seen.size());
204 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]); 199 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]);
205 } 200 }
206 201
207 TEST_F(ExtensionAlarmsTest, CreateAbsolute) { 202 TEST_F(ExtensionAlarmsTest, CreateAbsolute) {
208 current_time_ = base::Time::FromDoubleT(9.99); 203 test_clock_.SetNow(base::Time::FromDoubleT(9.99));
209 CreateAlarm("[null, {\"when\": 10001}]"); 204 CreateAlarm("[null, {\"when\": 10001}]");
210 205
211 const Alarm* alarm = 206 const Alarm* alarm =
212 alarm_manager_->GetAlarm(extension_->id(), ""); 207 alarm_manager_->GetAlarm(extension_->id(), "");
213 ASSERT_TRUE(alarm); 208 ASSERT_TRUE(alarm);
214 EXPECT_EQ("", alarm->js_alarm->name); 209 EXPECT_EQ("", alarm->js_alarm->name);
215 EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time); 210 EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time);
216 EXPECT_THAT(alarm->js_alarm->period_in_minutes, 211 EXPECT_THAT(alarm->js_alarm->period_in_minutes,
217 testing::IsNull()); 212 testing::IsNull());
218 213
219 current_time_ = base::Time::FromDoubleT(10.1); 214 test_clock_.SetNow(base::Time::FromDoubleT(10.1));
220 // Now wait for the alarm to fire. Our test delegate will quit the 215 // Now wait for the alarm to fire. Our test delegate will quit the
221 // MessageLoop when that happens. 216 // MessageLoop when that happens.
222 MessageLoop::current()->Run(); 217 MessageLoop::current()->Run();
223 218
224 ASSERT_FALSE(alarm_manager_->GetAlarm(extension_->id(), "")); 219 ASSERT_FALSE(alarm_manager_->GetAlarm(extension_->id(), ""));
225 220
226 ASSERT_EQ(1u, alarm_delegate_->alarms_seen.size()); 221 ASSERT_EQ(1u, alarm_delegate_->alarms_seen.size());
227 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]); 222 EXPECT_EQ("", alarm_delegate_->alarms_seen[0]);
228 } 223 }
229 224
230 TEST_F(ExtensionAlarmsTest, CreateRepeatingWithQuickFirstCall) { 225 TEST_F(ExtensionAlarmsTest, CreateRepeatingWithQuickFirstCall) {
231 current_time_ = base::Time::FromDoubleT(9.99); 226 test_clock_.SetNow(base::Time::FromDoubleT(9.99));
232 CreateAlarm("[null, {\"when\": 10001, \"periodInMinutes\": 0.001}]"); 227 CreateAlarm("[null, {\"when\": 10001, \"periodInMinutes\": 0.001}]");
233 228
234 const Alarm* alarm = 229 const Alarm* alarm =
235 alarm_manager_->GetAlarm(extension_->id(), ""); 230 alarm_manager_->GetAlarm(extension_->id(), "");
236 ASSERT_TRUE(alarm); 231 ASSERT_TRUE(alarm);
237 EXPECT_EQ("", alarm->js_alarm->name); 232 EXPECT_EQ("", alarm->js_alarm->name);
238 EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time); 233 EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time);
239 EXPECT_THAT(alarm->js_alarm->period_in_minutes, 234 EXPECT_THAT(alarm->js_alarm->period_in_minutes,
240 testing::Pointee(testing::DoubleEq(0.001))); 235 testing::Pointee(testing::DoubleEq(0.001)));
241 236
242 current_time_ = base::Time::FromDoubleT(10.1); 237 test_clock_.SetNow(base::Time::FromDoubleT(10.1));
243 // Now wait for the alarm to fire. Our test delegate will quit the 238 // Now wait for the alarm to fire. Our test delegate will quit the
244 // MessageLoop when that happens. 239 // MessageLoop when that happens.
245 MessageLoop::current()->Run(); 240 MessageLoop::current()->Run();
246 241
247 ASSERT_TRUE(alarm_manager_->GetAlarm(extension_->id(), "")); 242 ASSERT_TRUE(alarm_manager_->GetAlarm(extension_->id(), ""));
248 EXPECT_THAT(alarm_delegate_->alarms_seen, testing::ElementsAre("")); 243 EXPECT_THAT(alarm_delegate_->alarms_seen, testing::ElementsAre(""));
249 244
250 current_time_ = base::Time::FromDoubleT(10.7); 245 test_clock_.SetNow(base::Time::FromDoubleT(10.7));
251 MessageLoop::current()->Run(); 246 MessageLoop::current()->Run();
252 247
253 ASSERT_TRUE(alarm_manager_->GetAlarm(extension_->id(), "")); 248 ASSERT_TRUE(alarm_manager_->GetAlarm(extension_->id(), ""));
254 EXPECT_THAT(alarm_delegate_->alarms_seen, testing::ElementsAre("", "")); 249 EXPECT_THAT(alarm_delegate_->alarms_seen, testing::ElementsAre("", ""));
255 } 250 }
256 251
257 TEST_F(ExtensionAlarmsTest, CreateDupe) { 252 TEST_F(ExtensionAlarmsTest, CreateDupe) {
258 current_time_ = base::Time::FromDoubleT(10); 253 test_clock_.SetNow(base::Time::FromDoubleT(10));
259 254
260 // Create 2 duplicate alarms. The first should be overridden. 255 // Create 2 duplicate alarms. The first should be overridden.
261 CreateAlarm("[\"dup\", {\"delayInMinutes\": 1}]"); 256 CreateAlarm("[\"dup\", {\"delayInMinutes\": 1}]");
262 CreateAlarm("[\"dup\", {\"delayInMinutes\": 7}]"); 257 CreateAlarm("[\"dup\", {\"delayInMinutes\": 7}]");
263 258
264 { 259 {
265 const AlarmManager::AlarmList* alarms = 260 const AlarmManager::AlarmList* alarms =
266 alarm_manager_->GetAllAlarms(extension_->id()); 261 alarm_manager_->GetAllAlarms(extension_->id());
267 ASSERT_TRUE(alarms); 262 ASSERT_TRUE(alarms);
268 EXPECT_EQ(1u, alarms->size()); 263 EXPECT_EQ(1u, alarms->size());
(...skipping 10 matching lines...) Expand all
279 ExtensionMsg_AddMessageToConsole::ID); 274 ExtensionMsg_AddMessageToConsole::ID);
280 ASSERT_TRUE(warning); 275 ASSERT_TRUE(warning);
281 content::ConsoleMessageLevel level = content::CONSOLE_MESSAGE_LEVEL_DEBUG; 276 content::ConsoleMessageLevel level = content::CONSOLE_MESSAGE_LEVEL_DEBUG;
282 std::string message; 277 std::string message;
283 ExtensionMsg_AddMessageToConsole::Read(warning, &level, &message); 278 ExtensionMsg_AddMessageToConsole::Read(warning, &level, &message);
284 EXPECT_EQ(content::CONSOLE_MESSAGE_LEVEL_WARNING, level); 279 EXPECT_EQ(content::CONSOLE_MESSAGE_LEVEL_WARNING, level);
285 EXPECT_THAT(message, testing::HasSubstr("delay is less than minimum of 1")); 280 EXPECT_THAT(message, testing::HasSubstr("delay is less than minimum of 1"));
286 } 281 }
287 282
288 TEST_F(ExtensionAlarmsTest, Get) { 283 TEST_F(ExtensionAlarmsTest, Get) {
289 current_time_ = base::Time::FromDoubleT(4); 284 test_clock_.SetNow(base::Time::FromDoubleT(4));
290 285
291 // Create 2 alarms, and make sure we can query them. 286 // Create 2 alarms, and make sure we can query them.
292 CreateAlarms(2); 287 CreateAlarms(2);
293 288
294 // Get the default one. 289 // Get the default one.
295 { 290 {
296 JsAlarm alarm; 291 JsAlarm alarm;
297 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict( 292 scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict(
298 new AlarmsGetFunction(), "[null]")); 293 new AlarmsGetFunction(), "[null]"));
299 ASSERT_TRUE(result.get()); 294 ASSERT_TRUE(result.get());
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
438 EXPECT_EQ(GetScheduledTime("a"), alarm_manager_->next_poll_time_); 433 EXPECT_EQ(GetScheduledTime("a"), alarm_manager_->next_poll_time_);
439 alarm_manager_->RemoveAllAlarms(extension_->id()); 434 alarm_manager_->RemoveAllAlarms(extension_->id());
440 } 435 }
441 { 436 {
442 CreateAlarm("[\"a\", {\"delayInMinutes\": 10}]"); 437 CreateAlarm("[\"a\", {\"delayInMinutes\": 10}]");
443 CreateAlarm("[\"bb\", {\"delayInMinutes\": 21}]"); 438 CreateAlarm("[\"bb\", {\"delayInMinutes\": 21}]");
444 EXPECT_EQ(GetScheduledTime("a"), alarm_manager_->next_poll_time_); 439 EXPECT_EQ(GetScheduledTime("a"), alarm_manager_->next_poll_time_);
445 alarm_manager_->RemoveAllAlarms(extension_->id()); 440 alarm_manager_->RemoveAllAlarms(extension_->id());
446 } 441 }
447 { 442 {
448 current_time_ = base::Time::FromDoubleT(10); 443 test_clock_.SetNow(base::Time::FromDoubleT(10));
449 CreateAlarm("[\"a\", {\"periodInMinutes\": 10}]"); 444 CreateAlarm("[\"a\", {\"periodInMinutes\": 10}]");
450 Alarm alarm; 445 Alarm alarm;
451 alarm.js_alarm->name = "bb"; 446 alarm.js_alarm->name = "bb";
452 alarm.js_alarm->scheduled_time = 30 * 60000; 447 alarm.js_alarm->scheduled_time = 30 * 60000;
453 alarm.js_alarm->period_in_minutes.reset(new double(30)); 448 alarm.js_alarm->period_in_minutes.reset(new double(30));
454 alarm_manager_->AddAlarmImpl(extension_->id(), alarm); 449 alarm_manager_->AddAlarmImpl(extension_->id(), alarm);
455 EXPECT_DOUBLE_EQ(GetScheduledTime("a").ToDoubleT(), 450 EXPECT_DOUBLE_EQ(GetScheduledTime("a").ToDoubleT(),
456 alarm_manager_->next_poll_time_.ToDoubleT()); 451 alarm_manager_->next_poll_time_.ToDoubleT());
457 alarm_manager_->RemoveAllAlarms(extension_->id()); 452 alarm_manager_->RemoveAllAlarms(extension_->id());
458 } 453 }
459 { 454 {
460 current_time_ = base::Time::FromDoubleT(3 * 60 + 1); 455 test_clock_.SetNow(base::Time::FromDoubleT(3 * 60 + 1));
461 Alarm alarm; 456 Alarm alarm;
462 alarm.js_alarm->name = "bb"; 457 alarm.js_alarm->name = "bb";
463 alarm.js_alarm->scheduled_time = 3 * 60000; 458 alarm.js_alarm->scheduled_time = 3 * 60000;
464 alarm.js_alarm->period_in_minutes.reset(new double(3)); 459 alarm.js_alarm->period_in_minutes.reset(new double(3));
465 alarm_manager_->AddAlarmImpl(extension_->id(), alarm); 460 alarm_manager_->AddAlarmImpl(extension_->id(), alarm);
466 MessageLoop::current()->Run(); 461 MessageLoop::current()->Run();
467 EXPECT_EQ(alarm_manager_->last_poll_time_ + base::TimeDelta::FromMinutes(3), 462 EXPECT_EQ(alarm_manager_->last_poll_time_ + base::TimeDelta::FromMinutes(3),
468 alarm_manager_->next_poll_time_); 463 alarm_manager_->next_poll_time_);
469 alarm_manager_->RemoveAllAlarms(extension_->id()); 464 alarm_manager_->RemoveAllAlarms(extension_->id());
470 } 465 }
471 { 466 {
472 current_time_ = base::Time::FromDoubleT(4 * 60 + 1); 467 test_clock_.SetNow(base::Time::FromDoubleT(4 * 60 + 1));
473 CreateAlarm("[\"a\", {\"periodInMinutes\": 2}]"); 468 CreateAlarm("[\"a\", {\"periodInMinutes\": 2}]");
474 alarm_manager_->RemoveAlarm(extension_->id(), "a"); 469 alarm_manager_->RemoveAlarm(extension_->id(), "a");
475 Alarm alarm2; 470 Alarm alarm2;
476 alarm2.js_alarm->name = "bb"; 471 alarm2.js_alarm->name = "bb";
477 alarm2.js_alarm->scheduled_time = 4 * 60000; 472 alarm2.js_alarm->scheduled_time = 4 * 60000;
478 alarm2.js_alarm->period_in_minutes.reset(new double(4)); 473 alarm2.js_alarm->period_in_minutes.reset(new double(4));
479 alarm_manager_->AddAlarmImpl(extension_->id(), alarm2); 474 alarm_manager_->AddAlarmImpl(extension_->id(), alarm2);
480 Alarm alarm3; 475 Alarm alarm3;
481 alarm3.js_alarm->name = "ccc"; 476 alarm3.js_alarm->name = "ccc";
482 alarm3.js_alarm->scheduled_time = 25 * 60000; 477 alarm3.js_alarm->scheduled_time = 25 * 60000;
483 alarm3.js_alarm->period_in_minutes.reset(new double(25)); 478 alarm3.js_alarm->period_in_minutes.reset(new double(25));
484 alarm_manager_->AddAlarmImpl(extension_->id(), alarm3); 479 alarm_manager_->AddAlarmImpl(extension_->id(), alarm3);
485 MessageLoop::current()->Run(); 480 MessageLoop::current()->Run();
486 EXPECT_EQ(alarm_manager_->last_poll_time_ + base::TimeDelta::FromMinutes(4), 481 EXPECT_EQ(alarm_manager_->last_poll_time_ + base::TimeDelta::FromMinutes(4),
487 alarm_manager_->next_poll_time_); 482 alarm_manager_->next_poll_time_);
488 alarm_manager_->RemoveAllAlarms(extension_->id()); 483 alarm_manager_->RemoveAllAlarms(extension_->id());
489 } 484 }
490 } 485 }
491 486
492 TEST_F(ExtensionAlarmsSchedulingTest, ReleasedExtensionPollsInfrequently) { 487 TEST_F(ExtensionAlarmsSchedulingTest, ReleasedExtensionPollsInfrequently) {
493 extension_ = utils::CreateEmptyExtensionWithLocation( 488 extension_ = utils::CreateEmptyExtensionWithLocation(
494 extensions::Manifest::INTERNAL); 489 extensions::Manifest::INTERNAL);
495 current_time_ = base::Time::FromJsTime(300000); 490 test_clock_.SetNow(base::Time::FromJsTime(300000));
496 CreateAlarm("[\"a\", {\"when\": 300010}]"); 491 CreateAlarm("[\"a\", {\"when\": 300010}]");
497 CreateAlarm("[\"b\", {\"when\": 340000}]"); 492 CreateAlarm("[\"b\", {\"when\": 340000}]");
498 493
499 // On startup (when there's no "last poll"), we let alarms fire as 494 // On startup (when there's no "last poll"), we let alarms fire as
500 // soon as they're scheduled. 495 // soon as they're scheduled.
501 EXPECT_DOUBLE_EQ(300010, alarm_manager_->next_poll_time_.ToJsTime()); 496 EXPECT_DOUBLE_EQ(300010, alarm_manager_->next_poll_time_.ToJsTime());
502 497
503 alarm_manager_->last_poll_time_ = base::Time::FromJsTime(290000); 498 alarm_manager_->last_poll_time_ = base::Time::FromJsTime(290000);
504 // In released extensions, we set the granularity to at least 5 499 // In released extensions, we set the granularity to at least 5
505 // minutes, which makes AddAlarm schedule the next poll after the 500 // minutes, which makes AddAlarm schedule the next poll after the
(...skipping 10 matching lines...) Expand all
516 EXPECT_TRUE(alarm_manager_->timer_.IsRunning()); 511 EXPECT_TRUE(alarm_manager_->timer_.IsRunning());
517 MessageLoop::current()->Run(); 512 MessageLoop::current()->Run();
518 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); 513 EXPECT_FALSE(alarm_manager_->timer_.IsRunning());
519 CreateAlarm("[\"bb\", {\"delayInMinutes\": 10}]"); 514 CreateAlarm("[\"bb\", {\"delayInMinutes\": 10}]");
520 EXPECT_TRUE(alarm_manager_->timer_.IsRunning()); 515 EXPECT_TRUE(alarm_manager_->timer_.IsRunning());
521 alarm_manager_->RemoveAllAlarms(extension_->id()); 516 alarm_manager_->RemoveAllAlarms(extension_->id());
522 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); 517 EXPECT_FALSE(alarm_manager_->timer_.IsRunning());
523 } 518 }
524 519
525 } // namespace extensions 520 } // namespace extensions
OLDNEW
« no previous file with comments | « chrome/browser/extensions/api/alarms/alarms_api.cc ('k') | chrome/browser/extensions/extension_system.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698