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
164 "contexts": ["blessed_extension"]
167 "dependencies": ["permission:browsingData"],
168 "contexts": ["blessed_extension"]
171 "dependencies": ["permission:cast"],
172 "contexts": ["blessed_extension"]
174 "cast.streaming.rtpStream": {
175 "dependencies": ["permission:cast.streaming"],
176 "contexts": ["blessed_extension"]
178 "cast.streaming.receiverSession": {
179 "dependencies": ["permission:cast.streaming"],
180 "contexts": ["blessed_extension"]
182 "cast.streaming.session": {
183 "dependencies": ["permission:cast.streaming"],
184 "contexts": ["blessed_extension"]
186 "cast.streaming.udpTransport": {
187 "dependencies": ["permission:cast.streaming"],
188 "contexts": ["blessed_extension"]
190 "chromeosInfoPrivate": {
191 "dependencies": ["permission:chromeosInfoPrivate"],
192 "contexts": ["blessed_extension"]
194 "chromeWebViewInternal": [{
196 "dependencies": ["permission:webview"],
197 "contexts": ["blessed_extension"]
201 "contexts": ["webui"],
203 "chrome://chrome-signin/*",
204 "chrome://media-router/*",
208 "cloudPrintPrivate": {
209 "dependencies": ["permission:cloudPrintPrivate"],
210 "contexts": ["blessed_extension"]
212 "commandLinePrivate": {
213 "dependencies": ["permission:commandLinePrivate"],
214 "contexts": ["blessed_extension"]
217 "dependencies": ["manifest:commands"],
218 "contexts": ["blessed_extension"]
221 "dependencies": ["permission:contentSettings"],
222 "contexts": ["blessed_extension"]
225 "dependencies": ["permission:contextMenus"],
226 "contexts": ["blessed_extension"]
228 "contextMenusInternal": {
231 "contexts": ["blessed_extension"]
234 "dependencies": ["permission:cookies"],
235 "contexts": ["blessed_extension"]
238 "dependencies": ["permission:copresence"],
239 "contexts": ["blessed_extension"]
241 "copresencePrivate": {
242 "dependencies": ["permission:copresencePrivate"],
243 "contexts": ["blessed_extension"]
245 "cryptotokenPrivate": {
246 "dependencies": ["permission:cryptotokenPrivate"],
247 "contexts": ["blessed_extension"]
249 "dashboardPrivate": [{
251 "contexts": ["blessed_web_page", "web_page"],
252 "matches": ["https://chrome.google.com/*"]
255 "contexts": ["blessed_extension"],
257 "B44D08FD98F1523ED5837D78D0A606EA9D6206E5" // Web Store
260 "dataReductionProxy": {
261 "dependencies": ["permission:dataReductionProxy"],
262 "contexts": ["blessed_extension"]
265 "dependencies": ["permission:debugger"],
266 "contexts": ["blessed_extension"]
268 "declarativeContent": {
269 "dependencies": ["permission:declarativeContent"],
270 "contexts": ["blessed_extension"]
273 "dependencies": ["permission:desktopCapture"],
274 "contexts": ["blessed_extension"]
276 "dependencies": ["permission:desktopCapturePrivate"],
278 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
279 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
280 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
281 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
282 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264", // Google Cast Stable
283 "C17CD9E6868D7B9C67926E0EC612EA25C768418F", // http://crbug.com/457908
284 "EF2AB692559EA97C3BBDEA018A8C45F92457BD4E" // http://crbug.com/457908
286 "contexts": ["blessed_extension"]
288 "developerPrivate": [{
289 "dependencies": ["permission:developerPrivate", "permission:management"],
290 "contexts": ["blessed_extension"]
293 "contexts": ["webui"],
295 "chrome://extensions/*",
296 "chrome://extensions-frame/*",
297 "chrome://chrome/extensions/*"
300 // All devtools APIs are implemented by hand, so don't compile them.
301 "devtools.inspectedWindow": {
303 "dependencies": ["manifest:devtools_page"],
304 "contexts": ["blessed_extension"]
306 "devtools.network": {
308 "dependencies": ["manifest:devtools_page"],
309 "contexts": ["blessed_extension"]
313 "dependencies": ["manifest:devtools_page"],
314 "contexts": ["blessed_extension"]
317 "dependencies": ["permission:dial"],
318 "contexts": ["blessed_extension"]
321 "dependencies": ["permission:downloads"],
322 "contexts": ["blessed_extension"]
324 "downloadsInternal": {
327 "contexts": ["blessed_extension"]
329 "easyUnlockPrivate": {
330 "dependencies": ["permission:easyUnlockPrivate"],
331 "contexts": ["blessed_extension"]
334 "dependencies": ["permission:echoPrivate"],
335 "contexts": ["blessed_extension"]
337 "enterprise.platformKeys": {
338 "dependencies": ["permission:enterprise.platformKeys"],
339 "contexts": ["blessed_extension"]
341 "enterprise.platformKeysInternal": {
342 "dependencies": ["permission:enterprise.platformKeys"],
344 "contexts": ["blessed_extension"]
346 "enterprise.platformKeysPrivate": {
347 "dependencies": ["permission:enterprise.platformKeysPrivate"],
348 "contexts": ["blessed_extension"]
350 "experienceSamplingPrivate": {
351 "dependencies": ["permission:experienceSamplingPrivate"],
352 "contexts": ["blessed_extension"]
354 "experimental.devtools.audits": {
355 "dependencies": ["permission:experimental", "manifest:devtools_page"],
356 "contexts": ["blessed_extension"]
358 "experimental.devtools.console": {
359 "dependencies": ["permission:experimental", "manifest:devtools_page"],
360 "contexts": ["blessed_extension"]
364 "extension_types": ["extension", "legacy_packaged_app"],
365 "contexts": ["blessed_extension"]
367 "extension.getURL": {
368 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
370 "extension.getViews": [
373 "contexts": ["blessed_extension"],
374 "extension_types": ["extension", "legacy_packaged_app"]
377 // TODO(yoz): Eliminate this usage.
379 "contexts": ["blessed_extension"],
380 "extension_types": ["platform_app"],
382 "A948368FC53BE437A55FEB414106E207925482F5" // File manager
386 "extension.inIncognitoContext": {
387 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
389 "extension.lastError": {
390 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
392 "extension.onRequest": {
393 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
395 "extension.sendRequest": {
396 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
398 "extensionOptionsInternal": [{
400 "contexts": ["blessed_extension"],
401 "dependencies": ["permission:embeddedExtensionOptions"]
405 "contexts": ["webui"],
406 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
408 // This is not a real API, only here for documentation purposes.
409 // See http://crbug.com/275944 for background.
410 "extensionsManifestTypes": {
413 "contexts": ["blessed_extension"]
416 "dependencies": ["permission:feedbackPrivate"],
417 "contexts": ["blessed_extension"]
419 "fileBrowserHandler": {
420 "dependencies": ["permission:fileBrowserHandler"],
421 "contexts": ["blessed_extension"]
423 "fileBrowserHandlerInternal": {
425 "dependencies": ["permission:fileBrowserHandler"],
426 "contexts": ["blessed_extension"]
428 "screenlockPrivate": {
429 "dependencies": ["permission:screenlockPrivate"],
430 "extension_types": ["platform_app"],
431 "contexts": ["blessed_extension", "unblessed_extension"]
433 "fileManagerPrivate": {
434 "dependencies": ["permission:fileManagerPrivate"],
435 "contexts": ["blessed_extension"]
437 "fileManagerPrivateInternal": {
439 "dependencies": ["permission:fileManagerPrivate"],
440 "contexts": ["blessed_extension"]
443 "dependencies": ["permission:fileSystem"],
444 "contexts": ["blessed_extension"]
446 "fileSystemProvider": {
447 "dependencies": ["permission:fileSystemProvider"],
448 "contexts": ["blessed_extension"]
450 "fileSystemProviderInternal": {
452 "dependencies": ["permission:fileSystemProvider"],
453 "contexts": ["blessed_extension"]
456 "dependencies": ["permission:firstRunPrivate"],
457 "contexts": ["blessed_extension"]
460 "dependencies": ["permission:fontSettings"],
461 "contexts": ["blessed_extension"]
464 "dependencies": ["permission:gcdPrivate"],
465 "contexts": ["blessed_extension"]
468 "dependencies": ["permission:gcm"],
469 "contexts": ["blessed_extension"]
473 "contexts": ["blessed_extension"],
475 // http://crbug.com/309737
476 "nckgahadagoaajjgafhacjanaoiihapd",
477 "ljclpkphhpbpinifbeabbhlfddcpfdde",
478 "ppleadejekpmccmnpjdimmlfljlkdfej",
479 "eggnbpckecmjlblplehfpjjdhhidfdoj",
480 "jfjjdfefebklmdbmenmlehlopoocnoeh",
481 "knipolnnllmklapflnccelgolnpehhpl"
485 "dependencies": ["permission:history"],
486 "contexts": ["blessed_extension"]
489 "dependencies": ["permission:hotwordPrivate"],
490 "contexts": ["blessed_extension"]
494 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
495 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
498 "dependencies": ["permission:identity"],
499 "contexts": ["blessed_extension"]
501 "identity.getAccounts": {
503 "dependencies": ["permission:identity"],
504 "contexts": ["blessed_extension"]
507 "dependencies": ["permission:identityPrivate"],
508 "contexts": ["blessed_extension"]
511 "dependencies": ["permission:idltest"],
512 "contexts": ["blessed_extension"]
514 "inlineInstallPrivate": {
515 "dependencies": ["permission:inlineInstallPrivate"],
516 "contexts": ["blessed_extension"]
519 "dependencies": ["permission:input"],
520 "contexts": ["blessed_extension"]
522 "inputMethodPrivate": {
523 "dependencies": ["permission:inputMethodPrivate"],
524 "contexts": ["blessed_extension"]
528 "dependencies": ["permission:gcm"],
529 "contexts": ["blessed_extension"]
531 "languageSettingsPrivate": [{
532 "dependencies": ["permission:languageSettingsPrivate"],
533 "contexts": ["blessed_extension"]
536 "contexts": ["webui"],
538 "chrome://md-settings/*",
539 "chrome://settings/*",
540 "chrome://settings-frame/*"
544 "dependencies": ["manifest:launcher_page"],
545 "contexts": ["blessed_extension"]
547 "launcherSearchProvider": {
548 "dependencies": ["permission:launcherSearchProvider"],
549 "contexts": ["blessed_extension"]
552 "dependencies": ["permission:location"],
553 "contexts": ["blessed_extension"]
556 "dependencies": ["permission:logPrivate"],
557 "contexts": ["blessed_extension"]
560 "dependencies": ["permission:webcamPrivate"],
561 "contexts": ["blessed_extension"]
563 // This is not a real API, only here for documentation purposes.
564 // See http://crbug.com/275944 for background.
568 "contexts": ["blessed_extension"]
571 "dependencies": ["permission:mediaGalleries"],
572 "contexts": ["blessed_extension"]
574 "mediaPlayerPrivate": {
575 "dependencies": ["permission:mediaPlayerPrivate"],
576 "contexts": ["blessed_extension"]
579 "dependencies": ["permission:metricsPrivate"],
580 "contexts": ["blessed_extension"]
583 "dependencies": ["permission:mdns"],
584 "contexts": ["blessed_extension"]
586 "mimeHandlerViewGuestInternal": {
590 "matches": ["<all_urls>"]
592 "musicManagerPrivate": {
593 "dependencies": ["permission:musicManagerPrivate"],
594 "contexts": ["blessed_extension"]
596 "notificationProvider": {
597 "dependencies": ["permission:notificationProvider"],
598 "contexts": ["blessed_extension"]
601 "dependencies": ["permission:notifications"],
602 "contexts": ["blessed_extension"]
605 "dependencies": ["manifest:omnibox"],
606 "contexts": ["blessed_extension"]
609 "dependencies": ["manifest:page_action"],
610 "contexts": ["blessed_extension"]
613 "dependencies": ["permission:pageCapture"],
614 "contexts": ["blessed_extension"]
616 "passwordsPrivate": [{
617 "dependencies": ["permission:passwordsPrivate"],
618 "contexts": ["blessed_extension"]
621 "contexts": ["webui"],
623 "chrome://md-settings/*",
624 "chrome://settings/*",
625 "chrome://settings-frame/*"
630 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
631 "contexts": ["blessed_extension"]
634 "dependencies": ["permission:platformKeys"],
635 "contexts": ["blessed_extension"]
637 "platformKeysInternal": [{
638 "dependencies": ["permission:platformKeys"],
640 "contexts": ["blessed_extension"]
642 "dependencies": ["permission:enterprise.platformKeys"],
644 "contexts": ["blessed_extension"]
646 "preferencesPrivate": {
647 "dependencies": ["permission:preferencesPrivate"],
648 "contexts": ["blessed_extension"]
650 "principalsPrivate": {
651 "dependencies": ["permission:principalsPrivate"],
652 "contexts": ["blessed_extension"]
655 "dependencies": ["permission:privacy"],
656 "contexts": ["blessed_extension"]
659 "dependencies": ["permission:processes"],
660 "contexts": ["blessed_extension"]
663 "dependencies": ["permission:proxy"],
664 "contexts": ["blessed_extension"]
666 "imageWriterPrivate": {
667 "dependencies": ["permission:imageWriterPrivate"],
668 "extension_types": ["platform_app"],
669 "contexts": ["blessed_extension"]
671 "readingListPrivate": {
672 "dependencies": ["permission:readingListPrivate"],
673 "contexts": ["blessed_extension"]
676 "dependencies": ["permission:rtcPrivate"],
677 "contexts": ["blessed_extension"]
679 "searchEnginesPrivate": [{
680 "dependencies": ["permission:searchEnginesPrivate"],
681 "contexts": ["blessed_extension"]
684 "contexts": ["webui"],
686 "chrome://md-settings/*",
687 "chrome://settings/*",
688 "chrome://settings-frame/*"
692 "dependencies": ["permission:sessions"],
693 "contexts": ["blessed_extension"]
695 "settingsPrivate": [{
696 "dependencies": ["permission:settingsPrivate"],
697 "contexts": ["blessed_extension"]
700 "contexts": ["webui"],
702 "chrome://md-settings/*",
703 "chrome://settings/*",
704 "chrome://settings-frame/*"
708 "dependencies": ["permission:signedInDevices"],
709 "contexts": ["blessed_extension"]
712 "dependencies": ["permission:streamsPrivate"],
713 "contexts": ["blessed_extension"]
716 "dependencies": ["permission:syncFileSystem"],
717 "contexts": ["blessed_extension"]
720 "dependencies": ["manifest:system_indicator"],
721 "contexts": ["blessed_extension"]
724 "dependencies": ["permission:systemPrivate"],
725 "contexts": ["blessed_extension"]
728 "dependencies": ["permission:tabCapture"],
729 "contexts": ["blessed_extension"]
733 "extension_types": ["extension", "legacy_packaged_app"],
734 "contexts": ["blessed_extension"]
737 "dependencies": ["permission:terminalPrivate"],
738 "contexts": ["blessed_extension"]
741 "dependencies": ["permission:topSites"],
742 "contexts": ["blessed_extension"]
745 "dependencies": ["permission:tts"],
746 "contexts": ["blessed_extension"]
749 "dependencies": ["permission:ttsEngine"],
750 "contexts": ["blessed_extension"]
753 "dependencies": ["permission:usersPrivate"],
754 "contexts": ["blessed_extension"]
757 "contexts": ["webui"],
759 "chrome://md-settings/*",
760 "chrome://settings/*",
761 "chrome://settings-frame/*"
764 "virtualKeyboardPrivate": {
765 "dependencies": ["permission:virtualKeyboardPrivate"],
766 "contexts": ["blessed_extension"]
769 "dependencies": ["permission:wallpaper"],
770 "contexts": ["blessed_extension"]
772 "wallpaperPrivate": {
773 "dependencies": ["permission:wallpaperPrivate"],
774 "contexts": ["blessed_extension"]
777 "dependencies": ["permission:webNavigation"],
778 "contexts": ["blessed_extension"]
780 "webrtcAudioPrivate": {
781 "dependencies": ["permission:webrtcAudioPrivate"],
782 "contexts": ["blessed_extension"]
784 "webrtcDesktopCapturePrivate": {
785 "dependencies": ["permission:webrtcDesktopCapturePrivate"],
786 "contexts": ["blessed_extension"]
788 "webrtcLoggingPrivate": {
789 "dependencies": ["permission:webrtcLoggingPrivate"],
790 "contexts": ["blessed_extension"]
793 // Hosted apps can use the webstore API from within a blessed context.
795 // Set extension_types to 'all' to prevent webstore from being filtered.
796 // Technically, webstore is not in apps or extensions, but it is currently
797 // displayed on /extensions/webstore and /apps/webstore. The "contexts"
798 // restriction effectively restricts this to hosted apps and webpages.
799 "extension_types": "all",
800 "contexts": ["blessed_web_page", "web_page"],
801 // Any webpage can use the webstore API.
802 "matches": ["<all_urls>"]
805 "dependencies": ["permission:webstorePrivate"],
806 // NOTE: even though this is only used by the webstore hosted app, which
807 // normally would mean blessed_web_page, component hosted apps are actually
808 // given the blessed_extension denomination. Confusing.
809 "contexts": ["blessed_extension"]
811 "webstoreWidgetPrivate": {
812 "dependencies": ["permission:webstoreWidgetPrivate"],
813 "contexts": ["blessed_extension"]
818 "dependencies": ["permission:webview"],
819 "contexts": ["blessed_extension"]
822 "dependencies": ["api:tabs"],
823 "contexts": ["blessed_extension"]