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

Side by Side Diff: chrome/renderer/resources/extensions/event.js

Issue 10694085: Refactor extension event distribution to use Values instead of JSON strings. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixing memory leak in a test. Created 8 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « chrome/renderer/extensions/dispatcher.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 var DCHECK = requireNative('logging').DCHECK; 5 var DCHECK = requireNative('logging').DCHECK;
6 var eventBindingsNatives = requireNative('event_bindings'); 6 var eventBindingsNatives = requireNative('event_bindings');
7 var AttachEvent = eventBindingsNatives.AttachEvent; 7 var AttachEvent = eventBindingsNatives.AttachEvent;
8 var DetachEvent = eventBindingsNatives.DetachEvent; 8 var DetachEvent = eventBindingsNatives.DetachEvent;
9 var AttachFilteredEvent = eventBindingsNatives.AttachFilteredEvent; 9 var AttachFilteredEvent = eventBindingsNatives.AttachFilteredEvent;
10 var DetachFilteredEvent = eventBindingsNatives.DetachFilteredEvent; 10 var DetachFilteredEvent = eventBindingsNatives.DetachFilteredEvent;
(...skipping 192 matching lines...) Expand 10 before | Expand all | Expand 10 after
203 } 203 }
204 }; 204 };
205 } else { 205 } else {
206 this.validateEventArgs_ = function() {} 206 this.validateEventArgs_ = function() {}
207 } 207 }
208 }; 208 };
209 209
210 chromeHidden.Event = {}; 210 chromeHidden.Event = {};
211 211
212 // callback is a function(args, dispatch). args are the args we receive from 212 // callback is a function(args, dispatch). args are the args we receive from
213 // dispatchJSON(), and dispatch is a function(args) that dispatches args to 213 // dispatchEvent(), and dispatch is a function(args) that dispatches args to
214 // its listeners. 214 // its listeners.
215 chromeHidden.Event.registerArgumentMassager = function(name, callback) { 215 chromeHidden.Event.registerArgumentMassager = function(name, callback) {
216 if (eventArgumentMassagers[name]) 216 if (eventArgumentMassagers[name])
217 throw new Error("Massager already registered for event: " + name); 217 throw new Error("Massager already registered for event: " + name);
218 eventArgumentMassagers[name] = callback; 218 eventArgumentMassagers[name] = callback;
219 }; 219 };
220 220
221 // Dispatches a named event with the given JSON array, which is deserialized 221 // Dispatches a named event with the given argument array. The args array is
222 // before dispatch. The JSON array is the list of arguments that will be 222 // the list of arguments that will be sent to the event callback.
223 // sent with the event callback. 223 chromeHidden.Event.dispatchEvent = function(name, args, filteringInfo) {
224 chromeHidden.Event.dispatchJSON = function(name, args, filteringInfo) {
225 var listenerIDs = null; 224 var listenerIDs = null;
226 225
227 if (filteringInfo) 226 if (filteringInfo)
228 listenerIDs = MatchAgainstEventFilter(name, filteringInfo); 227 listenerIDs = MatchAgainstEventFilter(name, filteringInfo);
229 228
230 var event = attachedNamedEvents[name]; 229 var event = attachedNamedEvents[name];
231 if (!event) 230 if (!event)
232 return; 231 return;
233 232
234 // TODO(asargent): This is an antiquity. Until all callers of
235 // dispatchJSON use actual values, this must remain here to catch the
236 // cases where a caller has hard-coded a JSON string to pass in.
237 if (typeof(args) == "string")
238 args = chromeHidden.JSON.parse(args);
239
240 var dispatchArgs = function(args) { 233 var dispatchArgs = function(args) {
241 result = event.dispatch_(args, listenerIDs); 234 result = event.dispatch_(args, listenerIDs);
242 if (result) 235 if (result)
243 DCHECK(!result.validationErrors, result.validationErrors); 236 DCHECK(!result.validationErrors, result.validationErrors);
244 }; 237 };
245 238
246 if (eventArgumentMassagers[name]) 239 if (eventArgumentMassagers[name])
247 eventArgumentMassagers[name](args, dispatchArgs); 240 eventArgumentMassagers[name](args, dispatchArgs);
248 else 241 else
249 dispatchArgs(args); 242 dispatchArgs(args);
(...skipping 226 matching lines...) Expand 10 before | Expand all | Expand 10 after
476 if (event) 469 if (event)
477 event.detach_(); 470 event.detach_();
478 } 471 }
479 }; 472 };
480 473
481 chromeHidden.dispatchError = function(msg) { 474 chromeHidden.dispatchError = function(msg) {
482 console.error(msg); 475 console.error(msg);
483 }; 476 };
484 477
485 exports.Event = chrome.Event; 478 exports.Event = chrome.Event;
OLDNEW
« no previous file with comments | « chrome/renderer/extensions/dispatcher.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698