| OLD | NEW |
| 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 <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include "base/json/json_reader.h" | 9 #include "base/json/json_reader.h" |
| 10 #include "base/run_loop.h" |
| 10 #include "base/test/simple_test_clock.h" | 11 #include "base/test/simple_test_clock.h" |
| 11 #include "base/values.h" | 12 #include "base/values.h" |
| 12 #include "content/public/browser/web_contents.h" | 13 #include "content/public/browser/web_contents.h" |
| 13 #include "content/public/test/mock_render_process_host.h" | 14 #include "content/public/test/mock_render_process_host.h" |
| 14 #include "extensions/browser/api/alarms/alarm_manager.h" | 15 #include "extensions/browser/api/alarms/alarm_manager.h" |
| 15 #include "extensions/browser/api/alarms/alarms_api.h" | 16 #include "extensions/browser/api/alarms/alarms_api.h" |
| 16 #include "extensions/browser/api/alarms/alarms_api_constants.h" | 17 #include "extensions/browser/api/alarms/alarms_api_constants.h" |
| 17 #include "extensions/browser/api_test_utils.h" | 18 #include "extensions/browser/api_test_utils.h" |
| 18 #include "extensions/browser/api_unittest.h" | 19 #include "extensions/browser/api_unittest.h" |
| 19 #include "extensions/common/extension_messages.h" | 20 #include "extensions/common/extension_messages.h" |
| (...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 119 | 120 |
| 120 void ExtensionAlarmsTestGetAlarmCallback(ExtensionAlarmsTest* test, | 121 void ExtensionAlarmsTestGetAlarmCallback(ExtensionAlarmsTest* test, |
| 121 Alarm* alarm) { | 122 Alarm* alarm) { |
| 122 ASSERT_TRUE(alarm); | 123 ASSERT_TRUE(alarm); |
| 123 EXPECT_EQ("", alarm->js_alarm->name); | 124 EXPECT_EQ("", alarm->js_alarm->name); |
| 124 EXPECT_DOUBLE_EQ(10000, alarm->js_alarm->scheduled_time); | 125 EXPECT_DOUBLE_EQ(10000, alarm->js_alarm->scheduled_time); |
| 125 EXPECT_FALSE(alarm->js_alarm->period_in_minutes.get()); | 126 EXPECT_FALSE(alarm->js_alarm->period_in_minutes.get()); |
| 126 | 127 |
| 127 // Now wait for the alarm to fire. Our test delegate will quit the | 128 // Now wait for the alarm to fire. Our test delegate will quit the |
| 128 // MessageLoop when that happens. | 129 // MessageLoop when that happens. |
| 129 base::MessageLoop::current()->Run(); | 130 base::RunLoop().Run(); |
| 130 | 131 |
| 131 ASSERT_EQ(1u, test->alarm_delegate_->alarms_seen.size()); | 132 ASSERT_EQ(1u, test->alarm_delegate_->alarms_seen.size()); |
| 132 EXPECT_EQ("", test->alarm_delegate_->alarms_seen[0]); | 133 EXPECT_EQ("", test->alarm_delegate_->alarms_seen[0]); |
| 133 | 134 |
| 134 // Ensure the alarm is gone. | 135 // Ensure the alarm is gone. |
| 135 test->alarm_manager_->GetAllAlarms( | 136 test->alarm_manager_->GetAllAlarms( |
| 136 test->extension()->id(), | 137 test->extension()->id(), |
| 137 base::Bind(ExtensionAlarmsTestGetAllAlarmsCallback)); | 138 base::Bind(ExtensionAlarmsTestGetAllAlarmsCallback)); |
| 138 } | 139 } |
| 139 | 140 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 152 Alarm* alarm) { | 153 Alarm* alarm) { |
| 153 ASSERT_TRUE(alarm); | 154 ASSERT_TRUE(alarm); |
| 154 EXPECT_EQ("", alarm->js_alarm->name); | 155 EXPECT_EQ("", alarm->js_alarm->name); |
| 155 EXPECT_DOUBLE_EQ(10060, alarm->js_alarm->scheduled_time); | 156 EXPECT_DOUBLE_EQ(10060, alarm->js_alarm->scheduled_time); |
| 156 EXPECT_THAT(alarm->js_alarm->period_in_minutes, | 157 EXPECT_THAT(alarm->js_alarm->period_in_minutes, |
| 157 testing::Pointee(testing::DoubleEq(0.001))); | 158 testing::Pointee(testing::DoubleEq(0.001))); |
| 158 | 159 |
| 159 test->test_clock_->Advance(base::TimeDelta::FromSeconds(1)); | 160 test->test_clock_->Advance(base::TimeDelta::FromSeconds(1)); |
| 160 // Now wait for the alarm to fire. Our test delegate will quit the | 161 // Now wait for the alarm to fire. Our test delegate will quit the |
| 161 // MessageLoop when that happens. | 162 // MessageLoop when that happens. |
| 162 base::MessageLoop::current()->Run(); | 163 base::RunLoop().Run(); |
| 163 | 164 |
| 164 test->test_clock_->Advance(base::TimeDelta::FromSeconds(1)); | 165 test->test_clock_->Advance(base::TimeDelta::FromSeconds(1)); |
| 165 // Wait again, and ensure the alarm fires again. | 166 // Wait again, and ensure the alarm fires again. |
| 166 RunScheduleNextPoll(test->alarm_manager_); | 167 RunScheduleNextPoll(test->alarm_manager_); |
| 167 base::MessageLoop::current()->Run(); | 168 base::RunLoop().Run(); |
| 168 | 169 |
| 169 ASSERT_EQ(2u, test->alarm_delegate_->alarms_seen.size()); | 170 ASSERT_EQ(2u, test->alarm_delegate_->alarms_seen.size()); |
| 170 EXPECT_EQ("", test->alarm_delegate_->alarms_seen[0]); | 171 EXPECT_EQ("", test->alarm_delegate_->alarms_seen[0]); |
| 171 } | 172 } |
| 172 | 173 |
| 173 TEST_F(ExtensionAlarmsTest, CreateRepeating) { | 174 TEST_F(ExtensionAlarmsTest, CreateRepeating) { |
| 174 test_clock_->SetNow(base::Time::FromDoubleT(10)); | 175 test_clock_->SetNow(base::Time::FromDoubleT(10)); |
| 175 | 176 |
| 176 // Create 1 repeating alarm. | 177 // Create 1 repeating alarm. |
| 177 CreateAlarm("[null, {\"periodInMinutes\": 0.001}]"); | 178 CreateAlarm("[null, {\"periodInMinutes\": 0.001}]"); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 194 ExtensionAlarmsTest* test, | 195 ExtensionAlarmsTest* test, |
| 195 Alarm* alarm) { | 196 Alarm* alarm) { |
| 196 ASSERT_TRUE(alarm); | 197 ASSERT_TRUE(alarm); |
| 197 EXPECT_EQ("", alarm->js_alarm->name); | 198 EXPECT_EQ("", alarm->js_alarm->name); |
| 198 EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time); | 199 EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time); |
| 199 EXPECT_THAT(alarm->js_alarm->period_in_minutes, testing::IsNull()); | 200 EXPECT_THAT(alarm->js_alarm->period_in_minutes, testing::IsNull()); |
| 200 | 201 |
| 201 test->test_clock_->SetNow(base::Time::FromDoubleT(10.1)); | 202 test->test_clock_->SetNow(base::Time::FromDoubleT(10.1)); |
| 202 // Now wait for the alarm to fire. Our test delegate will quit the | 203 // Now wait for the alarm to fire. Our test delegate will quit the |
| 203 // MessageLoop when that happens. | 204 // MessageLoop when that happens. |
| 204 base::MessageLoop::current()->Run(); | 205 base::RunLoop().Run(); |
| 205 | 206 |
| 206 test->alarm_manager_->GetAlarm( | 207 test->alarm_manager_->GetAlarm( |
| 207 test->extension()->id(), std::string(), | 208 test->extension()->id(), std::string(), |
| 208 base::Bind(ExtensionAlarmsTestCreateAbsoluteGetAlarm2Callback, test)); | 209 base::Bind(ExtensionAlarmsTestCreateAbsoluteGetAlarm2Callback, test)); |
| 209 } | 210 } |
| 210 | 211 |
| 211 TEST_F(ExtensionAlarmsTest, CreateAbsolute) { | 212 TEST_F(ExtensionAlarmsTest, CreateAbsolute) { |
| 212 test_clock_->SetNow(base::Time::FromDoubleT(9.99)); | 213 test_clock_->SetNow(base::Time::FromDoubleT(9.99)); |
| 213 CreateAlarm("[null, {\"when\": 10001}]"); | 214 CreateAlarm("[null, {\"when\": 10001}]"); |
| 214 | 215 |
| 215 alarm_manager_->GetAlarm( | 216 alarm_manager_->GetAlarm( |
| 216 extension()->id(), std::string(), | 217 extension()->id(), std::string(), |
| 217 base::Bind(ExtensionAlarmsTestCreateAbsoluteGetAlarm1Callback, this)); | 218 base::Bind(ExtensionAlarmsTestCreateAbsoluteGetAlarm1Callback, this)); |
| 218 } | 219 } |
| 219 | 220 |
| 220 void ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm3Callback( | 221 void ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm3Callback( |
| 221 ExtensionAlarmsTest* test, | 222 ExtensionAlarmsTest* test, |
| 222 Alarm* alarm) { | 223 Alarm* alarm) { |
| 223 ASSERT_TRUE(alarm); | 224 ASSERT_TRUE(alarm); |
| 224 EXPECT_THAT(test->alarm_delegate_->alarms_seen, testing::ElementsAre("", "")); | 225 EXPECT_THAT(test->alarm_delegate_->alarms_seen, testing::ElementsAre("", "")); |
| 225 } | 226 } |
| 226 | 227 |
| 227 void ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm2Callback( | 228 void ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm2Callback( |
| 228 ExtensionAlarmsTest* test, | 229 ExtensionAlarmsTest* test, |
| 229 Alarm* alarm) { | 230 Alarm* alarm) { |
| 230 ASSERT_TRUE(alarm); | 231 ASSERT_TRUE(alarm); |
| 231 EXPECT_THAT(test->alarm_delegate_->alarms_seen, testing::ElementsAre("")); | 232 EXPECT_THAT(test->alarm_delegate_->alarms_seen, testing::ElementsAre("")); |
| 232 | 233 |
| 233 test->test_clock_->SetNow(base::Time::FromDoubleT(10.7)); | 234 test->test_clock_->SetNow(base::Time::FromDoubleT(10.7)); |
| 234 base::MessageLoop::current()->Run(); | 235 base::RunLoop().Run(); |
| 235 | 236 |
| 236 test->alarm_manager_->GetAlarm( | 237 test->alarm_manager_->GetAlarm( |
| 237 test->extension()->id(), std::string(), | 238 test->extension()->id(), std::string(), |
| 238 base::Bind( | 239 base::Bind( |
| 239 ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm3Callback, | 240 ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm3Callback, |
| 240 test)); | 241 test)); |
| 241 } | 242 } |
| 242 | 243 |
| 243 void ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm1Callback( | 244 void ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm1Callback( |
| 244 ExtensionAlarmsTest* test, | 245 ExtensionAlarmsTest* test, |
| 245 Alarm* alarm) { | 246 Alarm* alarm) { |
| 246 ASSERT_TRUE(alarm); | 247 ASSERT_TRUE(alarm); |
| 247 EXPECT_EQ("", alarm->js_alarm->name); | 248 EXPECT_EQ("", alarm->js_alarm->name); |
| 248 EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time); | 249 EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time); |
| 249 EXPECT_THAT(alarm->js_alarm->period_in_minutes, | 250 EXPECT_THAT(alarm->js_alarm->period_in_minutes, |
| 250 testing::Pointee(testing::DoubleEq(0.001))); | 251 testing::Pointee(testing::DoubleEq(0.001))); |
| 251 | 252 |
| 252 test->test_clock_->SetNow(base::Time::FromDoubleT(10.1)); | 253 test->test_clock_->SetNow(base::Time::FromDoubleT(10.1)); |
| 253 // Now wait for the alarm to fire. Our test delegate will quit the | 254 // Now wait for the alarm to fire. Our test delegate will quit the |
| 254 // MessageLoop when that happens. | 255 // MessageLoop when that happens. |
| 255 base::MessageLoop::current()->Run(); | 256 base::RunLoop().Run(); |
| 256 | 257 |
| 257 test->alarm_manager_->GetAlarm( | 258 test->alarm_manager_->GetAlarm( |
| 258 test->extension()->id(), std::string(), | 259 test->extension()->id(), std::string(), |
| 259 base::Bind( | 260 base::Bind( |
| 260 ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm2Callback, | 261 ExtensionAlarmsTestCreateRepeatingWithQuickFirstCallGetAlarm2Callback, |
| 261 test)); | 262 test)); |
| 262 } | 263 } |
| 263 | 264 |
| 264 TEST_F(ExtensionAlarmsTest, CreateRepeatingWithQuickFirstCall) { | 265 TEST_F(ExtensionAlarmsTest, CreateRepeatingWithQuickFirstCall) { |
| 265 test_clock_->SetNow(base::Time::FromDoubleT(9.99)); | 266 test_clock_->SetNow(base::Time::FromDoubleT(9.99)); |
| (...skipping 135 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 401 const AlarmManager::AlarmList* alarms) { | 402 const AlarmManager::AlarmList* alarms) { |
| 402 ASSERT_TRUE(alarms); | 403 ASSERT_TRUE(alarms); |
| 403 EXPECT_EQ(1u, alarms->size()); | 404 EXPECT_EQ(1u, alarms->size()); |
| 404 EXPECT_THAT((*alarms)[0]->js_alarm->period_in_minutes, | 405 EXPECT_THAT((*alarms)[0]->js_alarm->period_in_minutes, |
| 405 testing::Pointee(0.001)); | 406 testing::Pointee(0.001)); |
| 406 | 407 |
| 407 // Now wait for the alarms to fire, and ensure the cancelled alarms don't | 408 // Now wait for the alarms to fire, and ensure the cancelled alarms don't |
| 408 // fire. | 409 // fire. |
| 409 test->test_clock_->Advance(base::TimeDelta::FromMilliseconds(60)); | 410 test->test_clock_->Advance(base::TimeDelta::FromMilliseconds(60)); |
| 410 RunScheduleNextPoll(test->alarm_manager_); | 411 RunScheduleNextPoll(test->alarm_manager_); |
| 411 base::MessageLoop::current()->Run(); | 412 base::RunLoop().Run(); |
| 412 | 413 |
| 413 ASSERT_EQ(1u, test->alarm_delegate_->alarms_seen.size()); | 414 ASSERT_EQ(1u, test->alarm_delegate_->alarms_seen.size()); |
| 414 EXPECT_EQ("", test->alarm_delegate_->alarms_seen[0]); | 415 EXPECT_EQ("", test->alarm_delegate_->alarms_seen[0]); |
| 415 | 416 |
| 416 // Ensure the 0.001-minute alarm is still there, since it's repeating. | 417 // Ensure the 0.001-minute alarm is still there, since it's repeating. |
| 417 test->alarm_manager_->GetAllAlarms( | 418 test->alarm_manager_->GetAllAlarms( |
| 418 test->extension()->id(), | 419 test->extension()->id(), |
| 419 base::Bind(ExtensionAlarmsTestClearGetAllAlarms2Callback)); | 420 base::Bind(ExtensionAlarmsTestClearGetAllAlarms2Callback)); |
| 420 } | 421 } |
| 421 | 422 |
| (...skipping 123 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 545 VerifyScheduledTime("a"); | 546 VerifyScheduledTime("a"); |
| 546 RemoveAllAlarms(); | 547 RemoveAllAlarms(); |
| 547 } | 548 } |
| 548 { | 549 { |
| 549 test_clock_->SetNow(base::Time::FromDoubleT(3 * 60 + 1)); | 550 test_clock_->SetNow(base::Time::FromDoubleT(3 * 60 + 1)); |
| 550 std::unique_ptr<Alarm> alarm(new Alarm); | 551 std::unique_ptr<Alarm> alarm(new Alarm); |
| 551 alarm->js_alarm->name = "bb"; | 552 alarm->js_alarm->name = "bb"; |
| 552 alarm->js_alarm->scheduled_time = 3 * 60000; | 553 alarm->js_alarm->scheduled_time = 3 * 60000; |
| 553 alarm->js_alarm->period_in_minutes.reset(new double(3)); | 554 alarm->js_alarm->period_in_minutes.reset(new double(3)); |
| 554 alarm_manager_->AddAlarmImpl(extension()->id(), std::move(alarm)); | 555 alarm_manager_->AddAlarmImpl(extension()->id(), std::move(alarm)); |
| 555 base::MessageLoop::current()->Run(); | 556 base::RunLoop().Run(); |
| 556 EXPECT_EQ( | 557 EXPECT_EQ( |
| 557 base::Time::FromJsTime(3 * 60000) + base::TimeDelta::FromMinutes(3), | 558 base::Time::FromJsTime(3 * 60000) + base::TimeDelta::FromMinutes(3), |
| 558 alarm_manager_->next_poll_time_); | 559 alarm_manager_->next_poll_time_); |
| 559 RemoveAllAlarms(); | 560 RemoveAllAlarms(); |
| 560 } | 561 } |
| 561 { | 562 { |
| 562 test_clock_->SetNow(base::Time::FromDoubleT(4 * 60 + 1)); | 563 test_clock_->SetNow(base::Time::FromDoubleT(4 * 60 + 1)); |
| 563 CreateAlarm("[\"a\", {\"periodInMinutes\": 2}]"); | 564 CreateAlarm("[\"a\", {\"periodInMinutes\": 2}]"); |
| 564 RemoveAlarm("a"); | 565 RemoveAlarm("a"); |
| 565 std::unique_ptr<Alarm> alarm2(new Alarm); | 566 std::unique_ptr<Alarm> alarm2(new Alarm); |
| 566 alarm2->js_alarm->name = "bb"; | 567 alarm2->js_alarm->name = "bb"; |
| 567 alarm2->js_alarm->scheduled_time = 4 * 60000; | 568 alarm2->js_alarm->scheduled_time = 4 * 60000; |
| 568 alarm2->js_alarm->period_in_minutes.reset(new double(4)); | 569 alarm2->js_alarm->period_in_minutes.reset(new double(4)); |
| 569 alarm_manager_->AddAlarmImpl(extension()->id(), std::move(alarm2)); | 570 alarm_manager_->AddAlarmImpl(extension()->id(), std::move(alarm2)); |
| 570 std::unique_ptr<Alarm> alarm3(new Alarm); | 571 std::unique_ptr<Alarm> alarm3(new Alarm); |
| 571 alarm3->js_alarm->name = "ccc"; | 572 alarm3->js_alarm->name = "ccc"; |
| 572 alarm3->js_alarm->scheduled_time = 25 * 60000; | 573 alarm3->js_alarm->scheduled_time = 25 * 60000; |
| 573 alarm3->js_alarm->period_in_minutes.reset(new double(25)); | 574 alarm3->js_alarm->period_in_minutes.reset(new double(25)); |
| 574 alarm_manager_->AddAlarmImpl(extension()->id(), std::move(alarm3)); | 575 alarm_manager_->AddAlarmImpl(extension()->id(), std::move(alarm3)); |
| 575 base::MessageLoop::current()->Run(); | 576 base::RunLoop().Run(); |
| 576 EXPECT_EQ( | 577 EXPECT_EQ( |
| 577 base::Time::FromJsTime(4 * 60000) + base::TimeDelta::FromMinutes(4), | 578 base::Time::FromJsTime(4 * 60000) + base::TimeDelta::FromMinutes(4), |
| 578 alarm_manager_->next_poll_time_); | 579 alarm_manager_->next_poll_time_); |
| 579 RemoveAllAlarms(); | 580 RemoveAllAlarms(); |
| 580 } | 581 } |
| 581 } | 582 } |
| 582 | 583 |
| 583 TEST_F(ExtensionAlarmsSchedulingTest, ReleasedExtensionPollsInfrequently) { | 584 TEST_F(ExtensionAlarmsSchedulingTest, ReleasedExtensionPollsInfrequently) { |
| 584 set_extension( | 585 set_extension( |
| 585 utils::CreateEmptyExtensionWithLocation(extensions::Manifest::INTERNAL)); | 586 utils::CreateEmptyExtensionWithLocation(extensions::Manifest::INTERNAL)); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 599 EXPECT_DOUBLE_EQ((alarm_manager_->last_poll_time_ + | 600 EXPECT_DOUBLE_EQ((alarm_manager_->last_poll_time_ + |
| 600 base::TimeDelta::FromMinutes(1)).ToJsTime(), | 601 base::TimeDelta::FromMinutes(1)).ToJsTime(), |
| 601 alarm_manager_->next_poll_time_.ToJsTime()); | 602 alarm_manager_->next_poll_time_.ToJsTime()); |
| 602 } | 603 } |
| 603 | 604 |
| 604 TEST_F(ExtensionAlarmsSchedulingTest, TimerRunning) { | 605 TEST_F(ExtensionAlarmsSchedulingTest, TimerRunning) { |
| 605 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); | 606 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); |
| 606 CreateAlarm("[\"a\", {\"delayInMinutes\": 0.001}]"); | 607 CreateAlarm("[\"a\", {\"delayInMinutes\": 0.001}]"); |
| 607 EXPECT_TRUE(alarm_manager_->timer_.IsRunning()); | 608 EXPECT_TRUE(alarm_manager_->timer_.IsRunning()); |
| 608 test_clock_->Advance(base::TimeDelta::FromMilliseconds(60)); | 609 test_clock_->Advance(base::TimeDelta::FromMilliseconds(60)); |
| 609 base::MessageLoop::current()->Run(); | 610 base::RunLoop().Run(); |
| 610 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); | 611 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); |
| 611 CreateAlarm("[\"bb\", {\"delayInMinutes\": 10}]"); | 612 CreateAlarm("[\"bb\", {\"delayInMinutes\": 10}]"); |
| 612 EXPECT_TRUE(alarm_manager_->timer_.IsRunning()); | 613 EXPECT_TRUE(alarm_manager_->timer_.IsRunning()); |
| 613 RemoveAllAlarms(); | 614 RemoveAllAlarms(); |
| 614 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); | 615 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); |
| 615 } | 616 } |
| 616 | 617 |
| 617 TEST_F(ExtensionAlarmsSchedulingTest, MinimumGranularity) { | 618 TEST_F(ExtensionAlarmsSchedulingTest, MinimumGranularity) { |
| 618 set_extension( | 619 set_extension( |
| 619 utils::CreateEmptyExtensionWithLocation(extensions::Manifest::INTERNAL)); | 620 utils::CreateEmptyExtensionWithLocation(extensions::Manifest::INTERNAL)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 661 void FrequencyTestGetAlarmsCallback(ExtensionAlarmsTest* test, Alarm* alarm) { | 662 void FrequencyTestGetAlarmsCallback(ExtensionAlarmsTest* test, Alarm* alarm) { |
| 662 ASSERT_TRUE(alarm); | 663 ASSERT_TRUE(alarm); |
| 663 EXPECT_EQ("hello", alarm->js_alarm->name); | 664 EXPECT_EQ("hello", alarm->js_alarm->name); |
| 664 EXPECT_DOUBLE_EQ(10000, alarm->js_alarm->scheduled_time); | 665 EXPECT_DOUBLE_EQ(10000, alarm->js_alarm->scheduled_time); |
| 665 EXPECT_THAT(alarm->js_alarm->period_in_minutes, | 666 EXPECT_THAT(alarm->js_alarm->period_in_minutes, |
| 666 testing::Pointee(testing::DoubleEq(0.0001))); | 667 testing::Pointee(testing::DoubleEq(0.0001))); |
| 667 | 668 |
| 668 test->test_clock_->Advance(base::TimeDelta::FromMilliseconds(10)); | 669 test->test_clock_->Advance(base::TimeDelta::FromMilliseconds(10)); |
| 669 // Now wait for the alarm to fire. Our test delegate will quit the | 670 // Now wait for the alarm to fire. Our test delegate will quit the |
| 670 // MessageLoop when that happens. | 671 // MessageLoop when that happens. |
| 671 base::MessageLoop::current()->Run(); | 672 base::RunLoop().Run(); |
| 672 } | 673 } |
| 673 | 674 |
| 674 // Tests that alarms with very small period written to storage are also | 675 // Tests that alarms with very small period written to storage are also |
| 675 // subjected to minimum polling interval. | 676 // subjected to minimum polling interval. |
| 676 // Regression test for https://crbug.com/618540. | 677 // Regression test for https://crbug.com/618540. |
| 677 TEST_F(ExtensionAlarmsSchedulingTest, PollFrequencyFromStoredAlarm) { | 678 TEST_F(ExtensionAlarmsSchedulingTest, PollFrequencyFromStoredAlarm) { |
| 678 struct { | 679 struct { |
| 679 bool is_unpacked; | 680 bool is_unpacked; |
| 680 double delay_minimum; | 681 double delay_minimum; |
| 681 } test_data[] = { | 682 } test_data[] = { |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 753 | 754 |
| 754 // The next poll should be the first poll that hasn't happened and is in-line | 755 // The next poll should be the first poll that hasn't happened and is in-line |
| 755 // with the original scheduling. | 756 // with the original scheduling. |
| 756 // Last poll was at 380 seconds; next poll should be at 480 seconds. | 757 // Last poll was at 380 seconds; next poll should be at 480 seconds. |
| 757 EXPECT_DOUBLE_EQ((alarm_manager_->last_poll_time_ + | 758 EXPECT_DOUBLE_EQ((alarm_manager_->last_poll_time_ + |
| 758 base::TimeDelta::FromSeconds(100)).ToJsTime(), | 759 base::TimeDelta::FromSeconds(100)).ToJsTime(), |
| 759 alarm_manager_->next_poll_time_.ToJsTime()); | 760 alarm_manager_->next_poll_time_.ToJsTime()); |
| 760 } | 761 } |
| 761 | 762 |
| 762 } // namespace extensions | 763 } // namespace extensions |
| OLD | NEW |