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

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

Issue 10217018: Alarm resolution changed to minutes and minimum delay added. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Sinked. Created 8 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 side-by-side diff with in-line comments
Download patch
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(
« no previous file with comments | « chrome/browser/extensions/api/alarms/alarm_manager.cc ('k') | chrome/browser/extensions/api/alarms/alarms_api_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698