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

Unified Diff: extensions/common/value_counter.cc

Issue 1227093008: Clear an extension's filtered events when a context is destroyed. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: valuecounter Created 5 years, 5 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/common/value_counter.h ('k') | extensions/renderer/event_bindings.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: extensions/common/value_counter.cc
diff --git a/extensions/common/value_counter.cc b/extensions/common/value_counter.cc
index 4138f251895981b39568d5eed7cb3fc90b27491f..0bb9cec75b435f6277b06be35b42504d8f974a65 100644
--- a/extensions/common/value_counter.cc
+++ b/extensions/common/value_counter.cc
@@ -10,47 +10,46 @@
namespace extensions {
+struct ValueCounter::Entry {
Devlin 2015/07/10 22:07:42 Can we make a constructor (passing in a value, ini
not at google - send to devlin 2015/07/10 22:42:43 Done.
+ scoped_ptr<base::Value> value;
+ int count;
+};
+
ValueCounter::ValueCounter() {}
ValueCounter::~ValueCounter() {}
-ValueCounter::Entry::Entry(const base::Value& value)
- : value_(value.DeepCopy()), count_(1) {}
-
-ValueCounter::Entry::~Entry() {}
-
-int ValueCounter::Entry::Increment() { return ++count_; }
-
-int ValueCounter::Entry::Decrement() { return --count_; }
-
-int ValueCounter::Add(const base::Value& value) { return AddImpl(value, true); }
+bool ValueCounter::Add(const base::Value& value) {
+ for (Entry* entry : entries_) {
+ if (entry->value->Equals(&value)) {
+ ++entry->count;
+ return false;
+ }
+ }
+ scoped_ptr<Entry> entry(new Entry());
+ entry->value = value.CreateDeepCopy();
+ entry->count = 1;
+ entries_.push_back(entry.Pass());
+ return true;
+}
-int ValueCounter::Remove(const base::Value& value) {
- for (EntryList::iterator it = entries_.begin(); it != entries_.end(); it++) {
- (*it)->value()->GetType();
- if ((*it)->value()->Equals(&value)) {
- int remaining = (*it)->Decrement();
- if (remaining == 0) {
+bool ValueCounter::Remove(const base::Value& value) {
+ for (ScopedVector<Entry>::iterator it = entries_.begin();
+ it != entries_.end(); ++it) {
+ if ((*it)->value->Equals(&value)) {
+ if (--(*it)->count == 0) {
std::swap(*it, entries_.back());
entries_.pop_back();
+ return true;
}
- return remaining;
+ return false;
Devlin 2015/07/10 22:07:42 These are right, but I feel like adding return
not at google - send to devlin 2015/07/10 22:42:43 Done.
}
}
- return 0;
+ return false;
}
-int ValueCounter::AddIfMissing(const base::Value& value) {
- return AddImpl(value, false);
-}
-
-int ValueCounter::AddImpl(const base::Value& value, bool increment) {
- for (EntryList::iterator it = entries_.begin(); it != entries_.end(); it++) {
- if ((*it)->value()->Equals(&value))
- return increment ? (*it)->Increment() : (*it)->count();
- }
- entries_.push_back(linked_ptr<Entry>(new Entry(value)));
- return 1;
+bool ValueCounter::IsEmpty() const {
Devlin 2015/07/10 22:07:42 Could probably move this to be is_empty() in the h
not at google - send to devlin 2015/07/10 22:42:43 Alright. I don't mind it being IsEmpty, it's consi
Devlin 2015/07/10 22:45:22 But those do Work, and this doesn't. :)
+ return entries_.empty();
}
} // namespace extensions
« no previous file with comments | « extensions/common/value_counter.h ('k') | extensions/renderer/event_bindings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698