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>"]
61 // The API for the *embedder* of appview. Appview has both an embedder and
62 // guest API, which are different.
63 "appViewEmbedderInternal": {
65 "contexts": ["blessed_extension"],
66 "dependencies": ["permission:appview"]
68 // TODO(fsamuel,kalman): Rename this appViewGuestInternal.
72 "contexts": ["blessed_extension"]
75 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
78 "app.getDetailsForFrame": {
79 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
82 "app.getIsInstalled": {
83 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
87 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
91 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
95 "dependencies": ["permission:audio"],
96 "contexts": ["blessed_extension"]
98 "automationInternal": {
100 "dependencies": ["manifest:automation"],
101 "contexts": ["blessed_extension"]
104 "dependencies": ["manifest:automation"],
105 "contexts": ["blessed_extension"]
108 "dependencies": ["permission:autotestPrivate"],
109 "contexts": ["blessed_extension"]
112 "dependencies": ["manifest:bluetooth"],
113 "contexts": ["blessed_extension"]
115 "bluetoothLowEnergy": {
116 "dependencies": ["manifest:bluetooth"],
117 "contexts": ["blessed_extension"]
119 "bluetoothPrivate": {
120 "dependencies": ["permission:bluetoothPrivate"],
121 "contexts": ["blessed_extension"]
124 "dependencies": ["manifest:bluetooth"],
125 "contexts": ["blessed_extension"]
127 "bookmarkManagerPrivate": {
128 "dependencies": ["permission:bookmarkManagerPrivate"],
129 "contexts": ["blessed_extension"]
132 "dependencies": ["permission:bookmarks"],
133 "contexts": ["blessed_extension"]
135 "bookmarks.export": {
136 "extension_types": ["extension"],
137 "location": "component"
139 "bookmarks.import": {
140 "extension_types": ["extension"],
141 "location": "component"
143 "brailleDisplayPrivate": {
144 "dependencies": ["permission:brailleDisplayPrivate"],
145 "contexts": ["blessed_extension"]
148 "dependencies": ["permission:browser"],
149 "contexts": ["blessed_extension"]
152 "dependencies": ["manifest:browser_action"],
153 "contexts": ["blessed_extension"]
155 // This API is whitelisted on stable and should not be enabled for a wider
156 // audience without resolving security issues raised in API proposal and
157 // review (https://codereview.chromium.org/25305002).
158 "browserAction.openPopup": [{
160 "dependencies": ["manifest:browser_action"],
161 "contexts": ["blessed_extension"]
164 "dependencies": ["manifest:browser_action"],
166 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
167 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
168 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
169 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
170 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Google Cast Stable
172 "contexts": ["blessed_extension"]
175 "dependencies": ["permission:browsingData"],
176 "contexts": ["blessed_extension"]
179 "dependencies": ["permission:cast"],
180 "contexts": ["blessed_extension"]
182 "cast.streaming.rtpStream": {
183 "dependencies": ["permission:cast.streaming"],
184 "contexts": ["blessed_extension"]
186 "cast.streaming.session": {
187 "dependencies": ["permission:cast.streaming"],
188 "contexts": ["blessed_extension"]
190 "cast.streaming.udpTransport": {
191 "dependencies": ["permission:cast.streaming"],
192 "contexts": ["blessed_extension"]
194 "chromeosInfoPrivate": {
195 "dependencies": ["permission:chromeosInfoPrivate"],
196 "contexts": ["blessed_extension"]
198 "chromeWebViewInternal": [{
200 "dependencies": ["permission:webview"],
201 "contexts": ["blessed_extension"]
205 "contexts": ["webui"],
206 "matches": ["chrome://chrome-signin/*"]
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"]
246 "dependencies": ["permission:debugger"],
247 "contexts": ["blessed_extension"]
249 "declarativeContent": {
250 "dependencies": ["permission:declarativeContent"],
251 "contexts": ["blessed_extension"]
254 "dependencies": ["permission:desktopCapture"],
255 "contexts": ["blessed_extension"]
257 "developerPrivate": {
258 "dependencies": ["permission:developerPrivate"],
259 "contexts": ["blessed_extension"]
261 "devtools.inspectedWindow": {
262 "dependencies": ["manifest:devtools_page"],
263 "contexts": ["blessed_extension"]
265 "devtools.network": {
266 "dependencies": ["manifest:devtools_page"],
267 "contexts": ["blessed_extension"]
270 "dependencies": ["manifest:devtools_page"],
271 "contexts": ["blessed_extension"]
274 "dependencies": ["permission:diagnostics"],
275 "extension_types": ["platform_app"],
276 "contexts": ["blessed_extension"]
279 "dependencies": ["permission:dial"],
280 "contexts": ["blessed_extension"]
283 "dependencies": ["permission:downloads"],
284 "contexts": ["blessed_extension"]
286 "downloadsInternal": {
289 "contexts": ["blessed_extension"]
291 "easyUnlockPrivate": {
292 "dependencies": ["permission:easyUnlockPrivate"],
293 "contexts": ["blessed_extension"]
296 "dependencies": ["permission:echoPrivate"],
297 "contexts": ["blessed_extension"]
299 "enterprise.platformKeys": {
300 "dependencies": ["permission:enterprise.platformKeys"],
301 "contexts": ["blessed_extension"]
303 "enterprise.platformKeysInternal": {
304 "dependencies": ["permission:enterprise.platformKeys"],
306 "contexts": ["blessed_extension"]
308 "enterprise.platformKeysPrivate": {
309 "dependencies": ["permission:enterprise.platformKeysPrivate"],
310 "contexts": ["blessed_extension"]
312 "experienceSamplingPrivate": {
313 "dependencies": ["permission:experienceSamplingPrivate"],
314 "contexts": ["blessed_extension"]
316 "experimental.devtools.audits": {
317 "dependencies": ["permission:experimental", "manifest:devtools_page"],
318 "contexts": ["blessed_extension"]
320 "experimental.devtools.console": {
321 "dependencies": ["permission:experimental", "manifest:devtools_page"],
322 "contexts": ["blessed_extension"]
326 "extension_types": ["extension", "legacy_packaged_app"],
327 "contexts": ["blessed_extension"]
329 "extension.getURL": {
330 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
332 "extension.getViews": [
335 "contexts": ["blessed_extension"],
336 "extension_types": ["extension", "legacy_packaged_app"]
339 // TODO(yoz): Eliminate this usage.
341 "contexts": ["blessed_extension"],
342 "extension_types": ["platform_app"],
344 "A948368FC53BE437A55FEB414106E207925482F5" // File manager
348 "extension.inIncognitoContext": {
349 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
351 "extension.lastError": {
352 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
354 "extension.onRequest": {
355 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
357 "extension.sendNativeMessage": {
358 "dependencies": ["permission:nativeMessaging"]
360 "extension.sendRequest": {
361 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
363 "extensionOptionsInternal": [{
365 "contexts": ["blessed_extension"],
366 "dependencies": ["permission:embeddedExtensionOptions"]
370 "contexts": ["webui"],
371 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
373 // This is not a real API, only here for documentation purposes.
374 // See http://crbug.com/275944 for background.
375 "extensionsManifestTypes": {
378 "contexts": ["blessed_extension"]
381 "dependencies": ["permission:feedbackPrivate"],
382 "contexts": ["blessed_extension"]
384 "fileBrowserHandler": {
385 "dependencies": ["permission:fileBrowserHandler"],
386 "contexts": ["blessed_extension"]
388 "fileBrowserHandlerInternal": {
390 "dependencies": ["permission:fileBrowserHandler"],
391 "contexts": ["blessed_extension"]
393 "screenlockPrivate": {
394 "dependencies": ["permission:screenlockPrivate"],
395 "extension_types": ["platform_app"],
396 "contexts": ["blessed_extension", "unblessed_extension"]
398 "fileManagerPrivate": {
399 "dependencies": ["permission:fileManagerPrivate"],
400 "contexts": ["blessed_extension"]
402 "fileManagerPrivateInternal": {
404 "dependencies": ["permission:fileManagerPrivate"],
405 "contexts": ["blessed_extension"]
408 "dependencies": ["permission:fileSystem"],
409 "contexts": ["blessed_extension"]
411 "fileSystemProvider": {
412 "dependencies": ["permission:fileSystemProvider"],
413 "contexts": ["blessed_extension"]
415 "fileSystemProviderInternal": {
417 "dependencies": ["permission:fileSystemProvider"],
418 "contexts": ["blessed_extension"]
421 "dependencies": ["permission:firstRunPrivate"],
422 "contexts": ["blessed_extension"]
425 "dependencies": ["permission:fontSettings"],
426 "contexts": ["blessed_extension"]
429 "dependencies": ["permission:gcdPrivate"],
430 "contexts": ["blessed_extension"]
433 "dependencies": ["permission:gcm"],
434 "contexts": ["blessed_extension"]
438 "contexts": ["blessed_extension"],
440 // http://crbug.com/309737
441 "nckgahadagoaajjgafhacjanaoiihapd",
442 "ljclpkphhpbpinifbeabbhlfddcpfdde",
443 "ppleadejekpmccmnpjdimmlfljlkdfej",
444 "eggnbpckecmjlblplehfpjjdhhidfdoj",
445 "jfjjdfefebklmdbmenmlehlopoocnoeh",
446 "knipolnnllmklapflnccelgolnpehhpl"
450 "dependencies": ["permission:history"],
451 "contexts": ["blessed_extension"]
454 "dependencies": ["permission:hotwordPrivate"],
455 "contexts": ["blessed_extension"]
459 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
460 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
463 "dependencies": ["permission:identity"],
464 "contexts": ["blessed_extension"]
466 "identity.getAccounts": {
468 "dependencies": ["permission:identity"],
469 "contexts": ["blessed_extension"]
472 "dependencies": ["permission:identityPrivate"],
473 "contexts": ["blessed_extension"]
476 "dependencies": ["permission:idltest"],
477 "contexts": ["blessed_extension"]
480 "dependencies": ["permission:idle"],
481 "contexts": ["blessed_extension"]
484 "dependencies": ["permission:infobars"],
485 "contexts": ["blessed_extension"]
488 "dependencies": ["permission:input"],
489 "contexts": ["blessed_extension"]
491 "inputMethodPrivate": {
492 "dependencies": ["permission:inputMethodPrivate"],
493 "contexts": ["blessed_extension"]
496 "dependencies": ["permission:location"],
497 "contexts": ["blessed_extension"]
500 "dependencies": ["permission:logPrivate"],
501 "contexts": ["blessed_extension"]
504 "dependencies": ["permission:webcamPrivate"],
505 "contexts": ["blessed_extension"]
508 "dependencies": ["permission:management"],
509 "contexts": ["blessed_extension"]
511 "management.getPermissionWarningsByManifest": {
514 "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
516 "management.getSelf": {
519 "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
521 "management.uninstallSelf": {
524 "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
526 // This is not a real API, only here for documentation purposes.
527 // See http://crbug.com/275944 for background.
531 "contexts": ["blessed_extension"]
534 "dependencies": ["permission:mediaGalleries"],
535 "contexts": ["blessed_extension"]
537 "mediaGalleriesPrivate": {
538 "dependencies": ["permission:mediaGalleriesPrivate"],
539 "contexts": ["blessed_extension"]
541 "mediaPlayerPrivate": {
542 "dependencies": ["permission:mediaPlayerPrivate"],
543 "contexts": ["blessed_extension"]
546 "dependencies": ["permission:metricsPrivate"],
547 "contexts": ["blessed_extension"]
550 "dependencies": ["permission:mdns"],
551 "contexts": ["blessed_extension"]
553 "mimeHandlerViewGuestInternal": {
557 "matches": ["<all_urls>"]
559 "musicManagerPrivate": {
560 "dependencies": ["permission:musicManagerPrivate"],
561 "contexts": ["blessed_extension"]
563 "networkingPrivate": {
564 "dependencies": ["permission:networkingPrivate"],
565 "contexts": ["blessed_extension"]
567 "notificationProvider": {
568 "dependencies": ["permission:notificationProvider"],
569 "contexts": ["blessed_extension"]
572 "dependencies": ["permission:notifications"],
573 "contexts": ["blessed_extension"]
576 "dependencies": ["manifest:omnibox"],
577 "contexts": ["blessed_extension"]
580 "dependencies": ["manifest:page_action"],
581 "contexts": ["blessed_extension"]
584 "dependencies": ["manifest:page_actions"],
585 "contexts": ["blessed_extension"]
588 "dependencies": ["permission:pageCapture"],
589 "contexts": ["blessed_extension"]
593 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
594 "contexts": ["blessed_extension"]
596 "preferencesPrivate": {
597 "dependencies": ["permission:preferencesPrivate"],
598 "contexts": ["blessed_extension"]
600 "principalsPrivate": {
601 "dependencies": ["permission:principalsPrivate"],
602 "contexts": ["blessed_extension"]
605 "dependencies": ["permission:privacy"],
606 "contexts": ["blessed_extension"]
609 "dependencies": ["permission:processes"],
610 "contexts": ["blessed_extension"]
613 "dependencies": ["permission:proxy"],
614 "contexts": ["blessed_extension"]
617 "dependencies": ["permission:pushMessaging"],
618 "contexts": ["blessed_extension"]
620 "imageWriterPrivate": {
621 "dependencies": ["permission:imageWriterPrivate"],
622 "extension_types": ["platform_app"],
623 "contexts": ["blessed_extension"]
625 "readingListPrivate": {
626 "dependencies": ["permission:readingListPrivate"],
627 "contexts": ["blessed_extension"]
630 "dependencies": ["permission:rtcPrivate"],
631 "contexts": ["blessed_extension"]
634 "dependencies": ["manifest:script_badge"],
635 "contexts": ["blessed_extension"]
638 "dependencies": ["permission:sessions"],
639 "contexts": ["blessed_extension"]
642 "dependencies": ["permission:signedInDevices"],
643 "contexts": ["blessed_extension"]
646 "dependencies": ["permission:streamsPrivate"],
647 "contexts": ["blessed_extension"]
650 "dependencies": ["permission:syncFileSystem"],
651 "contexts": ["blessed_extension"]
653 "syncedNotificationsPrivate": {
654 "contexts": ["blessed_extension"],
655 "dependencies": ["permission:syncedNotificationsPrivate"]
658 "dependencies": ["manifest:system_indicator"],
659 "contexts": ["blessed_extension"]
662 "dependencies": ["permission:systemPrivate"],
663 "contexts": ["blessed_extension"]
666 "dependencies": ["permission:tabCapture"],
667 "contexts": ["blessed_extension"]
671 "extension_types": ["extension", "legacy_packaged_app"],
672 "contexts": ["blessed_extension"]
680 "tabs.setZoomSettings": {
683 "tabs.getZoomSettings": {
687 "dependencies": ["permission:terminalPrivate"],
688 "contexts": ["blessed_extension"]
691 "dependencies": ["permission:topSites"],
692 "contexts": ["blessed_extension"]
695 "dependencies": ["permission:tts"],
696 "contexts": ["blessed_extension"]
699 "dependencies": ["permission:ttsEngine"],
700 "contexts": ["blessed_extension"]
702 "virtualKeyboardPrivate": {
703 "dependencies": ["permission:virtualKeyboardPrivate"],
704 "contexts": ["blessed_extension"]
707 "dependencies": ["permission:wallpaper"],
708 "contexts": ["blessed_extension"]
710 "wallpaperPrivate": {
711 "dependencies": ["permission:wallpaperPrivate"],
712 "contexts": ["blessed_extension"]
715 "dependencies": ["permission:webNavigation"],
716 "contexts": ["blessed_extension"]
718 "webrtcAudioPrivate": {
719 "dependencies": ["permission:webrtcAudioPrivate"],
720 "contexts": ["blessed_extension"]
722 "webrtcLoggingPrivate": {
723 "dependencies": ["permission:webrtcLoggingPrivate"],
724 "contexts": ["blessed_extension"]
727 // Hosted apps can use the webstore API from within a blessed context.
729 // Set extension_types to 'all' to prevent webstore from being filtered.
730 // Technically, webstore is not in apps or extensions, but it is currently
731 // displayed on /extensions/webstore and /apps/webstore. The "contexts"
732 // restriction effectively restricts this to hosted apps and webpages.
733 "extension_types": "all",
734 "contexts": ["blessed_web_page", "web_page"],
735 // Any webpage can use the webstore API.
736 "matches": ["<all_urls>"]
739 "dependencies": ["permission:webstorePrivate"],
740 // NOTE: even though this is only used by the webstore hosted app, which
741 // normally would mean blessed_web_page, component hosted apps are actually
742 // given the blessed_extension denomination. Confusing.
743 "contexts": ["blessed_extension"]
748 "dependencies": ["permission:webview"],
749 "contexts": ["blessed_extension"]
752 "dependencies": ["api:tabs"],
753 "contexts": ["blessed_extension"]