| Index: chrome/browser/extensions/extension_prefs.cc
|
| diff --git a/chrome/browser/extensions/extension_prefs.cc b/chrome/browser/extensions/extension_prefs.cc
|
| index 7dc67c8488624e8dd642d8bc63d95cc9754e4700..793a04ed61d02e95f23e532ede4f1ea559b2950f 100644
|
| --- a/chrome/browser/extensions/extension_prefs.cc
|
| +++ b/chrome/browser/extensions/extension_prefs.cc
|
| @@ -7,6 +7,7 @@
|
| #include "base/string_number_conversions.h"
|
| #include "base/string_util.h"
|
| #include "base/utf_string_conversions.h"
|
| +#include "chrome/browser/extensions/api/alarms/alarm_manager.h"
|
| #include "chrome/browser/extensions/extension_pref_store.h"
|
| #include "chrome/browser/extensions/extension_sorting.h"
|
| #include "chrome/browser/prefs/pref_notifier.h"
|
| @@ -156,6 +157,10 @@ const char kPrefIncognitoContentSettings[] = "incognito_content_settings";
|
| // background page.
|
| const char kRegisteredEvents[] = "events";
|
|
|
| +// A list of alarms that this extension has set.
|
| +const char kRegisteredAlarms[] = "alarms";
|
| +const char kAlarmScheduledRunTime[] = "scheduled_run_time";
|
| +
|
| // Provider of write access to a dictionary storing extension prefs.
|
| class ScopedExtensionPrefUpdate : public DictionaryPrefUpdate {
|
| public:
|
| @@ -933,6 +938,43 @@ void ExtensionPrefs::SetRegisteredEvents(
|
| UpdateExtensionPref(extension_id, kRegisteredEvents, value);
|
| }
|
|
|
| +std::vector<extensions::AlarmPref> ExtensionPrefs::GetRegisteredAlarms(
|
| + const std::string& extension_id) {
|
| + std::vector<extensions::AlarmPref> alarms;
|
| + const base::DictionaryValue* extension = GetExtensionPref(extension_id);
|
| + if (!extension)
|
| + return alarms;
|
| +
|
| + base::ListValue* list = NULL;
|
| + if (!extension->GetList(kRegisteredAlarms, &list))
|
| + return alarms;
|
| +
|
| + typedef extensions::AlarmManager::Alarm Alarm;
|
| + for (size_t i = 0; i < list->GetSize(); ++i) {
|
| + base::DictionaryValue* alarm_dict = NULL;
|
| + extensions::AlarmPref alarm;
|
| + alarm.alarm.reset(new Alarm());
|
| + if (list->GetDictionary(i, &alarm_dict) &&
|
| + Alarm::Populate(*alarm_dict, alarm.alarm.get())) {
|
| + alarm.scheduled_run_time = ReadTime(alarm_dict, kAlarmScheduledRunTime);
|
| + alarms.push_back(alarm);
|
| + }
|
| + }
|
| + return alarms;
|
| +}
|
| +
|
| +void ExtensionPrefs::SetRegisteredAlarms(
|
| + const std::string& extension_id,
|
| + const std::vector<extensions::AlarmPref>& alarms) {
|
| + base::ListValue* list = new ListValue();
|
| + for (size_t i = 0; i < alarms.size(); ++i) {
|
| + scoped_ptr<base::DictionaryValue> alarm = alarms[i].alarm->ToValue().Pass();
|
| + SaveTime(alarm.get(), kAlarmScheduledRunTime, alarms[i].scheduled_run_time);
|
| + list->Append(alarm.release());
|
| + }
|
| + UpdateExtensionPref(extension_id, kRegisteredAlarms, list);
|
| +}
|
| +
|
| bool ExtensionPrefs::IsIncognitoEnabled(const std::string& extension_id) {
|
| return ReadExtensionPrefBoolean(extension_id, kPrefIncognitoEnabled);
|
| }
|
| @@ -1130,8 +1172,9 @@ void ExtensionPrefs::OnExtensionInstalled(
|
| extension->manifest()->value()->DeepCopy());
|
| }
|
|
|
| - // Clear any events that may be registered from a previous install.
|
| + // Clear any events and alarms that may be registered from a previous install.
|
| extension_dict->Remove(kRegisteredEvents, NULL);
|
| + extension_dict->Remove(kRegisteredAlarms, NULL);
|
|
|
| if (extension->is_app()) {
|
| StringOrdinal new_page_ordinal = page_ordinal.IsValid() ?
|
|
|