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

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

Issue 23205008: Fix a bug where the minimum granular time for Alarms was not calculated properly. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Unit tests. Created 7 years, 4 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"
(...skipping 557 matching lines...) Expand 10 before | Expand all | Expand 10 after
568 extensions::Manifest::INTERNAL); 568 extensions::Manifest::INTERNAL);
569 test_clock_->SetNow(base::Time::FromJsTime(300000)); 569 test_clock_->SetNow(base::Time::FromJsTime(300000));
570 CreateAlarm("[\"a\", {\"when\": 300010}]"); 570 CreateAlarm("[\"a\", {\"when\": 300010}]");
571 CreateAlarm("[\"b\", {\"when\": 340000}]"); 571 CreateAlarm("[\"b\", {\"when\": 340000}]");
572 572
573 // On startup (when there's no "last poll"), we let alarms fire as 573 // On startup (when there's no "last poll"), we let alarms fire as
574 // soon as they're scheduled. 574 // soon as they're scheduled.
575 EXPECT_DOUBLE_EQ(300010, alarm_manager_->test_next_poll_time_.ToJsTime()); 575 EXPECT_DOUBLE_EQ(300010, alarm_manager_->test_next_poll_time_.ToJsTime());
576 576
577 alarm_manager_->last_poll_time_ = base::Time::FromJsTime(290000); 577 alarm_manager_->last_poll_time_ = base::Time::FromJsTime(290000);
578 // In released extensions, we set the granularity to at least 5 578 // In released extensions, we set the granularity to at least 1
579 // minutes, which makes AddAlarm schedule the next poll after the 579 // minute, which makes AddAlarm schedule the next poll after the
580 // extension requested. 580 // extension requested.
581 alarm_manager_->ScheduleNextPoll(); 581 alarm_manager_->ScheduleNextPoll();
582 EXPECT_DOUBLE_EQ((alarm_manager_->last_poll_time_ + 582 EXPECT_DOUBLE_EQ((alarm_manager_->last_poll_time_ +
583 base::TimeDelta::FromMinutes(1)).ToJsTime(), 583 base::TimeDelta::FromMinutes(1)).ToJsTime(),
584 alarm_manager_->test_next_poll_time_.ToJsTime()); 584 alarm_manager_->test_next_poll_time_.ToJsTime());
585 } 585 }
586 586
587 TEST_F(ExtensionAlarmsSchedulingTest, TimerRunning) { 587 TEST_F(ExtensionAlarmsSchedulingTest, TimerRunning) {
588 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); 588 EXPECT_FALSE(alarm_manager_->timer_.IsRunning());
589 CreateAlarm("[\"a\", {\"delayInMinutes\": 0.001}]"); 589 CreateAlarm("[\"a\", {\"delayInMinutes\": 0.001}]");
590 EXPECT_TRUE(alarm_manager_->timer_.IsRunning()); 590 EXPECT_TRUE(alarm_manager_->timer_.IsRunning());
591 test_clock_->Advance(base::TimeDelta::FromMilliseconds(60)); 591 test_clock_->Advance(base::TimeDelta::FromMilliseconds(60));
592 base::MessageLoop::current()->Run(); 592 base::MessageLoop::current()->Run();
593 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); 593 EXPECT_FALSE(alarm_manager_->timer_.IsRunning());
594 CreateAlarm("[\"bb\", {\"delayInMinutes\": 10}]"); 594 CreateAlarm("[\"bb\", {\"delayInMinutes\": 10}]");
595 EXPECT_TRUE(alarm_manager_->timer_.IsRunning()); 595 EXPECT_TRUE(alarm_manager_->timer_.IsRunning());
596 RemoveAllAlarms(); 596 RemoveAllAlarms();
597 EXPECT_FALSE(alarm_manager_->timer_.IsRunning()); 597 EXPECT_FALSE(alarm_manager_->timer_.IsRunning());
598 } 598 }
599 599
600 TEST_F(ExtensionAlarmsSchedulingTest, MinimumGranularity) {
601 extension_ = utils::CreateEmptyExtensionWithLocation(
602 extensions::Manifest::INTERNAL);
603 test_clock_->SetNow(base::Time::FromJsTime(0));
604 CreateAlarm("[\"a\", {\"periodInMinutes\": 2}]");
605 test_clock_->Advance(base::TimeDelta::FromSeconds(1));
606 CreateAlarm("[\"b\", {\"periodInMinutes\": 2}]");
607 test_clock_->Advance(base::TimeDelta::FromMinutes(2));
608
609 alarm_manager_->last_poll_time_ = base::Time::FromJsTime(2 * 60000);
610 // In released extensions, we set the granularity to at least 1
611 // minute, which makes scheduler set it to 1 minute, rather than
612 // 1 second later (when b is supposed to go off).
613 alarm_manager_->ScheduleNextPoll();
614 EXPECT_DOUBLE_EQ((alarm_manager_->last_poll_time_ +
615 base::TimeDelta::FromMinutes(1)).ToJsTime(),
616 alarm_manager_->test_next_poll_time_.ToJsTime());
617 }
618
600 } // namespace extensions 619 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698