OLD | NEW |
| (Empty) |
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 | |
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; | |
OLD | NEW |