Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(228)

Side by Side Diff: chrome/renderer/resources/extensions/permissions_custom_bindings.js

Issue 17451011: Make the externally connectable browser test clobber all of the builtins, (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase Created 7 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 binding for the Permissions API.
6 6
7 var binding = require('binding').Binding.create('permissions'); 7 var binding = require('binding').Binding.create('permissions');
8 8
9 var Event = require('event_bindings').Event; 9 var Event = require('event_bindings').Event;
10 var sendRequest = require('sendRequest').sendRequest; 10 var sendRequest = require('sendRequest').sendRequest;
11 11
12 // These custom binding are only necessary because it is not currently 12 // These custom binding 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. 13 // 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. 14 // Once that is fixed, this entire file should go away.
15 // See, 15 // See,
16 // https://code.google.com/p/chromium/issues/detail?id=162044 16 // https://code.google.com/p/chromium/issues/detail?id=162044
17 // https://code.google.com/p/chromium/issues/detail?id=162042 17 // https://code.google.com/p/chromium/issues/detail?id=162042
18 // TODO(bryeung): delete this file. 18 // TODO(bryeung): delete this file.
19 binding.registerCustomHook(function(api) { 19 binding.registerCustomHook(function(api) {
20 var apiFunctions = api.apiFunctions; 20 var apiFunctions = api.apiFunctions;
21 var permissions = api.compiledApi; 21 var permissions = api.compiledApi;
22 22
23 function maybeConvertToObject(str) { 23 function maybeConvertToObject(str) {
24 var parts = str.split('|'); 24 var parts = $String.split(str, '|');
25 if (parts.length != 2) 25 if (parts.length != 2)
26 return str; 26 return str;
27 27
28 var ret = {}; 28 var ret = {};
29 ret[parts[0]] = JSON.parse(parts[1]); 29 ret[parts[0]] = JSON.parse(parts[1]);
30 return ret; 30 return ret;
31 } 31 }
32 32
33 function convertObjectPermissionsToStrings() { 33 function convertObjectPermissionsToStrings() {
34 if (arguments.length < 1) 34 if (arguments.length < 1)
35 return arguments; 35 return arguments;
36 36
37 var args = arguments[0].permissions; 37 var args = arguments[0].permissions;
38 if (!args) 38 if (!args)
39 return arguments; 39 return arguments;
40 40
41 for (var i = 0; i < args.length; i += 1) { 41 for (var i = 0; i < args.length; i += 1) {
42 if (typeof(args[i]) == 'object') { 42 if (typeof(args[i]) == 'object') {
43 var a = args[i]; 43 var a = args[i];
44 var keys = Object.keys(a); 44 var keys = $Object.keys(a);
45 if (keys.length != 1) { 45 if (keys.length != 1) {
46 throw new Error("Too many keys in object-style permission."); 46 throw new Error("Too many keys in object-style permission.");
47 } 47 }
48 arguments[0].permissions[i] = keys[0] + '|' + 48 arguments[0].permissions[i] = keys[0] + '|' +
49 JSON.stringify(a[keys[0]]); 49 JSON.stringify(a[keys[0]]);
50 } 50 }
51 } 51 }
52 52
53 return arguments; 53 return arguments;
54 } 54 }
(...skipping 13 matching lines...) Expand all
68 response.permissions[i] = 68 response.permissions[i] =
69 maybeConvertToObject(response.permissions[i]); 69 maybeConvertToObject(response.permissions[i]);
70 } 70 }
71 71
72 // Since the schema says Permissions.permissions contains strings and 72 // Since the schema says Permissions.permissions contains strings and
73 // not objects, validation will fail after the for-loop above. This 73 // not objects, validation will fail after the for-loop above. This
74 // skips validation and calls the callback directly, then clears it so 74 // skips validation and calls the callback directly, then clears it so
75 // that handleResponse doesn't call it again. 75 // that handleResponse doesn't call it again.
76 try { 76 try {
77 if (request.callback) 77 if (request.callback)
78 request.callback.apply(request, [response]); 78 $Function.apply(request.callback, request, [response]);
79 } finally { 79 } finally {
80 delete request.callback; 80 delete request.callback;
81 } 81 }
82 }); 82 });
83 83
84 // Also convert complex permissions back to objects for events. The 84 // Also convert complex permissions back to objects for events. The
85 // dispatchToListener call happens after argument validation, which works 85 // dispatchToListener call happens after argument validation, which works
86 // around the problem that Permissions.permissions is supposed to be a list 86 // around the problem that Permissions.permissions is supposed to be a list
87 // of strings. 87 // of strings.
88 permissions.onAdded.dispatchToListener = function(callback, args) { 88 permissions.onAdded.dispatchToListener = function(callback, args) {
89 for (var i = 0; i < args[0].permissions.length; i += 1) { 89 for (var i = 0; i < args[0].permissions.length; i += 1) {
90 args[0].permissions[i] = maybeConvertToObject(args[0].permissions[i]); 90 args[0].permissions[i] = maybeConvertToObject(args[0].permissions[i]);
91 } 91 }
92 Event.prototype.dispatchToListener(callback, args); 92 Event.prototype.dispatchToListener(callback, args);
93 }; 93 };
94 permissions.onRemoved.dispatchToListener = 94 permissions.onRemoved.dispatchToListener =
95 permissions.onAdded.dispatchToListener; 95 permissions.onAdded.dispatchToListener;
96 }); 96 });
97 97
98 exports.binding = binding.generate(); 98 exports.binding = binding.generate();
OLDNEW
« no previous file with comments | « chrome/renderer/resources/extensions/omnibox_custom_bindings.js ('k') | chrome/renderer/resources/extensions/platform_app.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698