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

Unified Diff: chrome/renderer/resources/extensions/storage_area.js

Issue 12647017: Lazily require types when validating Extensions API calls (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more fixes 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 side-by-side diff with in-line comments
Download patch
Index: chrome/renderer/resources/extensions/storage_area.js
diff --git a/chrome/renderer/resources/extensions/storage_area.js b/chrome/renderer/resources/extensions/storage_area.js
new file mode 100644
index 0000000000000000000000000000000000000000..68a3abf2af113c682dc6ea32d832fd41eab25dcc
--- /dev/null
+++ b/chrome/renderer/resources/extensions/storage_area.js
@@ -0,0 +1,41 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+var forEach = require('utils').forEach;
+var normalizeArgumentsAndValidate =
+ require('schemaUtils').normalizeArgumentsAndValidate
+var sendRequest = require('sendRequest').sendRequest;
+
+function extendSchema(schema) {
+ var extendedSchema = schema.slice();
+ extendedSchema.unshift({'type': 'string'});
+ return extendedSchema;
+}
+
+function StorageArea(namespace, schema) {
+ // Binds an API function for a namespace to its browser-side call, e.g.
+ // storage.sync.get('foo') -> (binds to) ->
+ // storage.get('sync', 'foo').
+ //
+ // TODO(kalman): Put as a method on CustombindingObject and re-use (or
+ // even generate) for other APIs that need to do this. Same for other
+ // callers of registerCustomType().
+ var self = this;
+ function bindApiFunction(i, functionName) {
+ self[functionName] = function() {
+ var funSchema = this.functionSchemas[functionName];
+ var args = Array.prototype.slice.call(arguments);
+ args = normalizeArgumentsAndValidate(args, funSchema);
+ return sendRequest(
+ 'storage.' + functionName,
+ [namespace].concat(args),
+ extendSchema(funSchema.definition.parameters),
+ {preserveNullInObjects: true});
+ };
+ }
+ var apiFunctions = ['get', 'set', 'remove', 'clear', 'getBytesInUse'];
+ forEach(apiFunctions, bindApiFunction);
+}
+
+exports.StorageArea = StorageArea;
« no previous file with comments | « chrome/renderer/resources/extensions/json_schema.js ('k') | chrome/renderer/resources/extensions/storage_custom_bindings.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698