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