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

Unified Diff: extensions/browser/api/alarms/alarm_manager.cc

Issue 2051573003: Perform alarm's period limit check while reading alarm info from StateStore. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase @tott Created 4 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 | « extensions/browser/api/alarms/alarm_manager.h ('k') | extensions/browser/api/alarms/alarms_api.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/browser/api/alarms/alarm_manager.cc
diff --git a/extensions/browser/api/alarms/alarm_manager.cc b/extensions/browser/api/alarms/alarm_manager.cc
index 7325906fbe0a6cc2d8e2ded7e7f2d05e101ae25f..ab631601130a1f816b537cc51eb23b7cfeeb13a3 100644
--- a/extensions/browser/api/alarms/alarm_manager.cc
+++ b/extensions/browser/api/alarms/alarm_manager.cc
@@ -17,6 +17,7 @@
#include "base/time/time.h"
#include "base/value_conversions.h"
#include "base/values.h"
+#include "extensions/browser/api/alarms/alarms_api_constants.h"
#include "extensions/browser/event_router.h"
#include "extensions/browser/extension_registry.h"
#include "extensions/browser/extension_system.h"
@@ -33,6 +34,8 @@ namespace {
const char kRegisteredAlarms[] = "alarms";
const char kAlarmGranularity[] = "granularity";
+const int kSecondsPerMinute = 60;
+
// The minimum period between polling for alarms to run.
const base::TimeDelta kDefaultMinPollPeriod() {
return base::TimeDelta::FromDays(1);
@@ -63,16 +66,24 @@ base::TimeDelta TimeDeltaFromDelay(double delay_in_minutes) {
base::Time::kMicrosecondsPerMinute);
}
-std::vector<Alarm> AlarmsFromValue(const base::ListValue* list) {
+std::vector<Alarm> AlarmsFromValue(const std::string extension_id,
+ bool is_unpacked,
+ const base::ListValue* list) {
std::vector<Alarm> alarms;
for (size_t i = 0; i < list->GetSize(); ++i) {
- const base::DictionaryValue* alarm_dict = NULL;
+ const base::DictionaryValue* alarm_dict = nullptr;
Alarm alarm;
if (list->GetDictionary(i, &alarm_dict) &&
alarms::Alarm::Populate(*alarm_dict, alarm.js_alarm.get())) {
- const base::Value* time_value = NULL;
+ const base::Value* time_value = nullptr;
if (alarm_dict->Get(kAlarmGranularity, &time_value))
base::GetValueAsTimeDelta(*time_value, &alarm.granularity);
+ alarm.minimum_granularity = base::TimeDelta::FromSecondsD(
+ (is_unpacked ? alarms_api_constants::kDevDelayMinimum
+ : alarms_api_constants::kReleaseDelayMinimum) *
+ kSecondsPerMinute);
+ if (alarm.granularity < alarm.minimum_granularity)
+ alarm.granularity = alarm.minimum_granularity;
alarms.push_back(alarm);
}
}
@@ -303,10 +314,12 @@ void AlarmManager::WriteToStorage(const std::string& extension_id) {
}
void AlarmManager::ReadFromStorage(const std::string& extension_id,
+ bool is_unpacked,
std::unique_ptr<base::Value> value) {
base::ListValue* list = NULL;
if (value.get() && value->GetAsList(&list)) {
- std::vector<Alarm> alarm_states = AlarmsFromValue(list);
+ std::vector<Alarm> alarm_states =
+ AlarmsFromValue(extension_id, is_unpacked, list);
for (size_t i = 0; i < alarm_states.size(); ++i)
AddAlarmImpl(extension_id, alarm_states[i]);
}
@@ -413,10 +426,12 @@ void AlarmManager::OnExtensionLoaded(content::BrowserContext* browser_context,
const Extension* extension) {
StateStore* storage = ExtensionSystem::Get(browser_context_)->state_store();
if (storage) {
+ bool is_unpacked = Manifest::IsUnpackedLocation(extension->location());
ready_actions_.insert(ReadyMap::value_type(extension->id(), ReadyQueue()));
- storage->GetExtensionValue(extension->id(), kRegisteredAlarms,
- base::Bind(&AlarmManager::ReadFromStorage,
- AsWeakPtr(), extension->id()));
+ storage->GetExtensionValue(
+ extension->id(), kRegisteredAlarms,
+ base::Bind(&AlarmManager::ReadFromStorage, AsWeakPtr(), extension->id(),
+ is_unpacked));
}
}
« no previous file with comments | « extensions/browser/api/alarms/alarm_manager.h ('k') | extensions/browser/api/alarms/alarms_api.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698