| 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( |
| 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 |