Properly attach InfoBarContainer when it is swapped to a new WebContents
[chromium-blink-merge.git] / chrome / common / extensions / api / declarative_content.json
blobb90c319ebc95b8357822becb7d863a0f1f9881fe
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.
6   {
7     "namespace": "declarativeContent",
8     "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.",
9     "types": [
10       {
11         "id": "ImageDataType",
12         "type": "binary",
13         "isInstanceOf": "ImageData",
14         "additionalProperties": { "type": "any" },
15         "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>.",
16         "inline_doc": true
17       },
18       {
19         "id": "PageStateMatcher",
20         "type": "object",
21         "description": "Matches the state of a web page by various criteria.",
22         "properties": {
23           "pageUrl": {
24             "$ref": "events.UrlFilter",
25             "description": "Matches if the condition of the UrlFilter are fulfilled for the top-level URL of the page.",
26             "optional": true
27           },
28           "css": {
29             "type": "array",
30             "optional": true,
31             "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 that listing hundreds of CSS selectors or CSS selectors that match hundreds of times per page can still slow down web sites.",
32             // TODO(jyasskin): Figure out if we want to require all
33             // the selectors to match in the same frame, or allow several
34             // frames to contribute to a match.
35             "items": { "type": "string" }
36 //        },
37 //          TODO: "text": {
38 //            "type": "array",
39 //            "optional": true,
40 //            "description": "Matches if all of the regular expressions in the array match text in the page. The regular expressions use the <a href=\"http://code.google.com/p/re2/wiki/Syntax\">RE2 syntax</a>.",
41 //            "items": { "type": "string" }
42           },
43           "instanceType": {
44             "type": "string", "enum": ["declarativeContent.PageStateMatcher"],
45             "nodoc": true
46           }
47         }
48       },
49       {
50         "id": "ShowPageAction",
51         "description": "Declarative event action that shows the extension's $(ref:pageAction page action) while the corresponding conditions are met.  This action can be used without <a href=\"declare_permissions#host-permissions\">host permissions</a>, but the extension must have a page action.  If the extension takes the <a href=\"activeTab.html\">activeTab</a> permission, a click on the page action will grant access to the active tab.",
52         "type": "object",
53         "properties": {
54           "instanceType": {
55             "type": "string", "enum": ["declarativeContent.ShowPageAction"],
56             "nodoc": true
57           }
58         }
59       },
60       {
61         "id": "SetIcon",
62         "description": "Declarative event action that sets the 19-<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=\"declare_permissions.html#host-permissions\">host permissions</a>, but the extension must have  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>&lt;canvas></code> element, while the image representation in <code>path</code> is the path to an image file relative to he extension's manifest.  If <code>scale</code> screen pixels fit into a device-independent pixel, the <code>scale * 19</code> icon will be used.  If that scale is missing, the other image will be resized to the needed size.",
63         "type": "object",
64         "properties": {
65           "instanceType": {
66             "type": "string", "enum": ["declarativeContent.SetIcon"],
67             "nodoc": true
68           },
69           "imageData": {
70             "choices": [
71               { "$ref": "ImageDataType" },
72               {
73                 "type": "object",
74                 "properties": {
75                   "19": {"$ref": "ImageDataType", "optional": true},
76                   "38": {"$ref": "ImageDataType", "optional": true}
77                 }
78               }
79             ],
80             "optional": true,
81             "description": "Either an ImageData object or a dictionary {size -> ImageData} representing 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> * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.imageData = foo' is equivalent to 'details.imageData = {'19': foo}'"
82           }
83 //          TODO: "path": {
84 //            "choices": [
85 //              { "type": "string" },
86 //              {
87 //                "type": "object",
88 //                "properties": {
89 //                  "19": {"type": "string", "optional": true},
90 //                  "38": {"type": "string", "optional": true}
91 //                }
92 //              }
93 //            ],
94 //            "optional": true,
95 //            "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> * 19 will be selected. Initially only scales 1 and 2 will be supported. At least one image must be specified. Note that 'details.path = foo' is equivalent to 'details.imageData = {'19': foo}'"
96 //          }
97         }
98       },
99       {
100         "id": "RequestContentScript",
101         "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>",
102         "type": "object",
103         "properties": {
104           "css": {
105             "type": "array",
106             "optional": true,
107             "description": "Names of CSS files to be injected as a part of the content script.",
108             "items": { "type": "string" }
109           },
110           "js": {
111             "type": "array",
112             "optional": true,
113             "description": "Names of Javascript files to be injected as a part of the content script.",
114             "items": { "type": "string" }
115           },
116           "allFrames": {
117             "type": "boolean",
118             "optional": true,
119             "description": "Whether the content script runs in all frames of the matching page, or only the top frame. Default is false."
120           },
121           "matchAboutBlank": {
122             "type": "boolean",
123             "optional": true,
124             "description": "Whether to insert the content script on about:blank and about:srcdoc. Default is false."
125           },
126           "instanceType": {
127             "type": "string", "enum": ["declarativeContent.RequestContentScript"],
128             "nodoc": true
129           }
130         }
131       }
132     ],
133     "functions": [
134     ],
135     "events": [
136       {
137         "name": "onPageChanged",
138         "options": {
139           "supportsListeners": false,
140           "supportsRules": true,
141           "conditions": ["declarativeContent.PageStateMatcher"],
142           "actions": [
143             "declarativeContent.RequestContentScript",
144             "declarativeContent.SetIcon",
145             "declarativeContent.ShowPageAction"
146           ]
147         }
148       }
149     ]
150   }