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"]
39 "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice
40 "3727DD3E564B6055387425027AD74C58784ACC15", // Quickoffice internal
41 "12E618C3C6E97495AAECF2AC12DEB082353241C6", // QO component extension
42 "06BE211D5F014BAB34BC22D9DDA09C63A81D828E", // Official xkb extension
43 "F94EE6AB36D6C6588670B2B01EB65212D9C64E33", // Open source xkb extension
44 "B9EF10DDFEA11EF77873CC5009809E5037FC4C7A" // Google input tools
47 "extension_types": ["hosted_app", "extension", "legacy_packaged_app"],
50 "unblessed_extension",
55 // Any webpage can use the app API.
56 "matches": ["<all_urls>"]
59 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
62 "app.getIsInstalled": {
63 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
67 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
71 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
76 "dependencies": ["permission:appview"],
77 "contexts": ["blessed_extension"]
80 "dependencies": ["permission:audioModem"],
81 "contexts": ["blessed_extension"]
84 "dependencies": ["permission:autofillPrivate"],
85 "contexts": ["blessed_extension"]
88 "contexts": ["webui"],
90 "chrome://md-settings/*",
91 "chrome://settings/*",
92 "chrome://settings-frame/*"
95 "automationInternal": {
97 "dependencies": ["manifest:automation"],
98 "contexts": ["blessed_extension"]
101 "dependencies": ["manifest:automation"],
102 "contexts": ["blessed_extension"]
105 "dependencies": ["permission:autotestPrivate"],
106 "contexts": ["blessed_extension"]
108 "bookmarkManagerPrivate": {
109 "dependencies": ["permission:bookmarkManagerPrivate"],
110 "contexts": ["blessed_extension"]
113 "dependencies": ["permission:bookmarks"],
114 "contexts": ["blessed_extension"]
116 "bookmarks.export": {
118 "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
119 "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
120 "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9" // http://crbug.com/371562
123 "bookmarks.import": {
125 "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
126 "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
127 "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9" // http://crbug.com/371562
130 "brailleDisplayPrivate": {
131 "dependencies": ["permission:brailleDisplayPrivate"],
132 "contexts": ["blessed_extension"]
135 "dependencies": ["permission:browser"],
136 "contexts": ["blessed_extension"]
139 "dependencies": ["manifest:browser_action"],
140 "contexts": ["blessed_extension"]
142 // This API is whitelisted on stable and should not be enabled for a wider
143 // audience without resolving security issues raised in API proposal and
144 // review (https://codereview.chromium.org/25305002).
145 "browserAction.openPopup": [{
147 "dependencies": ["manifest:browser_action"],
148 "contexts": ["blessed_extension"]
151 "dependencies": ["manifest:browser_action"],
153 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
154 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
155 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
156 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
157 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264", // Google Cast Stable
158 // The extensions below here only use openPopup on a user action,
159 // so are safe, and can be removed when the whitelist on that
160 // capability is lifted. See crbug.com/436489 for context.
161 "A4577D8C2AF4CF26F40CBCA83FFA4251D6F6C8F8", // http://crbug.com/497301
162 "A8208CCC87F8261AFAEB6B85D5E8D47372DDEA6B", // http://crbug.com/497301
163 "EFCF5358672FEE04789FD2EC3638A67ADEDB6C8C" // http://crbug.com/514696
165 "contexts": ["blessed_extension"]
168 "dependencies": ["permission:browsingData"],
169 "contexts": ["blessed_extension"]
172 "dependencies": ["permission:cast"],
173 "contexts": ["blessed_extension"]
175 "cast.devicesPrivate": {
176 "dependencies": ["permission:cast"],
177 "contexts": ["blessed_extension"]
179 "cast.streaming.rtpStream": {
180 "dependencies": ["permission:cast.streaming"],
181 "contexts": ["blessed_extension"]
183 "cast.streaming.receiverSession": {
184 "dependencies": ["permission:cast.streaming"],
185 "contexts": ["blessed_extension"]
187 "cast.streaming.session": {
188 "dependencies": ["permission:cast.streaming"],
189 "contexts": ["blessed_extension"]
191 "cast.streaming.udpTransport": {
192 "dependencies": ["permission:cast.streaming"],
193 "contexts": ["blessed_extension"]
195 "chromeosInfoPrivate": {
196 "dependencies": ["permission:chromeosInfoPrivate"],
197 "contexts": ["blessed_extension"]
199 "chromeWebViewInternal": [{
201 "dependencies": ["permission:webview"],
202 "contexts": ["blessed_extension"]
206 "contexts": ["webui"],
208 "chrome://chrome-signin/*",
209 "chrome://media-router/*",
213 "cloudPrintPrivate": {
214 "dependencies": ["permission:cloudPrintPrivate"],
215 "contexts": ["blessed_extension"]
217 "commandLinePrivate": {
218 "dependencies": ["permission:commandLinePrivate"],
219 "contexts": ["blessed_extension"]
222 "dependencies": ["manifest:commands"],
223 "contexts": ["blessed_extension"]
226 "dependencies": ["permission:contentSettings"],
227 "contexts": ["blessed_extension"]
230 "dependencies": ["permission:contextMenus"],
231 "contexts": ["blessed_extension"]
233 "contextMenusInternal": {
236 "contexts": ["blessed_extension"]
239 "dependencies": ["permission:cookies"],
240 "contexts": ["blessed_extension"]
243 "dependencies": ["permission:copresence"],
244 "contexts": ["blessed_extension"]
246 "copresencePrivate": {
247 "dependencies": ["permission:copresencePrivate"],
248 "contexts": ["blessed_extension"]
250 "cryptotokenPrivate": {
251 "dependencies": ["permission:cryptotokenPrivate"],
252 "contexts": ["blessed_extension"]
254 "dashboardPrivate": [{
256 "contexts": ["blessed_web_page", "web_page"],
257 "matches": ["https://chrome.google.com/*"]
260 "contexts": ["blessed_extension"],
262 "B44D08FD98F1523ED5837D78D0A606EA9D6206E5" // Web Store
265 "dataReductionProxy": {
266 "dependencies": ["permission:dataReductionProxy"],
267 "contexts": ["blessed_extension"]
270 "dependencies": ["permission:debugger"],
271 "contexts": ["blessed_extension"]
273 "declarativeContent": {
274 "dependencies": ["permission:declarativeContent"],
275 "contexts": ["blessed_extension"]
278 "dependencies": ["permission:desktopCapture"],
279 "contexts": ["blessed_extension"]
281 "dependencies": ["permission:desktopCapturePrivate"],
283 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
284 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
285 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
286 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
287 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264", // Google Cast Stable
288 "C17CD9E6868D7B9C67926E0EC612EA25C768418F", // http://crbug.com/457908
289 "EF2AB692559EA97C3BBDEA018A8C45F92457BD4E" // http://crbug.com/457908
291 "contexts": ["blessed_extension"]
293 "developerPrivate": [{
294 "dependencies": ["permission:developerPrivate", "permission:management"],
295 "contexts": ["blessed_extension"]
298 "contexts": ["webui"],
300 "chrome://extensions/*",
301 "chrome://extensions-frame/*",
302 "chrome://chrome/extensions/*"
305 // All devtools APIs are implemented by hand, so don't compile them.
306 "devtools.inspectedWindow": {
308 "dependencies": ["manifest:devtools_page"],
309 "contexts": ["blessed_extension"]
311 "devtools.network": {
313 "dependencies": ["manifest:devtools_page"],
314 "contexts": ["blessed_extension"]
318 "dependencies": ["manifest:devtools_page"],
319 "contexts": ["blessed_extension"]
322 "dependencies": ["permission:dial"],
323 "contexts": ["blessed_extension"]
326 "dependencies": ["permission:downloads"],
327 "contexts": ["blessed_extension"]
329 "downloadsInternal": {
332 "contexts": ["blessed_extension"]
334 "easyUnlockPrivate": {
335 "dependencies": ["permission:easyUnlockPrivate"],
336 "contexts": ["blessed_extension"]
339 "dependencies": ["permission:echoPrivate"],
340 "contexts": ["blessed_extension"]
342 "enterprise.deviceAttributes": {
343 "dependencies": ["permission:enterprise.deviceAttributes"],
344 "contexts": ["blessed_extension"]
346 "enterprise.platformKeys": {
347 "dependencies": ["permission:enterprise.platformKeys"],
348 "contexts": ["blessed_extension"]
350 "enterprise.platformKeysInternal": {
351 "dependencies": ["permission:enterprise.platformKeys"],
353 "contexts": ["blessed_extension"]
355 "enterprise.platformKeysPrivate": {
356 "dependencies": ["permission:enterprise.platformKeysPrivate"],
357 "contexts": ["blessed_extension"]
359 "experienceSamplingPrivate": {
360 "dependencies": ["permission:experienceSamplingPrivate"],
361 "contexts": ["blessed_extension"]
363 "experimental.devtools.audits": {
364 "dependencies": ["permission:experimental", "manifest:devtools_page"],
365 "contexts": ["blessed_extension"]
367 "experimental.devtools.console": {
368 "dependencies": ["permission:experimental", "manifest:devtools_page"],
369 "contexts": ["blessed_extension"]
373 "extension_types": ["extension", "legacy_packaged_app"],
374 "contexts": ["blessed_extension"]
376 "extension.getURL": {
377 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
379 "extension.getViews": [
382 "contexts": ["blessed_extension"],
383 "extension_types": ["extension", "legacy_packaged_app"]
386 // TODO(yoz): Eliminate this usage.
388 "contexts": ["blessed_extension"],
389 "extension_types": ["platform_app"],
391 "A948368FC53BE437A55FEB414106E207925482F5" // File manager
395 "extension.inIncognitoContext": {
396 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
398 "extension.lastError": {
399 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
401 "extension.onRequest": {
402 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
404 "extension.sendRequest": {
405 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
407 "extensionOptionsInternal": [{
409 "contexts": ["blessed_extension"],
410 "dependencies": ["permission:embeddedExtensionOptions"]
414 "contexts": ["webui"],
415 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
417 // This is not a real API, only here for documentation purposes.
418 // See http://crbug.com/275944 for background.
419 "extensionsManifestTypes": {
422 "contexts": ["blessed_extension"]
425 "dependencies": ["permission:feedbackPrivate"],
426 "contexts": ["blessed_extension"]
428 "fileBrowserHandler": {
429 "dependencies": ["permission:fileBrowserHandler"],
430 "contexts": ["blessed_extension"]
432 "fileBrowserHandlerInternal": {
434 "dependencies": ["permission:fileBrowserHandler"],
435 "contexts": ["blessed_extension"]
437 "screenlockPrivate": {
438 "dependencies": ["permission:screenlockPrivate"],
439 "extension_types": ["platform_app"],
440 "contexts": ["blessed_extension", "unblessed_extension"]
442 "fileManagerPrivate": {
443 "dependencies": ["permission:fileManagerPrivate"],
444 "contexts": ["blessed_extension"]
446 "fileManagerPrivateInternal": {
448 "dependencies": ["permission:fileManagerPrivate"],
449 "contexts": ["blessed_extension"]
452 "dependencies": ["permission:fileSystem"],
453 "contexts": ["blessed_extension"]
455 "fileSystemProvider": {
456 "dependencies": ["permission:fileSystemProvider"],
457 "contexts": ["blessed_extension"]
459 "fileSystemProviderInternal": {
461 "dependencies": ["permission:fileSystemProvider"],
462 "contexts": ["blessed_extension"]
465 "dependencies": ["permission:firstRunPrivate"],
466 "contexts": ["blessed_extension"]
469 "dependencies": ["permission:fontSettings"],
470 "contexts": ["blessed_extension"]
473 "dependencies": ["permission:gcdPrivate"],
474 "contexts": ["blessed_extension"]
477 "dependencies": ["permission:gcm"],
478 "contexts": ["blessed_extension"]
482 "contexts": ["blessed_extension"],
484 // http://crbug.com/309737
485 "nckgahadagoaajjgafhacjanaoiihapd",
486 "ljclpkphhpbpinifbeabbhlfddcpfdde",
487 "ppleadejekpmccmnpjdimmlfljlkdfej",
488 "eggnbpckecmjlblplehfpjjdhhidfdoj",
489 "jfjjdfefebklmdbmenmlehlopoocnoeh",
490 "knipolnnllmklapflnccelgolnpehhpl"
494 "dependencies": ["permission:history"],
495 "contexts": ["blessed_extension"]
498 "dependencies": ["permission:hotwordPrivate"],
499 "contexts": ["blessed_extension"]
503 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
504 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
507 "dependencies": ["permission:identity"],
508 "contexts": ["blessed_extension"]
510 "identity.getAccounts": {
512 "dependencies": ["permission:identity"],
513 "contexts": ["blessed_extension"]
516 "dependencies": ["permission:identityPrivate"],
517 "contexts": ["blessed_extension"]
520 "dependencies": ["permission:idltest"],
521 "contexts": ["blessed_extension"]
523 "inlineInstallPrivate": {
524 "dependencies": ["permission:inlineInstallPrivate"],
525 "contexts": ["blessed_extension"]
528 "dependencies": ["permission:input"],
529 "contexts": ["blessed_extension"]
531 "inputMethodPrivate": {
532 "dependencies": ["permission:inputMethodPrivate"],
533 "contexts": ["blessed_extension"]
537 "dependencies": ["permission:gcm"],
538 "contexts": ["blessed_extension"]
540 "languageSettingsPrivate": [{
541 "dependencies": ["permission:languageSettingsPrivate"],
542 "contexts": ["blessed_extension"]
545 "contexts": ["webui"],
547 "chrome://md-settings/*",
548 "chrome://settings/*",
549 "chrome://settings-frame/*"
553 "dependencies": ["manifest:launcher_page"],
554 "contexts": ["blessed_extension"]
556 "launcherSearchProvider": {
557 "dependencies": ["permission:launcherSearchProvider"],
558 "contexts": ["blessed_extension"]
561 "dependencies": ["permission:location"],
562 "contexts": ["blessed_extension"]
565 "dependencies": ["permission:logPrivate"],
566 "contexts": ["blessed_extension"]
569 "dependencies": ["permission:webcamPrivate"],
570 "contexts": ["blessed_extension"]
572 // This is not a real API, only here for documentation purposes.
573 // See http://crbug.com/275944 for background.
577 "contexts": ["blessed_extension"]
580 "dependencies": ["permission:mediaGalleries"],
581 "contexts": ["blessed_extension"]
583 "mediaPlayerPrivate": {
584 "dependencies": ["permission:mediaPlayerPrivate"],
585 "contexts": ["blessed_extension"]
588 "dependencies": ["permission:metricsPrivate"],
589 "contexts": ["blessed_extension"]
592 "dependencies": ["permission:mdns"],
593 "contexts": ["blessed_extension"]
595 "mimeHandlerViewGuestInternal": {
599 "matches": ["<all_urls>"]
601 "musicManagerPrivate": {
602 "dependencies": ["permission:musicManagerPrivate"],
603 "contexts": ["blessed_extension"]
605 "notificationProvider": {
606 "dependencies": ["permission:notificationProvider"],
607 "contexts": ["blessed_extension"]
610 "dependencies": ["permission:notifications"],
611 "contexts": ["blessed_extension"]
614 "dependencies": ["manifest:omnibox"],
615 "contexts": ["blessed_extension"]
618 "dependencies": ["manifest:page_action"],
619 "contexts": ["blessed_extension"]
622 "dependencies": ["permission:pageCapture"],
623 "contexts": ["blessed_extension"]
625 "passwordsPrivate": [{
626 "dependencies": ["permission:passwordsPrivate"],
627 "contexts": ["blessed_extension"]
630 "contexts": ["webui"],
632 "chrome://md-settings/*",
633 "chrome://settings/*",
634 "chrome://settings-frame/*"
639 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
640 "contexts": ["blessed_extension"]
643 "dependencies": ["permission:platformKeys"],
644 "contexts": ["blessed_extension"]
646 "platformKeysInternal": [{
647 "dependencies": ["permission:platformKeys"],
649 "contexts": ["blessed_extension"]
651 "dependencies": ["permission:enterprise.platformKeys"],
653 "contexts": ["blessed_extension"]
655 "preferencesPrivate": {
656 "dependencies": ["permission:preferencesPrivate"],
657 "contexts": ["blessed_extension"]
659 "principalsPrivate": {
660 "dependencies": ["permission:principalsPrivate"],
661 "contexts": ["blessed_extension"]
664 "dependencies": ["permission:privacy"],
665 "contexts": ["blessed_extension"]
668 "dependencies": ["permission:processes"],
669 "contexts": ["blessed_extension"]
672 "dependencies": ["permission:proxy"],
673 "contexts": ["blessed_extension"]
675 "imageWriterPrivate": {
676 "dependencies": ["permission:imageWriterPrivate"],
677 "extension_types": ["platform_app"],
678 "contexts": ["blessed_extension"]
680 "readingListPrivate": {
681 "dependencies": ["permission:readingListPrivate"],
682 "contexts": ["blessed_extension"]
685 "dependencies": ["permission:rtcPrivate"],
686 "contexts": ["blessed_extension"]
688 "searchEnginesPrivate": [{
689 "dependencies": ["permission:searchEnginesPrivate"],
690 "contexts": ["blessed_extension"]
693 "contexts": ["webui"],
695 "chrome://md-settings/*",
696 "chrome://settings/*",
697 "chrome://settings-frame/*"
701 "dependencies": ["permission:sessions"],
702 "contexts": ["blessed_extension"]
704 "settingsPrivate": [{
705 "dependencies": ["permission:settingsPrivate"],
706 "contexts": ["blessed_extension"]
709 "contexts": ["webui"],
711 "chrome://md-settings/*",
712 "chrome://settings/*",
713 "chrome://settings-frame/*"
717 "dependencies": ["permission:signedInDevices"],
718 "contexts": ["blessed_extension"]
721 "dependencies": ["permission:streamsPrivate"],
722 "contexts": ["blessed_extension"]
725 "dependencies": ["permission:syncFileSystem"],
726 "contexts": ["blessed_extension"]
729 "dependencies": ["manifest:system_indicator"],
730 "contexts": ["blessed_extension"]
733 "dependencies": ["permission:systemPrivate"],
734 "contexts": ["blessed_extension"]
737 "dependencies": ["permission:tabCapture"],
738 "contexts": ["blessed_extension"]
742 "extension_types": ["extension", "legacy_packaged_app"],
743 "contexts": ["blessed_extension"]
746 "dependencies": ["permission:terminalPrivate"],
747 "contexts": ["blessed_extension"]
750 "dependencies": ["permission:topSites"],
751 "contexts": ["blessed_extension"]
754 "dependencies": ["permission:tts"],
755 "contexts": ["blessed_extension"]
758 "dependencies": ["permission:ttsEngine"],
759 "contexts": ["blessed_extension"]
762 "dependencies": ["permission:usersPrivate"],
763 "contexts": ["blessed_extension"]
766 "contexts": ["webui"],
768 "chrome://md-settings/*",
769 "chrome://settings/*",
770 "chrome://settings-frame/*"
773 "virtualKeyboardPrivate": {
774 "dependencies": ["permission:virtualKeyboardPrivate"],
775 "contexts": ["blessed_extension"]
778 "dependencies": ["permission:wallpaper"],
779 "contexts": ["blessed_extension"]
781 "wallpaperPrivate": {
782 "dependencies": ["permission:wallpaperPrivate"],
783 "contexts": ["blessed_extension"]
786 "dependencies": ["permission:webNavigation"],
787 "contexts": ["blessed_extension"]
789 "webrtcAudioPrivate": {
790 "dependencies": ["permission:webrtcAudioPrivate"],
791 "contexts": ["blessed_extension"]
793 "webrtcDesktopCapturePrivate": {
794 "dependencies": ["permission:webrtcDesktopCapturePrivate"],
795 "contexts": ["blessed_extension"]
797 "webrtcLoggingPrivate": {
798 "dependencies": ["permission:webrtcLoggingPrivate"],
799 "contexts": ["blessed_extension"]
802 // Hosted apps can use the webstore API from within a blessed context.
804 // Set extension_types to 'all' to prevent webstore from being filtered.
805 // Technically, webstore is not in apps or extensions, but it is currently
806 // displayed on /extensions/webstore and /apps/webstore. The "contexts"
807 // restriction effectively restricts this to hosted apps and webpages.
808 "extension_types": "all",
809 "contexts": ["blessed_web_page", "web_page"],
810 // Any webpage can use the webstore API.
811 "matches": ["<all_urls>"]
814 "dependencies": ["permission:webstorePrivate"],
815 // NOTE: even though this is only used by the webstore hosted app, which
816 // normally would mean blessed_web_page, component hosted apps are actually
817 // given the blessed_extension denomination. Confusing.
818 "contexts": ["blessed_extension"]
820 "webstoreWidgetPrivate": {
821 "dependencies": ["permission:webstoreWidgetPrivate"],
822 "contexts": ["blessed_extension"]
827 "dependencies": ["permission:webview"],
828 "contexts": ["blessed_extension"]
831 "dependencies": ["api:tabs"],
832 "contexts": ["blessed_extension"]