chromium/extensions/common/api/_api_features.json

// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

// This features file defines extension APIs implemented under src/extensions.
// See chrome/common/extensions/api/_features.md to understand this file, as
// well as feature.h, simple_feature.h, and feature_provider.h.
//
// Note that specifying "web_page", "privileged_web_page", or "all" as a context
// type will require manually updating extensions/renderer/extension_bindings_system.cc.

{
  "alarms": {
    "dependencies": ["permission:alarms"],
    "contexts": ["privileged_extension"]
  },
  "app.runtime": [{
    "channel": "stable",
    "contexts": ["privileged_extension", "lock_screen_extension"],
    "extension_types": ["platform_app"],
    "noparent": true
  }, {
    "channel": "stable",
    "component_extensions_auto_granted": false,
    "contexts": ["privileged_extension"],
    "extension_types": ["extension"],
    "noparent": true,
    "allowlist": [
      "2FC374607C2DF285634B67C64A2E356C607091C3",  // Quickoffice
      "3727DD3E564B6055387425027AD74C58784ACC15",  // Quickoffice internal
      "12E618C3C6E97495AAECF2AC12DEB082353241C6"   // QO component extension
    ]
  }],
  "app.window": [{
    "channel": "stable",
    "contexts": ["privileged_extension", "lock_screen_extension"],
    "extension_types": ["platform_app"],
    "noparent": true
  }, {
    "channel": "stable",
    "contexts": ["privileged_extension"],
    "extension_types": ["extension"],
    "noparent": true,
    "component_extensions_auto_granted": false,
    "allowlist": [
      "B9EF10DDFEA11EF77873CC5009809E5037FC4C7A",  // Google input tools
      "06BE211D5F014BAB34BC22D9DDA09C63A81D828E",  // Official xkb extension
      "F94EE6AB36D6C6588670B2B01EB65212D9C64E33"   // Open source xkb extension
    ]
  }],
  "app.currentWindowInternal": {
    "noparent": true,
    "internal": true,
    "channel": "stable",
    "contexts": ["privileged_extension", "lock_screen_extension"]
  },
  "app.currentWindowInternal.setShape": {
    "dependencies": ["permission:app.window.shape"],
    "contexts": ["privileged_extension"]
  },
  // The API for the *embedder* of appview. Appview has both an embedder and
  // guest API, which are different.
  "appViewEmbedderInternal": {
    "internal": true,
    "contexts": ["privileged_extension"],
    "dependencies": ["permission:appview"]
  },
  // Note that exposing this doesn't necessarily expose AppView,
  // appViewEmbedderInternal is required for that.
  // See http://crbug.com/437891.
  "appViewGuestInternal": {
    "internal": true,
    "channel": "stable",
    "contexts": ["privileged_extension"]
  },
  "audio": {
    "dependencies": ["permission:audio"],
    "contexts": ["privileged_extension"]
  },
  "automationInternal": {
    "internal": true,
    "dependencies": ["manifest:automation"],
    "contexts": ["privileged_extension"]
  },
  "automation": {
    "dependencies": ["manifest:automation"],
    "contexts": ["privileged_extension"]
  },
  "bluetooth": [{
    "dependencies": ["manifest:bluetooth"],
    "contexts": ["privileged_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://bluetooth-pairing/*",
      "chrome://os-settings/*"
    ]
  }],
  "bluetoothLowEnergy": {
    "dependencies": ["manifest:bluetooth"],
    "contexts": ["privileged_extension"],
    "platforms": ["chromeos", "lacros", "linux"]
  },
  "bluetoothPrivate": [{
    "dependencies": ["permission:bluetoothPrivate"],
    "contexts": ["privileged_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://bluetooth-pairing/*",
      "chrome://os-settings/*"
    ]
  }],
  "bluetoothSocket": {
    "dependencies": ["manifest:bluetooth"],
    "contexts": ["privileged_extension"]
  },
  "cecPrivate": {
    "dependencies": ["permission:cecPrivate"],
    "contexts": ["privileged_extension"]
  },
  "clipboard": {
    "dependencies": ["permission:clipboard"],
    "contexts": ["privileged_extension"]
  },
  "clipboard.onClipboardDataChanged": {
    "dependencies": ["permission:clipboardRead"]
  },
  "clipboard.setImageData": {
    "dependencies": ["permission:clipboardWrite"]
  },
  "declarativeNetRequest": [{
    "dependencies": ["permission:declarativeNetRequest"],
    "contexts": ["privileged_extension"],
    "default_parent": true
  }, {
    "dependencies": ["permission:declarativeNetRequestWithHostAccess"],
    "contexts": ["privileged_extension"]
  }],
  "declarativeNetRequest.onRuleMatchedDebug": [{
    "dependencies": ["permission:declarativeNetRequestFeedback", "permission:declarativeNetRequest"],
    "location": "unpacked"
  }, {
    "dependencies": ["permission:declarativeNetRequestFeedback", "permission:declarativeNetRequestWithHostAccess"],
    "location": "unpacked"
  }],
  "declarativeNetRequest.testMatchOutcome": [{
    "dependencies": ["permission:declarativeNetRequest"],
    "location": "unpacked"
  }, {
    "dependencies": ["permission:declarativeNetRequestWithHostAccess"],
    "location": "unpacked"
  }],
  "declarativeWebRequest": {
    "dependencies": ["permission:declarativeWebRequest"],
    "contexts": ["privileged_extension"]
  },
  "diagnostics": {
    "dependencies": ["permission:diagnostics"],
    "extension_types": ["platform_app"],
    "contexts": ["privileged_extension"]
  },
  "dns": {
    "dependencies": ["permission:dns"],
    "contexts": ["privileged_extension"]
  },
  // This is not a real API, only here for documentation purposes.
  // See http://crbug.com/275944 for background.
  "extensionTypes": {
    "internal": true,
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
    "contexts": ["privileged_extension"]
  },
  "events": {
    "internal": true,
    "channel": "stable",
    "extension_types": ["platform_app", "extension"],
    "contexts": "all",
    "matches": ["<all_urls>"]
  },
  "feedbackPrivate": [
    {
      "dependencies": ["permission:feedbackPrivate"],
      "contexts": ["privileged_extension"],
      "default_parent": true
    },
    {
      "channel": "stable",
      "contexts": ["webui"],
      "matches": [
        "chrome://feedback/*",
        "chrome://cast-feedback/*",
        "chrome://os-feedback/*"
      ]
    }
  ],
  "feedbackPrivate.openFeedback": {
    "dependencies": [],
    "channel": "stable",
    "contexts": ["privileged_extension"],
    "extension_types": ["extension"],
    "allowlist": [
      "2FC374607C2DF285634B67C64A2E356C607091C3",  // http://crbug.com/1352358
      "3727DD3E564B6055387425027AD74C58784ACC15",  // http://crbug.com/1352358
      "12E618C3C6E97495AAECF2AC12DEB082353241C6"   // http://crbug.com/1352358
    ]
  },
  "feedbackPrivate.readLogSource": [
    {
      "platforms": ["chromeos", "lacros"],
      "session_types": ["kiosk"]
    },
    {
      "channel": "stable",
      "contexts": ["webui"],
      "matches": [
        "chrome://feedback/*"
      ]
    }
  ],
  "fileSystem": {
    "dependencies": ["permission:fileSystem"],
    "contexts": ["privileged_extension"],
    "disallow_for_service_workers": true
  },
  "guestViewInternal": [
    {
      "internal": true,
      "channel": "stable",
      "contexts": ["privileged_extension"]
    }, {
      "internal": true,
      "channel": "stable",
      "contexts": ["webui"],
      "matches": [
        "chrome://add-supervision/*",
        "chrome://assistant-optin/*",
        "chrome://discards/*",
        "chrome://extensions/*",
        "chrome://graduation/*",
        "chrome://home/*",
        "chrome://chrome-signin/*",
        "chrome://mobilesetup/*",
        "chrome://oobe/*",
        "chrome://os-settings/*",
        "chrome://parent-access/*",
        "chrome://password-change/*",
        "chrome://lock-reauth/*"
      ]
    }, {
      // This feature is used by the Controlled Frame API and is specifically
      // enabled by //chrome.
      "internal": true,
      "channel": "stable",
      "contexts": ["web_page"],
      "matches":[
        "<all_urls>"
      ],
      // This feature is only enabled if the embedder's delegated check returns
      // true.
      "requires_delegated_availability_check": true
    }
  ],
  "hid": {
    "dependencies": ["permission:hid"],
    "contexts": ["privileged_extension"]
  },
  "i18n": {
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app",
                        "login_screen_extension"],
    "contexts": [
      "privileged_extension",
      "unprivileged_extension",
      "content_script",
      "lock_screen_extension"
    ]
  },
  "idle": {
    "dependencies": ["permission:idle"],
    "contexts": ["privileged_extension"]
  },
  "idle.getAutoLockDelay": {
    "platforms": ["chromeos", "lacros"]
  },
  "lockScreen.data": {
    "dependencies": ["permission:lockScreen"],
    "contexts": ["privileged_extension", "lock_screen_extension"]
  },
  "lockScreen.data.create": {
    "contexts": ["lock_screen_extension"]
  },
  "management": [{
    "dependencies": ["permission:management"],
    "contexts": ["privileged_extension"],
    "default_parent": true
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://extensions/*",
      "chrome://settings/*"
    ]
  }, {
    "channel": "stable",
    "contexts": ["web_page"],
    "matches": ["https://chromewebstore.google.com/*"]
  }, {
    // Used for webstore testing. See comment in
    // chrome/common/extensions/webstore_override.cc
    "channel": "stable",
    "contexts": ["web_page"],
    "requires_delegated_availability_check": true,
    "matches": ["<all_urls>"]
  }],
  "management.getPermissionWarningsByManifest": {
    "dependencies": [],
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
  },
  "management.getSelf": {
    "dependencies": [],
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
  },
  "management.installReplacementWebApp": {
    "dependencies": ["manifest:replacement_web_app"],
    "channel": "stable",
    "extension_types": ["extension", "platform_app"]
  },
  "management.uninstallSelf": {
    "dependencies": [],
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"]
  },
  "mediaPerceptionPrivate": {
    "dependencies": ["permission:mediaPerceptionPrivate"],
    "contexts": ["privileged_extension"]
  },
  "metricsPrivate": [{
    "dependencies": ["permission:metricsPrivate"],
    "contexts": ["privileged_extension"],
    "alias": "metricsPrivateIndividualApis",
    "default_parent": true
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://apps/*",
      "chrome://bookmarks/*",
      "chrome://bookmarks-side-panel.top-chrome/*",
      "chrome://compare/*",
      "chrome://customize-chrome-side-panel.top-chrome/*",
      "chrome://shopping-insights-side-panel.top-chrome/*",
      "chrome://download-shelf.top-chrome/*",
      "chrome://eche-app/*",
      "chrome://extensions/*",
      "chrome://file-manager/*",
      "chrome://help-app/*",
      "chrome://history/*",
      "chrome://new-tab-page/*",
      "chrome://os-settings/*",
      "chrome://password-manager/*",
      "chrome://personalization/*",
      "chrome://profile-picker/*",
      "chrome://read-later.top-chrome/*",
      "chrome://settings/*",
      "chrome://sync-confirmation/*",
      "chrome://tab-search.top-chrome/*",
      "chrome://tab-strip.top-chrome/*",
      "chrome://welcome/*",
      "chrome://vc-background/*",
      "chrome://app-settings/*",
      "chrome://search-engine-choice/*"
    ]
  }, {
    "channel": "stable",
    "contexts": ["webui_untrusted"],
    "matches": [
      "chrome-untrusted://boca-app/*",
      "chrome-untrusted://compose/*",
      "chrome-untrusted://help-app/*",
      "chrome-untrusted://lens/*",
      "chrome-untrusted://media-app/*",
      "chrome-untrusted://mako/*",
      "chrome-untrusted://projector/*",
      "chrome-untrusted://read-anything-side-panel.top-chrome/*"
    ]
  }],
  "metricsPrivateIndividualApis": {
    "contexts": [],
    "channel": "stable",
    "source": "metricsPrivate"
   },
  "metricsPrivate.getIsCrashReportingEnabled": {
    "allowlist": [
      // This function inherits the extension restrictions of metricsPrivate,
      // but also requires allowlisting. New uses of this function should get
      // /tools/metrics/OWNERS approval of the usage before adding entries
      // below. See crbug.com/374199.
      "2FC374607C2DF285634B67C64A2E356C607091C3",  // Quickoffice
      "3727DD3E564B6055387425027AD74C58784ACC15",  // Quickoffice internal
      "12E618C3C6E97495AAECF2AC12DEB082353241C6",  // QO component extension
      "3727DD3E564B6055387425027AD74C58784ACC15",  // Editor
      "C41AD9DCD670210295614257EF8C9945AD68D86E",  // Google Now
      "D7986543275120831B39EF28D1327552FC343960",  // http://crbug.com/378067
      "A291B26E088FA6BA53FFD72F0916F06EBA7C585A",  // http://crbug.com/378067
      "07BD6A765FFC289FF755D7CAB2893A40EC337FEC",  // http://crbug.com/456214
      "896B85CC7E913E11C34892C1425A093C0701D386",  // http://crbug.com/456214
      "11A01C82EF355E674E4F9728A801F5C3CB40D83F",  // http://crbug.com/456214
      "F410C88469990EE7947450311D24B8AF2ADB2595",  // http://crbug.com/456214
      // TODO (ntang) Remove the following 2 hashes by 12/31/2017.
      "B620CF4203315F9F2E046EDED22C7571A935958D",  // http://crbug.com/510270
      "B206D8716769728278D2D300349C6CB7D7DE2EF9",  // http://crbug.com/510270
      "2B6C6A4A5940017146F3E58B7F90116206E84685",  // http://crbug.com/642141
      "B6C2EFAB3EC3BF6EF03701408B6B09A67B2D0069",  // http://crbug.com/642141
      "96FF2FFA5C9173C76D47184B3E86D267B37781DE",  // http://crbug.com/642141
      "0136FCB13DB29FD5CD442F56E59E53B61F1DF96F",  // http://crbug.com/642141
      "46578A13607D38F1DC8E280C4F499FB0A2F9565C",  // http://crbug.com/819404
      "898FB5A39687D210766B8998BA4530B99C9E6586",  // http://crbug.com/819404
      "82F30B65397BC3E4ADE627BBD857AB8A58210648",  // http://crbug.com/819404
      "C74B2AF138F9EDECD04D0965AB36CA66C8290466",  // http://crbug.com/957772
      "754A9CB3C8623093180E10CF4C3AB64837179E68",  // https://crbug.com/1201800
      "CF6B19571334F49878327D557597D23B1458AA39"   // https://crbug.com/1201800
    ]
  },
  "metricsPrivateIndividualApis.recordUserAction": {
    "dependencies": [],
    "channel": "stable",
    "contexts": ["webui_untrusted"],
    "matches": [
      "chrome://apps/*",
      "chrome-untrusted://demo-mode-app/*"
    ]
  },
  "metricsPrivateIndividualApis.recordMediumTime": {
    "dependencies": [],
    "channel": "stable",
    "contexts": ["webui_untrusted"],
    "matches": [
      "chrome-untrusted://demo-mode-app/*"
    ]
  },
  "metricsPrivateIndividualApis.recordEnumerationValue": {
    "dependencies": [],
    "channel": "stable",
    "contexts": ["webui_untrusted"],
    "matches": [
      "chrome-untrusted://demo-mode-app/*"
    ]
  },
  "mimeHandlerPrivate": {
    "dependencies": ["manifest:mime_types_handler"],
    "contexts": ["privileged_extension"]
  },
  "mojoPrivate": {
    "contexts": ["privileged_extension"],
    "dependencies": ["behavior:imprivata_in_session_extension"],
    "extension_types": ["extension"],
    "location": "policy",
    "platforms": ["chromeos", "lacros"]
  },
  "networking.onc": {
    "dependencies": ["permission:networking.onc"],
    "contexts": ["privileged_extension"],
    "source": "networkingPrivate"
  },
  "networkingPrivate": [{
    "dependencies": ["permission:networkingPrivate"],
    "contexts": ["privileged_extension"],
    // TODO(tbarzic): networkingPrivate is being renamed to networking.onc.
    // The goal is to eventually remove networkingPrivate API in favour of
    // networking.onc, but until current usages are migrated to the new
    // name, use API aliasing to expose the API under both names.
    // (http://crbug.com/672186).
    "alias": "networking.onc"
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://network/*",
      "chrome://oobe/*",
      "chrome://internet-config-dialog/*",
      "chrome://internet-detail-dialog/*",
      "chrome://os-settings/*"
    ]
  }],
  "odfsConfigPrivate": {
    "dependencies": ["permission:odfsConfigPrivate"],
    "contexts": ["privileged_extension"],
    "feature_flag": "ApiOdfsConfigPrivate"
  },
  "offscreen": {
    "dependencies": ["permission:offscreen"],
    "contexts": ["privileged_extension"]
  },
  "power": {
    "dependencies": ["permission:power"],
    "contexts": ["privileged_extension"]
  },
  "power.reportActivity": {
    "platforms": ["chromeos", "lacros"]
  },
  "printerProvider": {
    "dependencies": ["permission:printerProvider"],
    "contexts": ["privileged_extension"]
  },
  "printerProviderInternal": {
    "internal": true,
    "dependencies": ["permission:printerProvider"],
    "contexts": ["privileged_extension"]
  },
  "runtime": {
    "channel": "stable",
    "extension_types": [
      "extension",
      "legacy_packaged_app",
      "platform_app",
      "login_screen_extension",
      "chromeos_system_extension"
    ],
    "contexts": [
      "privileged_extension",
      "lock_screen_extension"
    ]
  },
  "runtime.getBackgroundPage": {
    "disallow_for_service_workers": true
  },
  "runtime.getPackageDirectoryEntry": {
    "disallow_for_service_workers": true
  },
  "runtime.getManifest": {
    "contexts": [
      "privileged_extension",
      "lock_screen_extension",
      "unprivileged_extension",
      "content_script"
    ]
  },
  "runtime.connect": [{
    // Everything except WebUI.
    "contexts": [
      "privileged_web_page",
      "content_script",
      "privileged_extension",
      "lock_screen_extension",
      "offscreen_extension",
      "unprivileged_extension",
      "user_script",
      "web_page"
    ],
    "matches": ["<all_urls>"]
  },{
    "channel": "stable",
    "contexts": ["webui_untrusted"],
    "matches": [
      // Allow only terminal_ssh.html in Terminal System Web App.
      "chrome-untrusted://terminal/html/terminal_ssh.html*"
    ]
  }],
  "runtime.connectNative": {
    "dependencies": ["permission:nativeMessaging"],
    "contexts": ["privileged_extension"]
  },
  "runtime.getContexts": {
    "min_manifest_version": 3,
    "contexts": ["privileged_extension"]
  },
  "runtime.getURL": {
    "contexts": [
      "privileged_extension",
      "lock_screen_extension",
      "offscreen_extension",
      "unprivileged_extension",
      "content_script"
    ]
  },
  "runtime.id": {
    "contexts": [
      "privileged_extension",
      "lock_screen_extension",
      "offscreen_extension",
      "unprivileged_extension",
      "content_script"
    ]
  },
  "runtime.lastError": {
    "contexts": "all",
    "extension_types": "all",
    "matches": ["<all_urls>"]
  },
  "runtime.onConnect": {
    "contexts": [
      "privileged_extension",
      "lock_screen_extension",
      "offscreen_extension",
      "unprivileged_extension",
      "user_script",
      "content_script"
    ]
  },
  "runtime.onConnectExternal": {
    "contexts": [
      "privileged_extension",
      "lock_screen_extension",
      "offscreen_extension"
    ]
  },
  "runtime.onConnectNative": {
    "dependencies": ["permission:nativeMessaging"],
    "contexts": ["privileged_extension"]
  },
  "runtime.onUserScriptConnect": {
    // NOTE: We can readily open this up to offscreen extensions and
    // lockscreen extensions, if there's desire. For now, limit it.
    "contexts": ["privileged_extension"],
    "min_manifest_version": 3
  },
  "runtime.onMessage": {
    "contexts": [
      "privileged_extension",
      "lock_screen_extension",
      "offscreen_extension",
      "unprivileged_extension",
      "user_script",
      "content_script"
    ]
  },
  "runtime.onMessageExternal": {
    "contexts": [
      "privileged_extension",
      "lock_screen_extension",
      "offscreen_extension"
    ]
  },
  "runtime.onUserScriptMessage": {
    // NOTE: We can readily open this up to offscreen extensions and
    // lockscreen extensions, if there's desire. For now, limit it.
    "contexts": ["privileged_extension"],
    "min_manifest_version": 3
  },
  "runtime.sendMessage": [{
    // Everything except WebUI.
    "contexts": [
      "privileged_web_page",
      "content_script",
      "privileged_extension",
      "lock_screen_extension",
      "offscreen_extension",
      "unprivileged_extension",
      "user_script",
      "web_page"
    ],
    "matches": ["<all_urls>"]
  },{
    "contexts": ["webui"],
    "matches": [
      "chrome://password-change/*",
      "chrome://file-manager/*"
    ]
  },{
    "channel": "stable",
    "contexts": ["webui_untrusted"],
    "matches": [
      "chrome-untrusted://terminal/*"
    ]
  }],
  "runtime.sendNativeMessage": {
    "dependencies": ["permission:nativeMessaging"],
    "contexts": ["privileged_extension"]
  },
  "serial": {
    "dependencies": ["permission:serial"],
    "contexts": ["privileged_extension"]
  },
  "socket": {
    "dependencies": ["permission:socket"],
    "contexts": ["privileged_extension"]
  },
  "sockets.tcp": [{
    "dependencies": ["manifest:sockets"],
    "contexts": ["privileged_extension"]
  },{
    "channel": "stable",
    "contexts": ["webui_untrusted"],
    "matches": [
      "chrome-untrusted://terminal/*"
    ]
  }],
  "sockets.tcpServer": [{
    "dependencies": ["manifest:sockets"],
    "contexts": ["privileged_extension"]
  },{
    "channel": "stable",
    "contexts": ["webui_untrusted"],
    "matches": [
      "chrome-untrusted://terminal/*"
    ]
  }],
  "sockets.udp": [{
    "dependencies": ["manifest:sockets"],
    "contexts": ["privileged_extension"]
  },{
    "channel": "stable",
    "contexts": ["webui_untrusted"],
    "matches": [
      "chrome-untrusted://terminal/*"
    ]
  }],
  "storage": {
    "dependencies": ["permission:storage"],
    "contexts": [
      "privileged_extension",
      "unprivileged_extension",
      "content_script"
    ]
  },
  "storage.session": {
    "min_manifest_version": 3
  },
  "system.cpu": {
    "dependencies": ["permission:system.cpu"],
    "contexts": ["privileged_extension"]
  },
  "system.display": [{
    "dependencies": ["permission:system.display"],
    "contexts": ["privileged_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://os-settings/*"
    ]
  }],
  "system.memory": {
    "dependencies": ["permission:system.memory"],
    "contexts": ["privileged_extension"]
  },
  "system.network": {
    "dependencies": ["permission:system.network"],
    "contexts": ["privileged_extension"]
  },
  "system.storage": {
    "dependencies": ["permission:system.storage"],
    "contexts": ["privileged_extension"]
  },
  "system.storage.getAvailableCapacity": {
    "channel": "dev"
  },
  // The test API also has custom checks in the bindings system which only make
  // it available if specific command line flags are used:
  //  - "extension-test-api-on-web-pages" for web_page contexts.
  //  - "test-type=" for the other contexts listed here (set automatically in
  //    browser, ui and gpu tests by the test harness).

  "test": [{
    "channel": "stable",
    "extension_types": "all",
    // Everything except web pages and WebUI. WebUI and web pages are declared
    // in separate rules to keep the "matches" properties isolated.
    "contexts": [
      "privileged_extension",
      "privileged_web_page",
      "content_script",
      "lock_screen_extension",
      "offscreen_extension",
      "unprivileged_extension",
      "user_script"
    ]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://extensions/*",
      // System Web App version of File Manager.
      "chrome://file-manager/*",
      "chrome://webui-test/*"
    ]
  }, {
    "channel": "stable",
    "contexts": [ "webui_untrusted" ],
    "matches": [ "chrome-untrusted://api-test/*" ]
  }, {
    // This also depends on a special check in the NativeExtensionBindingsSystem
    // that only exposes it if an associated command line flag is set.
    "channel": "stable",
    "contexts": ["web_page"],
    "matches": ["<all_urls>"]
  }],
  "types": {
    "internal": true,
    "channel": "stable",
    "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
    "contexts": ["privileged_extension"]
  },
  "usb": {
    "dependencies": ["permission:usb"],
    "contexts": ["privileged_extension"]
  },
  "userScripts": {
    "dependencies": [ "permission:userScripts" ],
    "contexts": [ "privileged_extension" ],
    "developer_mode_only": true
  },
  "userScripts.getWorldConfigurations": {
    "dependencies": [ "permission:userScripts" ],
    "contexts": [ "privileged_extension" ],
    "developer_mode_only": true,
    "feature_flag": "ApiUserScriptsMultipleWorlds"
  },
  "userScripts.resetWorldConfiguration": {
    "dependencies": [ "permission:userScripts" ],
    "contexts": [ "privileged_extension" ],
    "developer_mode_only": true,
    "feature_flag": "ApiUserScriptsMultipleWorlds"
  },
  "virtualKeyboard": {
    "dependencies": ["permission:virtualKeyboard"],
    "contexts": ["privileged_extension"]
  },
  "vpnProvider": {
    "dependencies": ["permission:vpnProvider"],
    "contexts": ["privileged_extension"]
  },
  "webRequest": {
    "dependencies": ["permission:webRequest"],
    "contexts": ["privileged_extension"]
  },
  "webRequestInternal": [{
    "internal": true,
    "channel": "stable",
    "contexts": ["privileged_extension"]
  }, {
    // webview uses webRequestInternal API.
    "channel": "stable",
    "internal": true,
    "contexts": ["webui"],
    "matches": [
      "chrome://add-supervision/*",
      "chrome://assistant-optin/*",
      "chrome://chrome-signin/*",
      "chrome://discards/*",
      "chrome://graduation/*",
      "chrome://home/*",
      "chrome://mobilesetup/*",
      "chrome://oobe/*",
      "chrome://os-settings/*",
      "chrome://parent-access/*",
      "chrome://password-change/*",
      "chrome://lock-reauth/*"
    ]
  }, {
    // This feature is used by the Controlled Frame API and is specifically
    // enabled by //chrome.
    "internal": true,
    "channel": "stable",
    "contexts": ["web_page"],
    "matches": [
      "<all_urls>"
    ],
    // This feature is only enabled if the embedder's delegated check returns
    // true.
    "requires_delegated_availability_check": true
  }],
  "webViewInternal": [{
    "internal": true,
    "dependencies": ["permission:webview"],
    "contexts": ["privileged_extension"]
  }, {
    "internal": true,
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://add-supervision/*",
      "chrome://assistant-optin/*",
      "chrome://chrome-signin/*",
      "chrome://discards/*",
      "chrome://graduation/*",
      "chrome://home/*",
      "chrome://mobilesetup/*",
      "chrome://oobe/*",
      "chrome://os-settings/*",
      "chrome://parent-access/*",
      "chrome://password-change/*",
      "chrome://lock-reauth/*"
    ]
  }, {
    // This feature is used by the Controlled Frame API and is specifically
    // enabled by //chrome.
    "internal": true,
    "channel": "stable",
    "contexts": ["web_page"],
    "matches":[
      "<all_urls>"
    ],
    // This feature is only enabled if the embedder's delegated check returns
    // true.
    "requires_delegated_availability_check": true
  }],
  "webViewRequest": [{
    "dependencies": ["permission:webview"],
    "contexts": ["privileged_extension"]
  }, {
    "channel": "stable",
    "contexts": ["webui"],
    "matches": [
      "chrome://add-supervision/*",
      "chrome://assistant-optin/*",
      "chrome://chrome-signin/*",
      "chrome://discards/*",
      "chrome://graduation/*",
      "chrome://home/*",
      "chrome://mobilesetup/*",
      "chrome://oobe/*",
      "chrome://os-settings/*",
      "chrome://parent-access/*"
    ]
  }]
}