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