platformKeys: Enable the API on stable channel.
[chromium-blink-merge.git] / chrome / common / extensions / api / _api_features.json
bloba72fb7265d49991a3e4e059289b97bc764753214
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.getDetailsForFrame": {
63     "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
64     "matches": []
65   },
66   "app.getIsInstalled": {
67     "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
68     "matches": []
69   },
70   "app.installState": {
71     "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
72     "matches": []
73   },
74   "app.runningState": {
75     "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
76     "matches": []
77   },
78   "appviewTag": {
79     "internal": true,
80     "dependencies": ["permission:appview"],
81     "contexts": ["blessed_extension"]
82   },
83   "audioModem": {
84     "dependencies": ["permission:audioModem"],
85     "contexts": ["blessed_extension"]
86   },
87   "autofillPrivate": [{
88     "dependencies": ["permission:autofillPrivate"],
89     "contexts": ["blessed_extension"]
90   }, {
91     "channel": "trunk",
92     "contexts": ["webui"],
93     "matches": [
94       "chrome://md-settings/*",
95       "chrome://settings/*",
96       "chrome://settings-frame/*"
97     ]
98   }],
99   "automationInternal": {
100     "internal": true,
101     "dependencies": ["manifest:automation"],
102     "contexts": ["blessed_extension"]
103   },
104   "automation": {
105     "dependencies": ["manifest:automation"],
106     "contexts": ["blessed_extension"]
107   },
108   "autotestPrivate": {
109     "dependencies": ["permission:autotestPrivate"],
110     "contexts": ["blessed_extension"]
111   },
112   "bookmarkManagerPrivate": {
113     "dependencies": ["permission:bookmarkManagerPrivate"],
114     "contexts": ["blessed_extension"]
115   },
116   "bookmarks": {
117     "dependencies": ["permission:bookmarks"],
118     "contexts": ["blessed_extension"]
119   },
120   "bookmarks.export": {
121     "whitelist": [
122       "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
123       "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
124       "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9"  // http://crbug.com/371562
125     ]
126   },
127   "bookmarks.import": {
128     "whitelist": [
129       "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
130       "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
131       "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9"  // http://crbug.com/371562
132     ]
133   },
134   "brailleDisplayPrivate": {
135     "dependencies": ["permission:brailleDisplayPrivate"],
136     "contexts": ["blessed_extension"]
137   },
138   "browser": {
139     "dependencies": ["permission:browser"],
140     "contexts": ["blessed_extension"]
141   },
142   "browserAction": {
143     "dependencies": ["manifest:browser_action"],
144     "contexts": ["blessed_extension"]
145   },
146   // This API is whitelisted on stable and should not be enabled for a wider
147   // audience without resolving security issues raised in API proposal and
148   // review (https://codereview.chromium.org/25305002).
149   "browserAction.openPopup": [{
150     "channel": "dev",
151     "dependencies": ["manifest:browser_action"],
152     "contexts": ["blessed_extension"]
153   }, {
154     "channel": "stable",
155     "dependencies": ["manifest:browser_action"],
156     "whitelist": [
157       "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
158       "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
159       "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
160       "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
161       "16CA7A47AAE4BE49B1E75A6B960C3875E945B264",  // Google Cast Stable
162       // The extensions below here only use openPopup on a user action,
163       // so are safe, and can be removed when the whitelist on that
164       // capability is lifted. See crbug.com/436489 for context.
165       "A4577D8C2AF4CF26F40CBCA83FFA4251D6F6C8F8",  // http://crbug.com/497301
166       "A8208CCC87F8261AFAEB6B85D5E8D47372DDEA6B"   // http://crbug.com/497301
167     ],
168     "contexts": ["blessed_extension"]
169   }],
170   "browsingData": {
171     "dependencies": ["permission:browsingData"],
172     "contexts": ["blessed_extension"]
173   },
174   "cast.channel": {
175     "dependencies": ["permission:cast"],
176     "contexts": ["blessed_extension"]
177   },
178   "cast.streaming.rtpStream": {
179     "dependencies": ["permission:cast.streaming"],
180     "contexts": ["blessed_extension"]
181   },
182   "cast.streaming.receiverSession": {
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/*", "chrome://oobe/*"]
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   "cryptotokenPrivate": {
246     "dependencies": ["permission:cryptotokenPrivate"],
247     "contexts": ["blessed_extension"]
248   },
249   "dataReductionProxy": {
250     "dependencies": ["permission:dataReductionProxy"],
251     "contexts": ["blessed_extension"]
252   },
253   "debugger": {
254     "dependencies": ["permission:debugger"],
255     "contexts": ["blessed_extension"]
256   },
257   "declarativeContent": {
258     "dependencies": ["permission:declarativeContent"],
259     "contexts": ["blessed_extension"]
260   },
261   "desktopCapture": [{
262     "dependencies": ["permission:desktopCapture"],
263     "contexts": ["blessed_extension"]
264   }, {
265     "dependencies": ["permission:desktopCapturePrivate"],
266     "whitelist": [
267       "63ED55E43214C211F82122ED56407FF1A807F2A3",  // Dev
268       "FA01E0B81978950F2BC5A50512FD769725F57510",  // Beta
269       "B11A93E7E5B541F8010245EBDE2C74647D6C14B9",  // Canary
270       "F155646B5D1CA545F7E1E4E20D573DFDD44C2540",  // Google Cast Beta
271       "16CA7A47AAE4BE49B1E75A6B960C3875E945B264",  // Google Cast Stable
272       "C17CD9E6868D7B9C67926E0EC612EA25C768418F",  // http://crbug.com/457908
273       "EF2AB692559EA97C3BBDEA018A8C45F92457BD4E"   // http://crbug.com/457908
274     ],
275     "contexts": ["blessed_extension"]
276   }],
277   "developerPrivate": [{
278     "dependencies": ["permission:developerPrivate", "permission:management"],
279     "contexts": ["blessed_extension"]
280   }, {
281     "channel": "stable",
282     "contexts": ["webui"],
283     "matches": [
284       "chrome://extensions/*",
285       "chrome://extensions-frame/*",
286       "chrome://chrome/extensions/*"
287     ]
288   }],
289   // All devtools APIs are implemented by hand, so don't compile them.
290   "devtools.inspectedWindow": {
291     "nocompile": true,
292     "dependencies": ["manifest:devtools_page"],
293     "contexts": ["blessed_extension"]
294   },
295   "devtools.network": {
296     "nocompile": true,
297     "dependencies": ["manifest:devtools_page"],
298     "contexts": ["blessed_extension"]
299   },
300   "devtools.panels": {
301     "nocompile": true,
302     "dependencies": ["manifest:devtools_page"],
303     "contexts": ["blessed_extension"]
304   },
305   "dial": {
306     "dependencies": ["permission:dial"],
307     "contexts": ["blessed_extension"]
308   },
309   "downloads": {
310     "dependencies": ["permission:downloads"],
311     "contexts": ["blessed_extension"]
312   },
313   "downloadsInternal": {
314     "internal": true,
315     "channel": "stable",
316     "contexts": ["blessed_extension"]
317   },
318   "easyUnlockPrivate": {
319     "dependencies": ["permission:easyUnlockPrivate"],
320     "contexts": ["blessed_extension"]
321   },
322   "echoPrivate": {
323     "dependencies": ["permission:echoPrivate"],
324     "contexts": ["blessed_extension"]
325   },
326   "enterprise.platformKeys": {
327     "dependencies": ["permission:enterprise.platformKeys"],
328     "contexts": ["blessed_extension"]
329   },
330   "enterprise.platformKeysInternal": {
331     "dependencies": ["permission:enterprise.platformKeys"],
332     "internal": true,
333     "contexts": ["blessed_extension"]
334   },
335   "enterprise.platformKeysPrivate": {
336     "dependencies": ["permission:enterprise.platformKeysPrivate"],
337     "contexts": ["blessed_extension"]
338   },
339   "experienceSamplingPrivate": {
340     "dependencies": ["permission:experienceSamplingPrivate"],
341     "contexts": ["blessed_extension"]
342   },
343   "experimental.devtools.audits": {
344     "dependencies": ["permission:experimental", "manifest:devtools_page"],
345     "contexts": ["blessed_extension"]
346   },
347   "experimental.devtools.console": {
348     "dependencies": ["permission:experimental", "manifest:devtools_page"],
349     "contexts": ["blessed_extension"]
350   },
351   "extension": {
352     "channel": "stable",
353     "extension_types": ["extension", "legacy_packaged_app"],
354     "contexts": ["blessed_extension"]
355   },
356   "extension.getURL": {
357     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
358   },
359   "extension.getViews": [
360     {
361       "channel": "stable",
362       "contexts": ["blessed_extension"],
363       "extension_types": ["extension", "legacy_packaged_app"]
364     },
365     {
366       // TODO(yoz): Eliminate this usage.
367       "channel": "stable",
368       "contexts": ["blessed_extension"],
369       "extension_types": ["platform_app"],
370       "whitelist": [
371         "A948368FC53BE437A55FEB414106E207925482F5"  // File manager
372       ]
373     }
374   ],
375   "extension.inIncognitoContext": {
376     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
377   },
378   "extension.lastError": {
379     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
380   },
381   "extension.onRequest": {
382     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
383   },
384   "extension.sendRequest": {
385     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
386   },
387   "extensionOptionsInternal": [{
388     "internal": true,
389     "contexts": ["blessed_extension"],
390     "dependencies": ["permission:embeddedExtensionOptions"]
391   }, {
392     "internal": true,
393     "channel": "trunk",
394     "contexts": ["webui"],
395     "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
396   }],
397   // This is not a real API, only here for documentation purposes.
398   // See http://crbug.com/275944 for background.
399   "extensionsManifestTypes": {
400     "internal": true,
401     "channel": "stable",
402     "contexts": ["blessed_extension"]
403   },
404   "feedbackPrivate": {
405     "dependencies": ["permission:feedbackPrivate"],
406     "contexts": ["blessed_extension"]
407   },
408   "fileBrowserHandler": {
409     "dependencies": ["permission:fileBrowserHandler"],
410     "contexts": ["blessed_extension"]
411   },
412   "fileBrowserHandlerInternal": {
413     "internal": true,
414     "dependencies": ["permission:fileBrowserHandler"],
415     "contexts": ["blessed_extension"]
416   },
417   "screenlockPrivate": {
418     "dependencies": ["permission:screenlockPrivate"],
419     "extension_types": ["platform_app"],
420     "contexts": ["blessed_extension", "unblessed_extension"]
421   },
422   "fileManagerPrivate": {
423     "dependencies": ["permission:fileManagerPrivate"],
424     "contexts": ["blessed_extension"]
425   },
426   "fileManagerPrivateInternal": {
427     "internal": true,
428     "dependencies": ["permission:fileManagerPrivate"],
429     "contexts": ["blessed_extension"]
430   },
431   "fileSystem": {
432     "dependencies": ["permission:fileSystem"],
433     "contexts": ["blessed_extension"]
434   },
435   "fileSystemProvider": {
436     "dependencies": ["permission:fileSystemProvider"],
437     "contexts": ["blessed_extension"]
438   },
439   "fileSystemProviderInternal": {
440     "internal": true,
441     "dependencies": ["permission:fileSystemProvider"],
442     "contexts": ["blessed_extension"]
443   },
444   "firstRunPrivate": {
445     "dependencies": ["permission:firstRunPrivate"],
446     "contexts": ["blessed_extension"]
447   },
448   "fontSettings": {
449     "dependencies": ["permission:fontSettings"],
450     "contexts": ["blessed_extension"]
451   },
452   "gcdPrivate": {
453     "dependencies": ["permission:gcdPrivate"],
454     "contexts": ["blessed_extension"]
455   },
456   "gcm": {
457     "dependencies": ["permission:gcm"],
458     "contexts": ["blessed_extension"]
459   },
460   "hangoutsPrivate": {
461     "channel": "stable",
462     "contexts": ["blessed_extension"],
463     "whitelist": [
464       // http://crbug.com/309737
465       "nckgahadagoaajjgafhacjanaoiihapd",
466       "ljclpkphhpbpinifbeabbhlfddcpfdde",
467       "ppleadejekpmccmnpjdimmlfljlkdfej",
468       "eggnbpckecmjlblplehfpjjdhhidfdoj",
469       "jfjjdfefebklmdbmenmlehlopoocnoeh",
470       "knipolnnllmklapflnccelgolnpehhpl"
471     ]
472   },
473   "history": {
474     "dependencies": ["permission:history"],
475     "contexts": ["blessed_extension"]
476   },
477   "hotwordPrivate": {
478     "dependencies": ["permission:hotwordPrivate"],
479     "contexts": ["blessed_extension"]
480   },
481   "i18n": {
482     "channel": "stable",
483     "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
484     "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
485   },
486   "identity": {
487     "dependencies": ["permission:identity"],
488     "contexts": ["blessed_extension"]
489   },
490   "identity.getAccounts": {
491     "channel": "dev",
492     "dependencies": ["permission:identity"],
493     "contexts": ["blessed_extension"]
494   },
495   "identityPrivate": {
496     "dependencies": ["permission:identityPrivate"],
497     "contexts": ["blessed_extension"]
498   },
499   "idltest": {
500     "dependencies": ["permission:idltest"],
501     "contexts": ["blessed_extension"]
502   },
503   "inlineInstallPrivate": {
504     "dependencies": ["permission:inlineInstallPrivate"],
505     "contexts": ["blessed_extension"]
506   },
507   "input.ime": {
508     "dependencies": ["permission:input"],
509     "contexts": ["blessed_extension"]
510   },
511   "inputMethodPrivate": {
512     "dependencies": ["permission:inputMethodPrivate"],
513     "contexts": ["blessed_extension"]
514   },
515   "instanceID": {
516     "channel": "dev",
517     "dependencies": ["permission:gcm"],
518     "contexts": ["blessed_extension"]
519   },
520   "launcherPage": {
521     "dependencies": ["manifest:launcher_page"],
522     "contexts": ["blessed_extension"]
523   },
524   "launcherSearchProvider": {
525     "dependencies": ["permission:launcherSearchProvider"],
526     "contexts": ["blessed_extension"]
527   },
528   "location": {
529     "dependencies": ["permission:location"],
530     "contexts": ["blessed_extension"]
531   },
532   "logPrivate": {
533     "dependencies": ["permission:logPrivate"],
534     "contexts": ["blessed_extension"]
535   },
536   "webcamPrivate": {
537     "dependencies": ["permission:webcamPrivate"],
538     "contexts": ["blessed_extension"]
539   },
540   // This is not a real API, only here for documentation purposes.
541   // See http://crbug.com/275944 for background.
542   "manifestTypes": {
543     "internal": true,
544     "channel": "stable",
545     "contexts": ["blessed_extension"]
546   },
547   "mediaGalleries": {
548     "dependencies": ["permission:mediaGalleries"],
549     "contexts": ["blessed_extension"]
550   },
551   "mediaPlayerPrivate": {
552     "dependencies": ["permission:mediaPlayerPrivate"],
553     "contexts": ["blessed_extension"]
554   },
555   "metricsPrivate": {
556     "dependencies": ["permission:metricsPrivate"],
557     "contexts": ["blessed_extension"]
558   },
559   "mdns": {
560     "dependencies": ["permission:mdns"],
561     "contexts": ["blessed_extension"]
562   },
563   "mimeHandlerViewGuestInternal": {
564     "internal": true,
565     "contexts": "all",
566     "channel": "stable",
567     "matches": ["<all_urls>"]
568   },
569   "musicManagerPrivate": {
570     "dependencies": ["permission:musicManagerPrivate"],
571     "contexts": ["blessed_extension"]
572   },
573   "notificationProvider": {
574     "dependencies": ["permission:notificationProvider"],
575     "contexts": ["blessed_extension"]
576   },
577   "notifications": {
578     "dependencies": ["permission:notifications"],
579     "contexts": ["blessed_extension"]
580   },
581   "omnibox": {
582     "dependencies": ["manifest:omnibox"],
583     "contexts": ["blessed_extension"]
584   },
585   "pageAction": {
586     "dependencies": ["manifest:page_action"],
587     "contexts": ["blessed_extension"]
588   },
589   "pageCapture": {
590     "dependencies": ["permission:pageCapture"],
591     "contexts": ["blessed_extension"]
592   },
593   "passwordsPrivate": [{
594     "dependencies": ["permission:passwordsPrivate"],
595     "contexts": ["blessed_extension"]
596   }, {
597     "channel": "trunk",
598     "contexts": ["webui"],
599     "matches": [
600       "chrome://md-settings/*",
601       "chrome://settings/*",
602       "chrome://settings-frame/*"
603     ]
604   }],
605   "permissions": {
606     "channel": "stable",
607     "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
608     "contexts": ["blessed_extension"]
609   },
610   "platformKeys": {
611     "dependencies": ["permission:platformKeys"],
612     "contexts": ["blessed_extension"]
613   },
614   "platformKeys.verifyTLSServerCertificate": {
615     "channel": "dev",
616     "dependencies": ["permission:platformKeys"],
617     "contexts": ["blessed_extension"]
618   },
619   "platformKeysInternal": [{
620     "dependencies": ["permission:platformKeys"],
621     "internal": true,
622     "contexts": ["blessed_extension"]
623   },{
624     "dependencies": ["permission:enterprise.platformKeys"],
625     "internal": true,
626     "contexts": ["blessed_extension"]
627   }],
628   "preferencesPrivate": {
629     "dependencies": ["permission:preferencesPrivate"],
630     "contexts": ["blessed_extension"]
631   },
632   "principalsPrivate": {
633     "dependencies": ["permission:principalsPrivate"],
634     "contexts": ["blessed_extension"]
635   },
636   "privacy": {
637     "dependencies": ["permission:privacy"],
638     "contexts": ["blessed_extension"]
639   },
640   "processes": {
641     "dependencies": ["permission:processes"],
642     "contexts": ["blessed_extension"]
643   },
644   "proxy": {
645     "dependencies": ["permission:proxy"],
646     "contexts": ["blessed_extension"]
647   },
648   "imageWriterPrivate": {
649     "dependencies": ["permission:imageWriterPrivate"],
650     "extension_types": ["platform_app"],
651     "contexts": ["blessed_extension"]
652   },
653   "readingListPrivate": {
654     "dependencies": ["permission:readingListPrivate"],
655     "contexts": ["blessed_extension"]
656   },
657   "rtcPrivate": {
658     "dependencies": ["permission:rtcPrivate"],
659     "contexts": ["blessed_extension"]
660   },
661   "searchEnginesPrivate": [{
662     "dependencies": ["permission:searchEnginesPrivate"],
663     "contexts": ["blessed_extension"]
664   }, {
665     "channel": "trunk",
666     "contexts": ["webui"],
667     "matches": [
668       "chrome://md-settings/*",
669       "chrome://settings/*",
670       "chrome://settings-frame/*"
671     ]
672   }],
673   "sessions": {
674     "dependencies": ["permission:sessions"],
675     "contexts": ["blessed_extension"]
676   },
677   "settingsPrivate": [{
678     "dependencies": ["permission:settingsPrivate"],
679     "contexts": ["blessed_extension"]
680   }, {
681     "channel": "trunk",
682     "contexts": ["webui"],
683     "matches": [
684       "chrome://md-settings/*",
685       "chrome://settings/*",
686       "chrome://settings-frame/*"
687     ]
688   }],
689   "signedInDevices": {
690     "dependencies": ["permission:signedInDevices"],
691     "contexts": ["blessed_extension"]
692   },
693   "streamsPrivate": {
694     "dependencies": ["permission:streamsPrivate"],
695     "contexts": ["blessed_extension"]
696   },
697   "syncFileSystem": {
698     "dependencies": ["permission:syncFileSystem"],
699     "contexts": ["blessed_extension"]
700   },
701   "systemIndicator": {
702     "dependencies": ["manifest:system_indicator"],
703     "contexts": ["blessed_extension"]
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     "dependencies": ["permission:terminalPrivate"],
720     "contexts": ["blessed_extension"]
721   },
722   "topSites": {
723     "dependencies": ["permission:topSites"],
724     "contexts": ["blessed_extension"]
725   },
726   "tts": {
727     "dependencies": ["permission:tts"],
728     "contexts": ["blessed_extension"]
729   },
730   "ttsEngine": {
731     "dependencies": ["permission:ttsEngine"],
732     "contexts": ["blessed_extension"]
733   },
734   "usersPrivate": [{
735     "dependencies": ["permission:usersPrivate"],
736     "contexts": ["blessed_extension"]
737   }, {
738     "channel": "trunk",
739     "contexts": ["webui"],
740     "matches": [
741       "chrome://md-settings/*",
742       "chrome://settings/*",
743       "chrome://settings-frame/*"
744     ]
745   }],
746   "virtualKeyboardPrivate": {
747     "dependencies": ["permission:virtualKeyboardPrivate"],
748     "contexts": ["blessed_extension"]
749   },
750   "wallpaper": {
751     "dependencies": ["permission:wallpaper"],
752     "contexts": ["blessed_extension"]
753   },
754   "wallpaperPrivate": {
755     "dependencies": ["permission:wallpaperPrivate"],
756     "contexts": ["blessed_extension"]
757   },
758   "webNavigation": {
759     "dependencies": ["permission:webNavigation"],
760     "contexts": ["blessed_extension"]
761   },
762   "webrtcAudioPrivate": {
763     "dependencies": ["permission:webrtcAudioPrivate"],
764     "contexts": ["blessed_extension"]
765   },
766   "webrtcDesktopCapturePrivate": {
767     "dependencies": ["permission:webrtcDesktopCapturePrivate"],
768     "contexts": ["blessed_extension"]
769   },
770   "webrtcLoggingPrivate": {
771     "dependencies": ["permission:webrtcLoggingPrivate"],
772     "contexts": ["blessed_extension"]
773   },
774   "webstore": {
775     // Hosted apps can use the webstore API from within a blessed context.
776     "channel": "stable",
777     // Set extension_types to 'all' to prevent webstore from being filtered.
778     // Technically, webstore is not in apps or extensions, but it is currently
779     // displayed on /extensions/webstore and /apps/webstore. The "contexts"
780     // restriction effectively restricts this to hosted apps and webpages.
781     "extension_types": "all",
782     "contexts": ["blessed_web_page", "web_page"],
783     // Any webpage can use the webstore API.
784     "matches": ["<all_urls>"]
785   },
786   "webstorePrivate": {
787     "dependencies": ["permission:webstorePrivate"],
788     // NOTE: even though this is only used by the webstore hosted app, which
789     // normally would mean blessed_web_page, component hosted apps are actually
790     // given the blessed_extension denomination. Confusing.
791     "contexts": ["blessed_extension"]
792   },
793   "webstoreWidgetPrivate": {
794     "dependencies": ["permission:webstoreWidgetPrivate"],
795     "contexts": ["blessed_extension"]
796   },
797   "webviewTag": {
798     "internal": true,
799     "channel": "stable",
800     "dependencies": ["permission:webview"],
801     "contexts": ["blessed_extension"]
802   },
803   "windows": {
804     "dependencies": ["api:tabs"],
805     "contexts": ["blessed_extension"]
806   }