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
3 // found in the LICENSE file.
5 // This features file defines extension APIs implemented under src/chrome.
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.
22 "accessibilityFeatures": [{
23 "dependencies": ["permission:accessibilityFeatures.modify"],
24 "contexts": ["blessed_extension"]
26 "dependencies": ["permission:accessibilityFeatures.read"],
27 "contexts": ["blessed_extension"]
29 "accessibilityPrivate": {
30 "dependencies": ["permission:accessibilityPrivate"],
31 "contexts": ["blessed_extension"]
33 "activityLogPrivate": {
34 "dependencies": ["permission:activityLogPrivate"],
35 "contexts": ["blessed_extension"]
38 "dependencies": ["permission:alarms"],
39 "contexts": ["blessed_extension"]
43 "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice
44 "3727DD3E564B6055387425027AD74C58784ACC15", // Quickoffice internal
45 "12E618C3C6E97495AAECF2AC12DEB082353241C6", // QO component extension
46 "06BE211D5F014BAB34BC22D9DDA09C63A81D828E", // Official xkb extension
47 "F94EE6AB36D6C6588670B2B01EB65212D9C64E33" // Open source xkb extension
50 "extension_types": ["hosted_app", "extension", "legacy_packaged_app"],
53 "unblessed_extension",
58 // Any webpage can use the app API.
59 "matches": ["<all_urls>"]
62 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
65 "app.getDetailsForFrame": {
66 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
69 "app.getIsInstalled": {
70 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
74 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
78 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
82 "dependencies": ["permission:audio"],
83 "contexts": ["blessed_extension"]
85 "automationInternal": {
87 "dependencies": ["manifest:automation"],
88 "contexts": ["blessed_extension"]
91 "dependencies": ["manifest:automation"],
92 "contexts": ["blessed_extension"]
95 "dependencies": ["permission:autotestPrivate"],
96 "contexts": ["blessed_extension"]
98 "bookmarkManagerPrivate": {
99 "dependencies": ["permission:bookmarkManagerPrivate"],
100 "contexts": ["blessed_extension"]
103 "dependencies": ["permission:bookmarks"],
104 "contexts": ["blessed_extension"]
106 "bookmarks.export": {
107 "extension_types": ["extension"],
108 "location": "component"
110 "bookmarks.import": {
111 "extension_types": ["extension"],
112 "location": "component"
114 "brailleDisplayPrivate": {
115 "dependencies": ["permission:brailleDisplayPrivate"],
116 "contexts": ["blessed_extension"]
119 "dependencies": ["permission:browser"],
120 "contexts": ["blessed_extension"]
123 "dependencies": ["manifest:browser_action"],
124 "contexts": ["blessed_extension"]
126 // This API is whitelisted on stable and should not be enabled for a wider
127 // audience without resolving security issues raised in API proposal and
128 // review (https://codereview.chromium.org/25305002).
129 "browserAction.openPopup": [{
131 "dependencies": ["manifest:browser_action"],
132 "contexts": ["blessed_extension"]
135 "dependencies": ["manifest:browser_action"],
137 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
138 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
139 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
140 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
141 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Google Cast Stable
143 "contexts": ["blessed_extension"]
146 "dependencies": ["permission:browsingData"],
147 "contexts": ["blessed_extension"]
150 "dependencies": ["permission:cast"],
151 "contexts": ["blessed_extension"]
153 "cast.streaming.rtpStream": {
154 "dependencies": ["permission:cast.streaming"],
155 "contexts": ["blessed_extension"]
157 "cast.streaming.session": {
158 "dependencies": ["permission:cast.streaming"],
159 "contexts": ["blessed_extension"]
161 "cast.streaming.udpTransport": {
162 "dependencies": ["permission:cast.streaming"],
163 "contexts": ["blessed_extension"]
165 "chromeosInfoPrivate": {
166 "dependencies": ["permission:chromeosInfoPrivate"],
167 "contexts": ["blessed_extension"]
169 "chromeWebViewInternal": [{
171 "dependencies": ["permission:webview"],
172 "contexts": ["blessed_extension"]
176 "contexts": ["webui"],
177 "matches": ["chrome://chrome-signin/*"]
179 "cloudPrintPrivate": {
180 "dependencies": ["permission:cloudPrintPrivate"],
181 "contexts": ["blessed_extension"]
183 "commandLinePrivate": {
184 "dependencies": ["permission:commandLinePrivate"],
185 "contexts": ["blessed_extension"]
188 "dependencies": ["manifest:commands"],
189 "contexts": ["blessed_extension"]
192 "dependencies": ["permission:contentSettings"],
193 "contexts": ["blessed_extension"]
196 "dependencies": ["permission:contextMenus"],
197 "contexts": ["blessed_extension"]
199 "contextMenusInternal": {
202 "contexts": ["blessed_extension"]
205 "dependencies": ["permission:cookies"],
206 "contexts": ["blessed_extension"]
209 "dependencies": ["permission:copresence"],
210 "contexts": ["blessed_extension"]
212 "copresencePrivate": {
213 "dependencies": ["permission:copresencePrivate"],
214 "contexts": ["blessed_extension"]
217 "dependencies": ["permission:debugger"],
218 "contexts": ["blessed_extension"]
220 "declarativeContent": {
221 "dependencies": ["permission:declarativeContent"],
222 "contexts": ["blessed_extension"]
225 "dependencies": ["permission:desktopCapture"],
226 "contexts": ["blessed_extension"]
228 "developerPrivate": {
229 "dependencies": ["permission:developerPrivate"],
230 "contexts": ["blessed_extension"]
232 "devtools.inspectedWindow": {
233 "dependencies": ["manifest:devtools_page"],
234 "contexts": ["blessed_extension"]
236 "devtools.network": {
237 "dependencies": ["manifest:devtools_page"],
238 "contexts": ["blessed_extension"]
241 "dependencies": ["manifest:devtools_page"],
242 "contexts": ["blessed_extension"]
245 "dependencies": ["permission:diagnostics"],
246 "extension_types": ["platform_app"],
247 "contexts": ["blessed_extension"]
250 "dependencies": ["permission:dial"],
251 "contexts": ["blessed_extension"]
254 "platforms": ["chromeos"],
255 "dependencies": ["permission:documentScan"],
256 "contexts": ["blessed_extension"]
259 "dependencies": ["permission:downloads"],
260 "contexts": ["blessed_extension"]
262 "downloadsInternal": {
265 "contexts": ["blessed_extension"]
267 "easyUnlockPrivate": {
268 "dependencies": ["permission:easyUnlockPrivate"],
269 "contexts": ["blessed_extension"]
272 "dependencies": ["permission:echoPrivate"],
273 "contexts": ["blessed_extension"]
275 "enterprise.platformKeys": {
276 "dependencies": ["permission:enterprise.platformKeys"],
277 "contexts": ["blessed_extension"]
279 "enterprise.platformKeysInternal": {
280 "dependencies": ["permission:enterprise.platformKeys"],
282 "contexts": ["blessed_extension"]
284 "enterprise.platformKeysPrivate": {
285 "dependencies": ["permission:enterprise.platformKeysPrivate"],
286 "contexts": ["blessed_extension"]
288 "experienceSamplingPrivate": {
289 "dependencies": ["permission:experienceSamplingPrivate"],
290 "contexts": ["blessed_extension"]
292 "experimental.devtools.audits": {
293 "dependencies": ["permission:experimental", "manifest:devtools_page"],
294 "contexts": ["blessed_extension"]
296 "experimental.devtools.console": {
297 "dependencies": ["permission:experimental", "manifest:devtools_page"],
298 "contexts": ["blessed_extension"]
302 "extension_types": ["extension", "legacy_packaged_app"],
303 "contexts": ["blessed_extension"]
305 "extension.getURL": {
306 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
308 "extension.getViews": [
311 "contexts": ["blessed_extension"],
312 "extension_types": ["extension", "legacy_packaged_app"]
315 // TODO(yoz): Eliminate this usage.
317 "contexts": ["blessed_extension"],
318 "extension_types": ["platform_app"],
320 "A948368FC53BE437A55FEB414106E207925482F5" // File manager
324 "extension.inIncognitoContext": {
325 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
327 "extension.lastError": {
328 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
330 "extension.onRequest": {
331 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
333 "extension.sendNativeMessage": {
334 "dependencies": ["permission:nativeMessaging"]
336 "extension.sendRequest": {
337 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
339 "extensionOptionsInternal": [{
341 "contexts": ["blessed_extension"],
342 "dependencies": ["permission:embeddedExtensionOptions"]
346 "contexts": ["webui"],
347 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
349 // This is not a real API, only here for documentation purposes.
350 // See http://crbug.com/275944 for background.
351 "extensionsManifestTypes": {
354 "contexts": ["blessed_extension"]
357 "dependencies": ["permission:feedbackPrivate"],
358 "contexts": ["blessed_extension"]
360 "fileBrowserHandler": {
361 "dependencies": ["permission:fileBrowserHandler"],
362 "contexts": ["blessed_extension"]
364 "fileBrowserHandlerInternal": {
366 "dependencies": ["permission:fileBrowserHandler"],
367 "contexts": ["blessed_extension"]
369 "screenlockPrivate": {
370 "dependencies": ["permission:screenlockPrivate"],
371 "extension_types": ["platform_app"],
372 "contexts": ["blessed_extension", "unblessed_extension"]
374 "fileManagerPrivate": {
375 "dependencies": ["permission:fileManagerPrivate"],
376 "contexts": ["blessed_extension"]
378 "fileManagerPrivateInternal": {
380 "dependencies": ["permission:fileManagerPrivate"],
381 "contexts": ["blessed_extension"]
384 "dependencies": ["permission:fileSystem"],
385 "contexts": ["blessed_extension"]
387 "fileSystemProvider": {
388 "dependencies": ["permission:fileSystemProvider"],
389 "contexts": ["blessed_extension"]
391 "fileSystemProviderInternal": {
393 "dependencies": ["permission:fileSystemProvider"],
394 "contexts": ["blessed_extension"]
397 "dependencies": ["permission:firstRunPrivate"],
398 "contexts": ["blessed_extension"]
401 "dependencies": ["permission:fontSettings"],
402 "contexts": ["blessed_extension"]
405 "dependencies": ["permission:gcdPrivate"],
406 "contexts": ["blessed_extension"]
409 "dependencies": ["permission:gcm"],
410 "contexts": ["blessed_extension"]
414 "contexts": ["blessed_extension"],
416 // http://crbug.com/309737
417 "nckgahadagoaajjgafhacjanaoiihapd",
418 "ljclpkphhpbpinifbeabbhlfddcpfdde",
419 "ppleadejekpmccmnpjdimmlfljlkdfej",
420 "eggnbpckecmjlblplehfpjjdhhidfdoj",
421 "jfjjdfefebklmdbmenmlehlopoocnoeh",
422 "knipolnnllmklapflnccelgolnpehhpl"
426 "dependencies": ["permission:history"],
427 "contexts": ["blessed_extension"]
430 "dependencies": ["permission:hotwordPrivate"],
431 "contexts": ["blessed_extension"]
435 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
436 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
439 "dependencies": ["permission:identity"],
440 "contexts": ["blessed_extension"]
442 "identity.getAccounts": {
444 "dependencies": ["permission:identity"],
445 "contexts": ["blessed_extension"]
448 "dependencies": ["permission:identityPrivate"],
449 "contexts": ["blessed_extension"]
452 "dependencies": ["permission:idltest"],
453 "contexts": ["blessed_extension"]
456 "dependencies": ["permission:idle"],
457 "contexts": ["blessed_extension"]
460 "dependencies": ["permission:infobars"],
461 "contexts": ["blessed_extension"]
464 "dependencies": ["permission:input"],
465 "contexts": ["blessed_extension"]
467 "inputMethodPrivate": {
468 "dependencies": ["permission:inputMethodPrivate"],
469 "contexts": ["blessed_extension"]
472 "dependencies": ["manifest:launcher_page"],
473 "contexts": ["blessed_extension"]
476 "dependencies": ["permission:location"],
477 "contexts": ["blessed_extension"]
480 "dependencies": ["permission:logPrivate"],
481 "contexts": ["blessed_extension"]
484 "dependencies": ["permission:webcamPrivate"],
485 "contexts": ["blessed_extension"]
487 // This is not a real API, only here for documentation purposes.
488 // See http://crbug.com/275944 for background.
492 "contexts": ["blessed_extension"]
495 "dependencies": ["permission:mediaGalleries"],
496 "contexts": ["blessed_extension"]
498 "mediaGalleriesPrivate": {
499 "dependencies": ["permission:mediaGalleriesPrivate"],
500 "contexts": ["blessed_extension"]
502 "mediaPlayerPrivate": {
503 "dependencies": ["permission:mediaPlayerPrivate"],
504 "contexts": ["blessed_extension"]
507 "dependencies": ["permission:metricsPrivate"],
508 "contexts": ["blessed_extension"]
511 "dependencies": ["permission:mdns"],
512 "contexts": ["blessed_extension"]
514 "mimeHandlerViewGuestInternal": {
518 "matches": ["<all_urls>"]
520 "musicManagerPrivate": {
521 "dependencies": ["permission:musicManagerPrivate"],
522 "contexts": ["blessed_extension"]
524 "networkingPrivate": {
525 "dependencies": ["permission:networkingPrivate"],
526 "contexts": ["blessed_extension"]
528 "notificationProvider": {
529 "dependencies": ["permission:notificationProvider"],
530 "contexts": ["blessed_extension"]
533 "dependencies": ["permission:notifications"],
534 "contexts": ["blessed_extension"]
537 "dependencies": ["manifest:omnibox"],
538 "contexts": ["blessed_extension"]
541 "dependencies": ["manifest:page_action"],
542 "contexts": ["blessed_extension"]
545 "dependencies": ["permission:pageCapture"],
546 "contexts": ["blessed_extension"]
550 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
551 "contexts": ["blessed_extension"]
553 "preferencesPrivate": {
554 "dependencies": ["permission:preferencesPrivate"],
555 "contexts": ["blessed_extension"]
557 "principalsPrivate": {
558 "dependencies": ["permission:principalsPrivate"],
559 "contexts": ["blessed_extension"]
562 "dependencies": ["permission:privacy"],
563 "contexts": ["blessed_extension"]
566 "dependencies": ["permission:processes"],
567 "contexts": ["blessed_extension"]
570 "dependencies": ["permission:proxy"],
571 "contexts": ["blessed_extension"]
574 "dependencies": ["permission:pushMessaging"],
575 "contexts": ["blessed_extension"]
577 "imageWriterPrivate": {
578 "dependencies": ["permission:imageWriterPrivate"],
579 "extension_types": ["platform_app"],
580 "contexts": ["blessed_extension"]
582 "readingListPrivate": {
583 "dependencies": ["permission:readingListPrivate"],
584 "contexts": ["blessed_extension"]
587 "dependencies": ["permission:rtcPrivate"],
588 "contexts": ["blessed_extension"]
591 "dependencies": ["manifest:script_badge"],
592 "contexts": ["blessed_extension"]
595 "dependencies": ["permission:sessions"],
596 "contexts": ["blessed_extension"]
599 "dependencies": ["permission:signedInDevices"],
600 "contexts": ["blessed_extension"]
603 "dependencies": ["permission:streamsPrivate"],
604 "contexts": ["blessed_extension"]
607 "dependencies": ["permission:syncFileSystem"],
608 "contexts": ["blessed_extension"]
610 "syncedNotificationsPrivate": {
611 "contexts": ["blessed_extension"],
612 "dependencies": ["permission:syncedNotificationsPrivate"]
615 "dependencies": ["manifest:system_indicator"],
616 "contexts": ["blessed_extension"]
619 "dependencies": ["permission:systemPrivate"],
620 "contexts": ["blessed_extension"]
623 "dependencies": ["permission:tabCapture"],
624 "contexts": ["blessed_extension"]
628 "extension_types": ["extension", "legacy_packaged_app"],
629 "contexts": ["blessed_extension"]
637 "tabs.setZoomSettings": {
640 "tabs.getZoomSettings": {
644 "dependencies": ["permission:terminalPrivate"],
645 "contexts": ["blessed_extension"]
648 "dependencies": ["permission:topSites"],
649 "contexts": ["blessed_extension"]
652 "dependencies": ["permission:tts"],
653 "contexts": ["blessed_extension"]
656 "dependencies": ["permission:ttsEngine"],
657 "contexts": ["blessed_extension"]
659 "virtualKeyboardPrivate": {
660 "dependencies": ["permission:virtualKeyboardPrivate"],
661 "contexts": ["blessed_extension"]
664 "dependencies": ["permission:wallpaper"],
665 "contexts": ["blessed_extension"]
667 "wallpaperPrivate": {
668 "dependencies": ["permission:wallpaperPrivate"],
669 "contexts": ["blessed_extension"]
672 "dependencies": ["permission:webNavigation"],
673 "contexts": ["blessed_extension"]
675 "webrtcAudioPrivate": {
676 "dependencies": ["permission:webrtcAudioPrivate"],
677 "contexts": ["blessed_extension"]
679 "webrtcLoggingPrivate": {
680 "dependencies": ["permission:webrtcLoggingPrivate"],
681 "contexts": ["blessed_extension"]
684 // Hosted apps can use the webstore API from within a blessed context.
686 // Set extension_types to 'all' to prevent webstore from being filtered.
687 // Technically, webstore is not in apps or extensions, but it is currently
688 // displayed on /extensions/webstore and /apps/webstore. The "contexts"
689 // restriction effectively restricts this to hosted apps and webpages.
690 "extension_types": "all",
691 "contexts": ["blessed_web_page", "web_page"],
692 // Any webpage can use the webstore API.
693 "matches": ["<all_urls>"]
696 "dependencies": ["permission:webstorePrivate"],
697 // NOTE: even though this is only used by the webstore hosted app, which
698 // normally would mean blessed_web_page, component hosted apps are actually
699 // given the blessed_extension denomination. Confusing.
700 "contexts": ["blessed_extension"]
705 "dependencies": ["permission:webview"],
706 "contexts": ["blessed_extension"]
709 "dependencies": ["api:tabs"],
710 "contexts": ["blessed_extension"]