Home | History | Annotate | Download | only in api
      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