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

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

Issue 2886923002: [extension SW]: Support event listener registration and event dispatching. (Closed)
Patch Set: sync 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
« no previous file with comments | « extensions/browser/extension_message_filter.h ('k') | extensions/browser/extension_prefs.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
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
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
OLDNEW
« no previous file with comments | « extensions/browser/extension_message_filter.h ('k') | extensions/browser/extension_prefs.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698