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"]
74 "contexts": ["blessed_extension"],
75 "extension_types": ["platform_app"],
78 "app.currentWindowInternal": {
82 "contexts": ["blessed_extension"]
84 "app.currentWindowInternal.setShape": {
85 "dependencies": ["permission:app.window.shape"],
86 "contexts": ["blessed_extension"]
89 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
92 "app.getDetailsForFrame": {
93 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
96 "app.getIsInstalled": {
97 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
100 "app.installState": {
101 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
104 "app.runningState": {
105 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
109 "dependencies": ["permission:audio"],
110 "contexts": ["blessed_extension"]
112 "automationInternal": {
114 "dependencies": ["manifest:automation"],
115 "contexts": ["blessed_extension"]
118 "dependencies": ["manifest:automation"],
119 "contexts": ["blessed_extension"]
122 "dependencies": ["permission:autotestPrivate"],
123 "contexts": ["blessed_extension"]
126 "dependencies": ["manifest:bluetooth"],
127 "contexts": ["blessed_extension"]
129 "bluetoothLowEnergy": {
130 "dependencies": ["manifest:bluetooth"],
131 "contexts": ["blessed_extension"]
133 "bluetoothPrivate": {
134 "dependencies": ["permission:bluetoothPrivate"],
135 "contexts": ["blessed_extension"]
138 "dependencies": ["manifest:bluetooth"],
139 "contexts": ["blessed_extension"]
141 "bookmarkManagerPrivate": {
142 "dependencies": ["permission:bookmarkManagerPrivate"],
143 "contexts": ["blessed_extension"]
146 "dependencies": ["permission:bookmarks"],
147 "contexts": ["blessed_extension"]
149 "bookmarks.export": {
150 "extension_types": ["extension"],
151 "location": "component"
153 "bookmarks.import": {
154 "extension_types": ["extension"],
155 "location": "component"
157 "brailleDisplayPrivate": {
158 "dependencies": ["permission:brailleDisplayPrivate"],
159 "contexts": ["blessed_extension"]
162 "dependencies": ["permission:browser"],
163 "contexts": ["blessed_extension"]
166 "dependencies": ["manifest:browser_action"],
167 "contexts": ["blessed_extension"]
169 // This API is whitelisted on stable and should not be enabled for a wider
170 // audience without resolving security issues raised in API proposal and
171 // review (https://codereview.chromium.org/25305002).
172 "browserAction.openPopup": [{
174 "dependencies": ["manifest:browser_action"],
175 "contexts": ["blessed_extension"]
178 "dependencies": ["manifest:browser_action"],
180 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
181 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
182 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
183 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
184 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Google Cast Stable
186 "contexts": ["blessed_extension"]
189 "dependencies": ["permission:browsingData"],
190 "contexts": ["blessed_extension"]
193 "dependencies": ["permission:cast"],
194 "contexts": ["blessed_extension"]
196 "cast.streaming.rtpStream": {
197 "dependencies": ["permission:cast.streaming"],
198 "contexts": ["blessed_extension"]
200 "cast.streaming.session": {
201 "dependencies": ["permission:cast.streaming"],
202 "contexts": ["blessed_extension"]
204 "cast.streaming.udpTransport": {
205 "dependencies": ["permission:cast.streaming"],
206 "contexts": ["blessed_extension"]
208 "chromeosInfoPrivate": {
209 "dependencies": ["permission:chromeosInfoPrivate"],
210 "contexts": ["blessed_extension"]
212 "cloudPrintPrivate": {
213 "dependencies": ["permission:cloudPrintPrivate"],
214 "contexts": ["blessed_extension"]
216 "commandLinePrivate": {
217 "dependencies": ["permission:commandLinePrivate"],
218 "contexts": ["blessed_extension"]
221 "dependencies": ["manifest:commands"],
222 "contexts": ["blessed_extension"]
225 "dependencies": ["permission:contentSettings"],
226 "contexts": ["blessed_extension"]
229 "dependencies": ["permission:contextMenus"],
230 "contexts": ["blessed_extension"]
232 "contextMenusInternal": {
235 "contexts": ["blessed_extension"]
238 "dependencies": ["permission:cookies"],
239 "contexts": ["blessed_extension"]
242 "dependencies": ["permission:copresence"],
243 "contexts": ["blessed_extension"]
245 "copresencePrivate": {
246 "dependencies": ["permission:copresencePrivate"],
247 "contexts": ["blessed_extension"]
250 "dependencies": ["permission:debugger"],
251 "contexts": ["blessed_extension"]
253 "declarativeContent": {
254 "dependencies": ["permission:declarativeContent"],
255 "contexts": ["blessed_extension"]
257 "declarativeWebRequest": {
258 "dependencies": ["permission:declarativeWebRequest"],
259 "contexts": ["blessed_extension"]
262 "dependencies": ["permission:desktopCapture"],
263 "contexts": ["blessed_extension"]
265 "developerPrivate": {
266 "dependencies": ["permission:developerPrivate"],
267 "contexts": ["blessed_extension"]
269 "devtools.inspectedWindow": {
270 "dependencies": ["manifest:devtools_page"],
271 "contexts": ["blessed_extension"]
273 "devtools.network": {
274 "dependencies": ["manifest:devtools_page"],
275 "contexts": ["blessed_extension"]
278 "dependencies": ["manifest:devtools_page"],
279 "contexts": ["blessed_extension"]
282 "dependencies": ["permission:diagnostics"],
283 "extension_types": ["platform_app"],
284 "contexts": ["blessed_extension"]
287 "dependencies": ["permission:dial"],
288 "contexts": ["blessed_extension"]
291 "dependencies": ["permission:downloads"],
292 "contexts": ["blessed_extension"]
294 "downloadsInternal": {
297 "contexts": ["blessed_extension"]
299 "easyUnlockPrivate": {
300 "dependencies": ["permission:easyUnlockPrivate"],
301 "contexts": ["blessed_extension"]
304 "dependencies": ["permission:echoPrivate"],
305 "contexts": ["blessed_extension"]
307 "enterprise.platformKeys": {
308 "dependencies": ["permission:enterprise.platformKeys"],
309 "contexts": ["blessed_extension"]
311 "enterprise.platformKeysInternal": {
312 "dependencies": ["permission:enterprise.platformKeys"],
314 "contexts": ["blessed_extension"]
316 "enterprise.platformKeysPrivate": {
317 "dependencies": ["permission:enterprise.platformKeysPrivate"],
318 "contexts": ["blessed_extension"]
323 "extension_types": ["platform_app", "extension"],
325 "matches": ["<all_urls>"]
327 "experienceSamplingPrivate": {
328 "dependencies": ["permission:experienceSamplingPrivate"],
329 "contexts": ["blessed_extension"]
331 "experimental.devtools.audits": {
332 "dependencies": ["permission:experimental", "manifest:devtools_page"],
333 "contexts": ["blessed_extension"]
335 "experimental.devtools.console": {
336 "dependencies": ["permission:experimental", "manifest:devtools_page"],
337 "contexts": ["blessed_extension"]
341 "extension_types": ["extension", "legacy_packaged_app"],
342 "contexts": ["blessed_extension"]
344 "extension.getURL": {
345 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
347 "extension.getViews": [
350 "contexts": ["blessed_extension"],
351 "extension_types": ["extension", "legacy_packaged_app"]
354 // TODO(yoz): Eliminate this usage.
356 "contexts": ["blessed_extension"],
357 "extension_types": ["platform_app"],
359 "A948368FC53BE437A55FEB414106E207925482F5" // File manager
363 "extension.inIncognitoContext": {
364 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
366 "extension.lastError": {
367 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
369 "extension.onRequest": {
370 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
372 "extension.sendNativeMessage": {
373 "dependencies": ["permission:nativeMessaging"]
375 "extension.sendRequest": {
376 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
378 "extensionOptionsInternal": [{
380 "contexts": ["blessed_extension"],
381 "dependencies": ["permission:embeddedExtensionOptions"]
385 "contexts": ["webui"],
386 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
388 // This is not a real API, only here for documentation purposes.
389 // See http://crbug.com/275944 for background.
390 "extensionsManifestTypes": {
393 "contexts": ["blessed_extension"]
396 "dependencies": ["permission:feedbackPrivate"],
397 "contexts": ["blessed_extension"]
399 "fileBrowserHandler": {
400 "dependencies": ["permission:fileBrowserHandler"],
401 "contexts": ["blessed_extension"]
403 "fileBrowserHandlerInternal": {
405 "dependencies": ["permission:fileBrowserHandler"],
406 "contexts": ["blessed_extension"]
408 "screenlockPrivate": {
409 "dependencies": ["permission:screenlockPrivate"],
410 "extension_types": ["platform_app"],
411 "contexts": ["blessed_extension", "unblessed_extension"]
413 "fileBrowserPrivate": {
414 "dependencies": ["permission:fileBrowserPrivate"],
415 "contexts": ["blessed_extension"]
417 "fileBrowserPrivateInternal": {
419 "dependencies": ["permission:fileBrowserPrivate"],
420 "contexts": ["blessed_extension"]
423 "dependencies": ["permission:fileSystem"],
424 "contexts": ["blessed_extension"]
426 "fileSystemProvider": {
427 "dependencies": ["permission:fileSystemProvider"],
428 "contexts": ["blessed_extension"]
430 "fileSystemProviderInternal": {
432 "dependencies": ["permission:fileSystemProvider"],
433 "contexts": ["blessed_extension"]
436 "dependencies": ["permission:firstRunPrivate"],
437 "contexts": ["blessed_extension"]
440 "dependencies": ["permission:fontSettings"],
441 "contexts": ["blessed_extension"]
444 "dependencies": ["permission:gcdPrivate"],
445 "contexts": ["blessed_extension"]
448 "dependencies": ["permission:gcm"],
449 "contexts": ["blessed_extension"]
451 "guestViewInternal": [{
454 "contexts": ["blessed_extension"]
456 // Component extensions can use the guestViewInternal API from iframes.
457 "location": "component",
459 "dependencies": ["permission:webview"],
460 "contexts": ["unblessed_extension"]
464 "contexts": ["webui"],
465 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
469 "contexts": ["blessed_extension"],
471 // http://crbug.com/309737
472 "nckgahadagoaajjgafhacjanaoiihapd",
473 "ljclpkphhpbpinifbeabbhlfddcpfdde",
474 "ppleadejekpmccmnpjdimmlfljlkdfej",
475 "eggnbpckecmjlblplehfpjjdhhidfdoj",
476 "jfjjdfefebklmdbmenmlehlopoocnoeh",
477 "knipolnnllmklapflnccelgolnpehhpl"
481 "dependencies": ["permission:history"],
482 "contexts": ["blessed_extension"]
485 "dependencies": ["permission:hotwordPrivate"],
486 "contexts": ["blessed_extension"]
490 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
491 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
494 "dependencies": ["permission:identity"],
495 "contexts": ["blessed_extension"]
497 "identity.getAccounts": {
499 "dependencies": ["permission:identity"],
500 "contexts": ["blessed_extension"]
503 "dependencies": ["permission:identityPrivate"],
504 "contexts": ["blessed_extension"]
507 "dependencies": ["permission:idltest"],
508 "contexts": ["blessed_extension"]
511 "dependencies": ["permission:idle"],
512 "contexts": ["blessed_extension"]
515 "dependencies": ["permission:infobars"],
516 "contexts": ["blessed_extension"]
519 "dependencies": ["permission:input"],
520 "contexts": ["blessed_extension"]
522 "inputMethodPrivate": {
523 "dependencies": ["permission:inputMethodPrivate"],
524 "contexts": ["blessed_extension"]
527 "dependencies": ["permission:ledger"],
528 "contexts": ["blessed_extension"]
531 "dependencies": ["permission:location"],
532 "contexts": ["blessed_extension"]
535 "dependencies": ["permission:logPrivate"],
536 "contexts": ["blessed_extension"]
539 "dependencies": ["permission:webcamPrivate"],
540 "contexts": ["blessed_extension"]
543 "dependencies": ["permission:management"],
544 "contexts": ["blessed_extension"]
546 "management.getPermissionWarningsByManifest": {
549 "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
551 "management.uninstallSelf": {
554 "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
556 // This is not a real API, only here for documentation purposes.
557 // See http://crbug.com/275944 for background.
561 "contexts": ["blessed_extension"]
564 "dependencies": ["permission:mediaGalleries"],
565 "contexts": ["blessed_extension"]
567 "mediaGalleriesPrivate": {
568 "dependencies": ["permission:mediaGalleriesPrivate"],
569 "contexts": ["blessed_extension"]
571 "mediaPlayerPrivate": {
572 "dependencies": ["permission:mediaPlayerPrivate"],
573 "contexts": ["blessed_extension"]
576 "dependencies": ["permission:metricsPrivate"],
577 "contexts": ["blessed_extension"]
580 "dependencies": ["permission:mdns"],
581 "contexts": ["blessed_extension"]
583 "musicManagerPrivate": {
584 "dependencies": ["permission:musicManagerPrivate"],
585 "contexts": ["blessed_extension"]
587 "networkingPrivate": {
588 "dependencies": ["permission:networkingPrivate"],
589 "contexts": ["blessed_extension"]
591 "notificationProvider": {
592 "dependencies": ["permission:notificationProvider"],
593 "contexts": ["blessed_extension"]
596 "dependencies": ["permission:notifications"],
597 "contexts": ["blessed_extension"]
600 "dependencies": ["manifest:omnibox"],
601 "contexts": ["blessed_extension"]
604 "dependencies": ["manifest:page_action"],
605 "contexts": ["blessed_extension"]
608 "dependencies": ["manifest:page_actions"],
609 "contexts": ["blessed_extension"]
612 "dependencies": ["permission:pageCapture"],
613 "contexts": ["blessed_extension"]
617 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
618 "contexts": ["blessed_extension"]
620 "preferencesPrivate": {
621 "dependencies": ["permission:preferencesPrivate"],
622 "contexts": ["blessed_extension"]
624 "principalsPrivate": {
625 "dependencies": ["permission:principalsPrivate"],
626 "contexts": ["blessed_extension"]
629 "dependencies": ["permission:privacy"],
630 "contexts": ["blessed_extension"]
633 "dependencies": ["permission:processes"],
634 "contexts": ["blessed_extension"]
637 "dependencies": ["permission:proxy"],
638 "contexts": ["blessed_extension"]
641 "dependencies": ["permission:pushMessaging"],
642 "contexts": ["blessed_extension"]
644 "imageWriterPrivate": {
645 "dependencies": ["permission:imageWriterPrivate"],
646 "extension_types": ["platform_app"],
647 "contexts": ["blessed_extension"]
649 "readingListPrivate": {
650 "dependencies": ["permission:readingListPrivate"],
651 "contexts": ["blessed_extension"]
654 "dependencies": ["permission:rtcPrivate"],
655 "contexts": ["blessed_extension"]
658 "dependencies": ["manifest:script_badge"],
659 "contexts": ["blessed_extension"]
662 "dependencies": ["permission:sessions"],
663 "contexts": ["blessed_extension"]
666 "dependencies": ["permission:signedInDevices"],
667 "contexts": ["blessed_extension"]
670 "dependencies": ["permission:streamsPrivate"],
671 "contexts": ["blessed_extension"]
674 "dependencies": ["permission:syncFileSystem"],
675 "contexts": ["blessed_extension"]
677 "syncedNotificationsPrivate": {
678 "contexts": ["blessed_extension"],
679 "dependencies": ["permission:syncedNotificationsPrivate"]
682 "dependencies": ["manifest:system_indicator"],
683 "contexts": ["blessed_extension"]
686 "dependencies": ["permission:system.cpu"],
687 "contexts": ["blessed_extension"]
690 "dependencies": ["permission:system.display"],
691 "contexts": ["blessed_extension"]
694 "dependencies": ["permission:system.memory"],
695 "contexts": ["blessed_extension"]
698 "dependencies": ["permission:system.network"],
699 "contexts": ["blessed_extension"]
702 "dependencies": ["permission:system.storage"],
703 "contexts": ["blessed_extension"]
705 "system.storage.getAvailableCapacity": {
709 "dependencies": ["permission:systemPrivate"],
710 "contexts": ["blessed_extension"]
713 "dependencies": ["permission:tabCapture"],
714 "contexts": ["blessed_extension"]
718 "extension_types": ["extension", "legacy_packaged_app"],
719 "contexts": ["blessed_extension"]
727 "tabs.setZoomSettings": {
730 "tabs.getZoomSettings": {
734 "dependencies": ["permission:terminalPrivate"],
735 "contexts": ["blessed_extension"]
738 "dependencies": ["permission:topSites"],
739 "contexts": ["blessed_extension"]
742 "dependencies": ["permission:tts"],
743 "contexts": ["blessed_extension"]
746 "dependencies": ["permission:ttsEngine"],
747 "contexts": ["blessed_extension"]
749 "virtualKeyboardPrivate": {
750 "dependencies": ["permission:virtualKeyboardPrivate"],
751 "contexts": ["blessed_extension"]
754 "dependencies": ["permission:wallpaper"],
755 "contexts": ["blessed_extension"]
757 "wallpaperPrivate": {
758 "dependencies": ["permission:wallpaperPrivate"],
759 "contexts": ["blessed_extension"]
762 "dependencies": ["permission:webNavigation"],
763 "contexts": ["blessed_extension"]
766 "dependencies": ["permission:webRequest"],
767 "contexts": ["blessed_extension"]
769 "webRequestInternal": [{
772 "contexts": ["blessed_extension"]
774 // webview uses webRequestInternal API.
777 "dependencies": ["permission:webview"],
778 "contexts": ["unblessed_extension"]
780 "webrtcAudioPrivate": {
781 "dependencies": ["permission:webrtcAudioPrivate"],
782 "contexts": ["blessed_extension"]
784 "webrtcLoggingPrivate": {
785 "dependencies": ["permission:webrtcLoggingPrivate"],
786 "contexts": ["blessed_extension"]
789 // Hosted apps can use the webstore API from within a blessed context.
791 // Set extension_types to 'all' to prevent webstore from being filtered.
792 // Technically, webstore is not in apps or extensions, but it is currently
793 // displayed on /extensions/webstore and /apps/webstore. The "contexts"
794 // restriction effectively restricts this to hosted apps and webpages.
795 "extension_types": "all",
796 "contexts": ["blessed_web_page", "web_page"],
797 // Any webpage can use the webstore API.
798 "matches": ["<all_urls>"]
801 "dependencies": ["permission:webstorePrivate"],
802 // NOTE: even though this is only used by the webstore hosted app, which
803 // normally would mean blessed_web_page, component hosted apps are actually
804 // given the blessed_extension denomination. Confusing.
805 "contexts": ["blessed_extension"]
807 "webViewInternal": [{
809 "dependencies": ["permission:webview"],
810 "contexts": ["blessed_extension"]
812 // Component extensions can use the webViewInternal API from iframes.
813 "location": "component",
815 "dependencies": ["permission:webview"],
816 "contexts": ["unblessed_extension"]
819 "dependencies": ["permission:webview"],
820 "contexts": ["blessed_extension"]
822 // Component extensions can use the webViewRequest API from iframes.
823 "location": "component",
824 "dependencies": ["permission:webview"],
825 "contexts": ["unblessed_extension"]
830 "dependencies": ["permission:webview"],
831 "contexts": ["blessed_extension"]
834 "dependencies": ["api:tabs"],
835 "contexts": ["blessed_extension"]