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
48 "extension_types": ["hosted_app", "extension", "legacy_packaged_app"],
51 "unblessed_extension",
56 // Any webpage can use the app API.
57 "matches": ["<all_urls>"]
59 // The API for the *embedder* of appview. Appview has both an embedder and
60 // guest API, which are different.
61 "appViewEmbedderInternal": {
63 "contexts": ["blessed_extension"],
64 "dependencies": ["permission:appview"]
66 // TODO(fsamuel,kalman): Rename this appViewGuestInternal.
70 "contexts": ["blessed_extension"]
73 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
76 "app.getDetailsForFrame": {
77 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
80 "app.getIsInstalled": {
81 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
85 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
89 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
93 "dependencies": ["permission:audio"],
94 "contexts": ["blessed_extension"]
96 "automationInternal": {
98 "dependencies": ["manifest:automation"],
99 "contexts": ["blessed_extension"]
102 "dependencies": ["manifest:automation"],
103 "contexts": ["blessed_extension"]
106 "dependencies": ["permission:autotestPrivate"],
107 "contexts": ["blessed_extension"]
110 "dependencies": ["manifest:bluetooth"],
111 "contexts": ["blessed_extension"]
113 "bluetoothLowEnergy": {
114 "dependencies": ["manifest:bluetooth"],
115 "contexts": ["blessed_extension"]
117 "bluetoothPrivate": {
118 "dependencies": ["permission:bluetoothPrivate"],
119 "contexts": ["blessed_extension"]
122 "dependencies": ["manifest:bluetooth"],
123 "contexts": ["blessed_extension"]
125 "bookmarkManagerPrivate": {
126 "dependencies": ["permission:bookmarkManagerPrivate"],
127 "contexts": ["blessed_extension"]
130 "dependencies": ["permission:bookmarks"],
131 "contexts": ["blessed_extension"]
133 "bookmarks.export": {
134 "extension_types": ["extension"],
135 "location": "component"
137 "bookmarks.import": {
138 "extension_types": ["extension"],
139 "location": "component"
141 "brailleDisplayPrivate": {
142 "dependencies": ["permission:brailleDisplayPrivate"],
143 "contexts": ["blessed_extension"]
146 "dependencies": ["permission:browser"],
147 "contexts": ["blessed_extension"]
150 "dependencies": ["manifest:browser_action"],
151 "contexts": ["blessed_extension"]
153 // This API is whitelisted on stable and should not be enabled for a wider
154 // audience without resolving security issues raised in API proposal and
155 // review (https://codereview.chromium.org/25305002).
156 "browserAction.openPopup": [{
158 "dependencies": ["manifest:browser_action"],
159 "contexts": ["blessed_extension"]
162 "dependencies": ["manifest:browser_action"],
164 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
165 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
166 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
167 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
168 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Google Cast Stable
170 "contexts": ["blessed_extension"]
173 "dependencies": ["permission:browsingData"],
174 "contexts": ["blessed_extension"]
177 "dependencies": ["permission:cast"],
178 "contexts": ["blessed_extension"]
180 "cast.streaming.rtpStream": {
181 "dependencies": ["permission:cast.streaming"],
182 "contexts": ["blessed_extension"]
184 "cast.streaming.session": {
185 "dependencies": ["permission:cast.streaming"],
186 "contexts": ["blessed_extension"]
188 "cast.streaming.udpTransport": {
189 "dependencies": ["permission:cast.streaming"],
190 "contexts": ["blessed_extension"]
192 "chromeosInfoPrivate": {
193 "dependencies": ["permission:chromeosInfoPrivate"],
194 "contexts": ["blessed_extension"]
196 "chromeWebViewInternal": [{
198 "dependencies": ["permission:webview"],
199 "contexts": ["blessed_extension"]
203 "contexts": ["webui"],
204 "matches": ["chrome://chrome-signin/*"]
206 "cloudPrintPrivate": {
207 "dependencies": ["permission:cloudPrintPrivate"],
208 "contexts": ["blessed_extension"]
210 "commandLinePrivate": {
211 "dependencies": ["permission:commandLinePrivate"],
212 "contexts": ["blessed_extension"]
215 "dependencies": ["manifest:commands"],
216 "contexts": ["blessed_extension"]
219 "dependencies": ["permission:contentSettings"],
220 "contexts": ["blessed_extension"]
223 "dependencies": ["permission:contextMenus"],
224 "contexts": ["blessed_extension"]
226 "contextMenusInternal": {
229 "contexts": ["blessed_extension"]
232 "dependencies": ["permission:cookies"],
233 "contexts": ["blessed_extension"]
236 "dependencies": ["permission:copresence"],
237 "contexts": ["blessed_extension"]
239 "copresencePrivate": {
240 "dependencies": ["permission:copresencePrivate"],
241 "contexts": ["blessed_extension"]
244 "dependencies": ["permission:debugger"],
245 "contexts": ["blessed_extension"]
247 "declarativeContent": {
248 "dependencies": ["permission:declarativeContent"],
249 "contexts": ["blessed_extension"]
251 "declarativeWebRequest": {
252 "dependencies": ["permission:declarativeWebRequest"],
253 "contexts": ["blessed_extension"]
256 "dependencies": ["permission:desktopCapture"],
257 "contexts": ["blessed_extension"]
259 "developerPrivate": {
260 "dependencies": ["permission:developerPrivate"],
261 "contexts": ["blessed_extension"]
263 "devtools.inspectedWindow": {
264 "dependencies": ["manifest:devtools_page"],
265 "contexts": ["blessed_extension"]
267 "devtools.network": {
268 "dependencies": ["manifest:devtools_page"],
269 "contexts": ["blessed_extension"]
272 "dependencies": ["manifest:devtools_page"],
273 "contexts": ["blessed_extension"]
276 "dependencies": ["permission:diagnostics"],
277 "extension_types": ["platform_app"],
278 "contexts": ["blessed_extension"]
281 "dependencies": ["permission:dial"],
282 "contexts": ["blessed_extension"]
285 "dependencies": ["permission:downloads"],
286 "contexts": ["blessed_extension"]
288 "downloadsInternal": {
291 "contexts": ["blessed_extension"]
293 "easyUnlockPrivate": {
294 "dependencies": ["permission:easyUnlockPrivate"],
295 "contexts": ["blessed_extension"]
298 "dependencies": ["permission:echoPrivate"],
299 "contexts": ["blessed_extension"]
301 "enterprise.platformKeys": {
302 "dependencies": ["permission:enterprise.platformKeys"],
303 "contexts": ["blessed_extension"]
305 "enterprise.platformKeysInternal": {
306 "dependencies": ["permission:enterprise.platformKeys"],
308 "contexts": ["blessed_extension"]
310 "enterprise.platformKeysPrivate": {
311 "dependencies": ["permission:enterprise.platformKeysPrivate"],
312 "contexts": ["blessed_extension"]
317 "extension_types": ["platform_app", "extension"],
319 "matches": ["<all_urls>"]
321 "experienceSamplingPrivate": {
322 "dependencies": ["permission:experienceSamplingPrivate"],
323 "contexts": ["blessed_extension"]
325 "experimental.devtools.audits": {
326 "dependencies": ["permission:experimental", "manifest:devtools_page"],
327 "contexts": ["blessed_extension"]
329 "experimental.devtools.console": {
330 "dependencies": ["permission:experimental", "manifest:devtools_page"],
331 "contexts": ["blessed_extension"]
335 "extension_types": ["extension", "legacy_packaged_app"],
336 "contexts": ["blessed_extension"]
338 "extension.getURL": {
339 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
341 "extension.getViews": [
344 "contexts": ["blessed_extension"],
345 "extension_types": ["extension", "legacy_packaged_app"]
348 // TODO(yoz): Eliminate this usage.
350 "contexts": ["blessed_extension"],
351 "extension_types": ["platform_app"],
353 "A948368FC53BE437A55FEB414106E207925482F5" // File manager
357 "extension.inIncognitoContext": {
358 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
360 "extension.lastError": {
361 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
363 "extension.onRequest": {
364 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
366 "extension.sendNativeMessage": {
367 "dependencies": ["permission:nativeMessaging"]
369 "extension.sendRequest": {
370 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
372 "extensionOptionsInternal": [{
374 "contexts": ["blessed_extension"],
375 "dependencies": ["permission:embeddedExtensionOptions"]
379 "contexts": ["webui"],
380 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
382 // This is not a real API, only here for documentation purposes.
383 // See http://crbug.com/275944 for background.
384 "extensionsManifestTypes": {
387 "contexts": ["blessed_extension"]
390 "dependencies": ["permission:feedbackPrivate"],
391 "contexts": ["blessed_extension"]
393 "fileBrowserHandler": {
394 "dependencies": ["permission:fileBrowserHandler"],
395 "contexts": ["blessed_extension"]
397 "fileBrowserHandlerInternal": {
399 "dependencies": ["permission:fileBrowserHandler"],
400 "contexts": ["blessed_extension"]
402 "screenlockPrivate": {
403 "dependencies": ["permission:screenlockPrivate"],
404 "extension_types": ["platform_app"],
405 "contexts": ["blessed_extension", "unblessed_extension"]
407 "fileManagerPrivate": {
408 "dependencies": ["permission:fileManagerPrivate"],
409 "contexts": ["blessed_extension"]
411 "fileManagerPrivateInternal": {
413 "dependencies": ["permission:fileManagerPrivate"],
414 "contexts": ["blessed_extension"]
417 "dependencies": ["permission:fileSystem"],
418 "contexts": ["blessed_extension"]
420 "fileSystemProvider": {
421 "dependencies": ["permission:fileSystemProvider"],
422 "contexts": ["blessed_extension"]
424 "fileSystemProviderInternal": {
426 "dependencies": ["permission:fileSystemProvider"],
427 "contexts": ["blessed_extension"]
430 "dependencies": ["permission:firstRunPrivate"],
431 "contexts": ["blessed_extension"]
434 "dependencies": ["permission:fontSettings"],
435 "contexts": ["blessed_extension"]
438 "dependencies": ["permission:gcdPrivate"],
439 "contexts": ["blessed_extension"]
442 "dependencies": ["permission:gcm"],
443 "contexts": ["blessed_extension"]
447 "contexts": ["blessed_extension"],
449 // http://crbug.com/309737
450 "nckgahadagoaajjgafhacjanaoiihapd",
451 "ljclpkphhpbpinifbeabbhlfddcpfdde",
452 "ppleadejekpmccmnpjdimmlfljlkdfej",
453 "eggnbpckecmjlblplehfpjjdhhidfdoj",
454 "jfjjdfefebklmdbmenmlehlopoocnoeh",
455 "knipolnnllmklapflnccelgolnpehhpl"
459 "dependencies": ["permission:history"],
460 "contexts": ["blessed_extension"]
463 "dependencies": ["permission:hotwordPrivate"],
464 "contexts": ["blessed_extension"]
468 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
469 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
472 "dependencies": ["permission:identity"],
473 "contexts": ["blessed_extension"]
475 "identity.getAccounts": {
477 "dependencies": ["permission:identity"],
478 "contexts": ["blessed_extension"]
481 "dependencies": ["permission:identityPrivate"],
482 "contexts": ["blessed_extension"]
485 "dependencies": ["permission:idltest"],
486 "contexts": ["blessed_extension"]
489 "dependencies": ["permission:idle"],
490 "contexts": ["blessed_extension"]
493 "dependencies": ["permission:infobars"],
494 "contexts": ["blessed_extension"]
497 "dependencies": ["permission:input"],
498 "contexts": ["blessed_extension"]
500 "inputMethodPrivate": {
501 "dependencies": ["permission:inputMethodPrivate"],
502 "contexts": ["blessed_extension"]
505 "dependencies": ["permission:location"],
506 "contexts": ["blessed_extension"]
509 "dependencies": ["permission:logPrivate"],
510 "contexts": ["blessed_extension"]
513 "dependencies": ["permission:webcamPrivate"],
514 "contexts": ["blessed_extension"]
517 "dependencies": ["permission:management"],
518 "contexts": ["blessed_extension"]
520 "management.getPermissionWarningsByManifest": {
523 "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
525 "management.getSelf": {
528 "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
530 "management.uninstallSelf": {
533 "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
535 // This is not a real API, only here for documentation purposes.
536 // See http://crbug.com/275944 for background.
540 "contexts": ["blessed_extension"]
543 "dependencies": ["permission:mediaGalleries"],
544 "contexts": ["blessed_extension"]
546 "mediaGalleriesPrivate": {
547 "dependencies": ["permission:mediaGalleriesPrivate"],
548 "contexts": ["blessed_extension"]
550 "mediaPlayerPrivate": {
551 "dependencies": ["permission:mediaPlayerPrivate"],
552 "contexts": ["blessed_extension"]
555 "dependencies": ["permission:metricsPrivate"],
556 "contexts": ["blessed_extension"]
559 "dependencies": ["permission:mdns"],
560 "contexts": ["blessed_extension"]
562 "mimeHandlerViewGuestInternal": {
566 "matches": ["<all_urls>"]
568 "musicManagerPrivate": {
569 "dependencies": ["permission:musicManagerPrivate"],
570 "contexts": ["blessed_extension"]
572 "networkingPrivate": {
573 "dependencies": ["permission:networkingPrivate"],
574 "contexts": ["blessed_extension"]
576 "notificationProvider": {
577 "dependencies": ["permission:notificationProvider"],
578 "contexts": ["blessed_extension"]
581 "dependencies": ["permission:notifications"],
582 "contexts": ["blessed_extension"]
585 "dependencies": ["manifest:omnibox"],
586 "contexts": ["blessed_extension"]
589 "dependencies": ["manifest:page_action"],
590 "contexts": ["blessed_extension"]
593 "dependencies": ["manifest:page_actions"],
594 "contexts": ["blessed_extension"]
597 "dependencies": ["permission:pageCapture"],
598 "contexts": ["blessed_extension"]
602 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
603 "contexts": ["blessed_extension"]
605 "preferencesPrivate": {
606 "dependencies": ["permission:preferencesPrivate"],
607 "contexts": ["blessed_extension"]
609 "principalsPrivate": {
610 "dependencies": ["permission:principalsPrivate"],
611 "contexts": ["blessed_extension"]
614 "dependencies": ["permission:privacy"],
615 "contexts": ["blessed_extension"]
618 "dependencies": ["permission:processes"],
619 "contexts": ["blessed_extension"]
622 "dependencies": ["permission:proxy"],
623 "contexts": ["blessed_extension"]
626 "dependencies": ["permission:pushMessaging"],
627 "contexts": ["blessed_extension"]
629 "imageWriterPrivate": {
630 "dependencies": ["permission:imageWriterPrivate"],
631 "extension_types": ["platform_app"],
632 "contexts": ["blessed_extension"]
634 "readingListPrivate": {
635 "dependencies": ["permission:readingListPrivate"],
636 "contexts": ["blessed_extension"]
639 "dependencies": ["permission:rtcPrivate"],
640 "contexts": ["blessed_extension"]
643 "dependencies": ["manifest:script_badge"],
644 "contexts": ["blessed_extension"]
647 "dependencies": ["permission:sessions"],
648 "contexts": ["blessed_extension"]
651 "dependencies": ["permission:signedInDevices"],
652 "contexts": ["blessed_extension"]
655 "dependencies": ["permission:streamsPrivate"],
656 "contexts": ["blessed_extension"]
659 "dependencies": ["permission:syncFileSystem"],
660 "contexts": ["blessed_extension"]
662 "syncedNotificationsPrivate": {
663 "contexts": ["blessed_extension"],
664 "dependencies": ["permission:syncedNotificationsPrivate"]
667 "dependencies": ["manifest:system_indicator"],
668 "contexts": ["blessed_extension"]
671 "dependencies": ["permission:systemPrivate"],
672 "contexts": ["blessed_extension"]
675 "dependencies": ["permission:tabCapture"],
676 "contexts": ["blessed_extension"]
680 "extension_types": ["extension", "legacy_packaged_app"],
681 "contexts": ["blessed_extension"]
689 "tabs.setZoomSettings": {
692 "tabs.getZoomSettings": {
696 "dependencies": ["permission:terminalPrivate"],
697 "contexts": ["blessed_extension"]
700 "dependencies": ["permission:topSites"],
701 "contexts": ["blessed_extension"]
704 "dependencies": ["permission:tts"],
705 "contexts": ["blessed_extension"]
708 "dependencies": ["permission:ttsEngine"],
709 "contexts": ["blessed_extension"]
711 "virtualKeyboardPrivate": {
712 "dependencies": ["permission:virtualKeyboardPrivate"],
713 "contexts": ["blessed_extension"]
716 "dependencies": ["permission:wallpaper"],
717 "contexts": ["blessed_extension"]
719 "wallpaperPrivate": {
720 "dependencies": ["permission:wallpaperPrivate"],
721 "contexts": ["blessed_extension"]
724 "dependencies": ["permission:webNavigation"],
725 "contexts": ["blessed_extension"]
728 "dependencies": ["permission:webRequest"],
729 "contexts": ["blessed_extension"]
731 "webRequestInternal": [{
734 "contexts": ["blessed_extension"]
736 // webview uses webRequestInternal API.
739 "contexts": ["webui"],
740 "matches": ["chrome://chrome-signin/*"]
742 "webrtcAudioPrivate": {
743 "dependencies": ["permission:webrtcAudioPrivate"],
744 "contexts": ["blessed_extension"]
746 "webrtcLoggingPrivate": {
747 "dependencies": ["permission:webrtcLoggingPrivate"],
748 "contexts": ["blessed_extension"]
751 // Hosted apps can use the webstore API from within a blessed context.
753 // Set extension_types to 'all' to prevent webstore from being filtered.
754 // Technically, webstore is not in apps or extensions, but it is currently
755 // displayed on /extensions/webstore and /apps/webstore. The "contexts"
756 // restriction effectively restricts this to hosted apps and webpages.
757 "extension_types": "all",
758 "contexts": ["blessed_web_page", "web_page"],
759 // Any webpage can use the webstore API.
760 "matches": ["<all_urls>"]
763 "dependencies": ["permission:webstorePrivate"],
764 // NOTE: even though this is only used by the webstore hosted app, which
765 // normally would mean blessed_web_page, component hosted apps are actually
766 // given the blessed_extension denomination. Confusing.
767 "contexts": ["blessed_extension"]
770 "dependencies": ["permission:webview"],
771 "contexts": ["blessed_extension"]
774 "contexts": ["webui"],
775 "matches": ["chrome://chrome-signin/*"]
780 "dependencies": ["permission:webview"],
781 "contexts": ["blessed_extension"]
784 "dependencies": ["api:tabs"],
785 "contexts": ["blessed_extension"]