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').
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().
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
);
30 'storage.' + functionName
,
31 $Array
.concat([namespace], args
),
32 extendSchema(funSchema
.definition
.parameters
),
33 {preserveNullInObjects
: true});
36 var apiFunctions
= ['get', 'set', 'remove', 'clear', 'getBytesInUse'];
37 $Array
.forEach(apiFunctions
, bindApiFunction
);
40 exports
.StorageArea
= StorageArea
;