OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/extension_message_filter.h" | 5 #include "extensions/browser/extension_message_filter.h" |
6 | 6 |
7 #include "base/macros.h" | 7 #include "base/macros.h" |
8 #include "base/memory/singleton.h" | 8 #include "base/memory/singleton.h" |
9 #include "components/crx_file/id_util.h" | 9 #include "components/crx_file/id_util.h" |
10 #include "components/keyed_service/content/browser_context_keyed_service_shutdow n_notifier_factory.h" | 10 #include "components/keyed_service/content/browser_context_keyed_service_shutdow n_notifier_factory.h" |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
135 IPC_MESSAGE_HANDLER(ExtensionHostMsg_WakeEventPage, | 135 IPC_MESSAGE_HANDLER(ExtensionHostMsg_WakeEventPage, |
136 OnExtensionWakeEventPage) | 136 OnExtensionWakeEventPage) |
137 IPC_MESSAGE_UNHANDLED(handled = false) | 137 IPC_MESSAGE_UNHANDLED(handled = false) |
138 IPC_END_MESSAGE_MAP() | 138 IPC_END_MESSAGE_MAP() |
139 return handled; | 139 return handled; |
140 } | 140 } |
141 | 141 |
142 void ExtensionMessageFilter::OnExtensionAddListener( | 142 void ExtensionMessageFilter::OnExtensionAddListener( |
143 const std::string& extension_id, | 143 const std::string& extension_id, |
144 const GURL& listener_url, | 144 const GURL& listener_url, |
145 const std::string& event_name) { | 145 const std::string& event_name, |
146 int worker_thread_id) { | |
146 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 147 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
147 if (!browser_context_) | 148 if (!browser_context_) |
148 return; | 149 return; |
149 | 150 |
150 RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); | 151 RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); |
151 if (!process) | 152 if (!process) |
152 return; | 153 return; |
153 | 154 |
154 if (crx_file::id_util::IdIsValid(extension_id)) { | 155 if (crx_file::id_util::IdIsValid(extension_id)) { |
155 GetEventRouter()->AddEventListener(event_name, process, extension_id); | 156 if (worker_thread_id != kNonWorkerThreadId) { |
157 GetEventRouter()->AddServiceWorkerEventListener( | |
Devlin
2017/06/01 04:54:50
nit: maybe cache EventRouter, here and below. It'
lazyboy
2017/06/01 23:33:29
Done.
| |
158 event_name, process, extension_id, worker_thread_id); | |
159 } else { | |
160 GetEventRouter()->AddEventListener(event_name, process, extension_id); | |
161 } | |
156 } else if (listener_url.is_valid()) { | 162 } else if (listener_url.is_valid()) { |
157 GetEventRouter()->AddEventListenerForURL(event_name, process, listener_url); | 163 GetEventRouter()->AddEventListenerForURL(event_name, process, listener_url); |
158 } else { | 164 } else { |
159 NOTREACHED() << "Tried to add an event listener without a valid " | 165 NOTREACHED() << "Tried to add an event listener without a valid " |
160 << "extension ID nor listener URL"; | 166 << "extension ID nor listener URL"; |
161 } | 167 } |
162 } | 168 } |
163 | 169 |
164 void ExtensionMessageFilter::OnExtensionRemoveListener( | 170 void ExtensionMessageFilter::OnExtensionRemoveListener( |
165 const std::string& extension_id, | 171 const std::string& extension_id, |
166 const GURL& listener_url, | 172 const GURL& listener_url, |
167 const std::string& event_name) { | 173 const std::string& event_name, |
174 int worker_thread_id) { | |
168 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 175 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
169 if (!browser_context_) | 176 if (!browser_context_) |
170 return; | 177 return; |
171 | 178 |
172 RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); | 179 RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); |
173 if (!process) | 180 if (!process) |
174 return; | 181 return; |
175 | 182 |
176 if (crx_file::id_util::IdIsValid(extension_id)) { | 183 if (crx_file::id_util::IdIsValid(extension_id)) { |
177 GetEventRouter()->RemoveEventListener(event_name, process, extension_id); | 184 if (worker_thread_id != kNonWorkerThreadId) { |
185 GetEventRouter()->RemoveServiceWorkerEventListener( | |
186 event_name, process, extension_id, worker_thread_id); | |
187 } else { | |
188 GetEventRouter()->RemoveEventListener(event_name, process, extension_id); | |
189 } | |
178 } else if (listener_url.is_valid()) { | 190 } else if (listener_url.is_valid()) { |
179 GetEventRouter()->RemoveEventListenerForURL(event_name, process, | 191 GetEventRouter()->RemoveEventListenerForURL(event_name, process, |
180 listener_url); | 192 listener_url); |
181 } else { | 193 } else { |
182 NOTREACHED() << "Tried to remove an event listener without a valid " | 194 NOTREACHED() << "Tried to remove an event listener without a valid " |
183 << "extension ID nor listener URL"; | 195 << "extension ID nor listener URL"; |
184 } | 196 } |
185 } | 197 } |
186 | 198 |
187 void ExtensionMessageFilter::OnExtensionAddLazyListener( | 199 void ExtensionMessageFilter::OnExtensionAddLazyListener( |
188 const std::string& extension_id, const std::string& event_name) { | 200 const std::string& extension_id, |
201 const std::string& event_name, | |
202 int worker_thread_id) { | |
189 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 203 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
190 if (!browser_context_) | 204 if (!browser_context_) |
191 return; | 205 return; |
192 | 206 |
193 GetEventRouter()->AddLazyEventListener(event_name, extension_id); | 207 if (worker_thread_id == kNonWorkerThreadId) { |
208 GetEventRouter()->AddLazyEventListener(event_name, extension_id); | |
209 } else { | |
210 GetEventRouter()->AddLazyServiceWorkerEventListener( | |
211 event_name, extension_id, worker_thread_id); | |
212 } | |
194 } | 213 } |
195 | 214 |
196 void ExtensionMessageFilter::OnExtensionRemoveLazyListener( | 215 void ExtensionMessageFilter::OnExtensionRemoveLazyListener( |
197 const std::string& extension_id, const std::string& event_name) { | 216 const std::string& extension_id, |
217 const std::string& event_name, | |
218 int worker_thread_id) { | |
198 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 219 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
199 if (!browser_context_) | 220 if (!browser_context_) |
200 return; | 221 return; |
201 | 222 |
202 GetEventRouter()->RemoveLazyEventListener(event_name, extension_id); | 223 if (worker_thread_id == kNonWorkerThreadId) { |
224 GetEventRouter()->RemoveLazyEventListener(event_name, extension_id); | |
225 } else { | |
226 GetEventRouter()->RemoveLazyServiceWorkerEventListener( | |
227 event_name, extension_id, worker_thread_id); | |
228 } | |
203 } | 229 } |
204 | 230 |
205 void ExtensionMessageFilter::OnExtensionAddFilteredListener( | 231 void ExtensionMessageFilter::OnExtensionAddFilteredListener( |
206 const std::string& extension_id, | 232 const std::string& extension_id, |
207 const std::string& event_name, | 233 const std::string& event_name, |
208 const base::DictionaryValue& filter, | 234 const base::DictionaryValue& filter, |
209 bool lazy) { | 235 bool lazy) { |
210 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 236 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
211 if (!browser_context_) | 237 if (!browser_context_) |
212 return; | 238 return; |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
312 // The extension has no background page, so there is nothing to wake. | 338 // The extension has no background page, so there is nothing to wake. |
313 SendWakeEventPageResponse(request_id, false); | 339 SendWakeEventPageResponse(request_id, false); |
314 } | 340 } |
315 | 341 |
316 void ExtensionMessageFilter::SendWakeEventPageResponse(int request_id, | 342 void ExtensionMessageFilter::SendWakeEventPageResponse(int request_id, |
317 bool success) { | 343 bool success) { |
318 Send(new ExtensionMsg_WakeEventPageResponse(request_id, success)); | 344 Send(new ExtensionMsg_WakeEventPageResponse(request_id, success)); |
319 } | 345 } |
320 | 346 |
321 } // namespace extensions | 347 } // namespace extensions |
OLD | NEW |