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

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

Issue 2078103002: Make AlarmManager::Alarm non copyable. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: address comments 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.h » ('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 ab631601130a1f816b537cc51eb23b7cfeeb13a3..9d1493abd734cad39f112070c1d72d3c56a3296f 100644
--- a/extensions/browser/api/alarms/alarm_manager.cc
+++ b/extensions/browser/api/alarms/alarm_manager.cc
@@ -66,38 +66,38 @@ base::TimeDelta TimeDeltaFromDelay(double delay_in_minutes) {
base::Time::kMicrosecondsPerMinute);
}
-std::vector<Alarm> AlarmsFromValue(const std::string extension_id,
- bool is_unpacked,
- const base::ListValue* list) {
- std::vector<Alarm> alarms;
+AlarmManager::AlarmList AlarmsFromValue(const std::string extension_id,
+ bool is_unpacked,
+ const base::ListValue* list) {
+ AlarmManager::AlarmList alarms;
for (size_t i = 0; i < list->GetSize(); ++i) {
const base::DictionaryValue* alarm_dict = nullptr;
- Alarm alarm;
+ std::unique_ptr<Alarm> alarm(new Alarm());
if (list->GetDictionary(i, &alarm_dict) &&
- alarms::Alarm::Populate(*alarm_dict, alarm.js_alarm.get())) {
+ alarms::Alarm::Populate(*alarm_dict, alarm->js_alarm.get())) {
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(
+ 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);
+ if (alarm->granularity < alarm->minimum_granularity)
+ alarm->granularity = alarm->minimum_granularity;
+ alarms.push_back(std::move(alarm));
}
}
return alarms;
}
std::unique_ptr<base::ListValue> AlarmsToValue(
- const std::vector<Alarm>& alarms) {
+ const std::vector<std::unique_ptr<Alarm>>& alarms) {
std::unique_ptr<base::ListValue> list(new base::ListValue());
for (size_t i = 0; i < alarms.size(); ++i) {
std::unique_ptr<base::DictionaryValue> alarm =
- alarms[i].js_alarm->ToValue();
+ alarms[i]->js_alarm->ToValue();
alarm->Set(kAlarmGranularity,
- base::CreateTimeDeltaValue(alarms[i].granularity));
+ base::CreateTimeDeltaValue(alarms[i]->granularity));
list->Append(std::move(alarm));
}
return list;
@@ -123,10 +123,11 @@ AlarmManager::~AlarmManager() {
}
void AlarmManager::AddAlarm(const std::string& extension_id,
- const Alarm& alarm,
+ std::unique_ptr<Alarm> alarm,
const AddAlarmCallback& callback) {
- RunWhenReady(extension_id, base::Bind(&AlarmManager::AddAlarmWhenReady,
- AsWeakPtr(), alarm, callback));
+ RunWhenReady(extension_id,
+ base::Bind(&AlarmManager::AddAlarmWhenReady, AsWeakPtr(),
+ base::Passed(std::move(alarm)), callback));
}
void AlarmManager::GetAlarm(const std::string& extension_id,
@@ -155,10 +156,10 @@ void AlarmManager::RemoveAllAlarms(const std::string& extension_id,
AsWeakPtr(), callback));
}
-void AlarmManager::AddAlarmWhenReady(const Alarm& alarm,
+void AlarmManager::AddAlarmWhenReady(std::unique_ptr<Alarm> alarm,
const AddAlarmCallback& callback,
const std::string& extension_id) {
- AddAlarmImpl(extension_id, alarm);
+ AddAlarmImpl(extension_id, std::move(alarm));
WriteToStorage(extension_id);
callback.Run();
}
@@ -167,7 +168,7 @@ void AlarmManager::GetAlarmWhenReady(const std::string& name,
const GetAlarmCallback& callback,
const std::string& extension_id) {
AlarmIterator it = GetAlarmIterator(extension_id, name);
- callback.Run(it.first != alarms_.end() ? &*it.second : NULL);
+ callback.Run(it.first != alarms_.end() ? it.second->get() : nullptr);
}
void AlarmManager::GetAllAlarmsWhenReady(const GetAllAlarmsCallback& callback,
@@ -215,7 +216,7 @@ AlarmManager::AlarmIterator AlarmManager::GetAlarmIterator(
for (AlarmList::iterator it = list->second.begin(); it != list->second.end();
++it) {
- if (it->js_alarm->name == name)
+ if (it->get()->js_alarm->name == name)
return make_pair(list, it);
}
@@ -257,7 +258,7 @@ void AlarmManager::RemoveAlarmIterator(const AlarmIterator& iter) {
void AlarmManager::OnAlarm(AlarmIterator it) {
CHECK(it.first != alarms_.end());
- Alarm& alarm = *it.second;
+ Alarm& alarm = *it.second->get();
std::string extension_id_copy(it.first->first);
delegate_->OnAlarm(extension_id_copy, alarm);
@@ -284,16 +285,16 @@ void AlarmManager::OnAlarm(AlarmIterator it) {
}
void AlarmManager::AddAlarmImpl(const std::string& extension_id,
- const Alarm& alarm) {
+ std::unique_ptr<Alarm> alarm) {
// Override any old alarm with the same name.
AlarmIterator old_alarm =
- GetAlarmIterator(extension_id, alarm.js_alarm->name);
+ GetAlarmIterator(extension_id, alarm->js_alarm->name);
if (old_alarm.first != alarms_.end())
RemoveAlarmIterator(old_alarm);
- alarms_[extension_id].push_back(alarm);
base::Time alarm_time =
- base::Time::FromJsTime(alarm.js_alarm->scheduled_time);
+ base::Time::FromJsTime(alarm->js_alarm->scheduled_time);
+ alarms_[extension_id].push_back(std::move(alarm));
if (next_poll_time_.is_null() || alarm_time < next_poll_time_)
SetNextPollTime(alarm_time);
}
@@ -306,9 +307,9 @@ void AlarmManager::WriteToStorage(const std::string& extension_id) {
std::unique_ptr<base::Value> alarms;
AlarmMap::iterator list = alarms_.find(extension_id);
if (list != alarms_.end())
- alarms.reset(AlarmsToValue(list->second).release());
+ alarms = AlarmsToValue(list->second);
else
- alarms.reset(AlarmsToValue(std::vector<Alarm>()).release());
+ alarms.reset(AlarmsToValue(AlarmList()).release());
storage->SetExtensionValue(extension_id, kRegisteredAlarms,
std::move(alarms));
}
@@ -318,10 +319,9 @@ void AlarmManager::ReadFromStorage(const std::string& extension_id,
std::unique_ptr<base::Value> value) {
base::ListValue* list = NULL;
if (value.get() && value->GetAsList(&list)) {
- std::vector<Alarm> alarm_states =
- AlarmsFromValue(extension_id, is_unpacked, list);
+ AlarmList alarm_states = AlarmsFromValue(extension_id, is_unpacked, list);
for (size_t i = 0; i < alarm_states.size(); ++i)
- AddAlarmImpl(extension_id, alarm_states[i]);
+ AddAlarmImpl(extension_id, std::move(alarm_states[i]));
}
ReadyQueue& extension_ready_queue = ready_actions_[extension_id];
@@ -351,21 +351,21 @@ void AlarmManager::ScheduleNextPoll() {
// granularity of any alarm.
// alarms_ guarantees that none of its contained lists are empty.
base::Time soonest_alarm_time = base::Time::FromJsTime(
- alarms_.begin()->second.begin()->js_alarm->scheduled_time);
+ alarms_.begin()->second.begin()->get()->js_alarm->scheduled_time);
base::TimeDelta min_granularity = kDefaultMinPollPeriod();
for (AlarmMap::const_iterator m_it = alarms_.begin(), m_end = alarms_.end();
m_it != m_end; ++m_it) {
for (AlarmList::const_iterator l_it = m_it->second.begin();
l_it != m_it->second.end(); ++l_it) {
base::Time cur_alarm_time =
- base::Time::FromJsTime(l_it->js_alarm->scheduled_time);
+ base::Time::FromJsTime(l_it->get()->js_alarm->scheduled_time);
if (cur_alarm_time < soonest_alarm_time)
soonest_alarm_time = cur_alarm_time;
- if (l_it->granularity < min_granularity)
- min_granularity = l_it->granularity;
+ if (l_it->get()->granularity < min_granularity)
+ min_granularity = l_it->get()->granularity;
base::TimeDelta cur_alarm_delta = cur_alarm_time - last_poll_time_;
- if (cur_alarm_delta < l_it->minimum_granularity)
- cur_alarm_delta = l_it->minimum_granularity;
+ if (cur_alarm_delta < l_it->get()->minimum_granularity)
+ cur_alarm_delta = l_it->get()->minimum_granularity;
if (cur_alarm_delta < min_granularity)
min_granularity = cur_alarm_delta;
}
@@ -399,7 +399,7 @@ void AlarmManager::PollAlarms() {
// iterator that the destruction invalidates.
for (size_t i = cur_extension->second.size(); i > 0; --i) {
AlarmList::iterator cur_alarm = cur_extension->second.begin() + i - 1;
- if (base::Time::FromJsTime(cur_alarm->js_alarm->scheduled_time) <=
+ if (base::Time::FromJsTime(cur_alarm->get()->js_alarm->scheduled_time) <=
last_poll_time_) {
OnAlarm(make_pair(cur_extension, cur_alarm));
}
@@ -482,8 +482,6 @@ Alarm::Alarm(const std::string& name,
}
}
-Alarm::Alarm(const Alarm& other) = default;
-
Alarm::~Alarm() {
}
« no previous file with comments | « extensions/browser/api/alarms/alarm_manager.h ('k') | extensions/browser/api/alarms/alarms_api.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698