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.
4
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.
8//
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.
11
12// To add a new whitelisted ID, SHA-1 it and force it to uppercase. In Bash:
13//
14// $ echo -n "aaaabbbbccccddddeeeeffffgggghhhh" | \
15// sha1sum | tr '[:lower:]' '[:upper:]'
16// 9A0417016F345C934A1A88F55CA17C05014EEEBA  -
17//
18// Google employees: please update http://go/chrome-api-whitelist to map
19// hashes back to ids.
20
21{
22  "accessibilityFeatures": [{
23    "platforms": ["chromeos"],
24    "dependencies": ["permission:accessibilityFeatures.modify"],
25    "contexts": ["blessed_extension"]
26  }, {
27    "platforms": ["chromeos"],
28    "dependencies": ["permission:accessibilityFeatures.read"],
29    "contexts": ["blessed_extension"]
30  }],
31  "accessibilityPrivate": {
32    "dependencies": ["permission:accessibilityPrivate"],
33    "contexts": ["blessed_extension"]
34  },
35  "activityLogPrivate": {
36    "dependencies": ["permission:activityLogPrivate"],
37    "contexts": ["blessed_extension"]
38  },
39  "alarms": {
40    "dependencies": ["permission:alarms"],
41    "contexts": ["blessed_extension"]
42  },
43  "app": {
44    "blacklist": [
45      "2FC374607C2DF285634B67C64A2E356C607091C3",  // Quickoffice
46      "3727DD3E564B6055387425027AD74C58784ACC15",  // Quickoffice internal
47      "12E618C3C6E97495AAECF2AC12DEB082353241C6"   // QO component extension
48    ],
49    "channel": "stable",
50    "extension_types": ["hosted_app", "extension", "legacy_packaged_app"],
51    "contexts": [
52      "blessed_extension",
53      "unblessed_extension",
54      "content_script",
55      "web_page",
56      "blessed_web_page"
57    ],
58    "matches": [
59      "http://*/*", "https://*/*", "chrome-extension://*/*", "file://*/*"
60    ]
61  },
62  "app.runtime": [{
63    "channel": "stable",
64    "contexts": ["blessed_extension"],
65    "extension_types": ["platform_app"],
66    "noparent": true
67  }, {
68    "channel": "stable",
69    "component_extensions_auto_granted": false,
70    "contexts": ["blessed_extension"],
71    "extension_types": ["extension"],
72    "noparent": true,
73    "whitelist": [
74      "2FC374607C2DF285634B67C64A2E356C607091C3",  // Quickoffice
75      "3727DD3E564B6055387425027AD74C58784ACC15",  // Quickoffice internal
76      "12E618C3C6E97495AAECF2AC12DEB082353241C6"   // QO component extension
77    ]
78  }],
79  "app.window": {
80    "channel": "stable",
81    "contexts": ["blessed_extension"],
82    "extension_types": ["platform_app"],
83    "noparent": true
84  },
85  "app.currentWindowInternal": {
86    "noparent": true,
87    "internal": true,
88    "channel": "stable",
89    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
90  },
91  "app.currentWindowInternal.setShape": {
92    "dependencies": ["permission:app.window.shape"],
93    "contexts": ["blessed_extension"]
94  },
95  "app.getDetails": {
96    "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
97    "matches": []
98  },
99  "app.getDetailsForFrame": {
100    "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
101    "matches": []
102  },
103  "app.getIsInstalled": {
104    "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
105    "matches": []
106  },
107  "app.installState": {
108    "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
109    "matches": []
110  },
111  "app.runningState": {
112    "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
113    "matches": []
114  },
115  "audio": {
116    "dependencies": ["permission:audio"],
117    "contexts": ["blessed_extension"]
118  },
119  "automationInternal": {
120    "internal": true,
121    "dependencies": ["manifest:automation"],
122    "contexts": ["blessed_extension"]
123  },
124  "automation": {
125    "dependencies": ["manifest:automation"],
126    "contexts": ["blessed_extension"]
127  },
128  "autotestPrivate": {
129    "dependencies": ["permission:autotestPrivate"],
130    "contexts": ["blessed_extension"]
131  },
132  "bluetooth": {
133    "dependencies": ["manifest:bluetooth"],
134    "contexts": ["blessed_extension"]
135  },
136  "bluetoothLowEnergy": {
137    "dependencies": ["manifest:bluetooth"],
138    "contexts": ["blessed_extension"]
139  },
140  "bluetoothPrivate": {
141    "dependencies": ["permission:bluetoothPrivate"],
142    "contexts": ["blessed_extension"]
143  },
144  "bluetoothSocket": {
145    "dependencies": ["manifest:bluetooth"],
146    "contexts": ["blessed_extension"]
147  },
148  "bookmarkManagerPrivate": {
149    "dependencies": ["permission:bookmarkManagerPrivate"],
150    "contexts": ["blessed_extension"]
151  },
152  "bookmarks": {
153    "dependencies": ["permission:bookmarks"],
154    "contexts": ["blessed_extension"]
155  },
156  "bookmarks.export": {
157    "extension_types": ["extension"],
158    "location": "component"
159  },
160  "bookmarks.import": {
161    "extension_types": ["extension"],
162    "location": "component"
163  },
164  "brailleDisplayPrivate": {
165    "dependencies": ["permission:brailleDisplayPrivate"],
166    "contexts": ["blessed_extension"]
167  },
168  "browser": {
169    "dependencies": ["permission:browser"],
170    "contexts": ["blessed_extension"]
171  },
172  "browserAction": {
173    "dependencies": ["manifest:browser_action"],
174    "contexts": ["blessed_extension"]
175  },
176  // This API is whitelisted on stable and should not be enabled for a wider
177  // audience without resolving security issues raised in API proposal and
178  // review (https://codereview.chromium.org/25305002).
179  "browserAction.openPopup": [{
180    "channel": "dev",
181    "dependencies": ["manifest:browser_action"],
182    "contexts": ["blessed_extension"]
183  }, {
184    "channel": "stable",
185    "dependencies": ["manifest:browser_action"],
186    "whitelist": [
187      "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
188      "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
189      "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
190      "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
191      "16CA7A47AAE4BE49B1E75A6B960C3875E945B264"   // Google Cast Stable
192    ],
193    "contexts": ["blessed_extension"]
194  }],
195  "browsingData": {
196    "dependencies": ["permission:browsingData"],
197    "contexts": ["blessed_extension"]
198  },
199  "cast.channel": {
200    "dependencies": ["permission:cast"],
201    "contexts": ["blessed_extension"]
202  },
203  "cast.streaming.rtpStream": {
204    "dependencies": ["permission:cast.streaming"],
205    "contexts": ["blessed_extension"]
206  },
207  "cast.streaming.session": {
208    "dependencies": ["permission:cast.streaming"],
209    "contexts": ["blessed_extension"]
210  },
211  "cast.streaming.udpTransport": {
212    "dependencies": ["permission:cast.streaming"],
213    "contexts": ["blessed_extension"]
214  },
215  "chromeosInfoPrivate": {
216    "platforms": ["chromeos"],
217    "dependencies": ["permission:chromeosInfoPrivate"],
218    "contexts": ["blessed_extension"]
219  },
220  "cloudPrintPrivate": {
221    "dependencies": ["permission:cloudPrintPrivate"],
222    "contexts": ["blessed_extension"]
223  },
224  "commandLinePrivate": {
225    "dependencies": ["permission:commandLinePrivate"],
226    "contexts": ["blessed_extension"]
227  },
228  "commands": {
229    "dependencies": ["manifest:commands"],
230    "contexts": ["blessed_extension"]
231  },
232  "contentSettings": {
233    "dependencies": ["permission:contentSettings"],
234    "contexts": ["blessed_extension"]
235  },
236  "contextMenus": {
237    "dependencies": ["permission:contextMenus"],
238    "contexts": ["blessed_extension"]
239  },
240  "contextMenusInternal": {
241    "internal": true,
242    "channel": "stable",
243    "contexts": ["blessed_extension"]
244  },
245  "cookies": {
246    "dependencies": ["permission:cookies"],
247    "contexts": ["blessed_extension"]
248  },
249  "debugger": {
250    "dependencies": ["permission:debugger"],
251    "contexts": ["blessed_extension"]
252  },
253  "declarativeContent": {
254    "dependencies": ["permission:declarativeContent"],
255    "contexts": ["blessed_extension"]
256  },
257  "declarativeWebRequest": {
258    "dependencies": ["permission:declarativeWebRequest"],
259    "contexts": ["blessed_extension"]
260  },
261  "desktopCapture": {
262    "dependencies": ["permission:desktopCapture"],
263    "contexts": ["blessed_extension"]
264  },
265  "developerPrivate": {
266    "dependencies": ["permission:developerPrivate"],
267    "contexts": ["blessed_extension"]
268  },
269  "devtools.inspectedWindow": {
270    "dependencies": ["manifest:devtools_page"],
271    "contexts": ["blessed_extension"]
272  },
273  "devtools.network": {
274    "dependencies": ["manifest:devtools_page"],
275    "contexts": ["blessed_extension"]
276  },
277  "devtools.panels": {
278    "dependencies": ["manifest:devtools_page"],
279    "contexts": ["blessed_extension"]
280  },
281  "diagnostics": {
282    "dependencies": ["permission:diagnostics"],
283    "extension_types": ["platform_app"],
284    "contexts": ["blessed_extension"]
285  },
286  "dial": {
287    "dependencies": ["permission:dial"],
288    "contexts": ["blessed_extension"]
289  },
290  "downloads": {
291    "dependencies": ["permission:downloads"],
292    "contexts": ["blessed_extension"]
293  },
294  "downloadsInternal": {
295    "internal": true,
296    "channel": "stable",
297    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
298  },
299  "echoPrivate": {
300    "platforms": ["chromeos"],
301    "dependencies": ["permission:echoPrivate"],
302    "contexts": ["blessed_extension"]
303  },
304  "enterprise.platformKeys": {
305    "dependencies": ["permission:enterprise.platformKeys"],
306    "contexts": ["blessed_extension"]
307  },
308  "enterprise.platformKeysInternal": {
309    "dependencies": ["permission:enterprise.platformKeys"],
310    "internal": true,
311    "contexts": ["blessed_extension"]
312  },
313  "enterprise.platformKeysPrivate": {
314    "platforms": ["chromeos"],
315    "dependencies": ["permission:enterprise.platformKeysPrivate"],
316    "contexts": ["blessed_extension"]
317  },
318  "events": {
319    "internal": true,
320    "channel": "stable",
321    "extension_types": ["platform_app", "extension"],
322    "contexts": "all",
323    "matches": ["<all_urls>"]
324  },
325  "experimental.devtools.audits": {
326    "dependencies": ["permission:experimental", "manifest:devtools_page"],
327    "contexts": ["blessed_extension"]
328  },
329  "experimental.devtools.console": {
330    "dependencies": ["permission:experimental", "manifest:devtools_page"],
331    "contexts": ["blessed_extension"]
332  },
333  "extension": {
334    "channel": "stable",
335    "extension_types": ["extension", "legacy_packaged_app"],
336    "contexts": ["blessed_extension"]
337  },
338  "extension.getURL": {
339    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
340  },
341  "extension.getViews": [
342    {
343      "channel": "stable",
344      "contexts": ["blessed_extension"],
345      "extension_types": ["extension", "legacy_packaged_app"]
346    },
347    {
348      // TODO(yoz): Eliminate this usage.
349      "channel": "stable",
350      "contexts": ["blessed_extension"],
351      "extension_types": ["platform_app"],
352      "whitelist": [
353        "A948368FC53BE437A55FEB414106E207925482F5"  // File manager
354      ]
355    }
356  ],
357  "extension.inIncognitoContext": {
358    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
359  },
360  "extension.lastError": {
361    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
362  },
363  "extension.onRequest": {
364    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
365  },
366  "extension.sendNativeMessage": {
367    "dependencies": ["permission:nativeMessaging"]
368  },
369  "extension.sendRequest": {
370    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
371  },
372  // This is not a real API, only here for documentation purposes.
373  // See http://crbug.com/275944 for background.
374  "extensionsManifestTypes": {
375    "internal": true,
376    "channel": "stable",
377    "contexts": ["blessed_extension"]
378  },
379  "feedbackPrivate": {
380    "dependencies": ["permission:feedbackPrivate"],
381    "contexts": ["blessed_extension"]
382  },
383  "fileBrowserHandler": {
384    "platforms": ["chromeos"],
385    "dependencies": ["permission:fileBrowserHandler"],
386    "contexts": ["blessed_extension"]
387  },
388  "fileBrowserHandlerInternal": {
389    "internal": true,
390    "platforms": ["chromeos"],
391    "channel": "stable",
392    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
393  },
394  "screenlockPrivate": {
395    "dependencies": ["permission:screenlockPrivate"],
396    "extension_types": ["platform_app"],
397    "contexts": ["blessed_extension", "unblessed_extension"]
398  },
399  "fileBrowserPrivate": {
400    "platforms": ["chromeos"],
401    "dependencies": ["permission:fileBrowserPrivate"],
402    "contexts": ["blessed_extension"]
403  },
404  "fileBrowserPrivateInternal": {
405    "internal": true,
406    "platforms": ["chromeos"],
407    "dependencies": ["permission:fileBrowserPrivate"],
408    "contexts": ["blessed_extension"]
409  },
410  "fileSystem": {
411    "dependencies": ["permission:fileSystem"],
412    "contexts": ["blessed_extension"]
413  },
414  "fileSystemProvider": {
415    "dependencies": ["permission:fileSystemProvider"],
416    "contexts": ["blessed_extension"]
417  },
418  "fileSystemProviderInternal": {
419    "internal": true,
420    "dependencies": ["permission:fileSystemProvider"],
421    "contexts": ["blessed_extension"]
422  },
423  "firstRunPrivate": {
424    "platforms": ["chromeos"],
425    "dependencies": ["permission:firstRunPrivate"],
426    "contexts": ["blessed_extension"]
427  },
428  "fontSettings": {
429    "dependencies": ["permission:fontSettings"],
430    "contexts": ["blessed_extension"]
431  },
432  "gcdPrivate": {
433    "dependencies": ["permission:gcdPrivate"],
434    "contexts": ["blessed_extension"]
435  },
436  "gcm": {
437    "dependencies": ["permission:gcm"],
438    "contexts": ["blessed_extension"]
439  },
440  "guestViewInternal": {
441    "internal": true,
442    "channel": "stable",
443    "contexts": ["blessed_extension", "unblessed_extension"]
444  },
445  "hangoutsPrivate": {
446    "channel": "stable",
447    "contexts": ["blessed_extension"],
448    "whitelist": [
449      // http://crbug.com/309737
450      "nckgahadagoaajjgafhacjanaoiihapd",
451      "ljclpkphhpbpinifbeabbhlfddcpfdde",
452      "ppleadejekpmccmnpjdimmlfljlkdfej",
453      "eggnbpckecmjlblplehfpjjdhhidfdoj",
454      "jfjjdfefebklmdbmenmlehlopoocnoeh",
455      "knipolnnllmklapflnccelgolnpehhpl"
456    ]
457  },
458  "hid": {
459    "dependencies": ["permission:hid"],
460    "contexts": ["blessed_extension"]
461  },
462  "history": {
463    "dependencies": ["permission:history"],
464    "contexts": ["blessed_extension"]
465  },
466  "hotwordPrivate": {
467    "dependencies": ["permission:hotwordPrivate"],
468    "contexts": ["blessed_extension"]
469  },
470  "i18n": {
471    "channel": "stable",
472    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
473    "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
474  },
475  "identity": {
476    "dependencies": ["permission:identity"],
477    "contexts": ["blessed_extension"]
478  },
479  "identity.getAccounts": {
480    "channel": "dev",
481    "dependencies": ["permission:identity"],
482    "contexts": ["blessed_extension"]
483  },
484  "identityPrivate": {
485    "dependencies": ["permission:identityPrivate"],
486    "contexts": ["blessed_extension"]
487  },
488  "idltest": {
489    "dependencies": ["permission:idltest"],
490    "contexts": ["blessed_extension"]
491  },
492  "idle": {
493    "dependencies": ["permission:idle"],
494    "contexts": ["blessed_extension"]
495  },
496  "infobars": {
497    "dependencies": ["permission:infobars"],
498    "contexts": ["blessed_extension"]
499  },
500  "input.ime": {
501    "platforms": ["chromeos"],
502    "dependencies": ["permission:input"],
503    "contexts": ["blessed_extension"]
504  },
505  "inputMethodPrivate": {
506    "platforms": ["chromeos"],
507    "dependencies": ["permission:inputMethodPrivate"],
508    "contexts": ["blessed_extension"]
509  },
510  "ledger": {
511    "platforms": ["chromeos"],
512    "dependencies": ["permission:ledger"],
513    "contexts": ["blessed_extension"]
514  },
515  "location": {
516    "dependencies": ["permission:location"],
517    "contexts": ["blessed_extension"]
518  },
519  "logPrivate": {
520    "dependencies": ["permission:logPrivate"],
521    "extension_types": ["extension", "legacy_packaged_app"],
522    "contexts": ["blessed_extension"]
523  },
524  "webcamPrivate": {
525    "dependencies": ["permission:webcamPrivate"],
526    "contexts": ["blessed_extension"]
527  },
528  "management": {
529    "dependencies": ["permission:management"],
530    "contexts": ["blessed_extension"]
531  },
532  "management.getPermissionWarningsByManifest": {
533    "dependencies": [],
534    "channel": "stable",
535    "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
536  },
537  "management.uninstallSelf": {
538    "dependencies": [],
539    "channel": "stable",
540    "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
541  },
542  // This is not a real API, only here for documentation purposes.
543  // See http://crbug.com/275944 for background.
544  "manifestTypes": {
545    "internal": true,
546    "channel": "stable",
547    "contexts": ["blessed_extension"]
548  },
549  "mediaGalleries": {
550    "dependencies": ["permission:mediaGalleries"],
551    "contexts": ["blessed_extension"]
552  },
553  "mediaGalleries.getMetadata": {
554    "channel": "dev",
555    "dependencies": ["permission:mediaGalleries"],
556    "contexts": ["blessed_extension"]
557  },
558  "mediaGalleriesPrivate": {
559    "dependencies": ["permission:mediaGalleriesPrivate"],
560    "contexts": ["blessed_extension"]
561  },
562  "mediaPlayerPrivate": {
563    "platforms": ["chromeos"],
564    "dependencies": ["permission:mediaPlayerPrivate"],
565    "contexts": ["blessed_extension"]
566  },
567  "metricsPrivate": {
568    "dependencies": ["permission:metricsPrivate"],
569    "contexts": ["blessed_extension"]
570  },
571  "mdns": {
572    "dependencies": ["permission:mdns"],
573    "contexts": ["blessed_extension"]
574  },
575  "musicManagerPrivate": {
576    "dependencies": ["permission:musicManagerPrivate"],
577    "contexts": ["blessed_extension"]
578  },
579  "networkingPrivate": {
580    "platforms": ["chromeos", "mac", "win"],
581    "dependencies": ["permission:networkingPrivate"],
582    "contexts": ["blessed_extension"]
583  },
584  "notifications": {
585    "dependencies": ["permission:notifications"],
586    "contexts": ["blessed_extension"]
587  },
588  "omnibox": {
589    "dependencies": ["manifest:omnibox"],
590    "contexts": ["blessed_extension"]
591  },
592  "pageAction": {
593    "dependencies": ["manifest:page_action"],
594    "contexts": ["blessed_extension"]
595  },
596  "pageActions": {
597    "dependencies": ["manifest:page_actions"],
598    "contexts": ["blessed_extension"]
599  },
600  "pageCapture": {
601    "dependencies": ["permission:pageCapture"],
602    "contexts": ["blessed_extension"]
603  },
604  "permissions": {
605    "channel": "stable",
606    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
607    "contexts": ["blessed_extension"]
608  },
609  "power": {
610    "dependencies": ["permission:power"],
611    "contexts": ["blessed_extension"]
612  },
613  "preferencesPrivate": {
614    "dependencies": ["permission:preferencesPrivate"],
615    "contexts": ["blessed_extension"]
616  },
617  "principalsPrivate": {
618    "dependencies": ["permission:principalsPrivate"],
619    "contexts": ["blessed_extension"]
620  },
621  "privacy": {
622    "dependencies": ["permission:privacy"],
623    "contexts": ["blessed_extension"]
624  },
625  "processes": {
626    "dependencies": ["permission:processes"],
627    "contexts": ["blessed_extension"]
628  },
629  "proxy": {
630    "dependencies": ["permission:proxy"],
631    "contexts": ["blessed_extension"]
632  },
633  "pushMessaging": {
634    "dependencies": ["permission:pushMessaging"],
635    "contexts": ["blessed_extension"]
636  },
637  "imageWriterPrivate": {
638    "dependencies": ["permission:imageWriterPrivate"],
639    "extension_types": ["platform_app"],
640    "contexts": ["blessed_extension"]
641  },
642  "readingListPrivate": {
643    "dependencies": ["permission:readingListPrivate"],
644    "contexts": ["blessed_extension"]
645  },
646  "rtcPrivate": {
647    "dependencies": ["permission:rtcPrivate"],
648    "contexts": ["blessed_extension"]
649  },
650  "scriptBadge": {
651    "dependencies": ["manifest:script_badge"],
652    "contexts": ["blessed_extension"]
653  },
654  "serial": {
655    "dependencies": ["permission:serial"],
656    "contexts": ["blessed_extension"]
657  },
658  "sessions": {
659    "dependencies": ["permission:sessions"],
660    "contexts": ["blessed_extension"]
661  },
662  "signedInDevices": {
663    "dependencies": ["permission:signedInDevices"],
664    "contexts": ["blessed_extension"]
665  },
666  "streamsPrivate": {
667    "dependencies": ["permission:streamsPrivate"],
668    "contexts": ["blessed_extension"]
669  },
670  "syncFileSystem": {
671    "dependencies": ["permission:syncFileSystem"],
672    "contexts": ["blessed_extension"]
673  },
674  "syncedNotificationsPrivate": {
675    "contexts": ["blessed_extension"],
676    "dependencies": ["permission:syncedNotificationsPrivate"]
677  },
678  "systemIndicator": {
679    "dependencies": ["manifest:system_indicator"],
680    "contexts": ["blessed_extension"]
681  },
682  "system.cpu": {
683    "dependencies": ["permission:system.cpu"],
684    "contexts": ["blessed_extension"]
685  },
686  "system.display": {
687    "dependencies": ["permission:system.display"],
688    "contexts": ["blessed_extension"]
689  },
690  "system.memory": {
691    "dependencies": ["permission:system.memory"],
692    "contexts": ["blessed_extension"]
693  },
694  "system.network": {
695    "dependencies": ["permission:system.network"],
696    "contexts": ["blessed_extension"]
697  },
698  "system.storage": {
699    "dependencies": ["permission:system.storage"],
700    "contexts": ["blessed_extension"]
701  },
702  "system.storage.getAvailableCapacity": {
703    "channel": "dev"
704  },
705  "systemPrivate": {
706    "dependencies": ["permission:systemPrivate"],
707    "contexts": ["blessed_extension"]
708  },
709  "tabCapture": {
710    "dependencies": ["permission:tabCapture"],
711    "contexts": ["blessed_extension"]
712  },
713  "tabs": {
714    "channel": "stable",
715    "extension_types": ["extension", "legacy_packaged_app"],
716    "contexts": ["blessed_extension"]
717  },
718  "terminalPrivate": {
719    "platforms": ["chromeos"],
720    "dependencies": ["permission:terminalPrivate"],
721    "contexts": ["blessed_extension"]
722  },
723  "topSites": {
724    "dependencies": ["permission:topSites"],
725    "contexts": ["blessed_extension"]
726  },
727  "tts": {
728    "dependencies": ["permission:tts"],
729    "contexts": ["blessed_extension"]
730  },
731  "ttsEngine": {
732    "dependencies": ["permission:ttsEngine"],
733    "contexts": ["blessed_extension"]
734  },
735  "virtualKeyboardPrivate": {
736    "platforms": ["chromeos"],
737    "dependencies": ["permission:virtualKeyboardPrivate"],
738    "contexts": ["blessed_extension"]
739  },
740  "wallpaper": {
741    "platforms": ["chromeos"],
742    "dependencies": ["permission:wallpaper"],
743    "contexts": ["blessed_extension"]
744  },
745  "wallpaperPrivate": {
746    "platforms": ["chromeos"],
747    "dependencies": ["permission:wallpaperPrivate"],
748    "contexts": ["blessed_extension"]
749  },
750  "webNavigation": {
751    "dependencies": ["permission:webNavigation"],
752    "contexts": ["blessed_extension"]
753  },
754  "webRequest": {
755    "dependencies": ["permission:webRequest"],
756    "contexts": ["blessed_extension"]
757  },
758  "webRequestInternal": {
759    "internal": true,
760    "channel": "stable",
761    "contexts": ["blessed_extension", "unblessed_extension"]
762  },
763  "webrtcAudioPrivate": {
764    "dependencies": ["permission:webrtcAudioPrivate"],
765    "contexts": ["blessed_extension"]
766  },
767  "webrtcLoggingPrivate": {
768    "dependencies": ["permission:webrtcLoggingPrivate"],
769    "contexts": ["blessed_extension"]
770  },
771  "webstore": {
772    // Hosted apps can use the webstore API from within a blessed context.
773    "channel": "stable",
774    "extension_types": ["hosted_app"],
775    "contexts": ["blessed_web_page", "web_page"],
776    // Any webpage can use the webstore API.
777    "matches": ["http://*/*", "https://*/*"]
778  },
779  "webstorePrivate": {
780    "dependencies": ["permission:webstorePrivate"],
781    "contexts": ["blessed_extension"]
782  },
783  "webview": {
784    "internal": true,
785    "dependencies": ["permission:webview"],
786    "contexts": ["blessed_extension", "unblessed_extension"]
787  },
788  "webViewRequest": {
789    "dependencies": ["permission:webview"],
790    "contexts": ["blessed_extension", "unblessed_extension"]
791  },
792  "webviewTag": {
793    "internal": true,
794    "channel": "stable",
795    "dependencies": ["permission:webview"],
796    "contexts": ["blessed_extension"]
797  },
798  "windows": {
799    "dependencies": ["api:tabs"],
800    "contexts": ["blessed_extension"]
801  }
802}
803