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

Unified Diff: chrome/browser/extensions/api/alarms/alarms_api_unittest.cc

Issue 10545104: Refactor chrome.alarms interface to support absolute alarm deadlines. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merge with r141780 Created 8 years, 6 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/browser/extensions/api/alarms/alarms_api.cc ('k') | chrome/browser/extensions/extension_system.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/extensions/api/alarms/alarms_api_unittest.cc
diff --git a/chrome/browser/extensions/api/alarms/alarms_api_unittest.cc b/chrome/browser/extensions/api/alarms/alarms_api_unittest.cc
index 1bc3b06efde9ffc876e45e0ceeb7912ae0b25554..51409fd6bde4eed7c3c5425f8122ee5c36080ca1 100644
--- a/chrome/browser/extensions/api/alarms/alarms_api_unittest.cc
+++ b/chrome/browser/extensions/api/alarms/alarms_api_unittest.cc
@@ -5,6 +5,7 @@
// This file tests the chrome.alarms extension API.
#include "base/values.h"
+#include "base/test/mock_time_provider.h"
#include "chrome/browser/browser_process_impl.h"
#include "chrome/browser/extensions/api/alarms/alarm_manager.h"
#include "chrome/browser/extensions/api/alarms/alarms_api.h"
@@ -13,8 +14,11 @@
#include "chrome/browser/profiles/profile_manager.h"
#include "chrome/test/base/browser_with_test_window_test.h"
#include "chrome/test/base/testing_browser_process.h"
+#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+typedef extensions::api::alarms::Alarm JsAlarm;
+
namespace utils = extension_function_test_utils;
namespace extensions {
@@ -26,8 +30,8 @@ class AlarmDelegate : public AlarmManager::Delegate {
public:
virtual ~AlarmDelegate() {}
virtual void OnAlarm(const std::string& extension_id,
- const AlarmManager::Alarm& alarm) {
- alarms_seen.push_back(alarm.name);
+ const Alarm& alarm) {
+ alarms_seen.push_back(alarm.js_alarm->name);
MessageLoop::current()->Quit();
}
@@ -43,7 +47,7 @@ class ExtensionAlarmsTest : public BrowserWithTestWindowTest {
TestExtensionSystem* system = static_cast<TestExtensionSystem*>(
ExtensionSystem::Get(browser()->profile()));
- system->CreateAlarmManager();
+ system->CreateAlarmManager(&base::MockTimeProvider::StaticNow);
alarm_manager_ = system->alarm_manager();
alarm_delegate_ = new AlarmDelegate();
@@ -51,6 +55,10 @@ class ExtensionAlarmsTest : public BrowserWithTestWindowTest {
extension_ = utils::CreateEmptyExtensionWithLocation(
extensions::Extension::LOAD);
+
+ current_time_ = base::Time::FromDoubleT(10);
+ ON_CALL(mock_time_, Now())
+ .WillByDefault(testing::ReturnPointee(&current_time_));
}
base::Value* RunFunctionWithExtension(
@@ -82,18 +90,23 @@ class ExtensionAlarmsTest : public BrowserWithTestWindowTest {
return utils::RunFunctionAndReturnError(function, args, browser());
}
+ void CreateAlarm(const std::string& args) {
+ RunFunction(new AlarmsCreateFunction(&base::MockTimeProvider::StaticNow),
+ args);
+ }
+
// Takes a JSON result from a function and converts it to a vector of
- // Alarms.
- AlarmManager::AlarmList ToAlarmList(base::ListValue* value) {
- AlarmManager::AlarmList list;
+ // JsAlarms.
+ std::vector<linked_ptr<JsAlarm> > ToAlarmList(base::ListValue* value) {
+ std::vector<linked_ptr<JsAlarm> > list;
for (size_t i = 0; i < value->GetSize(); ++i) {
- linked_ptr<AlarmManager::Alarm> alarm(new AlarmManager::Alarm);
+ linked_ptr<JsAlarm> alarm(new JsAlarm);
base::DictionaryValue* alarm_value;
if (!value->GetDictionary(i, &alarm_value)) {
ADD_FAILURE() << "Expected a list of Alarm objects.";
return list;
}
- EXPECT_TRUE(AlarmManager::Alarm::Populate(*alarm_value, alarm.get()));
+ EXPECT_TRUE(JsAlarm::Populate(*alarm_value, alarm.get()));
list.push_back(alarm);
}
return list;
@@ -104,33 +117,37 @@ class ExtensionAlarmsTest : public BrowserWithTestWindowTest {
CHECK(num_alarms <= 3);
const char* kCreateArgs[] = {
- "[null, {\"delayInMinutes\": 0.001, \"repeating\": true}]",
- "[\"7\", {\"delayInMinutes\": 7, \"repeating\": true}]",
- "[\"0\", {\"delayInMinutes\": 0}]"
+ "[null, {\"periodInMinutes\": 0.001}]",
+ "[\"7\", {\"periodInMinutes\": 7}]",
+ "[\"0\", {\"delayInMinutes\": 0}]",
};
for (size_t i = 0; i < num_alarms; ++i) {
scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict(
- new AlarmsCreateFunction(), kCreateArgs[i]));
+ new AlarmsCreateFunction(&base::MockTimeProvider::StaticNow),
+ kCreateArgs[i]));
EXPECT_FALSE(result.get());
}
}
protected:
+ base::Time current_time_;
+ testing::NiceMock<base::MockTimeProvider> mock_time_;
AlarmManager* alarm_manager_;
AlarmDelegate* alarm_delegate_;
scoped_refptr<extensions::Extension> extension_;
};
TEST_F(ExtensionAlarmsTest, Create) {
+ current_time_ = base::Time::FromDoubleT(10);
// Create 1 non-repeating alarm.
- RunFunction(new AlarmsCreateFunction(), "[null, {\"delayInMinutes\": 0}]");
+ CreateAlarm("[null, {\"delayInMinutes\": 0}]");
- const AlarmManager::Alarm* alarm =
+ const Alarm* alarm =
alarm_manager_->GetAlarm(extension_->id(), "");
ASSERT_TRUE(alarm);
- EXPECT_EQ("", alarm->name);
- EXPECT_EQ(0, alarm->delay_in_minutes);
- EXPECT_FALSE(alarm->repeating);
+ EXPECT_EQ("", alarm->js_alarm->name);
+ EXPECT_DOUBLE_EQ(10000, alarm->js_alarm->scheduled_time);
+ EXPECT_FALSE(alarm->js_alarm->period_in_minutes.get());
// Now wait for the alarm to fire. Our test delegate will quit the
// MessageLoop when that happens.
@@ -148,21 +165,25 @@ TEST_F(ExtensionAlarmsTest, Create) {
}
TEST_F(ExtensionAlarmsTest, CreateRepeating) {
+ current_time_ = base::Time::FromDoubleT(10);
+
// Create 1 repeating alarm.
- RunFunction(new AlarmsCreateFunction(),
- "[null, {\"delayInMinutes\": 0.001, \"repeating\": true}]");
+ CreateAlarm("[null, {\"periodInMinutes\": 0.001}]");
- const AlarmManager::Alarm* alarm =
+ const Alarm* alarm =
alarm_manager_->GetAlarm(extension_->id(), "");
ASSERT_TRUE(alarm);
- EXPECT_EQ("", alarm->name);
- EXPECT_EQ(0.001, alarm->delay_in_minutes);
- EXPECT_TRUE(alarm->repeating);
+ EXPECT_EQ("", alarm->js_alarm->name);
+ EXPECT_DOUBLE_EQ(10060, alarm->js_alarm->scheduled_time);
+ EXPECT_THAT(alarm->js_alarm->period_in_minutes,
+ testing::Pointee(testing::DoubleEq(0.001)));
+ current_time_ += base::TimeDelta::FromSeconds(1);
// Now wait for the alarm to fire. Our test delegate will quit the
// MessageLoop when that happens.
MessageLoop::current()->Run();
+ current_time_ += base::TimeDelta::FromSeconds(1);
// Wait again, and ensure the alarm fires again.
alarm_manager_->ScheduleNextPoll(base::TimeDelta::FromSeconds(0));
MessageLoop::current()->Run();
@@ -171,53 +192,109 @@ TEST_F(ExtensionAlarmsTest, CreateRepeating) {
EXPECT_EQ("", alarm_delegate_->alarms_seen[0]);
}
+TEST_F(ExtensionAlarmsTest, CreateAbsolute) {
+ current_time_ = base::Time::FromDoubleT(9.99);
+ CreateAlarm("[null, {\"when\": 10001}]");
+
+ const Alarm* alarm =
+ alarm_manager_->GetAlarm(extension_->id(), "");
+ ASSERT_TRUE(alarm);
+ EXPECT_EQ("", alarm->js_alarm->name);
+ EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time);
+ EXPECT_THAT(alarm->js_alarm->period_in_minutes,
+ testing::IsNull());
+
+ current_time_ = base::Time::FromDoubleT(10.1);
+ // Now wait for the alarm to fire. Our test delegate will quit the
+ // MessageLoop when that happens.
+ MessageLoop::current()->Run();
+
+ ASSERT_FALSE(alarm_manager_->GetAlarm(extension_->id(), ""));
+
+ ASSERT_EQ(1u, alarm_delegate_->alarms_seen.size());
+ EXPECT_EQ("", alarm_delegate_->alarms_seen[0]);
+}
+
+TEST_F(ExtensionAlarmsTest, CreateRepeatingWithQuickFirstCall) {
+ current_time_ = base::Time::FromDoubleT(9.99);
+ CreateAlarm("[null, {\"when\": 10001, \"periodInMinutes\": 0.001}]");
+
+ const Alarm* alarm =
+ alarm_manager_->GetAlarm(extension_->id(), "");
+ ASSERT_TRUE(alarm);
+ EXPECT_EQ("", alarm->js_alarm->name);
+ EXPECT_DOUBLE_EQ(10001, alarm->js_alarm->scheduled_time);
+ EXPECT_THAT(alarm->js_alarm->period_in_minutes,
+ testing::Pointee(testing::DoubleEq(0.001)));
+
+ current_time_ = base::Time::FromDoubleT(10.1);
+ // Now wait for the alarm to fire. Our test delegate will quit the
+ // MessageLoop when that happens.
+ MessageLoop::current()->Run();
+
+ ASSERT_TRUE(alarm_manager_->GetAlarm(extension_->id(), ""));
+ EXPECT_THAT(alarm_delegate_->alarms_seen, testing::ElementsAre(""));
+
+ current_time_ = base::Time::FromDoubleT(10.7);
+ MessageLoop::current()->Run();
+
+ ASSERT_TRUE(alarm_manager_->GetAlarm(extension_->id(), ""));
+ EXPECT_THAT(alarm_delegate_->alarms_seen, testing::ElementsAre("", ""));
+}
+
TEST_F(ExtensionAlarmsTest, CreateDupe) {
+ current_time_ = base::Time::FromDoubleT(10);
+
// Create 2 duplicate alarms. The first should be overridden.
- RunFunction(new AlarmsCreateFunction(), "[\"dup\", {\"delayInMinutes\": 1}]");
- RunFunction(new AlarmsCreateFunction(), "[\"dup\", {\"delayInMinutes\": 7}]");
+ CreateAlarm("[\"dup\", {\"delayInMinutes\": 1}]");
+ CreateAlarm("[\"dup\", {\"delayInMinutes\": 7}]");
{
const AlarmManager::AlarmList* alarms =
alarm_manager_->GetAllAlarms(extension_->id());
ASSERT_TRUE(alarms);
EXPECT_EQ(1u, alarms->size());
- EXPECT_EQ(7, (*alarms)[0]->delay_in_minutes);
+ EXPECT_DOUBLE_EQ(430000, (*alarms)[0].js_alarm->scheduled_time);
}
}
TEST_F(ExtensionAlarmsTest, CreateDelayBelowMinimum) {
// Create an alarm with delay below the minimum accepted value.
- std::string error = RunFunctionAndReturnError(new AlarmsCreateFunction(),
+ std::string error = RunFunctionAndReturnError(
+ new AlarmsCreateFunction(&base::MockTimeProvider::StaticNow),
"[\"negative\", {\"delayInMinutes\": -0.2}]");
EXPECT_FALSE(error.empty());
}
TEST_F(ExtensionAlarmsTest, Get) {
+ current_time_ = base::Time::FromDoubleT(4);
+
// Create 2 alarms, and make sure we can query them.
CreateAlarms(2);
// Get the default one.
{
- AlarmManager::Alarm alarm;
+ JsAlarm alarm;
scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict(
new AlarmsGetFunction(), "[null]"));
ASSERT_TRUE(result.get());
- EXPECT_TRUE(AlarmManager::Alarm::Populate(*result, &alarm));
+ EXPECT_TRUE(JsAlarm::Populate(*result, &alarm));
EXPECT_EQ("", alarm.name);
- EXPECT_EQ(0.001, alarm.delay_in_minutes);
- EXPECT_TRUE(alarm.repeating);
+ EXPECT_DOUBLE_EQ(4060, alarm.scheduled_time);
+ EXPECT_THAT(alarm.period_in_minutes,
+ testing::Pointee(testing::DoubleEq(0.001)));
}
// Get "7".
{
- AlarmManager::Alarm alarm;
+ JsAlarm alarm;
scoped_ptr<base::DictionaryValue> result(RunFunctionAndReturnDict(
new AlarmsGetFunction(), "[\"7\"]"));
ASSERT_TRUE(result.get());
- EXPECT_TRUE(AlarmManager::Alarm::Populate(*result, &alarm));
+ EXPECT_TRUE(JsAlarm::Populate(*result, &alarm));
EXPECT_EQ("7", alarm.name);
- EXPECT_EQ(7, alarm.delay_in_minutes);
- EXPECT_TRUE(alarm.repeating);
+ EXPECT_EQ(424000, alarm.scheduled_time);
+ EXPECT_THAT(alarm.period_in_minutes, testing::Pointee(7));
}
// Get a non-existent one.
@@ -233,7 +310,7 @@ TEST_F(ExtensionAlarmsTest, GetAll) {
{
scoped_ptr<base::ListValue> result(RunFunctionAndReturnList(
new AlarmsGetAllFunction(), "[]"));
- AlarmManager::AlarmList alarms = ToAlarmList(result.get());
+ std::vector<linked_ptr<JsAlarm> > alarms = ToAlarmList(result.get());
EXPECT_EQ(0u, alarms.size());
}
@@ -243,16 +320,15 @@ TEST_F(ExtensionAlarmsTest, GetAll) {
{
scoped_ptr<base::ListValue> result(RunFunctionAndReturnList(
new AlarmsGetAllFunction(), "[null]"));
- AlarmManager::AlarmList alarms = ToAlarmList(result.get());
+ std::vector<linked_ptr<JsAlarm> > alarms = ToAlarmList(result.get());
EXPECT_EQ(2u, alarms.size());
// Test the "7" alarm.
- AlarmManager::Alarm* alarm = alarms[0].get();
+ JsAlarm* alarm = alarms[0].get();
if (alarm->name != "7")
alarm = alarms[1].get();
EXPECT_EQ("7", alarm->name);
- EXPECT_EQ(7, alarm->delay_in_minutes);
- EXPECT_TRUE(alarm->repeating);
+ EXPECT_THAT(alarm->period_in_minutes, testing::Pointee(7));
}
}
@@ -276,7 +352,8 @@ TEST_F(ExtensionAlarmsTest, Clear) {
alarm_manager_->GetAllAlarms(extension_->id());
ASSERT_TRUE(alarms);
EXPECT_EQ(1u, alarms->size());
- EXPECT_EQ(0.001, (*alarms)[0]->delay_in_minutes);
+ EXPECT_THAT((*alarms)[0].js_alarm->period_in_minutes,
+ testing::Pointee(0.001));
}
// Now wait for the alarms to fire, and ensure the cancelled alarms don't
@@ -293,7 +370,8 @@ TEST_F(ExtensionAlarmsTest, Clear) {
alarm_manager_->GetAllAlarms(extension_->id());
ASSERT_TRUE(alarms);
EXPECT_EQ(1u, alarms->size());
- EXPECT_EQ(0.001, (*alarms)[0]->delay_in_minutes);
+ EXPECT_THAT((*alarms)[0].js_alarm->period_in_minutes,
+ testing::Pointee(0.001));
}
}
@@ -327,70 +405,64 @@ class ExtensionAlarmsSchedulingTest : public ExtensionAlarmsTest {
public:
// Get the time that the alarm named is scheduled to run.
base::Time GetScheduledTime(const std::string& alarm_name) {
- const extensions::AlarmManager::Alarm* alarm =
+ const extensions::Alarm* alarm =
alarm_manager_->GetAlarm(extension_->id(), alarm_name);
CHECK(alarm);
- return alarm_manager_->scheduled_times_[alarm].time;
+ return base::Time::FromJsTime(alarm->js_alarm->scheduled_time);
}
};
TEST_F(ExtensionAlarmsSchedulingTest, PollScheduling) {
{
- RunFunction(new AlarmsCreateFunction(),
- "[\"a\", {\"delayInMinutes\": 6, \"repeating\": true}]");
- RunFunction(new AlarmsCreateFunction(),
- "[\"bb\", {\"delayInMinutes\": 8, \"repeating\": true}]");
+ CreateAlarm("[\"a\", {\"periodInMinutes\": 6}]");
+ CreateAlarm("[\"bb\", {\"periodInMinutes\": 8}]");
EXPECT_EQ(GetScheduledTime("a"), alarm_manager_->next_poll_time_);
alarm_manager_->RemoveAllAlarms(extension_->id());
}
{
- RunFunction(new AlarmsCreateFunction(),
- "[\"a\", {\"delayInMinutes\": 10}]");
- RunFunction(new AlarmsCreateFunction(),
- "[\"bb\", {\"delayInMinutes\": 21}]");
+ CreateAlarm("[\"a\", {\"delayInMinutes\": 10}]");
+ CreateAlarm("[\"bb\", {\"delayInMinutes\": 21}]");
EXPECT_EQ(GetScheduledTime("a"), alarm_manager_->next_poll_time_);
alarm_manager_->RemoveAllAlarms(extension_->id());
}
{
- RunFunction(new AlarmsCreateFunction(),
- "[\"a\", {\"delayInMinutes\": 10, \"repeating\": true}]");
- linked_ptr<AlarmManager::Alarm> alarm(new AlarmManager::Alarm());
- alarm->name = "bb";
- alarm->delay_in_minutes = 30;
- alarm->repeating = true;
- alarm_manager_->AddAlarmImpl(extension_->id(), alarm,
- base::TimeDelta::FromMinutes(3));
- EXPECT_EQ(GetScheduledTime("bb"), alarm_manager_->next_poll_time_);
+ current_time_ = base::Time::FromDoubleT(10);
+ CreateAlarm("[\"a\", {\"periodInMinutes\": 10}]");
+ Alarm alarm;
+ alarm.js_alarm->name = "bb";
+ alarm.js_alarm->scheduled_time = 30 * 60000;
+ alarm.js_alarm->period_in_minutes.reset(new double(30));
+ alarm_manager_->AddAlarmImpl(extension_->id(), alarm);
+ EXPECT_DOUBLE_EQ(GetScheduledTime("a").ToDoubleT(),
+ alarm_manager_->next_poll_time_.ToDoubleT());
alarm_manager_->RemoveAllAlarms(extension_->id());
}
{
- linked_ptr<AlarmManager::Alarm> alarm(new AlarmManager::Alarm());
- alarm->name = "bb";
- alarm->delay_in_minutes = 3;
- alarm->repeating = true;
- alarm_manager_->AddAlarmImpl(extension_->id(), alarm,
- base::TimeDelta::FromSeconds(0));
+ current_time_ = base::Time::FromDoubleT(3 * 60 + 1);
+ Alarm alarm;
+ alarm.js_alarm->name = "bb";
+ alarm.js_alarm->scheduled_time = 3 * 60000;
+ alarm.js_alarm->period_in_minutes.reset(new double(3));
+ alarm_manager_->AddAlarmImpl(extension_->id(), alarm);
MessageLoop::current()->Run();
EXPECT_EQ(alarm_manager_->last_poll_time_ + base::TimeDelta::FromMinutes(3),
alarm_manager_->next_poll_time_);
alarm_manager_->RemoveAllAlarms(extension_->id());
}
{
- RunFunction(new AlarmsCreateFunction(),
- "[\"a\", {\"delayInMinutes\": 2, \"repeating\": true}]");
+ current_time_ = base::Time::FromDoubleT(4 * 60 + 1);
+ CreateAlarm("[\"a\", {\"periodInMinutes\": 2}]");
alarm_manager_->RemoveAlarm(extension_->id(), "a");
- linked_ptr<AlarmManager::Alarm> alarm2(new AlarmManager::Alarm());
- alarm2->name = "bb";
- alarm2->delay_in_minutes = 4;
- alarm2->repeating = true;
- alarm_manager_->AddAlarmImpl(extension_->id(), alarm2,
- base::TimeDelta::FromMinutes(3));
- linked_ptr<AlarmManager::Alarm> alarm3(new AlarmManager::Alarm());
- alarm3->name = "ccc";
- alarm3->delay_in_minutes = 25;
- alarm3->repeating = true;
- alarm_manager_->AddAlarmImpl(extension_->id(), alarm3,
- base::TimeDelta::FromSeconds(0));
+ Alarm alarm2;
+ alarm2.js_alarm->name = "bb";
+ alarm2.js_alarm->scheduled_time = 4 * 60000;
+ alarm2.js_alarm->period_in_minutes.reset(new double(4));
+ alarm_manager_->AddAlarmImpl(extension_->id(), alarm2);
+ Alarm alarm3;
+ alarm3.js_alarm->name = "ccc";
+ alarm3.js_alarm->scheduled_time = 25 * 60000;
+ alarm3.js_alarm->period_in_minutes.reset(new double(25));
+ alarm_manager_->AddAlarmImpl(extension_->id(), alarm3);
MessageLoop::current()->Run();
EXPECT_EQ(alarm_manager_->last_poll_time_ + base::TimeDelta::FromMinutes(4),
alarm_manager_->next_poll_time_);
@@ -398,15 +470,31 @@ TEST_F(ExtensionAlarmsSchedulingTest, PollScheduling) {
}
}
+TEST_F(ExtensionAlarmsSchedulingTest, ReleasedExtensionPollsInfrequently) {
+ extension_ = utils::CreateEmptyExtensionWithLocation(
+ extensions::Extension::INTERNAL);
+ current_time_ = base::Time::FromJsTime(300000);
+ CreateAlarm("[\"a\", {\"when\": 300010}]");
+ CreateAlarm("[\"b\", {\"when\": 360000}]");
+
+ // In released extensions, we set the granularity to at least 5
+ // minutes, but AddAlarm schedules its next poll precisely.
+ EXPECT_DOUBLE_EQ(300010, alarm_manager_->next_poll_time_.ToJsTime());
+
+ // Run an iteration to see the effect of the granularity.
+ current_time_ = base::Time::FromJsTime(300020);
+ MessageLoop::current()->Run();
+ EXPECT_DOUBLE_EQ(300020, alarm_manager_->last_poll_time_.ToJsTime());
+ EXPECT_DOUBLE_EQ(600020, alarm_manager_->next_poll_time_.ToJsTime());
+}
+
TEST_F(ExtensionAlarmsSchedulingTest, TimerRunning) {
EXPECT_FALSE(alarm_manager_->timer_.IsRunning());
- RunFunction(new AlarmsCreateFunction(),
- "[\"a\", {\"delayInMinutes\": 0.001}]");
+ CreateAlarm("[\"a\", {\"delayInMinutes\": 0.001}]");
EXPECT_TRUE(alarm_manager_->timer_.IsRunning());
MessageLoop::current()->Run();
EXPECT_FALSE(alarm_manager_->timer_.IsRunning());
- RunFunction(new AlarmsCreateFunction(),
- "[\"bb\", {\"delayInMinutes\": 10}]");
+ CreateAlarm("[\"bb\", {\"delayInMinutes\": 10}]");
EXPECT_TRUE(alarm_manager_->timer_.IsRunning());
alarm_manager_->RemoveAllAlarms(extension_->id());
EXPECT_FALSE(alarm_manager_->timer_.IsRunning());
« no previous file with comments | « chrome/browser/extensions/api/alarms/alarms_api.cc ('k') | chrome/browser/extensions/extension_system.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698