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.
4
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.
11
12// To add a new whitelisted ID, SHA-1 it and force it to uppercase. In Bash:
13//
14// $ echo -n "aaaabbbbccccddddeeeeffffgggghhhh" | \
15// sha1sum | tr '[:lower:]' '[:upper:]'
16// 9A0417016F345C934A1A88F55CA17C05014EEEBA  -
17//
18// Google employees: please update http://go/chrome-api-whitelist to map
19// hashes back to ids.
20
21{
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  "app.window.canSetVisibleOnAllWorkspaces": {
46    "channel": "dev"
47  },
48  "app.currentWindowInternal": {
49    "noparent": true,
50    "internal": true,
51    "channel": "stable",
52    "contexts": ["blessed_extension"]
53  },
54  "app.currentWindowInternal.setShape": {
55    "dependencies": ["permission:app.window.shape"],
56    "contexts": ["blessed_extension"]
57  },
58  "dns": {
59    "dependencies": ["permission:dns"],
60    "contexts": ["blessed_extension"]
61  },
62  // This is not a real API, only here for documentation purposes.
63  // See http://crbug.com/275944 for background.
64  "extensionTypes": {
65    "internal": true,
66    "channel": "stable",
67    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
68    "contexts": ["blessed_extension"]
69  },
70  "guestViewInternal": [
71    {
72      "internal": true,
73      "channel": "stable",
74      "contexts": ["blessed_extension"]
75    }, {
76      "internal": true,
77      "channel": "trunk",
78      "contexts": ["webui"],
79      "matches": [
80        "chrome://extensions-frame/*",
81        "chrome://extensions/*",
82        "chrome://chrome-signin/*"
83      ]
84    }
85  ],
86  "hid": {
87    "dependencies": ["permission:hid"],
88    "contexts": ["blessed_extension"]
89  },
90  "power": {
91    "dependencies": ["permission:power"],
92    "contexts": ["blessed_extension"]
93  },
94  "runtime": {
95    "channel": "stable",
96    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
97    "contexts": ["blessed_extension"]
98  },
99  "runtime.getManifest": {
100    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
101  },
102  "runtime.connect": {
103    // Everything except WebUI.
104    "contexts": [
105      "blessed_web_page",
106      "content_script",
107      "blessed_extension",
108      "unblessed_extension",
109      "web_page"
110    ],
111    "matches": ["<all_urls>"]
112  },
113  "runtime.getURL": {
114    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
115  },
116  "runtime.id": {
117    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
118  },
119  "runtime.lastError": {
120    "contexts": "all",
121    "extension_types": "all",
122    "matches": ["<all_urls>"]
123  },
124  "runtime.onConnect": {
125    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
126  },
127  "runtime.onMessage": {
128    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
129  },
130  "runtime.sendMessage": {
131    // Everything except WebUI.
132    "contexts": [
133      "blessed_web_page",
134      "content_script",
135      "blessed_extension",
136      "unblessed_extension",
137      "web_page"
138    ],
139    "matches": ["<all_urls>"]
140  },
141  "runtime.setUninstallURL": {
142    "channel": "dev"
143  },
144  "serial": {
145    "dependencies": ["permission:serial"],
146    "contexts": ["blessed_extension"]
147  },
148  "socket": {
149    "dependencies": ["permission:socket"],
150    "contexts": ["blessed_extension"]
151  },
152  "sockets.tcp": {
153    "dependencies": ["manifest:sockets"],
154    "contexts": ["blessed_extension"]
155  },
156  "sockets.tcpServer": {
157    "dependencies": ["manifest:sockets"],
158    "contexts": ["blessed_extension"]
159  },
160  "sockets.udp": {
161    "dependencies": ["manifest:sockets"],
162    "contexts": ["blessed_extension"]
163  },
164  "storage": {
165    "dependencies": ["permission:storage"],
166    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
167  },
168  "system.cpu": {
169    "dependencies": ["permission:system.cpu"],
170    "contexts": ["blessed_extension"]
171  },
172  "system.display": {
173    "dependencies": ["permission:system.display"],
174    "contexts": ["blessed_extension"]
175  },
176  "system.memory": {
177    "dependencies": ["permission:system.memory"],
178    "contexts": ["blessed_extension"]
179  },
180  "system.network": {
181    "dependencies": ["permission:system.network"],
182    "contexts": ["blessed_extension"]
183  },
184  "system.storage": {
185    "dependencies": ["permission:system.storage"],
186    "contexts": ["blessed_extension"]
187  },
188  "system.storage.getAvailableCapacity": {
189    "channel": "dev"
190  },
191  "test": [{
192    "channel": "stable",
193    "extension_types": "all",
194    // Everything except web pages and WebUI. WebUI is declared in a separate
195    // rule to keep the "matches" property isolated.
196    "contexts": [
197      "blessed_extension",
198      "blessed_web_page",
199      "content_script",
200      "unblessed_extension"
201    ]
202  }, {
203    "channel": "stable",
204    "contexts": ["webui"],
205    "matches": [
206      "chrome://extensions/*",
207      "chrome://extensions-frame/*",
208      "chrome://chrome/extensions/*"
209    ]
210  }],
211  "types": {
212    "internal": true,
213    "channel": "stable",
214    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
215    "contexts": ["blessed_extension"]
216  },
217  "types.private": {
218    "channel": "dev",
219    "extension_types": ["extension"],
220    "location": "component"
221  },
222  "usb": {
223    "dependencies": ["permission:usb"],
224    "contexts": ["blessed_extension"]
225  },
226  "usbPrivate": {
227    "channel": "dev",
228    "contexts": ["webui"]
229  },
230  "webViewExperimentalInternal": [{
231    "internal": true,
232    "channel": "dev",
233    "contexts": ["blessed_extension"],
234    "dependencies": ["permission:webview"]
235  },
236  {
237    "internal": true,
238    "channel": "stable",
239    "contexts": ["blessed_extension"],
240    "dependencies": ["permission:webview"],
241    "whitelist": [
242      "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578",
243      "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB",
244      "1A26E32DE447A17CBE5E9750CDBA78F58539B39C",
245      "59048028102D7B4C681DBC7BC6CD980C3DC66DA3"
246    ]
247  }],
248  "webViewInternal": [{
249    "internal": true,
250    "dependencies": ["permission:webview"],
251    "contexts": ["blessed_extension"]
252  }, {
253    "internal": true,
254    "channel": "dev",
255    "contexts": ["webui"],
256    "matches": ["chrome://chrome-signin/*"]
257  }]
258}
259