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: chrome/browser/chromeos/file_system_provider/file_system_plugin/plugineventrouter.cc

Issue 1093383002: [WIP] Provided file system from NACL. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Various cleanups Created 5 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "chrome/browser/chromeos/file_system_provider/file_system_plugin/plugin eventrouter.h"
6
7 #include "base/memory/singleton.h"
8 #include "content/public/browser/browser_thread.h"
9 #include "extensions/browser/event_router.h"
10
11 using content::BrowserThread;
12 using extensions::Event;
13
14 namespace chromeos {
15
16 PluginEventRouter::PluginEventRouter() : weak_ptr_factory_(this) {
17 }
18
19 PluginEventRouter::~PluginEventRouter() {
20 }
21
22 // Static
23 PluginEventRouter* PluginEventRouter::GetInstance() {
24 return Singleton<PluginEventRouter>::get();
25 }
26
27 void PluginEventRouter::AddEventsListener(
28 const std::vector<std::string>& event_names,
29 PluginEventRouter::PluginEventRouterClient* plugin_ref,
30 const std::string& plugin_id) {
31 for (std::vector<std::string>::const_iterator it = event_names.begin();
32 it != event_names.end(); ++it) {
33 AddEventListener(*it, plugin_ref, plugin_id);
34 }
35 }
36
37 void PluginEventRouter::AddEventListener(
38 const std::string& event_name,
39 PluginEventRouter::PluginEventRouterClient* plugin_ref,
40 const std::string& plugin_id) {
41 EventListIterator it = listOfListenedEvents_.find(event_name);
42 // Empty list
43 if (it == listOfListenedEvents_.end()) {
44 listOfListenedEvents_.insert(std::pair<std::string, EventToPluginList>(
45 event_name, EventToPluginList(event_name, plugin_id, plugin_ref)));
46 return;
47 }
48 it->second.AddPluginInstance(plugin_id, plugin_ref);
49 }
50
51 void PluginEventRouter::RemoveEventsListeners(
52 const std::vector<std::string>& event_names,
53 PluginEventRouter::PluginEventRouterClient* plugin_ref,
54 const std::string& plugin_id) {
55 for (std::vector<std::string>::const_iterator it = event_names.begin();
56 it != event_names.end(); ++it) {
57 RemoveEventListener(*it, plugin_ref, plugin_id);
58 }
59 }
60
61 void PluginEventRouter::RemoveEventListener(
62 const std::string& event_name,
63 PluginEventRouter::PluginEventRouterClient* plugin_ref,
64 const std::string& plugin_id) {
65 EventListIterator it = listOfListenedEvents_.find(event_name);
66
67 if (it != listOfListenedEvents_.end()) {
68 it->second.RemovePluginInstance(plugin_id, plugin_ref);
69 if (it->second.Empty())
70 listOfListenedEvents_.erase(it);
71 }
72 }
73
74 bool PluginEventRouter::HasEventListener(const std::string& event_name) {
75 // Race
76 return listOfListenedEvents_.find(event_name) != listOfListenedEvents_.end();
77 }
78
79 bool PluginEventRouter::PluginHasEventListener(const std::string& event_name,
80 const std::string& plugin_id) {
81 // Race
82 EventListIterator it = listOfListenedEvents_.find(event_name);
83 if (it != listOfListenedEvents_.end())
84 return it->second.HasPlugin(plugin_id);
85 return false;
86 }
87
88 void PluginEventRouter::DispatchEventToPlugin(
89 const std::string& plugin_id,
90 scoped_ptr<extensions::Event> event) {
91 if (!BrowserThread::CurrentlyOn(BrowserThread::IO)) {
92 BrowserThread::PostTask(
93 BrowserThread::IO, FROM_HERE,
94 base::Bind(
95 base::IgnoreResult(&PluginEventRouter::DispatchEventToPlugin),
96 weak_ptr_factory_.GetWeakPtr(), plugin_id,
97 base::Passed(event.Pass())));
98 return;
99 }
100 EventListIterator it = listOfListenedEvents_.find(event->event_name);
101 if (it != listOfListenedEvents_.end()) {
102 it->second.DispatchEventToPlugin(plugin_id, event->event_name,
103 event->event_args.Pass());
104 }
105 }
106
107 PluginListeningInstances::PluginListeningInstances(
108 const std::string& plugin_id,
109 PluginEventRouter::PluginEventRouterClient* instance_)
110 : plugin_id_(plugin_id) {
111 AddPluginInstance(instance_);
112 }
113
114 PluginListeningInstances::~PluginListeningInstances() {
115 }
116
117 void PluginListeningInstances::AddPluginInstance(
118 PluginEventRouter::PluginEventRouterClient* instance) {
119 SetOfInstancesIterator it = plugin_instances_.find(instance);
120 if (it == plugin_instances_.end())
121 plugin_instances_.insert(instance);
122 }
123
124 void PluginListeningInstances::RemovePluginInstance(
125 PluginEventRouter::PluginEventRouterClient* instance) {
126 SetOfInstancesIterator it = plugin_instances_.find(instance);
127 if (it != plugin_instances_.end())
128 plugin_instances_.erase(it);
129 }
130
131 bool PluginListeningInstances::Empty() {
132 return plugin_instances_.size() == 0 ? true : false;
133 }
134
135 void PluginListeningInstances::DispatchEvent(
136 std::string event_name,
137 scoped_ptr<base::ListValue> event_args) {
138 for (SetOfInstancesIterator it = plugin_instances_.begin();
139 it != plugin_instances_.end(); ++it) {
140 (*it)->OnDispatchEvent(event_name, event_args.Pass());
141 }
142 }
143
144 EventToPluginList::EventToPluginList(
145 const std::string& event_name,
146 const std::string& plugin_id,
147 PluginEventRouter::PluginEventRouterClient* instance)
148 : event_name_(event_name) {
149 AddPluginInstance(plugin_id, instance);
150 }
151
152 EventToPluginList::~EventToPluginList() {
153 }
154
155 void EventToPluginList::AddPluginInstance(
156 const std::string& plugin_id,
157 PluginEventRouter::PluginEventRouterClient* instance) {
158 PluginListIterator it = plugin_list_.find(plugin_id);
159 if (it == plugin_list_.end()) {
160 plugin_list_.insert(
161 std::pair<ListOfPlugins::key_type, ListOfPlugins::mapped_type>(
162 plugin_id, PluginListeningInstances(plugin_id, instance)));
163 return;
164 }
165 it->second.AddPluginInstance(instance);
166 }
167
168 void EventToPluginList::RemovePluginInstance(
169 const std::string& plugin_id,
170 PluginEventRouter::PluginEventRouterClient* instance) {
171 PluginListIterator it = plugin_list_.find(plugin_id);
172 if (it != plugin_list_.end()) {
173 it->second.RemovePluginInstance(instance);
174 if (it->second.Empty())
175 plugin_list_.erase(it);
176 }
177 }
178
179 bool EventToPluginList::Empty() {
180 return plugin_list_.size() ? true : false;
181 }
182
183 bool EventToPluginList::HasPlugin(const std::string& plugin_id) {
184 return plugin_list_.find(plugin_id) != plugin_list_.end();
185 }
186
187 void EventToPluginList::DispatchEventToPlugin(
188 std::string plugin_id,
189 std::string event_name,
190 scoped_ptr<base::ListValue> event_args) {
191 PluginListIterator it = plugin_list_.find(plugin_id);
192 // Dispatch it to all instances
193 if (it != plugin_list_.end())
194 it->second.DispatchEvent(event_name, event_args.Pass());
195 }
196 } // namespace chromeos
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698