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.
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.
24 "contexts": ["blessed_extension"],
25 "extension_types": ["platform_app"],
29 "component_extensions_auto_granted": false,
30 "contexts": ["blessed_extension"],
31 "extension_types": ["extension"],
34 "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice
35 "3727DD3E564B6055387425027AD74C58784ACC15", // Quickoffice internal
36 "12E618C3C6E97495AAECF2AC12DEB082353241C6" // QO component extension
41 "contexts": ["blessed_extension"],
42 "extension_types": ["platform_app"],
46 "contexts": ["blessed_extension"],
47 "extension_types": ["extension"],
49 "component_extensions_auto_granted": false,
51 "06BE211D5F014BAB34BC22D9DDA09C63A81D828E", // Official xkb extension
52 "F94EE6AB36D6C6588670B2B01EB65212D9C64E33" // Open source xkb extension
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"],
62 "app.currentWindowInternal": {
66 "contexts": ["blessed_extension"]
68 "app.currentWindowInternal.setShape": {
69 "dependencies": ["permission:app.window.shape"],
70 "contexts": ["blessed_extension"]
73 "dependencies": ["manifest:bluetooth"],
74 "contexts": ["blessed_extension"]
76 "bluetoothLowEnergy": {
77 "dependencies": ["manifest:bluetooth"],
78 "contexts": ["blessed_extension"]
81 "dependencies": ["permission:bluetoothPrivate"],
82 "contexts": ["blessed_extension"]
85 "dependencies": ["manifest:bluetooth"],
86 "contexts": ["blessed_extension"]
88 "declarativeWebRequest": {
89 "dependencies": ["permission:declarativeWebRequest"],
90 "contexts": ["blessed_extension"]
93 "dependencies": ["permission:dns"],
94 "contexts": ["blessed_extension"]
96 // This is not a real API, only here for documentation purposes.
97 // See http://crbug.com/275944 for background.
101 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
102 "contexts": ["blessed_extension"]
107 "extension_types": ["platform_app", "extension"],
109 "matches": ["<all_urls>"]
111 "guestViewInternal": [
115 "contexts": ["blessed_extension"]
119 "contexts": ["webui"],
121 "chrome://extensions-frame/*",
122 "chrome://extensions/*",
123 "chrome://chrome-signin/*"
128 "dependencies": ["permission:hid"],
129 "contexts": ["blessed_extension"]
132 "dependencies": ["permission:power"],
133 "contexts": ["blessed_extension"]
137 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
138 "contexts": ["blessed_extension"]
140 "runtime.getManifest": {
141 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
144 // Everything except WebUI.
149 "unblessed_extension",
152 "matches": ["<all_urls>"]
155 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
158 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
160 "runtime.lastError": {
162 "extension_types": "all",
163 "matches": ["<all_urls>"]
165 "runtime.onConnect": {
166 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
168 "runtime.onMessage": {
169 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
171 "runtime.sendMessage": {
172 // Everything except WebUI.
177 "unblessed_extension",
180 "matches": ["<all_urls>"]
182 "runtime.setUninstallURL": {
186 "dependencies": ["permission:serial"],
187 "contexts": ["blessed_extension"]
191 "extension_types": ["platform_app"],
192 "contexts": ["blessed_extension"]
195 "dependencies": ["permission:socket"],
196 "contexts": ["blessed_extension"]
199 "dependencies": ["manifest:sockets"],
200 "contexts": ["blessed_extension"]
202 "sockets.tcpServer": {
203 "dependencies": ["manifest:sockets"],
204 "contexts": ["blessed_extension"]
207 "dependencies": ["manifest:sockets"],
208 "contexts": ["blessed_extension"]
211 "dependencies": ["permission:storage"],
212 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
215 "dependencies": ["permission:system.cpu"],
216 "contexts": ["blessed_extension"]
219 "dependencies": ["permission:system.display"],
220 "contexts": ["blessed_extension"]
223 "dependencies": ["permission:system.memory"],
224 "contexts": ["blessed_extension"]
227 "dependencies": ["permission:system.network"],
228 "contexts": ["blessed_extension"]
231 "dependencies": ["permission:system.storage"],
232 "contexts": ["blessed_extension"]
234 "system.storage.getAvailableCapacity": {
239 "extension_types": "all",
240 // Everything except web pages and WebUI. WebUI is declared in a separate
241 // rule to keep the "matches" property isolated.
246 "unblessed_extension"
250 "contexts": ["webui"],
252 "chrome://extensions/*",
253 "chrome://extensions-frame/*",
254 "chrome://chrome/extensions/*"
260 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
261 "contexts": ["blessed_extension"]
264 // preferencesPrivate is the only API that uses types.private.
265 // If any other APIs need it then they'll need to be added in
267 "dependencies": ["permission:preferencesPrivate"],
268 "contexts": ["blessed_extension"]
271 "dependencies": ["permission:usb"],
272 "contexts": ["blessed_extension"]
275 "dependencies": ["permission:webRequest"],
276 "contexts": ["blessed_extension"]
278 "webRequestInternal": [{
281 "contexts": ["blessed_extension"]
283 // webview uses webRequestInternal API.
286 "contexts": ["webui"],
287 "matches": ["chrome://chrome-signin/*"]
289 "webViewExperimentalInternal": [{
292 "contexts": ["blessed_extension"],
293 "dependencies": ["permission:webview"]
298 "contexts": ["blessed_extension"],
299 "dependencies": ["permission:webview"],
301 "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578",
302 "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB",
303 "1A26E32DE447A17CBE5E9750CDBA78F58539B39C",
304 "59048028102D7B4C681DBC7BC6CD980C3DC66DA3"
307 "webViewInternal": [{
309 "dependencies": ["permission:webview"],
310 "contexts": ["blessed_extension"]
314 "contexts": ["webui"],
315 "matches": ["chrome://chrome-signin/*"]
318 "dependencies": ["permission:webview"],
319 "contexts": ["blessed_extension"]
322 "contexts": ["webui"],
323 "matches": ["chrome://chrome-signin/*"]