Blink roll 25b6bd3a7a131ffe68d809546ad1a20707915cdc:3a503f41ae42e5b79cfcd2ff10e65afde...
[chromium-blink-merge.git] / extensions / common / api / _api_features.json
blob6631b2e8182da75c89e408a66b4ac1861ced4969
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 // This features file defines extension APIs implemented under src/extensions.
6 // See extensions/common/features/* to understand this file, in particular
7 // feature.h, simple_feature.h, and base_feature_provider.h.
8 //
9 // Note that specifying "web_page", "blessed_web_page", or "all" as a context
10 // type will require manually updating chrome/renderer/resources/dispatcher.cc.
12 // To add a new whitelisted ID, SHA-1 it and force it to uppercase. In Bash:
14 // $ echo -n "aaaabbbbccccddddeeeeffffgggghhhh" | \
15 // sha1sum | tr '[:lower:]' '[:upper:]'
16 // 9A0417016F345C934A1A88F55CA17C05014EEEBA  -
18 // Google employees: please update http://go/chrome-api-whitelist to map
19 // hashes back to ids.
22   "app.runtime": [{
23     "channel": "stable",
24     "contexts": ["blessed_extension"],
25     "extension_types": ["platform_app"],
26     "noparent": true
27   }, {
28     "channel": "stable",
29     "component_extensions_auto_granted": false,
30     "contexts": ["blessed_extension"],
31     "extension_types": ["extension"],
32     "noparent": true,
33     "whitelist": [
34       "2FC374607C2DF285634B67C64A2E356C607091C3",  // Quickoffice
35       "3727DD3E564B6055387425027AD74C58784ACC15",  // Quickoffice internal
36       "12E618C3C6E97495AAECF2AC12DEB082353241C6"   // QO component extension
37     ]
38   }],
39   "app.window": [{
40     "channel": "stable",
41     "contexts": ["blessed_extension"],
42     "extension_types": ["platform_app"],
43     "noparent": true
44   }, {
45     "channel": "stable",
46     "contexts": ["blessed_extension"],
47     "extension_types": ["extension"],
48     "noparent": true,
49     "component_extensions_auto_granted": false,
50     "whitelist": [
51       "06BE211D5F014BAB34BC22D9DDA09C63A81D828E",  // Official xkb extension
52       "F94EE6AB36D6C6588670B2B01EB65212D9C64E33"   // Open source xkb extension
53     ]
54   }],
55   // This does not need to be a complex feature if we could set "noparent" here.
56   // But set "noparent" makes this feature available on stable channel. The
57   // issue is tracked in crbug.com/415750.
58   "app.window.canSetVisibleOnAllWorkspaces": [{
59     "contexts": ["blessed_extension"],
60     "channel": "dev"
61   }],
62   "app.currentWindowInternal": {
63     "noparent": true,
64     "internal": true,
65     "channel": "stable",
66     "contexts": ["blessed_extension"]
67   },
68   "app.currentWindowInternal.setShape": {
69     "dependencies": ["permission:app.window.shape"],
70     "contexts": ["blessed_extension"]
71   },
72   // The API for the *embedder* of appview. Appview has both an embedder and
73   // guest API, which are different.
74   "appViewEmbedderInternal": {
75     "internal": true,
76     "contexts": ["blessed_extension"],
77     "dependencies": ["permission:appview"]
78   },
79   "appViewGuestInternal": {
80     "internal": true,
81     "channel": "dev",
82     "contexts": ["blessed_extension"]
83   },
84   "bluetooth": {
85     "dependencies": ["manifest:bluetooth"],
86     "contexts": ["blessed_extension"]
87   },
88   "bluetoothLowEnergy": {
89     "dependencies": ["manifest:bluetooth"],
90     "contexts": ["blessed_extension"]
91   },
92   "bluetoothPrivate": {
93     "dependencies": ["permission:bluetoothPrivate"],
94     "contexts": ["blessed_extension"]
95   },
96   "bluetoothSocket": {
97     "dependencies": ["manifest:bluetooth"],
98     "contexts": ["blessed_extension"]
99   },
100   "declarativeWebRequest": {
101     "dependencies": ["permission:declarativeWebRequest"],
102     "contexts": ["blessed_extension"]
103   },
104   "copresenceSocket": {
105     "channel" : "dev",
106     "dependencies": ["permission:copresence"],
107     "contexts": ["blessed_extension"]
108   },
109   "dns": {
110     "dependencies": ["permission:dns"],
111     "contexts": ["blessed_extension"]
112   },
113   // This is not a real API, only here for documentation purposes.
114   // See http://crbug.com/275944 for background.
115   "extensionTypes": {
116     "internal": true,
117     "channel": "stable",
118     "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
119     "contexts": ["blessed_extension"]
120   },
121   "events": {
122     "internal": true,
123     "channel": "stable",
124     "extension_types": ["platform_app", "extension"],
125     "contexts": "all",
126     "matches": ["<all_urls>"]
127   },
128   "guestViewInternal": [
129     {
130       "internal": true,
131       "channel": "stable",
132       "contexts": ["blessed_extension"]
133     }, {
134       "internal": true,
135       "channel": "trunk",
136       "contexts": ["webui"],
137       "matches": [
138         "chrome://extensions-frame/*",
139         "chrome://extensions/*",
140         "chrome://chrome-signin/*"
141       ]
142     }
143   ],
144   "hid": {
145     "dependencies": ["permission:hid"],
146     "contexts": ["blessed_extension"]
147   },
148   "management": {
149     "dependencies": ["permission:management"],
150     "contexts": ["blessed_extension"]
151   },
152   "management.getPermissionWarningsByManifest": {
153     "dependencies": [],
154     "channel": "stable",
155     "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
156   },
157   "management.getSelf": {
158     "dependencies": [],
159     "channel": "stable",
160     "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
161   },
162   "management.uninstallSelf": {
163     "dependencies": [],
164     "channel": "stable",
165     "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
166   },
167   "power": {
168     "dependencies": ["permission:power"],
169     "contexts": ["blessed_extension"]
170   },
171   "runtime": {
172     "channel": "stable",
173     "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
174     "contexts": ["blessed_extension"]
175   },
176   "runtime.getManifest": {
177     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
178   },
179   "runtime.connect": {
180     // Everything except WebUI.
181     "contexts": [
182       "blessed_web_page",
183       "content_script",
184       "blessed_extension",
185       "unblessed_extension",
186       "web_page"
187     ],
188     "matches": ["<all_urls>"]
189   },
190   "runtime.getURL": {
191     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
192   },
193   "runtime.id": {
194     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
195   },
196   "runtime.lastError": {
197     "contexts": "all",
198     "extension_types": "all",
199     "matches": ["<all_urls>"]
200   },
201   "runtime.onConnect": {
202     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
203   },
204   "runtime.onMessage": {
205     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
206   },
207   "runtime.sendMessage": {
208     // Everything except WebUI.
209     "contexts": [
210       "blessed_web_page",
211       "content_script",
212       "blessed_extension",
213       "unblessed_extension",
214       "web_page"
215     ],
216     "matches": ["<all_urls>"]
217   },
218   "serial": {
219     "dependencies": ["permission:serial"],
220     "contexts": ["blessed_extension"]
221   },
222   "socket": {
223     "dependencies": ["permission:socket"],
224     "contexts": ["blessed_extension"]
225   },
226   "sockets.tcp": {
227     "dependencies": ["manifest:sockets"],
228     "contexts": ["blessed_extension"]
229   },
230   "sockets.tcpServer": {
231     "dependencies": ["manifest:sockets"],
232     "contexts": ["blessed_extension"]
233   },
234   "sockets.udp": {
235     "dependencies": ["manifest:sockets"],
236     "contexts": ["blessed_extension"]
237   },
238   "storage": {
239     "dependencies": ["permission:storage"],
240     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
241   },
242   "system.cpu": {
243     "dependencies": ["permission:system.cpu"],
244     "contexts": ["blessed_extension"]
245   },
246   "system.display": {
247     "dependencies": ["permission:system.display"],
248     "contexts": ["blessed_extension"]
249   },
250   "system.memory": {
251     "dependencies": ["permission:system.memory"],
252     "contexts": ["blessed_extension"]
253   },
254   "system.network": {
255     "dependencies": ["permission:system.network"],
256     "contexts": ["blessed_extension"]
257   },
258   "system.storage": {
259     "dependencies": ["permission:system.storage"],
260     "contexts": ["blessed_extension"]
261   },
262   "system.storage.getAvailableCapacity": {
263     "channel": "dev"
264   },
265   "test": [{
266     "channel": "stable",
267     "extension_types": "all",
268     // Everything except web pages and WebUI. WebUI is declared in a separate
269     // rule to keep the "matches" property isolated.
270     "contexts": [
271       "blessed_extension",
272       "blessed_web_page",
273       "content_script",
274       "unblessed_extension"
275     ]
276   }, {
277     "channel": "stable",
278     "contexts": ["webui"],
279     "matches": [
280       "chrome://extensions/*",
281       "chrome://extensions-frame/*",
282       "chrome://chrome/extensions/*"
283     ]
284   }],
285   "types": {
286     "internal": true,
287     "channel": "stable",
288     "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
289     "contexts": ["blessed_extension"]
290   },
291   "types.private": {
292     // preferencesPrivate is the only API that uses types.private.
293     // If any other APIs need it then they'll need to be added in
294     // separate rules.
295     "dependencies": ["permission:preferencesPrivate"],
296     "contexts": ["blessed_extension"]
297   },
298   "usb": {
299     "dependencies": ["permission:usb"],
300     "contexts": ["blessed_extension"]
301   },
302   "vpnProvider": {
303     "dependencies": ["permission:vpnProvider"],
304     "contexts": ["blessed_extension"]
305   },
306   "webRequest": {
307     "dependencies": ["permission:webRequest"],
308     "contexts": ["blessed_extension"]
309   },
310   "webRequestInternal": [{
311     "internal": true,
312     "channel": "stable",
313     "contexts": ["blessed_extension"]
314   }, {
315     // webview uses webRequestInternal API.
316     "channel": "stable",
317     "internal": true,
318     "contexts": ["webui"],
319     "matches": ["chrome://chrome-signin/*"]
320   }],
321   "webViewExperimentalInternal": [{
322     "internal": true,
323     "channel": "dev",
324     "contexts": ["blessed_extension"],
325     "dependencies": ["permission:webview"]
326   },
327   {
328     "internal": true,
329     "channel": "stable",
330     "contexts": ["blessed_extension"],
331     "dependencies": ["permission:webview"],
332     "whitelist": [
333       "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578",
334       "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB",
335       "1A26E32DE447A17CBE5E9750CDBA78F58539B39C",
336       "59048028102D7B4C681DBC7BC6CD980C3DC66DA3"
337     ]
338   }],
339   "webViewInternal": [{
340     "internal": true,
341     "dependencies": ["permission:webview"],
342     "contexts": ["blessed_extension"]
343   }, {
344     "internal": true,
345     "channel": "dev",
346     "contexts": ["webui"],
347     "matches": ["chrome://chrome-signin/*"]
348   }],
349   "webViewRequest": [{
350     "dependencies": ["permission:webview"],
351     "contexts": ["blessed_extension"]
352   }, {
353     "channel": "stable",
354     "contexts": ["webui"],
355     "matches": ["chrome://chrome-signin/*"]
356   }]