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

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

Issue 12440030: Use utils.forEach everywhere rather than Array.prototype.forEach to guard (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: make foreach of an array give numbers Created 7 years, 9 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
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 require('json_schema'); 5 require('json_schema');
6 require('event_bindings'); 6 require('event_bindings');
7 var chrome = requireNative('chrome').GetChrome();
8 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
9 var forEach = require('utils').forEach;
10 var GetAvailability = requireNative('v8_context').GetAvailability;
11 var logging = requireNative('logging');
12 var process = requireNative('process');
13 var contextType = process.GetContextType();
14 var extensionId = process.GetExtensionId();
15 var manifestVersion = process.GetManifestVersion();
7 var schemaRegistry = requireNative('schema_registry'); 16 var schemaRegistry = requireNative('schema_registry');
17 var schemaUtils = require('schemaUtils');
8 var sendRequest = require('sendRequest').sendRequest; 18 var sendRequest = require('sendRequest').sendRequest;
9 var utils = require('utils'); 19 var utils = require('utils');
10 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden();
11 var chrome = requireNative('chrome').GetChrome();
12 var schemaUtils = require('schemaUtils');
13 var process = requireNative('process');
14 var manifestVersion = process.GetManifestVersion();
15 var extensionId = process.GetExtensionId();
16 var contextType = process.GetContextType();
17 var GetAvailability = requireNative('v8_context').GetAvailability;
18 var logging = requireNative('logging');
19 20
20 // Stores the name and definition of each API function, with methods to 21 // Stores the name and definition of each API function, with methods to
21 // modify their behaviour (such as a custom way to handle requests to the 22 // modify their behaviour (such as a custom way to handle requests to the
22 // API, a custom callback, etc). 23 // API, a custom callback, etc).
23 function APIFunctions() { 24 function APIFunctions() {
24 this.apiFunctions_ = {}; 25 this.apiFunctions_ = {};
25 this.unavailableApiFunctions_ = {}; 26 this.unavailableApiFunctions_ = {};
26 } 27 }
27 28
28 APIFunctions.prototype.register = function(apiName, apiFunction) { 29 APIFunctions.prototype.register = function(apiName, apiFunction) {
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
157 // Registers a function |hook| to run after the schema for all APIs has been 158 // Registers a function |hook| to run after the schema for all APIs has been
158 // generated. The hook is passed as its first argument an "API" object to 159 // generated. The hook is passed as its first argument an "API" object to
159 // interact with, and second the current extension ID. See where 160 // interact with, and second the current extension ID. See where
160 // |customHooks| is used. 161 // |customHooks| is used.
161 registerCustomHook: function(fn) { 162 registerCustomHook: function(fn) {
162 this.customHooks_.push(fn); 163 this.customHooks_.push(fn);
163 }, 164 },
164 165
165 // TODO(kalman/cduvall): Refactor this so |runHooks_| is not needed. 166 // TODO(kalman/cduvall): Refactor this so |runHooks_| is not needed.
166 runHooks_: function(api) { 167 runHooks_: function(api) {
167 this.customHooks_.forEach(function(hook) { 168 forEach(this.customHooks_, function(i, hook) {
168 if (!isSchemaNodeSupported(this.schema_, platform, manifestVersion)) 169 if (!isSchemaNodeSupported(this.schema_, platform, manifestVersion))
169 return; 170 return;
170 171
171 if (!hook) 172 if (!hook)
172 return; 173 return;
173 174
174 hook({ 175 hook({
175 apiFunctions: this.apiFunctions_, 176 apiFunctions: this.apiFunctions_,
176 schema: this.schema_, 177 schema: this.schema_,
177 compiledApi: api 178 compiledApi: api
(...skipping 23 matching lines...) Expand all
201 var mod = {}; 202 var mod = {};
202 203
203 var namespaces = schema.namespace.split('.'); 204 var namespaces = schema.namespace.split('.');
204 for (var index = 0, name; name = namespaces[index]; index++) { 205 for (var index = 0, name; name = namespaces[index]; index++) {
205 mod[name] = mod[name] || {}; 206 mod[name] = mod[name] || {};
206 mod = mod[name]; 207 mod = mod[name];
207 } 208 }
208 209
209 // Add types to global schemaValidator 210 // Add types to global schemaValidator
210 if (schema.types) { 211 if (schema.types) {
211 schema.types.forEach(function(t) { 212 forEach(schema.types, function(i, t) {
212 if (!isSchemaNodeSupported(t, platform, manifestVersion)) 213 if (!isSchemaNodeSupported(t, platform, manifestVersion))
213 return; 214 return;
214 215
215 schemaUtils.schemaValidator.addTypes(t); 216 schemaUtils.schemaValidator.addTypes(t);
216 if (t.type == 'object' && this.customTypes_[t.id]) { 217 if (t.type == 'object' && this.customTypes_[t.id]) {
217 var parts = t.id.split("."); 218 var parts = t.id.split(".");
218 this.customTypes_[t.id].prototype.setSchema(t); 219 this.customTypes_[t.id].prototype.setSchema(t);
219 mod[parts[parts.length - 1]] = this.customTypes_[t.id]; 220 mod[parts[parts.length - 1]] = this.customTypes_[t.id];
220 } 221 }
221 }, this); 222 }, this);
(...skipping 13 matching lines...) Expand all
235 function addUnprivilegedAccessGetter(mod, name) { 236 function addUnprivilegedAccessGetter(mod, name) {
236 mod.__defineGetter__(name, function() { 237 mod.__defineGetter__(name, function() {
237 throw new Error( 238 throw new Error(
238 '"' + name + '" can only be used in extension processes. See ' + 239 '"' + name + '" can only be used in extension processes. See ' +
239 'the content scripts documentation for more details.'); 240 'the content scripts documentation for more details.');
240 }); 241 });
241 } 242 }
242 243
243 // Setup Functions. 244 // Setup Functions.
244 if (schema.functions) { 245 if (schema.functions) {
245 schema.functions.forEach(function(functionDef) { 246 forEach(schema.functions, function(i, functionDef) {
246 if (functionDef.name in mod) { 247 if (functionDef.name in mod) {
247 throw new Error('Function ' + functionDef.name + 248 throw new Error('Function ' + functionDef.name +
248 ' already defined in ' + schema.namespace); 249 ' already defined in ' + schema.namespace);
249 } 250 }
250 251
251 if (!isSchemaNodeSupported(functionDef, platform, manifestVersion)) { 252 if (!isSchemaNodeSupported(functionDef, platform, manifestVersion)) {
252 this.apiFunctions_.registerUnavailable(functionDef.name); 253 this.apiFunctions_.registerUnavailable(functionDef.name);
253 return; 254 return;
254 } 255 }
255 if (!isSchemaAccessAllowed(functionDef)) { 256 if (!isSchemaAccessAllowed(functionDef)) {
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 this.definition.returns) { 303 this.definition.returns) {
303 schemaUtils.validate([retval], [this.definition.returns]); 304 schemaUtils.validate([retval], [this.definition.returns]);
304 } 305 }
305 return retval; 306 return retval;
306 }).bind(apiFunction); 307 }).bind(apiFunction);
307 }, this); 308 }, this);
308 } 309 }
309 310
310 // Setup Events 311 // Setup Events
311 if (schema.events) { 312 if (schema.events) {
312 schema.events.forEach(function(eventDef) { 313 forEach(schema.events, function(i, eventDef) {
313 if (eventDef.name in mod) { 314 if (eventDef.name in mod) {
314 throw new Error('Event ' + eventDef.name + 315 throw new Error('Event ' + eventDef.name +
315 ' already defined in ' + schema.namespace); 316 ' already defined in ' + schema.namespace);
316 } 317 }
317 if (!isSchemaNodeSupported(eventDef, platform, manifestVersion)) 318 if (!isSchemaNodeSupported(eventDef, platform, manifestVersion))
318 return; 319 return;
319 if (!isSchemaAccessAllowed(eventDef)) { 320 if (!isSchemaAccessAllowed(eventDef)) {
320 addUnprivilegedAccessGetter(mod, eventDef.name); 321 addUnprivilegedAccessGetter(mod, eventDef.name);
321 return; 322 return;
322 } 323 }
(...skipping 15 matching lines...) Expand all
338 eventName, eventDef.parameters, options); 339 eventName, eventDef.parameters, options);
339 } 340 }
340 }, this); 341 }, this);
341 } 342 }
342 343
343 function addProperties(m, parentDef) { 344 function addProperties(m, parentDef) {
344 var properties = parentDef.properties; 345 var properties = parentDef.properties;
345 if (!properties) 346 if (!properties)
346 return; 347 return;
347 348
348 utils.forEach(properties, function(propertyName, propertyDef) { 349 forEach(properties, function(propertyName, propertyDef) {
349 if (propertyName in m) 350 if (propertyName in m)
350 return; // TODO(kalman): be strict like functions/events somehow. 351 return; // TODO(kalman): be strict like functions/events somehow.
351 if (!isSchemaNodeSupported(propertyDef, platform, manifestVersion)) 352 if (!isSchemaNodeSupported(propertyDef, platform, manifestVersion))
352 return; 353 return;
353 if (!isSchemaAccessAllowed(propertyDef)) { 354 if (!isSchemaAccessAllowed(propertyDef)) {
354 addUnprivilegedAccessGetter(m, propertyName); 355 addUnprivilegedAccessGetter(m, propertyName);
355 return; 356 return;
356 } 357 }
357 358
358 var value = propertyDef.value; 359 var value = propertyDef.value;
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 }); 399 });
399 }; 400 };
400 401
401 addProperties(mod, schema); 402 addProperties(mod, schema);
402 this.runHooks_(mod); 403 this.runHooks_(mod);
403 return mod; 404 return mod;
404 } 405 }
405 }; 406 };
406 407
407 exports.Binding = Binding; 408 exports.Binding = Binding;
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698