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 |
| 155 EventRouter* event_router = GetEventRouter(); |
154 if (crx_file::id_util::IdIsValid(extension_id)) { | 156 if (crx_file::id_util::IdIsValid(extension_id)) { |
155 GetEventRouter()->AddEventListener(event_name, process, extension_id); | 157 if (worker_thread_id != kNonWorkerThreadId) { |
| 158 event_router->AddServiceWorkerEventListener( |
| 159 event_name, process, extension_id, worker_thread_id); |
| 160 } else { |
| 161 event_router->AddEventListener(event_name, process, extension_id); |
| 162 } |
156 } else if (listener_url.is_valid()) { | 163 } else if (listener_url.is_valid()) { |
157 GetEventRouter()->AddEventListenerForURL(event_name, process, listener_url); | 164 event_router->AddEventListenerForURL(event_name, process, listener_url); |
158 } else { | 165 } else { |
159 NOTREACHED() << "Tried to add an event listener without a valid " | 166 NOTREACHED() << "Tried to add an event listener without a valid " |
160 << "extension ID nor listener URL"; | 167 << "extension ID nor listener URL"; |
161 } | 168 } |
162 } | 169 } |
163 | 170 |
164 void ExtensionMessageFilter::OnExtensionRemoveListener( | 171 void ExtensionMessageFilter::OnExtensionRemoveListener( |
165 const std::string& extension_id, | 172 const std::string& extension_id, |
166 const GURL& listener_url, | 173 const GURL& listener_url, |
167 const std::string& event_name) { | 174 const std::string& event_name, |
| 175 int worker_thread_id) { |
168 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 176 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
169 if (!browser_context_) | 177 if (!browser_context_) |
170 return; | 178 return; |
171 | 179 |
172 RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); | 180 RenderProcessHost* process = RenderProcessHost::FromID(render_process_id_); |
173 if (!process) | 181 if (!process) |
174 return; | 182 return; |
175 | 183 |
176 if (crx_file::id_util::IdIsValid(extension_id)) { | 184 if (crx_file::id_util::IdIsValid(extension_id)) { |
177 GetEventRouter()->RemoveEventListener(event_name, process, extension_id); | 185 if (worker_thread_id != kNonWorkerThreadId) { |
| 186 GetEventRouter()->RemoveServiceWorkerEventListener( |
| 187 event_name, process, extension_id, worker_thread_id); |
| 188 } else { |
| 189 GetEventRouter()->RemoveEventListener(event_name, process, extension_id); |
| 190 } |
178 } else if (listener_url.is_valid()) { | 191 } else if (listener_url.is_valid()) { |
179 GetEventRouter()->RemoveEventListenerForURL(event_name, process, | 192 GetEventRouter()->RemoveEventListenerForURL(event_name, process, |
180 listener_url); | 193 listener_url); |
181 } else { | 194 } else { |
182 NOTREACHED() << "Tried to remove an event listener without a valid " | 195 NOTREACHED() << "Tried to remove an event listener without a valid " |
183 << "extension ID nor listener URL"; | 196 << "extension ID nor listener URL"; |
184 } | 197 } |
185 } | 198 } |
186 | 199 |
187 void ExtensionMessageFilter::OnExtensionAddLazyListener( | 200 void ExtensionMessageFilter::OnExtensionAddLazyListener( |
188 const std::string& extension_id, const std::string& event_name) { | 201 const std::string& extension_id, |
| 202 const std::string& event_name, |
| 203 int worker_thread_id) { |
189 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 204 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
190 if (!browser_context_) | 205 if (!browser_context_) |
191 return; | 206 return; |
192 | 207 |
193 GetEventRouter()->AddLazyEventListener(event_name, extension_id); | 208 if (worker_thread_id == kNonWorkerThreadId) { |
| 209 GetEventRouter()->AddLazyEventListener(event_name, extension_id); |
| 210 } else { |
| 211 GetEventRouter()->AddLazyServiceWorkerEventListener( |
| 212 event_name, extension_id, worker_thread_id); |
| 213 } |
194 } | 214 } |
195 | 215 |
196 void ExtensionMessageFilter::OnExtensionRemoveLazyListener( | 216 void ExtensionMessageFilter::OnExtensionRemoveLazyListener( |
197 const std::string& extension_id, const std::string& event_name) { | 217 const std::string& extension_id, |
| 218 const std::string& event_name, |
| 219 int worker_thread_id) { |
198 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 220 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
199 if (!browser_context_) | 221 if (!browser_context_) |
200 return; | 222 return; |
201 | 223 |
202 GetEventRouter()->RemoveLazyEventListener(event_name, extension_id); | 224 if (worker_thread_id == kNonWorkerThreadId) { |
| 225 GetEventRouter()->RemoveLazyEventListener(event_name, extension_id); |
| 226 } else { |
| 227 GetEventRouter()->RemoveLazyServiceWorkerEventListener( |
| 228 event_name, extension_id, worker_thread_id); |
| 229 } |
203 } | 230 } |
204 | 231 |
205 void ExtensionMessageFilter::OnExtensionAddFilteredListener( | 232 void ExtensionMessageFilter::OnExtensionAddFilteredListener( |
206 const std::string& extension_id, | 233 const std::string& extension_id, |
207 const std::string& event_name, | 234 const std::string& event_name, |
208 const base::DictionaryValue& filter, | 235 const base::DictionaryValue& filter, |
209 bool lazy) { | 236 bool lazy) { |
210 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 237 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
211 if (!browser_context_) | 238 if (!browser_context_) |
212 return; | 239 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. | 339 // The extension has no background page, so there is nothing to wake. |
313 SendWakeEventPageResponse(request_id, false); | 340 SendWakeEventPageResponse(request_id, false); |
314 } | 341 } |
315 | 342 |
316 void ExtensionMessageFilter::SendWakeEventPageResponse(int request_id, | 343 void ExtensionMessageFilter::SendWakeEventPageResponse(int request_id, |
317 bool success) { | 344 bool success) { |
318 Send(new ExtensionMsg_WakeEventPageResponse(request_id, success)); | 345 Send(new ExtensionMsg_WakeEventPageResponse(request_id, success)); |
319 } | 346 } |
320 | 347 |
321 } // namespace extensions | 348 } // namespace extensions |
OLD | NEW |