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

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

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