Home | History | Annotate | Download | only in resources
      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.
      4 
      5 var normalizeArgumentsAndValidate =
      6     require('schemaUtils').normalizeArgumentsAndValidate
      7 var sendRequest = require('sendRequest').sendRequest;
      8 
      9 function extendSchema(schema) {
     10   var extendedSchema = $Array.slice(schema);
     11   extendedSchema.unshift({'type': 'string'});
     12   return extendedSchema;
     13 }
     14 
     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);
     38 }
     39 
     40 exports.StorageArea = StorageArea;
     41