Add the ability to code generated prepopulated static nested structs
[chromium-blink-merge.git] / extensions / renderer / resources / storage_area.js
blobde737ab43ddde809a9e966f679a66522dcbe83ed
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
3 // found in the LICENSE file.
5 var normalizeArgumentsAndValidate =
6     require('schemaUtils').normalizeArgumentsAndValidate
7 var sendRequest = require('sendRequest').sendRequest;
9 function extendSchema(schema) {
10   var extendedSchema = $Array.slice(schema);
11   extendedSchema.unshift({'type': 'string'});
12   return extendedSchema;
15 function StorageArea(namespace, schema) {
16   // Binds an API function for a namespace to its browser-side call, e.g.
17   // storage.sync.get('foo') -> (binds to) ->
18   // storage.get('sync', 'foo').
19   //
20   // TODO(kalman): Put as a method on CustombindingObject and re-use (or
21   // even generate) for other APIs that need to do this. Same for other
22   // callers of registerCustomType().
23   var self = this;
24   function bindApiFunction(functionName) {
25     self[functionName] = function() {
26       var funSchema = this.functionSchemas[functionName];
27       var args = $Array.slice(arguments);
28       args = normalizeArgumentsAndValidate(args, funSchema);
29       return sendRequest(
30           'storage.' + functionName,
31           $Array.concat([namespace], args),
32           extendSchema(funSchema.definition.parameters),
33           {preserveNullInObjects: true});
34     };
35   }
36   var apiFunctions = ['get', 'set', 'remove', 'clear', 'getBytesInUse'];
37   $Array.forEach(apiFunctions, bindApiFunction);
40 exports.StorageArea = StorageArea;