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

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: Created 8 years, 8 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..62712ea3866325b86e0949058a2701b754e2dcb5 100644
--- a/chrome/browser/extensions/api/alarms/alarms_api.cc
+++ b/chrome/browser/extensions/api/alarms/alarms_api.cc
@@ -4,9 +4,12 @@
#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_service.h"
#include "chrome/browser/extensions/extension_system.h"
+#include "chrome/browser/profiles/profile.h"
#include "chrome/common/extensions/api/experimental.alarms.h"
#include "chrome/common/extensions/extension_error_utils.h"
@@ -18,17 +21,52 @@ 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 double kDevDelayMinimum = 0.1;
Matt Perry 2012/04/25 19:11:06 Let's allow 0 minute delays for dev mode. That'll
Matt Tytel 2012/04/30 23:36:21 Done.
}
+bool AlarmsCreateFunction::ValidateDelayTime(double delay_in_minutes) {
Matt Perry 2012/04/25 19:11:06 nit: let's make this a global function in this fil
Matt Tytel 2012/04/30 23:36:21 Done.
+ double delay_minimum = kDevDelayMinimum;
+ ExtensionService* extension_service = profile()->GetExtensionService();
+ if (!extension_service) {
+ // In testing, only check if the delay is non negative.
+ delay_minimum = 0;
+ }
+ else if(extension_service->GetExtensionById(extension_id(), false)->
Matt Perry 2012/04/25 19:11:06 AlarmCreateFunction has a GetExtension() method. J
Matt Tytel 2012/04/30 23:36:21 Done.
+ 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;
+}
+
bool AlarmsCreateFunction::RunImpl() {
scoped_ptr<alarms::Create::Params> params(
alarms::Create::Params::Create(*args_));
EXTENSION_FUNCTION_VALIDATE(params.get());
+ if (!ValidateDelayTime(params->alarm_info.delay_in_minutes))
+ 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(

Powered by Google App Engine
This is Rietveld 408576698