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