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.getDetailsForFrame": {
63 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
66 "app.getIsInstalled": {
67 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
71 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
75 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
78 "automationInternal": {
80 "dependencies": ["manifest:automation"],
81 "contexts": ["blessed_extension"]
84 "dependencies": ["manifest:automation"],
85 "contexts": ["blessed_extension"]
88 "dependencies": ["permission:autotestPrivate"],
89 "contexts": ["blessed_extension"]
91 "bookmarkManagerPrivate": {
92 "dependencies": ["permission:bookmarkManagerPrivate"],
93 "contexts": ["blessed_extension"]
96 "dependencies": ["permission:bookmarks"],
97 "contexts": ["blessed_extension"]
101 "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
102 "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
103 "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9" // http://crbug.com/371562
106 "bookmarks.import": {
108 "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
109 "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
110 "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9" // http://crbug.com/371562
113 "brailleDisplayPrivate": {
114 "dependencies": ["permission:brailleDisplayPrivate"],
115 "contexts": ["blessed_extension"]
118 "dependencies": ["permission:browser"],
119 "contexts": ["blessed_extension"]
122 "dependencies": ["manifest:browser_action"],
123 "contexts": ["blessed_extension"]
125 // This API is whitelisted on stable and should not be enabled for a wider
126 // audience without resolving security issues raised in API proposal and
127 // review (https://codereview.chromium.org/25305002).
128 "browserAction.openPopup": [{
130 "dependencies": ["manifest:browser_action"],
131 "contexts": ["blessed_extension"]
134 "dependencies": ["manifest:browser_action"],
136 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
137 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
138 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
139 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
140 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Google Cast Stable
142 "contexts": ["blessed_extension"]
145 "dependencies": ["permission:browsingData"],
146 "contexts": ["blessed_extension"]
149 "dependencies": ["permission:cast"],
150 "contexts": ["blessed_extension"]
152 "cast.streaming.rtpStream": {
153 "dependencies": ["permission:cast.streaming"],
154 "contexts": ["blessed_extension"]
156 "cast.streaming.session": {
157 "dependencies": ["permission:cast.streaming"],
158 "contexts": ["blessed_extension"]
160 "cast.streaming.udpTransport": {
161 "dependencies": ["permission:cast.streaming"],
162 "contexts": ["blessed_extension"]
164 "chromeosInfoPrivate": {
165 "dependencies": ["permission:chromeosInfoPrivate"],
166 "contexts": ["blessed_extension"]
168 "chromeWebViewInternal": [{
170 "dependencies": ["permission:webview"],
171 "contexts": ["blessed_extension"]
175 "contexts": ["webui"],
176 "matches": ["chrome://chrome-signin/*", "chrome://oobe/*"]
178 "cloudPrintPrivate": {
179 "dependencies": ["permission:cloudPrintPrivate"],
180 "contexts": ["blessed_extension"]
182 "commandLinePrivate": {
183 "dependencies": ["permission:commandLinePrivate"],
184 "contexts": ["blessed_extension"]
187 "dependencies": ["manifest:commands"],
188 "contexts": ["blessed_extension"]
191 "dependencies": ["permission:contentSettings"],
192 "contexts": ["blessed_extension"]
195 "dependencies": ["permission:contextMenus"],
196 "contexts": ["blessed_extension"]
198 "contextMenusInternal": {
201 "contexts": ["blessed_extension"]
204 "dependencies": ["permission:cookies"],
205 "contexts": ["blessed_extension"]
208 "dependencies": ["permission:copresence"],
209 "contexts": ["blessed_extension"]
211 "copresencePrivate": {
212 "dependencies": ["permission:copresencePrivate"],
213 "contexts": ["blessed_extension"]
215 "cryptotokenPrivate": {
216 "dependencies": ["permission:cryptotokenPrivate"],
217 "contexts": ["blessed_extension"]
219 "dataReductionProxy": {
220 "dependencies": ["permission:dataReductionProxy"],
221 "contexts": ["blessed_extension"]
224 "dependencies": ["permission:debugger"],
225 "contexts": ["blessed_extension"]
227 "declarativeContent": {
228 "dependencies": ["permission:declarativeContent"],
229 "contexts": ["blessed_extension"]
232 "dependencies": ["permission:desktopCapture"],
233 "contexts": ["blessed_extension"]
235 "dependencies": ["permission:desktopCapturePrivate"],
237 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
238 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
239 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
240 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
241 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Google Cast Stable
243 "contexts": ["blessed_extension"]
245 "developerPrivate": {
246 "dependencies": ["permission:developerPrivate"],
247 "contexts": ["blessed_extension"]
249 // All devtools APIs are implemented by hand, so don't compile them.
250 "devtools.inspectedWindow": {
252 "dependencies": ["manifest:devtools_page"],
253 "contexts": ["blessed_extension"]
255 "devtools.network": {
257 "dependencies": ["manifest:devtools_page"],
258 "contexts": ["blessed_extension"]
262 "dependencies": ["manifest:devtools_page"],
263 "contexts": ["blessed_extension"]
266 "dependencies": ["permission:diagnostics"],
267 "extension_types": ["platform_app"],
268 "contexts": ["blessed_extension"]
271 "dependencies": ["permission:dial"],
272 "contexts": ["blessed_extension"]
275 "platforms": ["chromeos"],
276 "dependencies": ["permission:documentScan"],
277 "contexts": ["blessed_extension"]
280 "dependencies": ["permission:downloads"],
281 "contexts": ["blessed_extension"]
283 "downloadsInternal": {
286 "contexts": ["blessed_extension"]
288 "easyUnlockPrivate": {
289 "dependencies": ["permission:easyUnlockPrivate"],
290 "contexts": ["blessed_extension"]
293 "dependencies": ["permission:echoPrivate"],
294 "contexts": ["blessed_extension"]
296 "enterprise.platformKeys": {
297 "dependencies": ["permission:enterprise.platformKeys"],
298 "contexts": ["blessed_extension"]
300 "enterprise.platformKeysInternal": {
301 "dependencies": ["permission:enterprise.platformKeys"],
303 "contexts": ["blessed_extension"]
305 "enterprise.platformKeysPrivate": {
306 "dependencies": ["permission:enterprise.platformKeysPrivate"],
307 "contexts": ["blessed_extension"]
309 "experienceSamplingPrivate": {
310 "dependencies": ["permission:experienceSamplingPrivate"],
311 "contexts": ["blessed_extension"]
313 "experimental.devtools.audits": {
314 "dependencies": ["permission:experimental", "manifest:devtools_page"],
315 "contexts": ["blessed_extension"]
317 "experimental.devtools.console": {
318 "dependencies": ["permission:experimental", "manifest:devtools_page"],
319 "contexts": ["blessed_extension"]
323 "extension_types": ["extension", "legacy_packaged_app"],
324 "contexts": ["blessed_extension"]
326 "extension.getURL": {
327 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
329 "extension.getViews": [
332 "contexts": ["blessed_extension"],
333 "extension_types": ["extension", "legacy_packaged_app"]
336 // TODO(yoz): Eliminate this usage.
338 "contexts": ["blessed_extension"],
339 "extension_types": ["platform_app"],
341 "A948368FC53BE437A55FEB414106E207925482F5" // File manager
345 "extension.inIncognitoContext": {
346 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
348 "extension.lastError": {
349 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
351 "extension.onRequest": {
352 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
354 "extension.sendRequest": {
355 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
357 "extensionOptionsInternal": [{
359 "contexts": ["blessed_extension"],
360 "dependencies": ["permission:embeddedExtensionOptions"]
364 "contexts": ["webui"],
365 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
367 // This is not a real API, only here for documentation purposes.
368 // See http://crbug.com/275944 for background.
369 "extensionsManifestTypes": {
372 "contexts": ["blessed_extension"]
375 "dependencies": ["permission:feedbackPrivate"],
376 "contexts": ["blessed_extension"]
378 "fileBrowserHandler": {
379 "dependencies": ["permission:fileBrowserHandler"],
380 "contexts": ["blessed_extension"]
382 "fileBrowserHandlerInternal": {
384 "dependencies": ["permission:fileBrowserHandler"],
385 "contexts": ["blessed_extension"]
387 "screenlockPrivate": {
388 "dependencies": ["permission:screenlockPrivate"],
389 "extension_types": ["platform_app"],
390 "contexts": ["blessed_extension", "unblessed_extension"]
392 "fileManagerPrivate": {
393 "dependencies": ["permission:fileManagerPrivate"],
394 "contexts": ["blessed_extension"]
396 "fileManagerPrivateInternal": {
398 "dependencies": ["permission:fileManagerPrivate"],
399 "contexts": ["blessed_extension"]
402 "dependencies": ["permission:fileSystem"],
403 "contexts": ["blessed_extension"]
405 "fileSystemProvider": {
406 "dependencies": ["permission:fileSystemProvider"],
407 "contexts": ["blessed_extension"]
409 "fileSystemProviderInternal": {
411 "dependencies": ["permission:fileSystemProvider"],
412 "contexts": ["blessed_extension"]
415 "dependencies": ["permission:firstRunPrivate"],
416 "contexts": ["blessed_extension"]
419 "dependencies": ["permission:fontSettings"],
420 "contexts": ["blessed_extension"]
423 "dependencies": ["permission:gcdPrivate"],
424 "contexts": ["blessed_extension"]
427 "dependencies": ["permission:gcm"],
428 "contexts": ["blessed_extension"]
432 "contexts": ["blessed_extension"],
434 // http://crbug.com/309737
435 "nckgahadagoaajjgafhacjanaoiihapd",
436 "ljclpkphhpbpinifbeabbhlfddcpfdde",
437 "ppleadejekpmccmnpjdimmlfljlkdfej",
438 "eggnbpckecmjlblplehfpjjdhhidfdoj",
439 "jfjjdfefebklmdbmenmlehlopoocnoeh",
440 "knipolnnllmklapflnccelgolnpehhpl"
444 "dependencies": ["permission:history"],
445 "contexts": ["blessed_extension"]
448 "dependencies": ["permission:hotwordPrivate"],
449 "contexts": ["blessed_extension"]
453 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
454 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
457 "dependencies": ["permission:identity"],
458 "contexts": ["blessed_extension"]
460 "identity.getAccounts": {
462 "dependencies": ["permission:identity"],
463 "contexts": ["blessed_extension"]
466 "dependencies": ["permission:identityPrivate"],
467 "contexts": ["blessed_extension"]
470 "dependencies": ["permission:idltest"],
471 "contexts": ["blessed_extension"]
474 "dependencies": ["permission:infobars"],
475 "contexts": ["blessed_extension"]
477 "inlineInstallPrivate": {
478 "dependencies": ["permission:inlineInstallPrivate"],
479 "contexts": ["blessed_extension"]
482 "dependencies": ["permission:input"],
483 "contexts": ["blessed_extension"]
485 "inputMethodPrivate": {
486 "dependencies": ["permission:inputMethodPrivate"],
487 "contexts": ["blessed_extension"]
490 "dependencies": ["manifest:launcher_page"],
491 "contexts": ["blessed_extension"]
494 "dependencies": ["permission:location"],
495 "contexts": ["blessed_extension"]
498 "dependencies": ["permission:logPrivate"],
499 "contexts": ["blessed_extension"]
502 "dependencies": ["permission:webcamPrivate"],
503 "contexts": ["blessed_extension"]
505 // This is not a real API, only here for documentation purposes.
506 // See http://crbug.com/275944 for background.
510 "contexts": ["blessed_extension"]
513 "dependencies": ["permission:mediaGalleries"],
514 "contexts": ["blessed_extension"]
516 "mediaPlayerPrivate": {
517 "dependencies": ["permission:mediaPlayerPrivate"],
518 "contexts": ["blessed_extension"]
521 "dependencies": ["permission:metricsPrivate"],
522 "contexts": ["blessed_extension"]
525 "dependencies": ["permission:mdns"],
526 "contexts": ["blessed_extension"]
528 "mimeHandlerViewGuestInternal": {
532 "matches": ["<all_urls>"]
534 "musicManagerPrivate": {
535 "dependencies": ["permission:musicManagerPrivate"],
536 "contexts": ["blessed_extension"]
538 "notificationProvider": {
539 "dependencies": ["permission:notificationProvider"],
540 "contexts": ["blessed_extension"]
543 "dependencies": ["permission:notifications"],
544 "contexts": ["blessed_extension"]
547 "dependencies": ["manifest:omnibox"],
548 "contexts": ["blessed_extension"]
551 "dependencies": ["manifest:page_action"],
552 "contexts": ["blessed_extension"]
555 "dependencies": ["permission:pageCapture"],
556 "contexts": ["blessed_extension"]
560 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
561 "contexts": ["blessed_extension"]
563 "platformKeysInternal": [{
564 "dependencies": ["permission:enterprise.platformKeys"],
566 "contexts": ["blessed_extension"]
568 "preferencesPrivate": {
569 "dependencies": ["permission:preferencesPrivate"],
570 "contexts": ["blessed_extension"]
572 "principalsPrivate": {
573 "dependencies": ["permission:principalsPrivate"],
574 "contexts": ["blessed_extension"]
577 "dependencies": ["permission:privacy"],
578 "contexts": ["blessed_extension"]
581 "dependencies": ["permission:processes"],
582 "contexts": ["blessed_extension"]
585 "dependencies": ["permission:proxy"],
586 "contexts": ["blessed_extension"]
589 "dependencies": ["permission:pushMessaging"],
590 "contexts": ["blessed_extension"]
592 "imageWriterPrivate": {
593 "dependencies": ["permission:imageWriterPrivate"],
594 "extension_types": ["platform_app"],
595 "contexts": ["blessed_extension"]
597 "readingListPrivate": {
598 "dependencies": ["permission:readingListPrivate"],
599 "contexts": ["blessed_extension"]
602 "dependencies": ["permission:rtcPrivate"],
603 "contexts": ["blessed_extension"]
606 "dependencies": ["permission:sessions"],
607 "contexts": ["blessed_extension"]
610 "dependencies": ["permission:signedInDevices"],
611 "contexts": ["blessed_extension"]
614 "dependencies": ["permission:streamsPrivate"],
615 "contexts": ["blessed_extension"]
618 "dependencies": ["permission:syncFileSystem"],
619 "contexts": ["blessed_extension"]
622 "dependencies": ["manifest:system_indicator"],
623 "contexts": ["blessed_extension"]
626 "dependencies": ["permission:systemPrivate"],
627 "contexts": ["blessed_extension"]
630 "dependencies": ["permission:tabCapture"],
631 "contexts": ["blessed_extension"]
635 "extension_types": ["extension", "legacy_packaged_app"],
636 "contexts": ["blessed_extension"]
639 "dependencies": ["permission:terminalPrivate"],
640 "contexts": ["blessed_extension"]
643 "dependencies": ["permission:topSites"],
644 "contexts": ["blessed_extension"]
647 "dependencies": ["permission:tts"],
648 "contexts": ["blessed_extension"]
651 "dependencies": ["permission:ttsEngine"],
652 "contexts": ["blessed_extension"]
654 "virtualKeyboardPrivate": {
655 "dependencies": ["permission:virtualKeyboardPrivate"],
656 "contexts": ["blessed_extension"]
659 "dependencies": ["permission:wallpaper"],
660 "contexts": ["blessed_extension"]
662 "wallpaperPrivate": {
663 "dependencies": ["permission:wallpaperPrivate"],
664 "contexts": ["blessed_extension"]
667 "dependencies": ["permission:webNavigation"],
668 "contexts": ["blessed_extension"]
670 "webrtcAudioPrivate": {
671 "dependencies": ["permission:webrtcAudioPrivate"],
672 "contexts": ["blessed_extension"]
674 "webrtcLoggingPrivate": {
675 "dependencies": ["permission:webrtcLoggingPrivate"],
676 "contexts": ["blessed_extension"]
679 // Hosted apps can use the webstore API from within a blessed context.
681 // Set extension_types to 'all' to prevent webstore from being filtered.
682 // Technically, webstore is not in apps or extensions, but it is currently
683 // displayed on /extensions/webstore and /apps/webstore. The "contexts"
684 // restriction effectively restricts this to hosted apps and webpages.
685 "extension_types": "all",
686 "contexts": ["blessed_web_page", "web_page"],
687 // Any webpage can use the webstore API.
688 "matches": ["<all_urls>"]
691 "dependencies": ["permission:webstorePrivate"],
692 // NOTE: even though this is only used by the webstore hosted app, which
693 // normally would mean blessed_web_page, component hosted apps are actually
694 // given the blessed_extension denomination. Confusing.
695 "contexts": ["blessed_extension"]
700 "dependencies": ["permission:webview"],
701 "contexts": ["blessed_extension"]
704 "dependencies": ["api:tabs"],
705 "contexts": ["blessed_extension"]