| // 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" |
| ] |
| } |
| } |
| ] |
| } |
| ] |