blob: 7157156f3e7ee23088bd9ab5728146f935524435 [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// The type schemas for structured manifest items. Not actually a callable API.
[
{
"namespace": "extensionsManifestTypes",
"description": "Schemas for structured manifest entries",
"compiler_options": { "generate_error_messages": true },
"types": [
{
"id": "automation",
"description": "This API provides programmatic access to the user interface elements of Chrome. This includes everything in the web view, and optionally Chrome's full user interface.",
"choices": [
{ "type": "boolean",
"description": "If true, enables non-interactive access to the automation tree only for the sites for which the extension has a <a href='https://developer.chrome.com/extensions/declare_permissions#host-permissions'>host permission</a> or <a href='https://developer.chrome.com/extensions/declare_permissions#activeTab'>activeTab permission</a>)." },
{ "type": "object",
"properties": {
"desktop": {
"description": "Whether to request permission to the whole ChromeOS desktop. If granted, this gives the extension access to every aspect of the desktop, and every site and app. If this permission is requested, all other permissions are implicitly included and do not need to be requested separately.",
"optional": true,
"type": "boolean"
},
"matches": {
"description": "A list of URL patterns for which this extension may request an automation tree. If not specified, automation permission will be granted for the sites for which the extension has a <a href='https://developer.chrome.com/extensions/declare_permissions#host-permissions'>host permission</a> or <a href='https://developer.chrome.com/extensions/declare_permissions#activeTab'>activeTab permission</a>).",
"optional": true,
"type": "array",
"items": { "type": "string" }
},
"interact": {
"description": "Whether the extension is allowed interactive access (true) or read-only access (false; default) to the automation tree.",
"optional": true,
"type": "boolean"
}
}
}
]
},
{
"id": "ContentCapabilities",
"type": "object",
"description": "The <code>content_capabilities</code> manifest entry allows an extension to grant certain additional capabilities to web contents whose locations match a given set of URL patterns.",
"properties": {
"matches": {
"description": "The set of URL patterns to match against. If any of the given patterns match a URL, its contents will be granted the specified capabilities.",
"type": "array",
"items": { "type": "string" }
},
"permissions": {
"description": "The set of capabilities to grant matched contents. This is currently limited to <code>clipboardRead</code>, <code>clipboardWrite</code>, and <code>unlimitedStorage</code>.",
"type": "array",
"items": { "type": "string" }
}
}
},
{
"id": "ExternallyConnectable",
"type": "object",
// Note: description commented out because externally_connectable.html
// already describes it, and the repetition looks odd.
// "description": "The <code>externally_connectable</code> manifest property declares which extensions, apps, and web pages can connect to your extension via $(ref:runtime.connect) and $(ref:runtime.sendMessage).",
"properties": {
"ids": {
"description": "<p>The IDs of extensions or apps that are allowed to connect. If left empty or unspecified, no extensions or apps can connect.</p><p>The wildcard <code>\"*\"</code> will allow all extensions and apps to connect.</p>",
"optional": true,
"type": "array",
"items": {"type": "string"}
},
"matches": {
"description": "<p>The URL patterns for <em>web pages</em> that are allowed to connect. <em>This does not affect content scripts.</em> If left empty or unspecified, no web pages can connect.</p><p>Patterns cannot include wildcard domains nor subdomains of <a href=\"http://publicsuffix.org/list/\">(effective) top level domains</a>; <code>*://google.com/*</code> and <code>http://*.chromium.org/*</code> are valid, while <code>&lt;all_urls&gt;</code>, <code>http://*/*</code>, <code>*://*.com/*</code>, and even <code>http://*.appspot.com/*</code> are not.</p>",
"optional": true,
"type": "array",
"items": {"type": "string"}
},
"accepts_tls_channel_id": {
"description": "If <code>true</code>, messages sent via $(ref:runtime.connect) or $(ref:runtime.sendMessage) will set $(ref:runtime.MessageSender.tlsChannelId) if those methods request it to be. If <code>false</code>, $(ref:runtime.MessageSender.tlsChannelId) will never be set under any circumstance.",
"optional": true,
"type": "boolean"
}
}
},
{
"id": "OptionsUI",
"type": "object",
"description": "The <code>options_ui</code> manifest property declares how the options page should be displayed.",
"properties": {
"page": {
"description": "The path to your options page, relative to your extension's root.",
"type": "string"
},
"chrome_style": {
"description": "If <code>true</code>, a Chrome user agent stylesheet will be applied to your options page. The default value is <code>false</code>. We do not recommend you enable it as it no longer results in a consistent UI with Chrome. This option will be removed in Manifest V3.",
"optional": true,
"type": "boolean"
},
"open_in_tab": {
"description": "<p>If <code>true</code>, your extension's options page will be opened in a new tab rather than embedded in <em>chrome://extensions</em>. The default is <code>false</code>, and we recommend that you don't change it.</p><p><strong>This is only useful to delay the inevitable deprecation of the old options UI!</strong> It will be removed soon, so try not to use it. It will break.</p>",
"optional": true,
"type": "boolean"
}
}
},
{
"id": "SocketHostPatterns",
"description": "<p>A single string or a list of strings representing host:port patterns.</p>",
"choices": [
{ "type": "string" },
{ "type": "array", "items": { "type": "string" } }
]
},
{
"id": "sockets",
"type": "object",
"description": "The <code>sockets</code> manifest property declares which sockets operations an app can issue.",
"properties": {
"udp": {
"description": "The <code>udp</code> manifest property declares which sockets.udp operations an app can issue.",
"optional": true,
"type": "object",
"properties": {
"bind": {
"description": "<p>The host:port pattern for <code>bind</code> operations.</p>",
"optional": true,
"$ref": "SocketHostPatterns"
},
"send": {
"description": "<p>The host:port pattern for <code>send</code> operations.</p>",
"optional": true,
"$ref": "SocketHostPatterns"
},
"multicastMembership": {
"description": "<p>The host:port pattern for <code>joinGroup</code> operations.</p>",
"optional": true,
"$ref": "SocketHostPatterns"
}
}
},
"tcp": {
"description": "The <code>tcp</code> manifest property declares which sockets.tcp operations an app can issue.",
"optional": true,
"type": "object",
"properties": {
"connect": {
"description": "<p>The host:port pattern for <code>connect</code> operations.</p>",
"optional": true,
"$ref": "SocketHostPatterns"
}
}
},
"tcpServer": {
"description": "The <code>tcpServer</code> manifest property declares which sockets.tcpServer operations an app can issue.",
"optional": true,
"type": "object",
"properties": {
"listen": {
"description": "<p>The host:port pattern for <code>listen</code> operations.</p>",
"optional": true,
"$ref": "SocketHostPatterns"
}
}
}
}
},
{
"id": "bluetooth",
"type": "object",
"description": "The <code>bluetooth</code> manifest property give permission to an app to use the $(ref:bluetooth) API. A list of UUIDs can be optionally specified to enable communication with devices.",
"properties": {
"uuids": {
"description": "The <code>uuids</code> manifest property declares the list of protocols, profiles and services that an app can communicate using.",
"optional": true,
"type": "array",
"items": {
"description": "<p>The list specified as UUID strings.</p>",
"type": "string"
}
},
"socket": {
"type": "boolean",
"description": "If <code>true</code>, gives permission to an app to use the $(ref:bluetoothSocket) API",
"optional": true
},
"low_energy": {
"type": "boolean",
"description": "If <code>true</code>, gives permission to an app to use the $(ref:bluetoothLowEnergy) API",
"optional": true
},
"peripheral": {
"type": "boolean",
"description": "If <code>true</code>, gives permission to an app to use the advertisement functions in the $(ref:bluetoothLowEnergy) API",
"optional": true
}
}
},
{
"id": "UsbPrinters",
"type": "object",
"description": "The <code>usb_printers</code> manifest property lists the USB printers supported by an app implementing the $(ref:printerProvider) API.",
"properties": {
"filters": {
"description": "A list of $(ref:usb.DeviceFilter USB device filters) matching supported devices. A device only needs to match one of the provided filters. A <code>vendorId</code> is required and only one of <code>productId</code> or <code>interfaceClass</code> may be provided.",
"type": "array",
"items": {
"type": "object",
"properties": {
"vendorId": {
"description": "USB vendor ID of matching devices",
"type": "integer"
},
"productId": {
"description": "USB product ID of matching devices",
"type": "integer",
"optional": true
},
"interfaceClass": {
"description": "USB interface class implemented by any interface of a matching device.",
"type": "integer",
"optional": true
},
"interfaceSubclass": {
"description": "USB interface sub-class implemented by the interface matching $(ref:interfaceClass).",
"type": "integer",
"optional": true
},
"interfaceProtocol": {
"description": "USB interface protocol implemented by the interface matching $(ref:interfaceClass) and $(ref:interfaceSubclass).",
"type": "integer",
"optional": true
}
}
}
}
}
},
{
"id": "KioskSecondaryApps",
"type": "array",
"description": "The <code>kiosk_secondary_apps</code> manifest property lists the secondary kiosk apps to be deployed by the primary kiosk app.",
"items": {
"type": "object",
"properties": {
"id": {
"description": "ID of secondary kiosk app",
"type": "string"
},
"enabled_on_launch": {
"description": "Whether the secondary app should be enabled when kiosk app is launched. If true, the app will be enabled before the kiosk app launch; if false the app will be disabled before the kiosk app launch; if not set, the app's enabled state will not be changed during the kiosk app launch. The ${ref:management} API can be used to later change the secondary app state.",
"type": "boolean",
"optional": true
}
}
}
}
]
}
]