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

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

Issue 2886923002: [extension SW]: Support event listener registration and event dispatching. (Closed)
Patch Set: address comments Created 3 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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698