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

Side by Side Diff: extensions/browser/event_listener_map.cc

Issue 1909773002: Convert //extensions/browser from scoped_ptr to std::unique_ptr (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 8 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "extensions/browser/event_listener_map.h" 5 #include "extensions/browser/event_listener_map.h"
6 6
7 #include <stddef.h> 7 #include <stddef.h>
8 8
9 #include <utility> 9 #include <utility>
10 10
11 #include "base/memory/ptr_util.h"
11 #include "base/values.h" 12 #include "base/values.h"
12 #include "content/public/browser/render_process_host.h" 13 #include "content/public/browser/render_process_host.h"
13 #include "extensions/browser/event_router.h" 14 #include "extensions/browser/event_router.h"
14 #include "ipc/ipc_message.h" 15 #include "ipc/ipc_message.h"
15 #include "url/gurl.h" 16 #include "url/gurl.h"
16 17
17 using base::DictionaryValue; 18 using base::DictionaryValue;
18 19
19 namespace extensions { 20 namespace extensions {
20 21
21 typedef EventFilter::MatcherID MatcherID; 22 typedef EventFilter::MatcherID MatcherID;
22 23
23 // static 24 // static
24 scoped_ptr<EventListener> EventListener::ForExtension( 25 std::unique_ptr<EventListener> EventListener::ForExtension(
25 const std::string& event_name, 26 const std::string& event_name,
26 const std::string& extension_id, 27 const std::string& extension_id,
27 content::RenderProcessHost* process, 28 content::RenderProcessHost* process,
28 scoped_ptr<base::DictionaryValue> filter) { 29 std::unique_ptr<base::DictionaryValue> filter) {
29 return make_scoped_ptr(new EventListener(event_name, extension_id, GURL(), 30 return base::WrapUnique(new EventListener(event_name, extension_id, GURL(),
30 process, std::move(filter))); 31 process, std::move(filter)));
31 } 32 }
32 33
33 // static 34 // static
34 scoped_ptr<EventListener> EventListener::ForURL( 35 std::unique_ptr<EventListener> EventListener::ForURL(
35 const std::string& event_name, 36 const std::string& event_name,
36 const GURL& listener_url, 37 const GURL& listener_url,
37 content::RenderProcessHost* process, 38 content::RenderProcessHost* process,
38 scoped_ptr<base::DictionaryValue> filter) { 39 std::unique_ptr<base::DictionaryValue> filter) {
39 return make_scoped_ptr(new EventListener(event_name, "", listener_url, 40 return base::WrapUnique(new EventListener(event_name, "", listener_url,
40 process, std::move(filter))); 41 process, std::move(filter)));
41 } 42 }
42 43
43 EventListener::~EventListener() {} 44 EventListener::~EventListener() {}
44 45
45 bool EventListener::Equals(const EventListener* other) const { 46 bool EventListener::Equals(const EventListener* other) const {
46 // We don't check matcher_id equality because we want a listener with a 47 // We don't check matcher_id equality because we want a listener with a
47 // filter that hasn't been added to EventFilter to match one that is 48 // filter that hasn't been added to EventFilter to match one that is
48 // equivalent but has. 49 // equivalent but has.
49 return event_name_ == other->event_name_ && 50 return event_name_ == other->event_name_ &&
50 extension_id_ == other->extension_id_ && 51 extension_id_ == other->extension_id_ &&
51 listener_url_ == other->listener_url_ && process_ == other->process_ && 52 listener_url_ == other->listener_url_ && process_ == other->process_ &&
52 ((!!filter_.get()) == (!!other->filter_.get())) && 53 ((!!filter_.get()) == (!!other->filter_.get())) &&
53 (!filter_.get() || filter_->Equals(other->filter_.get())); 54 (!filter_.get() || filter_->Equals(other->filter_.get()));
54 } 55 }
55 56
56 scoped_ptr<EventListener> EventListener::Copy() const { 57 std::unique_ptr<EventListener> EventListener::Copy() const {
57 scoped_ptr<DictionaryValue> filter_copy; 58 std::unique_ptr<DictionaryValue> filter_copy;
58 if (filter_) 59 if (filter_)
59 filter_copy.reset(filter_->DeepCopy()); 60 filter_copy.reset(filter_->DeepCopy());
60 return scoped_ptr<EventListener>(new EventListener(event_name_, extension_id_, 61 return std::unique_ptr<EventListener>(
61 listener_url_, process_, 62 new EventListener(event_name_, extension_id_, listener_url_, process_,
62 std::move(filter_copy))); 63 std::move(filter_copy)));
63 } 64 }
64 65
65 bool EventListener::IsLazy() const { 66 bool EventListener::IsLazy() const {
66 return !process_; 67 return !process_;
67 } 68 }
68 69
69 void EventListener::MakeLazy() { 70 void EventListener::MakeLazy() {
70 process_ = NULL; 71 process_ = NULL;
71 } 72 }
72 73
73 content::BrowserContext* EventListener::GetBrowserContext() const { 74 content::BrowserContext* EventListener::GetBrowserContext() const {
74 return process_ ? process_->GetBrowserContext() : NULL; 75 return process_ ? process_->GetBrowserContext() : NULL;
75 } 76 }
76 77
77 EventListener::EventListener(const std::string& event_name, 78 EventListener::EventListener(const std::string& event_name,
78 const std::string& extension_id, 79 const std::string& extension_id,
79 const GURL& listener_url, 80 const GURL& listener_url,
80 content::RenderProcessHost* process, 81 content::RenderProcessHost* process,
81 scoped_ptr<DictionaryValue> filter) 82 std::unique_ptr<DictionaryValue> filter)
82 : event_name_(event_name), 83 : event_name_(event_name),
83 extension_id_(extension_id), 84 extension_id_(extension_id),
84 listener_url_(listener_url), 85 listener_url_(listener_url),
85 process_(process), 86 process_(process),
86 filter_(std::move(filter)), 87 filter_(std::move(filter)),
87 matcher_id_(-1) {} 88 matcher_id_(-1) {}
88 89
89 EventListenerMap::EventListenerMap(Delegate* delegate) 90 EventListenerMap::EventListenerMap(Delegate* delegate)
90 : delegate_(delegate) { 91 : delegate_(delegate) {
91 } 92 }
92 93
93 EventListenerMap::~EventListenerMap() {} 94 EventListenerMap::~EventListenerMap() {}
94 95
95 bool EventListenerMap::AddListener(scoped_ptr<EventListener> listener) { 96 bool EventListenerMap::AddListener(std::unique_ptr<EventListener> listener) {
96 if (HasListener(listener.get())) 97 if (HasListener(listener.get()))
97 return false; 98 return false;
98 if (listener->filter()) { 99 if (listener->filter()) {
99 scoped_ptr<EventMatcher> matcher(ParseEventMatcher(listener->filter())); 100 std::unique_ptr<EventMatcher> matcher(
101 ParseEventMatcher(listener->filter()));
100 MatcherID id = event_filter_.AddEventMatcher(listener->event_name(), 102 MatcherID id = event_filter_.AddEventMatcher(listener->event_name(),
101 std::move(matcher)); 103 std::move(matcher));
102 listener->set_matcher_id(id); 104 listener->set_matcher_id(id);
103 listeners_by_matcher_id_[id] = listener.get(); 105 listeners_by_matcher_id_[id] = listener.get();
104 filtered_events_.insert(listener->event_name()); 106 filtered_events_.insert(listener->event_name());
105 } 107 }
106 linked_ptr<EventListener> listener_ptr(listener.release()); 108 linked_ptr<EventListener> listener_ptr(listener.release());
107 listeners_[listener_ptr->event_name()].push_back(listener_ptr); 109 listeners_[listener_ptr->event_name()].push_back(listener_ptr);
108 110
109 delegate_->OnListenerAdded(listener_ptr.get()); 111 delegate_->OnListenerAdded(listener_ptr.get());
110 112
111 return true; 113 return true;
112 } 114 }
113 115
114 scoped_ptr<EventMatcher> EventListenerMap::ParseEventMatcher( 116 std::unique_ptr<EventMatcher> EventListenerMap::ParseEventMatcher(
115 DictionaryValue* filter_dict) { 117 DictionaryValue* filter_dict) {
116 return scoped_ptr<EventMatcher>(new EventMatcher( 118 return std::unique_ptr<EventMatcher>(new EventMatcher(
117 make_scoped_ptr(filter_dict->DeepCopy()), MSG_ROUTING_NONE)); 119 base::WrapUnique(filter_dict->DeepCopy()), MSG_ROUTING_NONE));
118 } 120 }
119 121
120 bool EventListenerMap::RemoveListener(const EventListener* listener) { 122 bool EventListenerMap::RemoveListener(const EventListener* listener) {
121 ListenerList& listeners = listeners_[listener->event_name()]; 123 ListenerList& listeners = listeners_[listener->event_name()];
122 for (ListenerList::iterator it = listeners.begin(); it != listeners.end(); 124 for (ListenerList::iterator it = listeners.begin(); it != listeners.end();
123 it++) { 125 it++) {
124 if ((*it)->Equals(listener)) { 126 if ((*it)->Equals(listener)) {
125 CleanupListener(it->get()); 127 CleanupListener(it->get());
126 // Popping from the back should be cheaper than erase(it). 128 // Popping from the back should be cheaper than erase(it).
127 std::swap(*it, listeners.back()); 129 std::swap(*it, listeners.back());
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 } 199 }
198 } 200 }
199 } 201 }
200 202
201 void EventListenerMap::LoadUnfilteredLazyListeners( 203 void EventListenerMap::LoadUnfilteredLazyListeners(
202 const std::string& extension_id, 204 const std::string& extension_id,
203 const std::set<std::string>& event_names) { 205 const std::set<std::string>& event_names) {
204 for (std::set<std::string>::const_iterator it = event_names.begin(); 206 for (std::set<std::string>::const_iterator it = event_names.begin();
205 it != event_names.end(); ++it) { 207 it != event_names.end(); ++it) {
206 AddListener(EventListener::ForExtension( 208 AddListener(EventListener::ForExtension(
207 *it, extension_id, NULL, scoped_ptr<DictionaryValue>())); 209 *it, extension_id, NULL, std::unique_ptr<DictionaryValue>()));
208 } 210 }
209 } 211 }
210 212
211 void EventListenerMap::LoadFilteredLazyListeners( 213 void EventListenerMap::LoadFilteredLazyListeners(
212 const std::string& extension_id, 214 const std::string& extension_id,
213 const DictionaryValue& filtered) { 215 const DictionaryValue& filtered) {
214 for (DictionaryValue::Iterator it(filtered); !it.IsAtEnd(); it.Advance()) { 216 for (DictionaryValue::Iterator it(filtered); !it.IsAtEnd(); it.Advance()) {
215 // We skip entries if they are malformed. 217 // We skip entries if they are malformed.
216 const base::ListValue* filter_list = NULL; 218 const base::ListValue* filter_list = NULL;
217 if (!it.value().GetAsList(&filter_list)) 219 if (!it.value().GetAsList(&filter_list))
218 continue; 220 continue;
219 for (size_t i = 0; i < filter_list->GetSize(); i++) { 221 for (size_t i = 0; i < filter_list->GetSize(); i++) {
220 const DictionaryValue* filter = NULL; 222 const DictionaryValue* filter = NULL;
221 if (!filter_list->GetDictionary(i, &filter)) 223 if (!filter_list->GetDictionary(i, &filter))
222 continue; 224 continue;
223 AddListener(EventListener::ForExtension( 225 AddListener(EventListener::ForExtension(
224 it.key(), extension_id, NULL, make_scoped_ptr(filter->DeepCopy()))); 226 it.key(), extension_id, NULL, base::WrapUnique(filter->DeepCopy())));
225 } 227 }
226 } 228 }
227 } 229 }
228 230
229 std::set<const EventListener*> EventListenerMap::GetEventListeners( 231 std::set<const EventListener*> EventListenerMap::GetEventListeners(
230 const Event& event) { 232 const Event& event) {
231 std::set<const EventListener*> interested_listeners; 233 std::set<const EventListener*> interested_listeners;
232 if (IsFilteredEvent(event)) { 234 if (IsFilteredEvent(event)) {
233 // Look up the interested listeners via the EventFilter. 235 // Look up the interested listeners via the EventFilter.
234 std::set<MatcherID> ids = 236 std::set<MatcherID> ids =
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 return; 278 return;
277 event_filter_.RemoveEventMatcher(listener->matcher_id()); 279 event_filter_.RemoveEventMatcher(listener->matcher_id());
278 CHECK_EQ(1u, listeners_by_matcher_id_.erase(listener->matcher_id())); 280 CHECK_EQ(1u, listeners_by_matcher_id_.erase(listener->matcher_id()));
279 } 281 }
280 282
281 bool EventListenerMap::IsFilteredEvent(const Event& event) const { 283 bool EventListenerMap::IsFilteredEvent(const Event& event) const {
282 return filtered_events_.count(event.event_name) > 0u; 284 return filtered_events_.count(event.event_name) > 0u;
283 } 285 }
284 286
285 } // namespace extensions 287 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/event_listener_map.h ('k') | extensions/browser/event_listener_map_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698