blob: 0bc5f1365efe8d548d3c59c76c34a2d8b94c027d [file] [log] [blame]
// Copyright 2012 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
[
{
"namespace": "declarativeContent",
"description": "Use the <code>chrome.declarativeContent</code> API to take actions depending on the content of a page, without requiring permission to read the page's content.",
"types": [
{
"id": "ImageDataType",
"type": "binary",
"isInstanceOf": "ImageData",
"additionalProperties": { "type": "any" },
"description": "See <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/ImageData\">https://developer.mozilla.org/en-US/docs/Web/API/ImageData</a>."
},
{
"id": "PageStateMatcherInstanceType",
"type": "string",
"enum": ["declarativeContent.PageStateMatcher"],
"nodoc": true
},
{
"id": "ShowPageActionInstanceType",
"type": "string",
"enum": ["declarativeContent.ShowPageAction"],
"nodoc": true
},
{
"id": "ShowActionInstanceType",
"type": "string",
"enum": ["declarativeContent.ShowAction"],
"nodoc": true
},
{
"id": "SetIconInstanceType",
"type": "string",
"enum": ["declarativeContent.SetIcon"],
"nodoc": true
},
{
"id": "RequestContentScriptInstanceType",
"type": "string",
"enum": ["declarativeContent.RequestContentScript"],
"nodoc": true
},
{
"id": "PageStateMatcher",
"type": "object",
"description": "Matches the state of a web page based on various criteria.",
"properties": {
"pageUrl": {
"$ref": "events.UrlFilter",
"description": "Matches if the conditions of the <code>UrlFilter</code> are fulfilled for the top-level URL of the page.",
"optional": true
},
"css": {
"type": "array",
"optional": true,
"description": "Matches if all of the CSS selectors in the array match displayed elements in a frame with the same origin as the page's main frame. All selectors in this array must be <a href=\"http://www.w3.org/TR/selectors4/#compound\">compound selectors</a> to speed up matching. Note: Listing hundreds of CSS selectors or listing CSS selectors that match hundreds of times per page can slow down web sites.",
// TODO(jyasskin): Figure out if we want to require all
// the selectors to match in the same frame, or allow several
// frames to contribute to a match.
"items": { "type": "string" }
// },
// TODO: "text": {
// "type": "array",
// "optional": true,
// "description": "Matches if all of the regular expressions in the array match text in the page. The regular expressions use the <a href=\"https://github.com/google/re2/blob/master/doc/syntax.txt\">RE2 syntax</a>.",
// "items": { "type": "string" }
},
"isBookmarked": {
"type": "boolean",
"description": "Matches if the bookmarked state of the page is equal to the specified value. Requres the <a href='/docs/extensions/develop/concepts/declare-permissions'>bookmarks permission</a>.",
"optional": true
},
"instanceType": {
"$ref": "PageStateMatcherInstanceType",
"nodoc": true
}
}
},
{
"id": "ShowPageAction",
"description": "A declarative event action that sets the extension's $(ref:pageAction page action) to an enabled state while the corresponding conditions are met. This action can be used without <a href=\"/docs/extensions/develop/concepts/declare-permissions#host-permissions\">host permissions</a>, but the extension must have a page action. If the extension has the <a href=\"/docs/extensions/develop/concepts/activeTab\">activeTab</a> permission, clicking the page action grants access to the active tab.<p>On pages where the conditions are not met the extension's toolbar action will be grey-scale, and clicking it will open the context menu, instead of triggering the action.</p>",
"deprecated": "Please use $(ref:declarativeContent.ShowAction).",
"type": "object",
"properties": {
"instanceType": {
"$ref": "ShowPageActionInstanceType",
"nodoc": true
}
}
},
{
"id": "ShowAction",
"description": "A declarative event action that sets the extension's toolbar $(ref:action action) to an enabled state while the corresponding conditions are met. This action can be used without <a href=\"/docs/extensions/develop/concepts/declare-permissions#host-permissions\">host permissions</a>. If the extension has the <a href=\"/docs/extensions/develop/concepts/activeTab\">activeTab</a> permission, clicking the page action grants access to the active tab.<p>On pages where the conditions are not met the extension's toolbar action will be grey-scale, and clicking it will open the context menu, instead of triggering the action.</p>",
"type": "object",
"properties": {
"instanceType": {
"$ref": "ShowActionInstanceType",
"nodoc": true
}
}
},
{
"id": "SetIcon",
"description": "Declarative event action that sets the n-<abbr title=\"device-independent pixel\">dip</abbr> square icon for the extension's $(ref:pageAction page action) or $(ref:browserAction browser action) while the corresponding conditions are met. This action can be used without <a href=\"/docs/extensions/develop/concepts/declare-permissions#host-permissions\">host permissions</a>, but the extension must have a page or browser action.<p>Exactly one of <code>imageData</code> or <code>path</code> must be specified. Both are dictionaries mapping a number of pixels to an image representation. The image representation in <code>imageData</code> is an <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/ImageData\">ImageData</a> object; for example, from a <code>canvas</code> element, while the image representation in <code>path</code> is the path to an image file relative to the extension's manifest. If <code>scale</code> screen pixels fit into a device-independent pixel, the <code>scale * n</code> icon is used. If that scale is missing, another image is resized to the required size.</p>",
"type": "object",
"properties": {
"instanceType": {
"$ref": "SetIconInstanceType",
"nodoc": true
},
"imageData": {
"choices": [
{ "$ref": "ImageDataType" },
{
"type": "object",
"additionalProperties": { "type": "any" }
}
],
"optional": true,
"description": "Either an <code>ImageData</code> object or a dictionary {size -> ImageData} representing an icon to be set. If the icon is specified as a dictionary, the image used is chosen depending on the screen's pixel density. If the number of image pixels that fit into one screen space unit equals <code>scale</code>, then an image with size <code>scale * n</code> is selected, where <i>n</i> is the size of the icon in the UI. At least one image must be specified. Note that <code>details.imageData = foo</code> is equivalent to <code>details.imageData = {'16': foo}</code>."
}
// TODO: "path": {
// "choices": [
// { "type": "string" },
// {
// "type": "object",
// "additionalProperties": { "type": "any" }
// }
// ],
// "optional": true,
// "description": "Either a relative image path or a dictionary {size -> relative image path} pointing to icon to be set. If the icon is specified as a dictionary, the actual image to be used is chosen depending on screen's pixel density. If the number of image pixels that fit into one screen space unit equals <code>scale</code>, then image with size <code>scale</code> * n will be selected, where n is the size of the icon in the UI. At least one image must be specified. Note that 'details.path = foo' is equivalent to 'details.path = {'16': foo}'"
// }
}
},
{
"id": "RequestContentScript",
"description": "Declarative event action that injects a content script. <p><b>WARNING:</b> This action is still experimental and is not supported on stable builds of Chrome.</p>",
"type": "object",
"properties": {
"css": {
"type": "array",
"optional": true,
"description": "Names of CSS files to be injected as a part of the content script.",
"items": { "type": "string" }
},
"js": {
"type": "array",
"optional": true,
"description": "Names of JavaScript files to be injected as a part of the content script.",
"items": { "type": "string" }
},
"allFrames": {
"type": "boolean",
"optional": true,
"description": "Whether the content script runs in all frames of the matching page, or in only the top frame. Default is <code>false</code>."
},
"matchAboutBlank": {
"type": "boolean",
"optional": true,
"description": "Whether to insert the content script on <code>about:blank</code> and <code>about:srcdoc</code>. Default is <code>false</code>."
},
"instanceType": {
"$ref": "RequestContentScriptInstanceType",
"nodoc": true
}
}
}
],
"functions": [
],
"events": [
{
"name": "onPageChanged",
"options": {
"supportsListeners": false,
"supportsRules": true,
"conditions": ["declarativeContent.PageStateMatcher"],
"actions": [
"declarativeContent.RequestContentScript",
"declarativeContent.SetIcon",
"declarativeContent.ShowPageAction",
"declarativeContent.ShowAction"
]
}
}
]
}
]