Merge Chromium + Blink git repositories
[chromium-blink-merge.git] / chrome / common / extensions / api / _api_features.json
blob272cf489835ed02fc89549893997c4b8386c1571
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.
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.
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"]
25   }, {
26     "dependencies": ["permission:accessibilityFeatures.read"],
27     "contexts": ["blessed_extension"]
28   }],
29   "accessibilityPrivate": {
30     "dependencies": ["permission:accessibilityPrivate"],
31     "contexts": ["blessed_extension"]
32   },
33   "activityLogPrivate": {
34     "dependencies": ["permission:activityLogPrivate"],
35     "contexts": ["blessed_extension"]
36   },
37   "app": {
38     "blacklist": [
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
45     ],
46     "channel": "stable",
47     "extension_types": ["hosted_app", "extension", "legacy_packaged_app"],
48     "contexts": [
49       "blessed_extension",
50       "unblessed_extension",
51       "content_script",
52       "web_page",
53       "blessed_web_page"
54     ],
55     // Any webpage can use the app API.
56     "matches": ["<all_urls>"]
57   },
58   "app.getDetails": {
59     "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
60     "matches": []
61   },
62   "app.getIsInstalled": {
63     "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
64     "matches": []
65   },
66   "app.installState": {
67     "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
68     "matches": []
69   },
70   "app.runningState": {
71     "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
72     "matches": []
73   },
74   "appviewTag": {
75     "internal": true,
76     "dependencies": ["permission:appview"],
77     "contexts": ["blessed_extension"]
78   },
79   "audioModem": {
80     "dependencies": ["permission:audioModem"],
81     "contexts": ["blessed_extension"]
82   },
83   "autofillPrivate": [{
84     "dependencies": ["permission:autofillPrivate"],
85     "contexts": ["blessed_extension"]
86   }, {
87     "channel": "trunk",
88     "contexts": ["webui"],
89     "matches": [
90       "chrome://md-settings/*",
91       "chrome://settings/*",
92       "chrome://settings-frame/*"
93     ]
94   }],
95   "automationInternal": {
96     "internal": true,
97     "dependencies": ["manifest:automation"],
98     "contexts": ["blessed_extension"]
99   },
100   "automation": {
101     "dependencies": ["manifest:automation"],
102     "contexts": ["blessed_extension"]
103   },
104   "autotestPrivate": {
105     "dependencies": ["permission:autotestPrivate"],
106     "contexts": ["blessed_extension"]
107   },
108   "bookmarkManagerPrivate": {
109     "dependencies": ["permission:bookmarkManagerPrivate"],
110     "contexts": ["blessed_extension"]
111   },
112   "bookmarks": {
113     "dependencies": ["permission:bookmarks"],
114     "contexts": ["blessed_extension"]
115   },
116   "bookmarks.export": {
117     "whitelist": [
118       "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
119       "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
120       "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9"  // http://crbug.com/371562
121     ]
122   },
123   "bookmarks.import": {
124     "whitelist": [
125       "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
126       "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
127       "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9"  // http://crbug.com/371562
128     ]
129   },
130   "brailleDisplayPrivate": {
131     "dependencies": ["permission:brailleDisplayPrivate"],
132     "contexts": ["blessed_extension"]
133   },
134   "browser": {
135     "dependencies": ["permission:browser"],
136     "contexts": ["blessed_extension"]
137   },
138   "browserAction": {
139     "dependencies": ["manifest:browser_action"],
140     "contexts": ["blessed_extension"]
141   },
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": [{
146     "channel": "dev",
147     "dependencies": ["manifest:browser_action"],
148     "contexts": ["blessed_extension"]
149   }, {
150     "channel": "stable",
151     "dependencies": ["manifest:browser_action"],
152     "whitelist": [
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
163       "EFCF5358672FEE04789FD2EC3638A67ADEDB6C8C"   // http://crbug.com/514696
164     ],
165     "contexts": ["blessed_extension"]
166   }],
167   "browsingData": {
168     "dependencies": ["permission:browsingData"],
169     "contexts": ["blessed_extension"]
170   },
171   "cast.channel": {
172     "dependencies": ["permission:cast"],
173     "contexts": ["blessed_extension"]
174   },
175   "cast.devicesPrivate": {
176     "dependencies": ["permission:cast"],
177     "contexts": ["blessed_extension"],
178     "platforms": ["chromeos"]
179   },
180   "cast.streaming.rtpStream": {
181     "dependencies": ["permission:cast.streaming"],
182     "contexts": ["blessed_extension"]
183   },
184   "cast.streaming.receiverSession": {
185     "dependencies": ["permission:cast.streaming"],
186     "contexts": ["blessed_extension"]
187   },
188   "cast.streaming.session": {
189     "dependencies": ["permission:cast.streaming"],
190     "contexts": ["blessed_extension"]
191   },
192   "cast.streaming.udpTransport": {
193     "dependencies": ["permission:cast.streaming"],
194     "contexts": ["blessed_extension"]
195   },
196   "certificateProvider": {
197     "dependencies": ["permission:certificateProvider"],
198     "contexts": ["blessed_extension"]
199   },
200   "certificateProviderInternal": {
201     "internal": true,
202     "dependencies": ["permission:certificateProvider"],
203     "contexts": ["blessed_extension"]
204   },
205   "chromeosInfoPrivate": {
206     "dependencies": ["permission:chromeosInfoPrivate"],
207     "contexts": ["blessed_extension"]
208   },
209   "chromeWebViewInternal": [{
210     "internal": true,
211     "dependencies": ["permission:webview"],
212     "contexts": ["blessed_extension"]
213   }, {
214     "internal": true,
215     "channel": "dev",
216     "contexts": ["webui"],
217     "matches": [
218       "chrome://chrome-signin/*",
219       "chrome://media-router/*",
220       "chrome://oobe/*"
221     ]
222   }],
223   "cloudPrintPrivate": {
224     "dependencies": ["permission:cloudPrintPrivate"],
225     "contexts": ["blessed_extension"]
226   },
227   "commandLinePrivate": {
228     "dependencies": ["permission:commandLinePrivate"],
229     "contexts": ["blessed_extension"]
230   },
231   "commands": {
232     "dependencies": ["manifest:commands"],
233     "contexts": ["blessed_extension"]
234   },
235   "contentSettings": {
236     "dependencies": ["permission:contentSettings"],
237     "contexts": ["blessed_extension"]
238   },
239   "contextMenus": {
240     "dependencies": ["permission:contextMenus"],
241     "contexts": ["blessed_extension"]
242   },
243   "contextMenusInternal": {
244     "internal": true,
245     "channel": "stable",
246     "contexts": ["blessed_extension"]
247   },
248   "cookies": {
249     "dependencies": ["permission:cookies"],
250     "contexts": ["blessed_extension"]
251   },
252   "copresence": {
253     "dependencies": ["permission:copresence"],
254     "contexts": ["blessed_extension"]
255   },
256   "copresencePrivate": {
257     "dependencies": ["permission:copresencePrivate"],
258     "contexts": ["blessed_extension"]
259   },
260   "cryptotokenPrivate": {
261     "dependencies": ["permission:cryptotokenPrivate"],
262     "contexts": ["blessed_extension"]
263   },
264   "dashboardPrivate": [{
265     "channel": "stable",
266     "contexts": ["blessed_web_page", "web_page"],
267     "matches": ["https://chrome.google.com/*"]
268   }, {
269     "channel": "stable",
270     "contexts": ["blessed_extension"],
271     "whitelist": [
272       "B44D08FD98F1523ED5837D78D0A606EA9D6206E5"  // Web Store
273     ]
274   }],
275   "dataReductionProxy": {
276     "dependencies": ["permission:dataReductionProxy"],
277     "contexts": ["blessed_extension"]
278   },
279   "debugger": {
280     "dependencies": ["permission:debugger"],
281     "contexts": ["blessed_extension"]
282   },
283   "declarativeContent": {
284     "dependencies": ["permission:declarativeContent"],
285     "contexts": ["blessed_extension"]
286   },
287   "desktopCapture": [{
288     "dependencies": ["permission:desktopCapture"],
289     "contexts": ["blessed_extension"]
290   }, {
291     "dependencies": ["permission:desktopCapturePrivate"],
292     "whitelist": [
293       "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
294       "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
295       "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
296       "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
297       "16CA7A47AAE4BE49B1E75A6B960C3875E945B264",  // Google Cast Stable
298       "C17CD9E6868D7B9C67926E0EC612EA25C768418F",  // http://crbug.com/457908
299       "EF2AB692559EA97C3BBDEA018A8C45F92457BD4E"   // http://crbug.com/457908
300     ],
301     "contexts": ["blessed_extension"]
302   }],
303   "developerPrivate": [{
304     "dependencies": ["permission:developerPrivate", "permission:management"],
305     "contexts": ["blessed_extension"]
306   }, {
307     "channel": "stable",
308     "contexts": ["webui"],
309     "matches": [
310       "chrome://extensions/*",
311       "chrome://extensions-frame/*",
312       "chrome://chrome/extensions/*"
313     ]
314   }],
315   // All devtools APIs are implemented by hand, so don't compile them.
316   "devtools.inspectedWindow": {
317     "nocompile": true,
318     "dependencies": ["manifest:devtools_page"],
319     "contexts": ["blessed_extension"]
320   },
321   "devtools.network": {
322     "nocompile": true,
323     "dependencies": ["manifest:devtools_page"],
324     "contexts": ["blessed_extension"]
325   },
326   "devtools.panels": {
327     "nocompile": true,
328     "dependencies": ["manifest:devtools_page"],
329     "contexts": ["blessed_extension"]
330   },
331   "dial": {
332     "dependencies": ["permission:dial"],
333     "contexts": ["blessed_extension"]
334   },
335   "downloads": {
336     "dependencies": ["permission:downloads"],
337     "contexts": ["blessed_extension"]
338   },
339   "downloadsInternal": {
340     "internal": true,
341     "channel": "stable",
342     "contexts": ["blessed_extension"]
343   },
344   "easyUnlockPrivate": {
345     "dependencies": ["permission:easyUnlockPrivate"],
346     "contexts": ["blessed_extension"]
347   },
348   "echoPrivate": {
349     "dependencies": ["permission:echoPrivate"],
350     "contexts": ["blessed_extension"]
351   },
352   "enterprise.deviceAttributes": {
353     "dependencies": ["permission:enterprise.deviceAttributes"],
354     "contexts": ["blessed_extension"]
355   },
356   "enterprise.platformKeys": {
357     "dependencies": ["permission:enterprise.platformKeys"],
358     "contexts": ["blessed_extension"]
359   },
360   "enterprise.platformKeysInternal": {
361     "dependencies": ["permission:enterprise.platformKeys"],
362     "internal": true,
363     "contexts": ["blessed_extension"]
364   },
365   "enterprise.platformKeysPrivate": {
366     "dependencies": ["permission:enterprise.platformKeysPrivate"],
367     "contexts": ["blessed_extension"]
368   },
369   "experienceSamplingPrivate": {
370     "dependencies": ["permission:experienceSamplingPrivate"],
371     "contexts": ["blessed_extension"]
372   },
373   "experimental.devtools.audits": {
374     "dependencies": ["permission:experimental", "manifest:devtools_page"],
375     "contexts": ["blessed_extension"]
376   },
377   "experimental.devtools.console": {
378     "dependencies": ["permission:experimental", "manifest:devtools_page"],
379     "contexts": ["blessed_extension"]
380   },
381   "extension": {
382     "channel": "stable",
383     "extension_types": ["extension", "legacy_packaged_app"],
384     "contexts": ["blessed_extension"]
385   },
386   "extension.getURL": {
387     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
388   },
389   "extension.getViews": [
390     {
391       "channel": "stable",
392       "contexts": ["blessed_extension"],
393       "extension_types": ["extension", "legacy_packaged_app"]
394     },
395     {
396       // TODO(yoz): Eliminate this usage.
397       "channel": "stable",
398       "contexts": ["blessed_extension"],
399       "extension_types": ["platform_app"],
400       "whitelist": [
401         "A948368FC53BE437A55FEB414106E207925482F5"  // File manager
402       ]
403     }
404   ],
405   "extension.inIncognitoContext": {
406     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
407   },
408   "extension.lastError": {
409     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
410   },
411   "extension.onRequest": {
412     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
413   },
414   "extension.sendRequest": {
415     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
416   },
417   "extensionOptionsInternal": [{
418     "internal": true,
419     "contexts": ["blessed_extension"],
420     "dependencies": ["permission:embeddedExtensionOptions"]
421   }, {
422     "internal": true,
423     "channel": "trunk",
424     "contexts": ["webui"],
425     "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
426   }],
427   // This is not a real API, only here for documentation purposes.
428   // See http://crbug.com/275944 for background.
429   "extensionsManifestTypes": {
430     "internal": true,
431     "channel": "stable",
432     "contexts": ["blessed_extension"]
433   },
434   "feedbackPrivate": {
435     "dependencies": ["permission:feedbackPrivate"],
436     "contexts": ["blessed_extension"]
437   },
438   "fileBrowserHandler": {
439     "dependencies": ["permission:fileBrowserHandler"],
440     "contexts": ["blessed_extension"]
441   },
442   "fileBrowserHandlerInternal": {
443     "internal": true,
444     "dependencies": ["permission:fileBrowserHandler"],
445     "contexts": ["blessed_extension"]
446   },
447   "screenlockPrivate": {
448     "dependencies": ["permission:screenlockPrivate"],
449     "extension_types": ["platform_app"],
450     "contexts": ["blessed_extension", "unblessed_extension"]
451   },
452   "fileManagerPrivate": {
453     "dependencies": ["permission:fileManagerPrivate"],
454     "contexts": ["blessed_extension"]
455   },
456   "fileManagerPrivateInternal": {
457     "internal": true,
458     "dependencies": ["permission:fileManagerPrivate"],
459     "contexts": ["blessed_extension"]
460   },
461   "fileSystem": {
462     "dependencies": ["permission:fileSystem"],
463     "contexts": ["blessed_extension"]
464   },
465   "fileSystemProvider": {
466     "dependencies": ["permission:fileSystemProvider"],
467     "contexts": ["blessed_extension"]
468   },
469   "fileSystemProviderInternal": {
470     "internal": true,
471     "dependencies": ["permission:fileSystemProvider"],
472     "contexts": ["blessed_extension"]
473   },
474   "firstRunPrivate": {
475     "dependencies": ["permission:firstRunPrivate"],
476     "contexts": ["blessed_extension"]
477   },
478   "fontSettings": {
479     "dependencies": ["permission:fontSettings"],
480     "contexts": ["blessed_extension"]
481   },
482   "gcdPrivate": {
483     "dependencies": ["permission:gcdPrivate"],
484     "contexts": ["blessed_extension"]
485   },
486   "gcm": {
487     "dependencies": ["permission:gcm"],
488     "contexts": ["blessed_extension"]
489   },
490   "hangoutsPrivate": {
491     "channel": "stable",
492     "contexts": ["blessed_extension"],
493     "whitelist": [
494       // http://crbug.com/309737.
495       // Keep this list in sync with extensions_misc::kHangoutsExtensionIds.
496       "nckgahadagoaajjgafhacjanaoiihapd",  // Hangouts Production.
497       "ljclpkphhpbpinifbeabbhlfddcpfdde",  // Hangouts Debug.
498       "ppleadejekpmccmnpjdimmlfljlkdfej",  // Hangouts Alpha.
499       "eggnbpckecmjlblplehfpjjdhhidfdoj",  // Hangouts Beta.
500       "jfjjdfefebklmdbmenmlehlopoocnoeh",  // Hangouts Packaged App Debug.
501       "knipolnnllmklapflnccelgolnpehhpl"   // Hangouts Packaged App Prod.
502     ]
503   },
504   "history": {
505     "dependencies": ["permission:history"],
506     "contexts": ["blessed_extension"]
507   },
508   "hotwordPrivate": {
509     "dependencies": ["permission:hotwordPrivate"],
510     "contexts": ["blessed_extension"]
511   },
512   "i18n": {
513     "channel": "stable",
514     "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
515     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
516   },
517   "identity": {
518     "dependencies": ["permission:identity"],
519     "contexts": ["blessed_extension"]
520   },
521   "identity.getAccounts": {
522     "channel": "dev",
523     "dependencies": ["permission:identity"],
524     "contexts": ["blessed_extension"]
525   },
526   "identityPrivate": {
527     "dependencies": ["permission:identityPrivate"],
528     "contexts": ["blessed_extension"]
529   },
530   "idltest": {
531     "dependencies": ["permission:idltest"],
532     "contexts": ["blessed_extension"]
533   },
534   "inlineInstallPrivate": {
535     "dependencies": ["permission:inlineInstallPrivate"],
536     "contexts": ["blessed_extension"]
537   },
538   "input.ime": {
539     "dependencies": ["permission:input"],
540     "contexts": ["blessed_extension"]
541   },
542   "inputMethodPrivate": {
543     "dependencies": ["permission:inputMethodPrivate"],
544     "contexts": ["blessed_extension"]
545   },
546   "instanceID": {
547     "dependencies": ["permission:gcm"],
548     "contexts": ["blessed_extension"]
549   },
550   "languageSettingsPrivate": [{
551     "dependencies": ["permission:languageSettingsPrivate"],
552     "contexts": ["blessed_extension"]
553   }, {
554     "channel": "stable",
555     "contexts": ["webui"],
556     "matches": [
557       "chrome://md-settings/*",
558       "chrome://settings/*",
559       "chrome://settings-frame/*"
560     ]
561   }],
562   "launcherPage": {
563     "dependencies": ["manifest:launcher_page"],
564     "contexts": ["blessed_extension"]
565   },
566   "launcherSearchProvider": {
567     "dependencies": ["permission:launcherSearchProvider"],
568     "contexts": ["blessed_extension"]
569   },
570   "location": {
571     "dependencies": ["permission:location"],
572     "contexts": ["blessed_extension"]
573   },
574   "logPrivate": {
575     "dependencies": ["permission:logPrivate"],
576     "contexts": ["blessed_extension"]
577   },
578   "webcamPrivate": {
579     "dependencies": ["permission:webcamPrivate"],
580     "contexts": ["blessed_extension"]
581   },
582   // This is not a real API, only here for documentation purposes.
583   // See http://crbug.com/275944 for background.
584   "manifestTypes": {
585     "internal": true,
586     "channel": "stable",
587     "contexts": ["blessed_extension"]
588   },
589   "mediaGalleries": {
590     "dependencies": ["permission:mediaGalleries"],
591     "contexts": ["blessed_extension"]
592   },
593   "mediaPlayerPrivate": {
594     "dependencies": ["permission:mediaPlayerPrivate"],
595     "contexts": ["blessed_extension"]
596   },
597   "metricsPrivate": {
598     "dependencies": ["permission:metricsPrivate"],
599     "contexts": ["blessed_extension"]
600   },
601   "mdns": {
602     "dependencies": ["permission:mdns"],
603     "contexts": ["blessed_extension"]
604   },
605   "mimeHandlerViewGuestInternal": {
606     "internal": true,
607     "contexts": "all",
608     "channel": "stable",
609     "matches": ["<all_urls>"]
610   },
611   "musicManagerPrivate": {
612     "dependencies": ["permission:musicManagerPrivate"],
613     "contexts": ["blessed_extension"]
614   },
615   "notificationProvider": {
616     "dependencies": ["permission:notificationProvider"],
617     "contexts": ["blessed_extension"]
618   },
619   "notifications": {
620     "dependencies": ["permission:notifications"],
621     "contexts": ["blessed_extension"]
622   },
623   "omnibox": {
624     "dependencies": ["manifest:omnibox"],
625     "contexts": ["blessed_extension"]
626   },
627   "pageAction": {
628     "dependencies": ["manifest:page_action"],
629     "contexts": ["blessed_extension"]
630   },
631   "pageCapture": {
632     "dependencies": ["permission:pageCapture"],
633     "contexts": ["blessed_extension"]
634   },
635   "passwordsPrivate": [{
636     "dependencies": ["permission:passwordsPrivate"],
637     "contexts": ["blessed_extension"]
638   }, {
639     "channel": "trunk",
640     "contexts": ["webui"],
641     "matches": [
642       "chrome://md-settings/*",
643       "chrome://settings/*",
644       "chrome://settings-frame/*"
645     ]
646   }],
647   "permissions": {
648     "channel": "stable",
649     "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
650     "contexts": ["blessed_extension"]
651   },
652   "platformKeys": {
653     "dependencies": ["permission:platformKeys"],
654     "contexts": ["blessed_extension"]
655   },
656   "platformKeysInternal": [{
657     "dependencies": ["permission:platformKeys"],
658     "internal": true,
659     "contexts": ["blessed_extension"]
660   },{
661     "dependencies": ["permission:enterprise.platformKeys"],
662     "internal": true,
663     "contexts": ["blessed_extension"]
664   }],
665   "preferencesPrivate": {
666     "dependencies": ["permission:preferencesPrivate"],
667     "contexts": ["blessed_extension"]
668   },
669   "principalsPrivate": {
670     "dependencies": ["permission:principalsPrivate"],
671     "contexts": ["blessed_extension"]
672   },
673   "privacy": {
674     "dependencies": ["permission:privacy"],
675     "contexts": ["blessed_extension"]
676   },
677   "processes": {
678     "dependencies": ["permission:processes"],
679     "contexts": ["blessed_extension"]
680   },
681   "proxy": {
682     "dependencies": ["permission:proxy"],
683     "contexts": ["blessed_extension"]
684   },
685   "imageWriterPrivate": {
686     "dependencies": ["permission:imageWriterPrivate"],
687     "extension_types": ["platform_app"],
688     "contexts": ["blessed_extension"]
689   },
690   "readingListPrivate": {
691     "dependencies": ["permission:readingListPrivate"],
692     "contexts": ["blessed_extension"]
693   },
694   "resourcesPrivate": [{
695     "dependencies": ["permission:resourcesPrivate"],
696     "contexts": ["blessed_extension"]
697   }, {
698     "channel": "stable",
699     "contexts": ["webui"],
700     "matches": [
701       "chrome://print/*"
702     ]
703   }],
704   "rtcPrivate": {
705     "dependencies": ["permission:rtcPrivate"],
706     "contexts": ["blessed_extension"]
707   },
708   "searchEnginesPrivate": [{
709     "dependencies": ["permission:searchEnginesPrivate"],
710     "contexts": ["blessed_extension"]
711   }, {
712     "channel": "trunk",
713     "contexts": ["webui"],
714     "matches": [
715       "chrome://md-settings/*",
716       "chrome://settings/*",
717       "chrome://settings-frame/*"
718     ]
719   }],
720   "sessions": {
721     "dependencies": ["permission:sessions"],
722     "contexts": ["blessed_extension"]
723   },
724   "settingsPrivate": [{
725     "dependencies": ["permission:settingsPrivate"],
726     "contexts": ["blessed_extension"]
727   }, {
728     "channel": "trunk",
729     "contexts": ["webui"],
730     "matches": [
731       "chrome://md-settings/*",
732       "chrome://settings/*",
733       "chrome://settings-frame/*"
734     ]
735   }],
736   "signedInDevices": {
737     "dependencies": ["permission:signedInDevices"],
738     "contexts": ["blessed_extension"]
739   },
740   "streamsPrivate": {
741     "dependencies": ["permission:streamsPrivate"],
742     "contexts": ["blessed_extension"]
743   },
744   "syncFileSystem": {
745     "dependencies": ["permission:syncFileSystem"],
746     "contexts": ["blessed_extension"]
747   },
748   "systemIndicator": {
749     "dependencies": ["manifest:system_indicator"],
750     "contexts": ["blessed_extension"]
751   },
752   "systemPrivate": {
753     "dependencies": ["permission:systemPrivate"],
754     "contexts": ["blessed_extension"]
755   },
756   "tabCapture": {
757     "dependencies": ["permission:tabCapture"],
758     "contexts": ["blessed_extension"]
759   },
760   "tabs": {
761     "channel": "stable",
762     "extension_types": ["extension", "legacy_packaged_app"],
763     "contexts": ["blessed_extension"]
764   },
765   "terminalPrivate": {
766     "dependencies": ["permission:terminalPrivate"],
767     "contexts": ["blessed_extension"]
768   },
769   "topSites": {
770     "dependencies": ["permission:topSites"],
771     "contexts": ["blessed_extension"]
772   },
773   "tts": {
774     "dependencies": ["permission:tts"],
775     "contexts": ["blessed_extension"]
776   },
777   "ttsEngine": {
778     "dependencies": ["permission:ttsEngine"],
779     "contexts": ["blessed_extension"]
780   },
781   "usersPrivate": [{
782     "dependencies": ["permission:usersPrivate"],
783     "contexts": ["blessed_extension"]
784   }, {
785     "channel": "trunk",
786     "contexts": ["webui"],
787     "matches": [
788       "chrome://md-settings/*",
789       "chrome://settings/*",
790       "chrome://settings-frame/*"
791     ]
792   }],
793   "virtualKeyboardPrivate": {
794     "dependencies": ["permission:virtualKeyboardPrivate"],
795     "contexts": ["blessed_extension"]
796   },
797   "wallpaper": {
798     "dependencies": ["permission:wallpaper"],
799     "contexts": ["blessed_extension"]
800   },
801   "wallpaperPrivate": {
802     "dependencies": ["permission:wallpaperPrivate"],
803     "contexts": ["blessed_extension"]
804   },
805   "webNavigation": {
806     "dependencies": ["permission:webNavigation"],
807     "contexts": ["blessed_extension"]
808   },
809   "webrtcAudioPrivate": {
810     "dependencies": ["permission:webrtcAudioPrivate"],
811     "contexts": ["blessed_extension"]
812   },
813   "webrtcDesktopCapturePrivate": {
814     "dependencies": ["permission:webrtcDesktopCapturePrivate"],
815     "contexts": ["blessed_extension"]
816   },
817   "webrtcLoggingPrivate": {
818     "dependencies": ["permission:webrtcLoggingPrivate"],
819     "contexts": ["blessed_extension"]
820   },
821   "webstore": {
822     // Hosted apps can use the webstore API from within a blessed context.
823     "channel": "stable",
824     // Set extension_types to 'all' to prevent webstore from being filtered.
825     // Technically, webstore is not in apps or extensions, but it is currently
826     // displayed on /extensions/webstore and /apps/webstore. The "contexts"
827     // restriction effectively restricts this to hosted apps and webpages.
828     "extension_types": "all",
829     "contexts": ["blessed_web_page", "web_page"],
830     // Any webpage can use the webstore API.
831     "matches": ["<all_urls>"]
832   },
833   "webstorePrivate": {
834     "dependencies": ["permission:webstorePrivate"],
835     // NOTE: even though this is only used by the webstore hosted app, which
836     // normally would mean blessed_web_page, component hosted apps are actually
837     // given the blessed_extension denomination. Confusing.
838     "contexts": ["blessed_extension"]
839   },
840   "webstoreWidgetPrivate": {
841     "dependencies": ["permission:webstoreWidgetPrivate"],
842     "contexts": ["blessed_extension"]
843   },
844   "webviewTag": {
845     "internal": true,
846     "channel": "stable",
847     "dependencies": ["permission:webview"],
848     "contexts": ["blessed_extension"]
849   },
850   "windows": {
851     "dependencies": ["api:tabs"],
852     "contexts": ["blessed_extension"]
853   }