OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 // Custom bindings for the Permissions API. | 5 // Custom binding for the Permissions API. |
6 | 6 |
7 var chromeHidden = requireNative('chrome_hidden').GetChromeHidden(); | 7 var binding = require('binding').Binding.create('permissions'); |
| 8 |
8 var sendRequest = require('sendRequest').sendRequest; | 9 var sendRequest = require('sendRequest').sendRequest; |
9 var lastError = require('lastError'); | 10 var lastError = require('lastError'); |
10 | 11 |
11 // These custom bindings are only necessary because it is not currently | 12 // These custom binding are only necessary because it is not currently |
12 // possible to have a union of types as the type of the items in an array. | 13 // possible to have a union of types as the type of the items in an array. |
13 // Once that is fixed, this entire file should go away. | 14 // Once that is fixed, this entire file should go away. |
14 // See, | 15 // See, |
15 // https://code.google.com/p/chromium/issues/detail?id=162044 | 16 // https://code.google.com/p/chromium/issues/detail?id=162044 |
16 // https://code.google.com/p/chromium/issues/detail?id=162042 | 17 // https://code.google.com/p/chromium/issues/detail?id=162042 |
17 // TODO(bryeung): delete this file. | 18 // TODO(bryeung): delete this file. |
18 chromeHidden.registerCustomHook('permissions', function(api) { | 19 binding.registerCustomHook(function(api) { |
19 var apiFunctions = api.apiFunctions; | 20 var apiFunctions = api.apiFunctions; |
| 21 var permissions = api.compiledApi; |
20 | 22 |
21 function maybeConvertToObject(str) { | 23 function maybeConvertToObject(str) { |
22 var parts = str.split('|'); | 24 var parts = str.split('|'); |
23 if (parts.length != 2) | 25 if (parts.length != 2) |
24 return str; | 26 return str; |
25 | 27 |
26 var ret = {}; | 28 var ret = {}; |
27 ret[parts[0]] = JSON.parse(parts[1]); | 29 ret[parts[0]] = JSON.parse(parts[1]); |
28 return ret; | 30 return ret; |
29 } | 31 } |
(...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
73 // that handleResponse doesn't call it again. | 75 // that handleResponse doesn't call it again. |
74 if (request.callback) | 76 if (request.callback) |
75 request.callback.apply(request, [response]); | 77 request.callback.apply(request, [response]); |
76 delete request.callback; | 78 delete request.callback; |
77 }); | 79 }); |
78 | 80 |
79 // Also convert complex permissions back to objects for events. The | 81 // Also convert complex permissions back to objects for events. The |
80 // dispatchToListener call happens after argument validation, which works | 82 // dispatchToListener call happens after argument validation, which works |
81 // around the problem that Permissions.permissions is supposed to be a list | 83 // around the problem that Permissions.permissions is supposed to be a list |
82 // of strings. | 84 // of strings. |
83 chrome.permissions.onAdded.dispatchToListener = function(callback, args) { | 85 permissions.onAdded.dispatchToListener = function(callback, args) { |
84 for (var i = 0; i < args[0].permissions.length; i += 1) { | 86 for (var i = 0; i < args[0].permissions.length; i += 1) { |
85 args[0].permissions[i] = maybeConvertToObject(args[0].permissions[i]); | 87 args[0].permissions[i] = maybeConvertToObject(args[0].permissions[i]); |
86 } | 88 } |
87 chrome.Event.prototype.dispatchToListener(callback, args); | 89 chrome.Event.prototype.dispatchToListener(callback, args); |
88 }; | 90 }; |
89 chrome.permissions.onRemoved.dispatchToListener = | 91 permissions.onRemoved.dispatchToListener = |
90 chrome.permissions.onAdded.dispatchToListener; | 92 permissions.onAdded.dispatchToListener; |
91 }); | 93 }); |
| 94 |
| 95 exports.binding = binding.generate(); |
OLD | NEW |