| Index: chrome/browser/extensions/api/alarms/alarms_api.cc
|
| diff --git a/chrome/browser/extensions/api/alarms/alarms_api.cc b/chrome/browser/extensions/api/alarms/alarms_api.cc
|
| index 49c3dd6e095949787944884df427b728d7f4adcf..bea10e37cd1f1047a0a9a629d062f9b9f2dd7d55 100644
|
| --- a/chrome/browser/extensions/api/alarms/alarms_api.cc
|
| +++ b/chrome/browser/extensions/api/alarms/alarms_api.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "chrome/browser/extensions/api/alarms/alarms_api.h"
|
|
|
| +#include "base/string_number_conversions.h"
|
| #include "base/values.h"
|
| #include "chrome/browser/extensions/api/alarms/alarm_manager.h"
|
| #include "chrome/browser/extensions/extension_system.h"
|
| @@ -18,17 +19,49 @@ namespace {
|
|
|
| const char kDefaultAlarmName[] = "";
|
| const char kAlarmNotFound[] = "No alarm named '*' exists.";
|
| +const char kDelayLessThanMinimum[] = "Delay is less than minimum of * minutes.";
|
| +const char kDelayIsNonInteger[] = "Delay is not an integer value.";
|
| +
|
| +const int kReleaseDelayMinimum = 5;
|
| +const int kDevDelayMinimum = 0;
|
| +
|
| +bool ValidateDelayTime(double delay_in_minutes,
|
| + const Extension* extension,
|
| + std::string* error) {
|
| + double delay_minimum = kDevDelayMinimum;
|
| + if (extension->location() != Extension::LOAD) {
|
| + // In release mode we check for integer delay values and a stricter delay
|
| + // minimum.
|
| + if (delay_in_minutes != static_cast<int>(delay_in_minutes)) {
|
| + *error = kDelayIsNonInteger;
|
| + return false;
|
| + }
|
| + delay_minimum = kReleaseDelayMinimum;
|
| + }
|
|
|
| + // Validate against our found delay minimum.
|
| + if (delay_in_minutes < delay_minimum) {
|
| + *error = ExtensionErrorUtils::FormatErrorMessage(kDelayLessThanMinimum,
|
| + base::DoubleToString(delay_minimum));
|
| + return false;
|
| + }
|
| + return true;
|
| }
|
|
|
| +} // namespace
|
| +
|
| bool AlarmsCreateFunction::RunImpl() {
|
| scoped_ptr<alarms::Create::Params> params(
|
| alarms::Create::Params::Create(*args_));
|
| EXTENSION_FUNCTION_VALIDATE(params.get());
|
|
|
| + double delay_in_minutes = params->alarm_info.delay_in_minutes;
|
| + if (!ValidateDelayTime(delay_in_minutes, GetExtension(), &error_))
|
| + return false;
|
| +
|
| linked_ptr<AlarmManager::Alarm> alarm(new AlarmManager::Alarm());
|
| alarm->name = params->name.get() ? *params->name : kDefaultAlarmName;
|
| - alarm->delay_in_seconds = params->alarm_info.delay_in_seconds;
|
| + alarm->delay_in_minutes = params->alarm_info.delay_in_minutes;
|
| alarm->repeating = params->alarm_info.repeating.get() ?
|
| *params->alarm_info.repeating : false;
|
| ExtensionSystem::Get(profile())->alarm_manager()->AddAlarm(
|
|
|