1 // Copyright 2014 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. 4 5 // This features file defines extension APIs implemented under src/extensions. 6 // See extensions/common/features/* to understand this file, in particular 7 // feature.h, simple_feature.h, and base_feature_provider.h. 8 // 9 // Note that specifying "web_page", "blessed_web_page", or "all" as a context 10 // type will require manually updating chrome/renderer/resources/dispatcher.cc. 11 12 // To add a new whitelisted ID, SHA-1 it and force it to uppercase. In Bash: 13 // 14 // $ echo -n "aaaabbbbccccddddeeeeffffgggghhhh" | \ 15 // sha1sum | tr '[:lower:]' '[:upper:]' 16 // 9A0417016F345C934A1A88F55CA17C05014EEEBA - 17 // 18 // Google employees: please update http://go/chrome-api-whitelist to map 19 // hashes back to ids. 20 21 { 22 "app.runtime": [{ 23 "channel": "stable", 24 "contexts": ["blessed_extension"], 25 "extension_types": ["platform_app"], 26 "noparent": true 27 }, { 28 "channel": "stable", 29 "component_extensions_auto_granted": false, 30 "contexts": ["blessed_extension"], 31 "extension_types": ["extension"], 32 "noparent": true, 33 "whitelist": [ 34 "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice 35 "3727DD3E564B6055387425027AD74C58784ACC15", // Quickoffice internal 36 "12E618C3C6E97495AAECF2AC12DEB082353241C6" // QO component extension 37 ] 38 }], 39 "app.window": { 40 "channel": "stable", 41 "contexts": ["blessed_extension"], 42 "extension_types": ["platform_app"], 43 "noparent": true 44 }, 45 "app.window.canSetVisibleOnAllWorkspaces": { 46 "channel": "dev" 47 }, 48 "app.currentWindowInternal": { 49 "noparent": true, 50 "internal": true, 51 "channel": "stable", 52 "contexts": ["blessed_extension"] 53 }, 54 "app.currentWindowInternal.setShape": { 55 "dependencies": ["permission:app.window.shape"], 56 "contexts": ["blessed_extension"] 57 }, 58 "dns": { 59 "dependencies": ["permission:dns"], 60 "contexts": ["blessed_extension"] 61 }, 62 // This is not a real API, only here for documentation purposes. 63 // See http://crbug.com/275944 for background. 64 "extensionTypes": { 65 "internal": true, 66 "channel": "stable", 67 "extension_types": ["extension", "legacy_packaged_app", "platform_app"], 68 "contexts": ["blessed_extension"] 69 }, 70 "guestViewInternal": [ 71 { 72 "internal": true, 73 "channel": "stable", 74 "contexts": ["blessed_extension"] 75 }, { 76 "internal": true, 77 "channel": "trunk", 78 "contexts": ["webui"], 79 "matches": [ 80 "chrome://extensions-frame/*", 81 "chrome://extensions/*", 82 "chrome://chrome-signin/*" 83 ] 84 } 85 ], 86 "hid": { 87 "dependencies": ["permission:hid"], 88 "contexts": ["blessed_extension"] 89 }, 90 "power": { 91 "dependencies": ["permission:power"], 92 "contexts": ["blessed_extension"] 93 }, 94 "runtime": { 95 "channel": "stable", 96 "extension_types": ["extension", "legacy_packaged_app", "platform_app"], 97 "contexts": ["blessed_extension"] 98 }, 99 "runtime.getManifest": { 100 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 101 }, 102 "runtime.connect": { 103 // Everything except WebUI. 104 "contexts": [ 105 "blessed_web_page", 106 "content_script", 107 "blessed_extension", 108 "unblessed_extension", 109 "web_page" 110 ], 111 "matches": ["<all_urls>"] 112 }, 113 "runtime.getURL": { 114 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 115 }, 116 "runtime.id": { 117 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 118 }, 119 "runtime.lastError": { 120 "contexts": "all", 121 "extension_types": "all", 122 "matches": ["<all_urls>"] 123 }, 124 "runtime.onConnect": { 125 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 126 }, 127 "runtime.onMessage": { 128 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 129 }, 130 "runtime.sendMessage": { 131 // Everything except WebUI. 132 "contexts": [ 133 "blessed_web_page", 134 "content_script", 135 "blessed_extension", 136 "unblessed_extension", 137 "web_page" 138 ], 139 "matches": ["<all_urls>"] 140 }, 141 "runtime.setUninstallURL": { 142 "channel": "dev" 143 }, 144 "serial": { 145 "dependencies": ["permission:serial"], 146 "contexts": ["blessed_extension"] 147 }, 148 "socket": { 149 "dependencies": ["permission:socket"], 150 "contexts": ["blessed_extension"] 151 }, 152 "sockets.tcp": { 153 "dependencies": ["manifest:sockets"], 154 "contexts": ["blessed_extension"] 155 }, 156 "sockets.tcpServer": { 157 "dependencies": ["manifest:sockets"], 158 "contexts": ["blessed_extension"] 159 }, 160 "sockets.udp": { 161 "dependencies": ["manifest:sockets"], 162 "contexts": ["blessed_extension"] 163 }, 164 "storage": { 165 "dependencies": ["permission:storage"], 166 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 167 }, 168 "system.cpu": { 169 "dependencies": ["permission:system.cpu"], 170 "contexts": ["blessed_extension"] 171 }, 172 "system.display": { 173 "dependencies": ["permission:system.display"], 174 "contexts": ["blessed_extension"] 175 }, 176 "system.memory": { 177 "dependencies": ["permission:system.memory"], 178 "contexts": ["blessed_extension"] 179 }, 180 "system.network": { 181 "dependencies": ["permission:system.network"], 182 "contexts": ["blessed_extension"] 183 }, 184 "system.storage": { 185 "dependencies": ["permission:system.storage"], 186 "contexts": ["blessed_extension"] 187 }, 188 "system.storage.getAvailableCapacity": { 189 "channel": "dev" 190 }, 191 "test": [{ 192 "channel": "stable", 193 "extension_types": "all", 194 // Everything except web pages and WebUI. WebUI is declared in a separate 195 // rule to keep the "matches" property isolated. 196 "contexts": [ 197 "blessed_extension", 198 "blessed_web_page", 199 "content_script", 200 "unblessed_extension" 201 ] 202 }, { 203 "channel": "stable", 204 "contexts": ["webui"], 205 "matches": [ 206 "chrome://extensions/*", 207 "chrome://extensions-frame/*", 208 "chrome://chrome/extensions/*" 209 ] 210 }], 211 "types": { 212 "internal": true, 213 "channel": "stable", 214 "extension_types": ["extension", "legacy_packaged_app", "platform_app"], 215 "contexts": ["blessed_extension"] 216 }, 217 "types.private": { 218 "channel": "dev", 219 "extension_types": ["extension"], 220 "location": "component" 221 }, 222 "usb": { 223 "dependencies": ["permission:usb"], 224 "contexts": ["blessed_extension"] 225 }, 226 "usbPrivate": { 227 "channel": "dev", 228 "contexts": ["webui"] 229 }, 230 "webViewExperimentalInternal": [{ 231 "internal": true, 232 "channel": "dev", 233 "contexts": ["blessed_extension"], 234 "dependencies": ["permission:webview"] 235 }, 236 { 237 "internal": true, 238 "channel": "stable", 239 "contexts": ["blessed_extension"], 240 "dependencies": ["permission:webview"], 241 "whitelist": [ 242 "8C3741E3AF0B93B6E8E0DDD499BB0B74839EA578", 243 "E703483CEF33DEC18B4B6DD84B5C776FB9182BDB", 244 "1A26E32DE447A17CBE5E9750CDBA78F58539B39C", 245 "59048028102D7B4C681DBC7BC6CD980C3DC66DA3" 246 ] 247 }], 248 "webViewInternal": [{ 249 "internal": true, 250 "dependencies": ["permission:webview"], 251 "contexts": ["blessed_extension"] 252 }, { 253 "internal": true, 254 "channel": "dev", 255 "contexts": ["webui"], 256 "matches": ["chrome://chrome-signin/*"] 257 }] 258 } 259