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 chrome/common/extensions/api/_features.md to understand this file, as 7// well as feature.h, simple_feature.h, and feature_provider.h. 8// 9// Note that specifying "web_page", "blessed_web_page", or "all" as a context 10// type will require manually updating extensions/renderer/extension_bindings_system.cc. 11 12{ 13 "alarms": { 14 "dependencies": ["permission:alarms"], 15 "contexts": ["blessed_extension"] 16 }, 17 "app.runtime": [{ 18 "channel": "stable", 19 "contexts": ["blessed_extension", "lock_screen_extension"], 20 "extension_types": ["platform_app"], 21 "noparent": true 22 }, { 23 "channel": "stable", 24 "component_extensions_auto_granted": false, 25 "contexts": ["blessed_extension"], 26 "extension_types": ["extension"], 27 "noparent": true, 28 "whitelist": [ 29 "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice 30 "3727DD3E564B6055387425027AD74C58784ACC15", // Quickoffice internal 31 "12E618C3C6E97495AAECF2AC12DEB082353241C6" // QO component extension 32 ] 33 }], 34 "app.window": [{ 35 "channel": "stable", 36 "contexts": ["blessed_extension", "lock_screen_extension"], 37 "extension_types": ["platform_app"], 38 "noparent": true 39 }, { 40 "channel": "stable", 41 "contexts": ["blessed_extension"], 42 "extension_types": ["extension"], 43 "noparent": true, 44 "component_extensions_auto_granted": false, 45 "whitelist": [ 46 "B9EF10DDFEA11EF77873CC5009809E5037FC4C7A", // Google input tools 47 "06BE211D5F014BAB34BC22D9DDA09C63A81D828E", // Official xkb extension 48 "F94EE6AB36D6C6588670B2B01EB65212D9C64E33" // Open source xkb extension 49 ] 50 }], 51 "app.currentWindowInternal": { 52 "noparent": true, 53 "internal": true, 54 "channel": "stable", 55 "contexts": ["blessed_extension", "lock_screen_extension"] 56 }, 57 "app.currentWindowInternal.setShape": { 58 "dependencies": ["permission:app.window.shape"], 59 "contexts": ["blessed_extension"] 60 }, 61 // The API for the *embedder* of appview. Appview has both an embedder and 62 // guest API, which are different. 63 "appViewEmbedderInternal": { 64 "internal": true, 65 "contexts": ["blessed_extension"], 66 "dependencies": ["permission:appview"] 67 }, 68 // Note that exposing this doesn't necessarily expose AppView, 69 // appViewEmbedderInternal is required for that. 70 // See http://crbug.com/437891. 71 "appViewGuestInternal": { 72 "internal": true, 73 "channel": "stable", 74 "contexts": ["blessed_extension"] 75 }, 76 "audio": { 77 "dependencies": ["permission:audio"], 78 "contexts": ["blessed_extension"] 79 }, 80 "automationInternal": { 81 "internal": true, 82 "dependencies": ["manifest:automation"], 83 "contexts": ["blessed_extension"] 84 }, 85 "automation": { 86 "dependencies": ["manifest:automation"], 87 "contexts": ["blessed_extension"] 88 }, 89 "automation.languageAnnotationForStringAttribute": { 90 "command_line_switch": "enable-experimental-accessibility-chromevox-sub-node-language-switching", 91 "channel": "dev", 92 "contexts": ["blessed_extension"] 93 }, 94 "bluetooth": [{ 95 "dependencies": ["manifest:bluetooth"], 96 "contexts": ["blessed_extension"] 97 }, { 98 "channel": "stable", 99 "contexts": ["webui"], 100 "matches": [ 101 "chrome://bluetooth-pairing/*", 102 "chrome://os-settings/*" 103 ] 104 }], 105 "bluetoothLowEnergy": { 106 "dependencies": ["manifest:bluetooth"], 107 "contexts": ["blessed_extension"], 108 "platforms": ["chromeos", "linux"] 109 }, 110 "bluetoothPrivate": [{ 111 "dependencies": ["permission:bluetoothPrivate"], 112 "contexts": ["blessed_extension"] 113 }, { 114 "channel": "stable", 115 "contexts": ["webui"], 116 "matches": [ 117 "chrome://bluetooth-pairing/*", 118 "chrome://os-settings/*" 119 ] 120 }], 121 "bluetoothSocket": { 122 "dependencies": ["manifest:bluetooth"], 123 "contexts": ["blessed_extension"] 124 }, 125 "cecPrivate": { 126 "dependencies": ["permission:cecPrivate"], 127 "contexts": ["blessed_extension"] 128 }, 129 "clipboard": { 130 "dependencies": ["permission:clipboard"], 131 "contexts": ["blessed_extension"] 132 }, 133 "clipboard.onClipboardDataChanged": { 134 "dependencies": ["permission:clipboardRead"] 135 }, 136 "clipboard.setImageData": { 137 "dependencies": ["permission:clipboardWrite"] 138 }, 139 "declarativeNetRequest": { 140 "dependencies": ["permission:declarativeNetRequest"], 141 "contexts": ["blessed_extension"] 142 }, 143 "declarativeNetRequest.getAvailableStaticRuleCount": { 144 // TODO(crbug.com/983299): Enable on stable once the global rules limit 145 // feature is enabled by default. 146 "channel": "trunk" 147 }, 148 "declarativeNetRequest.onRuleMatchedDebug": { 149 "dependencies": ["permission:declarativeNetRequest", "permission:declarativeNetRequestFeedback"], 150 "location": "unpacked" 151 }, 152 "declarativeWebRequest": { 153 "dependencies": ["permission:declarativeWebRequest"], 154 "contexts": ["blessed_extension"] 155 }, 156 "diagnostics": { 157 "dependencies": ["permission:diagnostics"], 158 "extension_types": ["platform_app"], 159 "contexts": ["blessed_extension"] 160 }, 161 "displaySource": { 162 "dependencies": ["permission:displaySource"], 163 "contexts": ["blessed_extension"] 164 }, 165 "dns": { 166 "dependencies": ["permission:dns"], 167 "contexts": ["blessed_extension"] 168 }, 169 // This is not a real API, only here for documentation purposes. 170 // See http://crbug.com/275944 for background. 171 "extensionTypes": { 172 "internal": true, 173 "channel": "stable", 174 "extension_types": ["extension", "legacy_packaged_app", "platform_app"], 175 "contexts": ["blessed_extension"] 176 }, 177 "events": { 178 "internal": true, 179 "channel": "stable", 180 "extension_types": ["platform_app", "extension"], 181 "contexts": "all", 182 "matches": ["<all_urls>"] 183 }, 184 "feedbackPrivate": { 185 "dependencies": ["permission:feedbackPrivate"], 186 "contexts": ["blessed_extension"] 187 }, 188 "feedbackPrivate.readLogSource": { 189 "platforms": ["chromeos"], 190 "session_types": ["kiosk"] 191 }, 192 "fileSystem": { 193 "dependencies": ["permission:fileSystem"], 194 "contexts": ["blessed_extension"], 195 "disallow_for_service_workers": true 196 }, 197 "guestViewInternal": [ 198 { 199 "internal": true, 200 "channel": "stable", 201 "contexts": ["blessed_extension"] 202 }, { 203 "internal": true, 204 "channel": "stable", 205 "contexts": ["webui"], 206 "matches": [ 207 "chrome://add-supervision/*", 208 "chrome://assistant-optin/*", 209 "chrome://cellular-setup/*", 210 "chrome://discards/*", 211 "chrome://extensions/*", 212 "chrome://home/*", 213 "chrome://chrome-signin/*", 214 "chrome://hats/*", 215 "chrome://mobilesetup/*", 216 "chrome://oobe/*", 217 "chrome://password-change/*", 218 "chrome://lock-reauth/*" 219 ] 220 } 221 ], 222 "hid": { 223 "dependencies": ["permission:hid"], 224 "contexts": ["blessed_extension"] 225 }, 226 "hid.getUserSelectedDevices": { 227 "contexts": ["blessed_extension"], 228 "channel": "dev", 229 "dependencies": ["permission:hid"] 230 }, 231 "idle": { 232 "dependencies": ["permission:idle"], 233 "contexts": ["blessed_extension"] 234 }, 235 "idle.getAutoLockDelay": { 236 "platforms": ["chromeos"] 237 }, 238 "lockScreen.data": { 239 "dependencies": ["permission:lockScreen"], 240 "contexts": ["blessed_extension", "lock_screen_extension"] 241 }, 242 "lockScreen.data.create": { 243 "contexts": ["lock_screen_extension"] 244 }, 245 "management": [{ 246 "dependencies": ["permission:management"], 247 "contexts": ["blessed_extension"], 248 "default_parent": true 249 }, { 250 "channel": "stable", 251 "contexts": ["webui"], 252 "matches": [ 253 "chrome://extensions/*", 254 "chrome://settings/*" 255 ] 256 }], 257 "management.getPermissionWarningsByManifest": { 258 "dependencies": [], 259 "channel": "stable", 260 "extension_types": ["extension", "legacy_packaged_app", "platform_app"] 261 }, 262 "management.getSelf": { 263 "dependencies": [], 264 "channel": "stable", 265 "extension_types": ["extension", "legacy_packaged_app", "platform_app"] 266 }, 267 "management.canInstallReplacementAndroidApp": { 268 "dependencies": ["manifest:replacement_android_app"], 269 // TODO(jshikaram): add test coverage before trunk promotion. 270 "channel": "trunk", 271 "extension_types": ["platform_app"] 272 }, 273 "management.installReplacementAndroidApp": { 274 "dependencies": ["manifest:replacement_android_app"], 275 "channel": "trunk", 276 "extension_types": ["platform_app"] 277 }, 278 "management.installReplacementWebApp": { 279 "dependencies": ["manifest:replacement_web_app"], 280 "channel": "stable", 281 "extension_types": ["extension", "platform_app"] 282 }, 283 "management.uninstallSelf": { 284 "dependencies": [], 285 "channel": "stable", 286 "extension_types": ["extension", "legacy_packaged_app", "platform_app"] 287 }, 288 "mediaPerceptionPrivate": { 289 "dependencies": ["permission:mediaPerceptionPrivate"], 290 "contexts": ["blessed_extension"] 291 }, 292 "metricsPrivate": [{ 293 "dependencies": ["permission:metricsPrivate"], 294 "contexts": ["blessed_extension"], 295 "default_parent": true 296 }, { 297 "channel": "stable", 298 "contexts": ["webui"], 299 "matches": [ 300 "chrome://bookmarks/*", 301 "chrome://extensions/*", 302 "chrome://os-settings/*", 303 "chrome://settings/*", 304 "chrome://sync-confirmation/*", 305 "chrome://tab-search/*", 306 "chrome://tab-strip/*", 307 "chrome://welcome/*", 308 "chrome://profile-picker/*" 309 ] 310 }, { 311 "channel": "stable", 312 "contexts": ["webui_untrusted"], 313 "matches": [ 314 "chrome-untrusted://help-app/*", 315 "chrome-untrusted://media-app/*" 316 ] 317 }], 318 "metricsPrivate.getIsCrashReportingEnabled": { 319 "whitelist": [ 320 // This function inherits the extension restrictions of metricsPrivate, 321 // but also requires whitelisting. New uses of this function should get 322 // /tools/metrics/OWNERS approval of the usage before adding entries 323 // below. See crbug.com/374199. 324 "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice 325 "3727DD3E564B6055387425027AD74C58784ACC15", // Quickoffice internal 326 "12E618C3C6E97495AAECF2AC12DEB082353241C6", // QO component extension 327 "3727DD3E564B6055387425027AD74C58784ACC15", // Editor 328 "C41AD9DCD670210295614257EF8C9945AD68D86E", // Google Now 329 "D7986543275120831B39EF28D1327552FC343960", // http://crbug.com/378067 330 "A291B26E088FA6BA53FFD72F0916F06EBA7C585A", // http://crbug.com/378067 331 "07BD6A765FFC289FF755D7CAB2893A40EC337FEC", // http://crbug.com/456214 332 "896B85CC7E913E11C34892C1425A093C0701D386", // http://crbug.com/456214 333 "11A01C82EF355E674E4F9728A801F5C3CB40D83F", // http://crbug.com/456214 334 "F410C88469990EE7947450311D24B8AF2ADB2595", // http://crbug.com/456214 335 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Media Router Dev 336 "226CF815E39A363090A1E547D53063472B8279FA", // Media Router Stable 337 // TODO (ntang) Remove the following 2 hashes by 12/31/2017. 338 "B620CF4203315F9F2E046EDED22C7571A935958D", // http://crbug.com/510270 339 "B206D8716769728278D2D300349C6CB7D7DE2EF9", // http://crbug.com/510270 340 "2B6C6A4A5940017146F3E58B7F90116206E84685", // http://crbug.com/642141 341 "B6C2EFAB3EC3BF6EF03701408B6B09A67B2D0069", // http://crbug.com/642141 342 "96FF2FFA5C9173C76D47184B3E86D267B37781DE", // http://crbug.com/642141 343 "0136FCB13DB29FD5CD442F56E59E53B61F1DF96F", // http://crbug.com/642141 344 "46578A13607D38F1DC8E280C4F499FB0A2F9565C", // http://crbug.com/819404 345 "898FB5A39687D210766B8998BA4530B99C9E6586", // http://crbug.com/819404 346 "82F30B65397BC3E4ADE627BBD857AB8A58210648", // http://crbug.com/819404 347 "A3E3DE9E9F16B41D4A2FAD106BD6CA76B94A0C94", // http://crbug.com/932466 348 "B41E7F08E1179CC03CBD1F49E57CF353A40ADE07", // http://crbug.com/932466 349 "C74B2AF138F9EDECD04D0965AB36CA66C8290466" // http://crbug.com/957772 350 ] 351 }, 352 "mimeHandlerPrivate": { 353 "dependencies": ["manifest:mime_types_handler"], 354 "contexts": ["blessed_extension"] 355 }, 356 "mojoPrivate": [{ 357 "contexts": ["blessed_extension"], 358 "channel": "stable", 359 "extension_types": ["platform_app", "extension"], 360 "whitelist": [ 361 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Media Router Dev 362 "226CF815E39A363090A1E547D53063472B8279FA", // Media Router Stable 363 "B41E7F08E1179CC03CBD1F49E57CF353A40ADE07", // Chrome Camera App Dev 364 "A3E3DE9E9F16B41D4A2FAD106BD6CA76B94A0C94" // Chrome Camera App Stable 365 ] 366 }, { 367 "contexts": ["blessed_extension"], 368 "dependencies": ["behavior:imprivata_in_session_extension"], 369 "extension_types": ["extension"], 370 "location": "policy", 371 "platforms": ["chromeos"] 372 }], 373 "networking.onc": { 374 "dependencies": ["permission:networking.onc"], 375 "contexts": ["blessed_extension"], 376 "source": "networkingPrivate" 377 }, 378 "networkingPrivate": [{ 379 "dependencies": ["permission:networkingPrivate"], 380 "contexts": ["blessed_extension"], 381 // TODO(tbarzic): networkingPrivate is being renamed to networking.onc. 382 // The goal is to eventually remove networkingPrivate API in favour of 383 // networking.onc, but until current usages are migrated to the new 384 // name, use API aliasing to expose the API under both names. 385 // (http://crbug.com/672186). 386 "alias": "networking.onc" 387 }, { 388 "channel": "stable", 389 "contexts": ["webui"], 390 "matches": [ 391 "chrome://network/*", 392 "chrome://oobe/*", 393 "chrome://internet-config-dialog/*", 394 "chrome://internet-detail-dialog/*", 395 "chrome://os-settings/*" 396 ] 397 }], 398 "power": { 399 "dependencies": ["permission:power"], 400 "contexts": ["blessed_extension"] 401 }, 402 "printerProvider": { 403 "dependencies": ["permission:printerProvider"], 404 "contexts": ["blessed_extension"], 405 "disallow_for_service_workers": true 406 }, 407 "printerProviderInternal": { 408 "internal": true, 409 "dependencies": ["permission:printerProvider"], 410 "contexts": ["blessed_extension"], 411 "disallow_for_service_workers": true 412 }, 413 "runtime": { 414 "channel": "stable", 415 "extension_types": [ 416 "extension", 417 "legacy_packaged_app", 418 "platform_app", 419 "login_screen_extension" 420 ], 421 "contexts": [ 422 "blessed_extension", 423 "lock_screen_extension" 424 ] 425 }, 426 "runtime.getBackgroundPage": { 427 "disallow_for_service_workers": true 428 }, 429 "runtime.getPackageDirectoryEntry": { 430 "disallow_for_service_workers": true 431 }, 432 "runtime.getManifest": { 433 "contexts": [ 434 "blessed_extension", 435 "lock_screen_extension", 436 "unblessed_extension", 437 "content_script" 438 ] 439 }, 440 "runtime.connect": { 441 // Everything except WebUI. 442 "contexts": [ 443 "blessed_web_page", 444 "content_script", 445 "blessed_extension", 446 "lock_screen_extension", 447 "unblessed_extension", 448 "web_page" 449 ], 450 "matches": ["<all_urls>"] 451 }, 452 "runtime.connectNative": { 453 "dependencies": ["permission:nativeMessaging"], 454 "contexts": ["blessed_extension"] 455 }, 456 "runtime.getURL": { 457 "contexts": [ 458 "blessed_extension", 459 "lock_screen_extension", 460 "unblessed_extension", 461 "content_script" 462 ] 463 }, 464 "runtime.id": { 465 "contexts": [ 466 "blessed_extension", 467 "lock_screen_extension", 468 "unblessed_extension", 469 "content_script" 470 ] 471 }, 472 "runtime.lastError": { 473 "contexts": "all", 474 "extension_types": "all", 475 "matches": ["<all_urls>"] 476 }, 477 "runtime.onConnect": { 478 "contexts": [ 479 "blessed_extension", 480 "lock_screen_extension", 481 "unblessed_extension", 482 "content_script" 483 ] 484 }, 485 "runtime.onConnectNative": { 486 "dependencies": ["permission:nativeMessaging"], 487 "contexts": ["blessed_extension"] 488 }, 489 "runtime.onMessage": { 490 "contexts": [ 491 "blessed_extension", 492 "lock_screen_extension", 493 "unblessed_extension", 494 "content_script" 495 ] 496 }, 497 "runtime.sendMessage": [{ 498 // Everything except WebUI. 499 "contexts": [ 500 "blessed_web_page", 501 "content_script", 502 "blessed_extension", 503 "lock_screen_extension", 504 "unblessed_extension", 505 "web_page" 506 ], 507 "matches": ["<all_urls>"] 508 },{ 509 "contexts": ["webui"], 510 "matches": [ 511 "chrome://password-change/*" 512 ] 513 }], 514 "runtime.sendNativeMessage": { 515 "dependencies": ["permission:nativeMessaging"], 516 "contexts": ["blessed_extension"] 517 }, 518 "serial": { 519 "dependencies": ["permission:serial"], 520 "contexts": ["blessed_extension"] 521 }, 522 "socket": { 523 "dependencies": ["permission:socket"], 524 "contexts": ["blessed_extension"] 525 }, 526 "sockets.tcp": { 527 "dependencies": ["manifest:sockets"], 528 "contexts": ["blessed_extension"] 529 }, 530 "sockets.tcpServer": { 531 "dependencies": ["manifest:sockets"], 532 "contexts": ["blessed_extension"] 533 }, 534 "sockets.udp": { 535 "dependencies": ["manifest:sockets"], 536 "contexts": ["blessed_extension"] 537 }, 538 "storage": { 539 "dependencies": ["permission:storage"], 540 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 541 }, 542 "system.cpu": { 543 "dependencies": ["permission:system.cpu"], 544 "contexts": ["blessed_extension"] 545 }, 546 "system.display": [{ 547 "dependencies": ["permission:system.display"], 548 "contexts": ["blessed_extension"], 549 "disallow_for_service_workers": true 550 }, { 551 "channel": "stable", 552 "contexts": ["webui"], 553 "matches": [ 554 "chrome://os-settings/*" 555 ] 556 }], 557 "system.memory": { 558 "dependencies": ["permission:system.memory"], 559 "contexts": ["blessed_extension"] 560 }, 561 "system.network": { 562 "dependencies": ["permission:system.network"], 563 "contexts": ["blessed_extension"] 564 }, 565 "system.powerSource": { 566 "dependencies": ["permission:system.powerSource"], 567 "contexts": ["blessed_extension"] 568 }, 569 "system.storage": { 570 "dependencies": ["permission:system.storage"], 571 "contexts": ["blessed_extension"] 572 }, 573 "system.storage.getAvailableCapacity": { 574 "channel": "dev" 575 }, 576 "test": [{ 577 "channel": "stable", 578 "extension_types": "all", 579 // Everything except web pages and WebUI. WebUI is declared in a separate 580 // rule to keep the "matches" property isolated. 581 "contexts": [ 582 "blessed_extension", 583 "blessed_web_page", 584 "content_script", 585 "lock_screen_extension", 586 "unblessed_extension" 587 ] 588 }, { 589 "channel": "stable", 590 "contexts": ["webui"], 591 "matches": ["chrome://extensions/*"] 592 }, { 593 "channel": "stable", 594 "contexts": [ "webui_untrusted" ], 595 "matches": [ "chrome-untrusted://api-test/*" ] 596 }], 597 "types": { 598 "internal": true, 599 "channel": "stable", 600 "extension_types": ["extension", "legacy_packaged_app", "platform_app"], 601 "contexts": ["blessed_extension"] 602 }, 603 "usb": { 604 "dependencies": ["permission:usb"], 605 "contexts": ["blessed_extension"] 606 }, 607 "virtualKeyboard": { 608 "dependencies": ["permission:virtualKeyboard"], 609 "contexts": ["blessed_extension"] 610 }, 611 "vpnProvider": { 612 "dependencies": ["permission:vpnProvider"], 613 "contexts": ["blessed_extension"] 614 }, 615 "webRequest": { 616 "dependencies": ["permission:webRequest"], 617 "contexts": ["blessed_extension"] 618 }, 619 "webRequestInternal": [{ 620 "internal": true, 621 "channel": "stable", 622 "contexts": ["blessed_extension"] 623 }, { 624 // webview uses webRequestInternal API. 625 "channel": "stable", 626 "internal": true, 627 "contexts": ["webui"], 628 "matches": [ 629 "chrome://add-supervision/*", 630 "chrome://assistant-optin/*", 631 "chrome://cellular-setup/*", 632 "chrome://chrome-signin/*", 633 "chrome://discards/*", 634 "chrome://hats/*", 635 "chrome://home/*", 636 "chrome://mobilesetup/*", 637 "chrome://oobe/*", 638 "chrome://password-change/*", 639 "chrome://lock-reauth/*" 640 ] 641 }], 642 "webViewInternal": [{ 643 "internal": true, 644 "dependencies": ["permission:webview"], 645 "contexts": ["blessed_extension"] 646 }, { 647 "internal": true, 648 "channel": "stable", 649 "contexts": ["webui"], 650 "matches": [ 651 "chrome://add-supervision/*", 652 "chrome://assistant-optin/*", 653 "chrome://cellular-setup/*", 654 "chrome://chrome-signin/*", 655 "chrome://discards/*", 656 "chrome://hats/*", 657 "chrome://home/*", 658 "chrome://mobilesetup/*", 659 "chrome://oobe/*", 660 "chrome://password-change/*", 661 "chrome://lock-reauth/*" 662 ] 663 }], 664 "webViewRequest": [{ 665 "dependencies": ["permission:webview"], 666 "contexts": ["blessed_extension"] 667 }, { 668 "channel": "stable", 669 "contexts": ["webui"], 670 "matches": [ 671 "chrome://add-supervision/*", 672 "chrome://assistant-optin/*", 673 "chrome://cellular-setup/*", 674 "chrome://chrome-signin/*", 675 "chrome://discards/*", 676 "chrome://hats/*", 677 "chrome://home/*", 678 "chrome://mobilesetup/*", 679 "chrome://oobe/*" 680 ] 681 }] 682} 683