Chromium Code Reviews| 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..0f24eeded2a9422bb1fd4f5d60993bab71873850 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; |
|
Aaron Boodman
2012/04/20 17:58:22
= 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() ? |