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. 4 5 // This features file defines extension APIs implemented under src/chrome. 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 "accessibilityFeatures": [{ 23 "dependencies": ["permission:accessibilityFeatures.modify"], 24 "contexts": ["blessed_extension"] 25 }, { 26 "dependencies": ["permission:accessibilityFeatures.read"], 27 "contexts": ["blessed_extension"] 28 }], 29 "accessibilityPrivate": { 30 "dependencies": ["permission:accessibilityPrivate"], 31 "contexts": ["blessed_extension"] 32 }, 33 "activityLogPrivate": { 34 "dependencies": ["permission:activityLogPrivate"], 35 "contexts": ["blessed_extension"] 36 }, 37 "alarms": { 38 "dependencies": ["permission:alarms"], 39 "contexts": ["blessed_extension"] 40 }, 41 "app": { 42 "blacklist": [ 43 "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice 44 "3727DD3E564B6055387425027AD74C58784ACC15", // Quickoffice internal 45 "12E618C3C6E97495AAECF2AC12DEB082353241C6" // QO component extension 46 ], 47 "channel": "stable", 48 "extension_types": ["hosted_app", "extension", "legacy_packaged_app"], 49 "contexts": [ 50 "blessed_extension", 51 "unblessed_extension", 52 "content_script", 53 "web_page", 54 "blessed_web_page" 55 ], 56 // Any webpage can use the app API. 57 "matches": ["<all_urls>"] 58 }, 59 // The API for the *embedder* of appview. Appview has both an embedder and 60 // guest API, which are different. 61 "appViewEmbedderInternal": { 62 "internal": true, 63 "contexts": ["blessed_extension"], 64 "dependencies": ["permission:appview"] 65 }, 66 // TODO(fsamuel,kalman): Rename this appViewGuestInternal. 67 "appViewInternal": { 68 "internal": true, 69 "channel": "dev", 70 "contexts": ["blessed_extension"] 71 }, 72 "app.getDetails": { 73 "contexts": ["blessed_extension", "unblessed_extension", "content_script"], 74 "matches": [] 75 }, 76 "app.getDetailsForFrame": { 77 "contexts": ["blessed_extension", "unblessed_extension", "content_script"], 78 "matches": [] 79 }, 80 "app.getIsInstalled": { 81 "contexts": ["blessed_extension", "unblessed_extension", "content_script"], 82 "matches": [] 83 }, 84 "app.installState": { 85 "contexts": ["blessed_extension", "unblessed_extension", "content_script"], 86 "matches": [] 87 }, 88 "app.runningState": { 89 "contexts": ["blessed_extension", "unblessed_extension", "content_script"], 90 "matches": [] 91 }, 92 "audio": { 93 "dependencies": ["permission:audio"], 94 "contexts": ["blessed_extension"] 95 }, 96 "automationInternal": { 97 "internal": true, 98 "dependencies": ["manifest:automation"], 99 "contexts": ["blessed_extension"] 100 }, 101 "automation": { 102 "dependencies": ["manifest:automation"], 103 "contexts": ["blessed_extension"] 104 }, 105 "autotestPrivate": { 106 "dependencies": ["permission:autotestPrivate"], 107 "contexts": ["blessed_extension"] 108 }, 109 "bluetooth": { 110 "dependencies": ["manifest:bluetooth"], 111 "contexts": ["blessed_extension"] 112 }, 113 "bluetoothLowEnergy": { 114 "dependencies": ["manifest:bluetooth"], 115 "contexts": ["blessed_extension"] 116 }, 117 "bluetoothPrivate": { 118 "dependencies": ["permission:bluetoothPrivate"], 119 "contexts": ["blessed_extension"] 120 }, 121 "bluetoothSocket": { 122 "dependencies": ["manifest:bluetooth"], 123 "contexts": ["blessed_extension"] 124 }, 125 "bookmarkManagerPrivate": { 126 "dependencies": ["permission:bookmarkManagerPrivate"], 127 "contexts": ["blessed_extension"] 128 }, 129 "bookmarks": { 130 "dependencies": ["permission:bookmarks"], 131 "contexts": ["blessed_extension"] 132 }, 133 "bookmarks.export": { 134 "extension_types": ["extension"], 135 "location": "component" 136 }, 137 "bookmarks.import": { 138 "extension_types": ["extension"], 139 "location": "component" 140 }, 141 "brailleDisplayPrivate": { 142 "dependencies": ["permission:brailleDisplayPrivate"], 143 "contexts": ["blessed_extension"] 144 }, 145 "browser": { 146 "dependencies": ["permission:browser"], 147 "contexts": ["blessed_extension"] 148 }, 149 "browserAction": { 150 "dependencies": ["manifest:browser_action"], 151 "contexts": ["blessed_extension"] 152 }, 153 // This API is whitelisted on stable and should not be enabled for a wider 154 // audience without resolving security issues raised in API proposal and 155 // review (https://codereview.chromium.org/25305002). 156 "browserAction.openPopup": [{ 157 "channel": "dev", 158 "dependencies": ["manifest:browser_action"], 159 "contexts": ["blessed_extension"] 160 }, { 161 "channel": "stable", 162 "dependencies": ["manifest:browser_action"], 163 "whitelist": [ 164 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev 165 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta 166 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary 167 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta 168 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264" // Google Cast Stable 169 ], 170 "contexts": ["blessed_extension"] 171 }], 172 "browsingData": { 173 "dependencies": ["permission:browsingData"], 174 "contexts": ["blessed_extension"] 175 }, 176 "cast.channel": { 177 "dependencies": ["permission:cast"], 178 "contexts": ["blessed_extension"] 179 }, 180 "cast.streaming.rtpStream": { 181 "dependencies": ["permission:cast.streaming"], 182 "contexts": ["blessed_extension"] 183 }, 184 "cast.streaming.session": { 185 "dependencies": ["permission:cast.streaming"], 186 "contexts": ["blessed_extension"] 187 }, 188 "cast.streaming.udpTransport": { 189 "dependencies": ["permission:cast.streaming"], 190 "contexts": ["blessed_extension"] 191 }, 192 "chromeosInfoPrivate": { 193 "dependencies": ["permission:chromeosInfoPrivate"], 194 "contexts": ["blessed_extension"] 195 }, 196 "chromeWebViewInternal": [{ 197 "internal": true, 198 "dependencies": ["permission:webview"], 199 "contexts": ["blessed_extension"] 200 }, { 201 "internal": true, 202 "channel": "dev", 203 "contexts": ["webui"], 204 "matches": ["chrome://chrome-signin/*"] 205 }], 206 "cloudPrintPrivate": { 207 "dependencies": ["permission:cloudPrintPrivate"], 208 "contexts": ["blessed_extension"] 209 }, 210 "commandLinePrivate": { 211 "dependencies": ["permission:commandLinePrivate"], 212 "contexts": ["blessed_extension"] 213 }, 214 "commands": { 215 "dependencies": ["manifest:commands"], 216 "contexts": ["blessed_extension"] 217 }, 218 "contentSettings": { 219 "dependencies": ["permission:contentSettings"], 220 "contexts": ["blessed_extension"] 221 }, 222 "contextMenus": { 223 "dependencies": ["permission:contextMenus"], 224 "contexts": ["blessed_extension"] 225 }, 226 "contextMenusInternal": { 227 "internal": true, 228 "channel": "stable", 229 "contexts": ["blessed_extension"] 230 }, 231 "cookies": { 232 "dependencies": ["permission:cookies"], 233 "contexts": ["blessed_extension"] 234 }, 235 "copresence": { 236 "dependencies": ["permission:copresence"], 237 "contexts": ["blessed_extension"] 238 }, 239 "copresencePrivate": { 240 "dependencies": ["permission:copresencePrivate"], 241 "contexts": ["blessed_extension"] 242 }, 243 "debugger": { 244 "dependencies": ["permission:debugger"], 245 "contexts": ["blessed_extension"] 246 }, 247 "declarativeContent": { 248 "dependencies": ["permission:declarativeContent"], 249 "contexts": ["blessed_extension"] 250 }, 251 "declarativeWebRequest": { 252 "dependencies": ["permission:declarativeWebRequest"], 253 "contexts": ["blessed_extension"] 254 }, 255 "desktopCapture": { 256 "dependencies": ["permission:desktopCapture"], 257 "contexts": ["blessed_extension"] 258 }, 259 "developerPrivate": { 260 "dependencies": ["permission:developerPrivate"], 261 "contexts": ["blessed_extension"] 262 }, 263 "devtools.inspectedWindow": { 264 "dependencies": ["manifest:devtools_page"], 265 "contexts": ["blessed_extension"] 266 }, 267 "devtools.network": { 268 "dependencies": ["manifest:devtools_page"], 269 "contexts": ["blessed_extension"] 270 }, 271 "devtools.panels": { 272 "dependencies": ["manifest:devtools_page"], 273 "contexts": ["blessed_extension"] 274 }, 275 "diagnostics": { 276 "dependencies": ["permission:diagnostics"], 277 "extension_types": ["platform_app"], 278 "contexts": ["blessed_extension"] 279 }, 280 "dial": { 281 "dependencies": ["permission:dial"], 282 "contexts": ["blessed_extension"] 283 }, 284 "downloads": { 285 "dependencies": ["permission:downloads"], 286 "contexts": ["blessed_extension"] 287 }, 288 "downloadsInternal": { 289 "internal": true, 290 "channel": "stable", 291 "contexts": ["blessed_extension"] 292 }, 293 "easyUnlockPrivate": { 294 "dependencies": ["permission:easyUnlockPrivate"], 295 "contexts": ["blessed_extension"] 296 }, 297 "echoPrivate": { 298 "dependencies": ["permission:echoPrivate"], 299 "contexts": ["blessed_extension"] 300 }, 301 "enterprise.platformKeys": { 302 "dependencies": ["permission:enterprise.platformKeys"], 303 "contexts": ["blessed_extension"] 304 }, 305 "enterprise.platformKeysInternal": { 306 "dependencies": ["permission:enterprise.platformKeys"], 307 "internal": true, 308 "contexts": ["blessed_extension"] 309 }, 310 "enterprise.platformKeysPrivate": { 311 "dependencies": ["permission:enterprise.platformKeysPrivate"], 312 "contexts": ["blessed_extension"] 313 }, 314 "events": { 315 "internal": true, 316 "channel": "stable", 317 "extension_types": ["platform_app", "extension"], 318 "contexts": "all", 319 "matches": ["<all_urls>"] 320 }, 321 "experienceSamplingPrivate": { 322 "dependencies": ["permission:experienceSamplingPrivate"], 323 "contexts": ["blessed_extension"] 324 }, 325 "experimental.devtools.audits": { 326 "dependencies": ["permission:experimental", "manifest:devtools_page"], 327 "contexts": ["blessed_extension"] 328 }, 329 "experimental.devtools.console": { 330 "dependencies": ["permission:experimental", "manifest:devtools_page"], 331 "contexts": ["blessed_extension"] 332 }, 333 "extension": { 334 "channel": "stable", 335 "extension_types": ["extension", "legacy_packaged_app"], 336 "contexts": ["blessed_extension"] 337 }, 338 "extension.getURL": { 339 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 340 }, 341 "extension.getViews": [ 342 { 343 "channel": "stable", 344 "contexts": ["blessed_extension"], 345 "extension_types": ["extension", "legacy_packaged_app"] 346 }, 347 { 348 // TODO(yoz): Eliminate this usage. 349 "channel": "stable", 350 "contexts": ["blessed_extension"], 351 "extension_types": ["platform_app"], 352 "whitelist": [ 353 "A948368FC53BE437A55FEB414106E207925482F5" // File manager 354 ] 355 } 356 ], 357 "extension.inIncognitoContext": { 358 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 359 }, 360 "extension.lastError": { 361 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 362 }, 363 "extension.onRequest": { 364 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 365 }, 366 "extension.sendNativeMessage": { 367 "dependencies": ["permission:nativeMessaging"] 368 }, 369 "extension.sendRequest": { 370 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 371 }, 372 "extensionOptionsInternal": [{ 373 "internal": true, 374 "contexts": ["blessed_extension"], 375 "dependencies": ["permission:embeddedExtensionOptions"] 376 }, { 377 "internal": true, 378 "channel": "trunk", 379 "contexts": ["webui"], 380 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"] 381 }], 382 // This is not a real API, only here for documentation purposes. 383 // See http://crbug.com/275944 for background. 384 "extensionsManifestTypes": { 385 "internal": true, 386 "channel": "stable", 387 "contexts": ["blessed_extension"] 388 }, 389 "feedbackPrivate": { 390 "dependencies": ["permission:feedbackPrivate"], 391 "contexts": ["blessed_extension"] 392 }, 393 "fileBrowserHandler": { 394 "dependencies": ["permission:fileBrowserHandler"], 395 "contexts": ["blessed_extension"] 396 }, 397 "fileBrowserHandlerInternal": { 398 "internal": true, 399 "dependencies": ["permission:fileBrowserHandler"], 400 "contexts": ["blessed_extension"] 401 }, 402 "screenlockPrivate": { 403 "dependencies": ["permission:screenlockPrivate"], 404 "extension_types": ["platform_app"], 405 "contexts": ["blessed_extension", "unblessed_extension"] 406 }, 407 "fileManagerPrivate": { 408 "dependencies": ["permission:fileManagerPrivate"], 409 "contexts": ["blessed_extension"] 410 }, 411 "fileManagerPrivateInternal": { 412 "internal": true, 413 "dependencies": ["permission:fileManagerPrivate"], 414 "contexts": ["blessed_extension"] 415 }, 416 "fileSystem": { 417 "dependencies": ["permission:fileSystem"], 418 "contexts": ["blessed_extension"] 419 }, 420 "fileSystemProvider": { 421 "dependencies": ["permission:fileSystemProvider"], 422 "contexts": ["blessed_extension"] 423 }, 424 "fileSystemProviderInternal": { 425 "internal": true, 426 "dependencies": ["permission:fileSystemProvider"], 427 "contexts": ["blessed_extension"] 428 }, 429 "firstRunPrivate": { 430 "dependencies": ["permission:firstRunPrivate"], 431 "contexts": ["blessed_extension"] 432 }, 433 "fontSettings": { 434 "dependencies": ["permission:fontSettings"], 435 "contexts": ["blessed_extension"] 436 }, 437 "gcdPrivate": { 438 "dependencies": ["permission:gcdPrivate"], 439 "contexts": ["blessed_extension"] 440 }, 441 "gcm": { 442 "dependencies": ["permission:gcm"], 443 "contexts": ["blessed_extension"] 444 }, 445 "hangoutsPrivate": { 446 "channel": "stable", 447 "contexts": ["blessed_extension"], 448 "whitelist": [ 449 // http://crbug.com/309737 450 "nckgahadagoaajjgafhacjanaoiihapd", 451 "ljclpkphhpbpinifbeabbhlfddcpfdde", 452 "ppleadejekpmccmnpjdimmlfljlkdfej", 453 "eggnbpckecmjlblplehfpjjdhhidfdoj", 454 "jfjjdfefebklmdbmenmlehlopoocnoeh", 455 "knipolnnllmklapflnccelgolnpehhpl" 456 ] 457 }, 458 "history": { 459 "dependencies": ["permission:history"], 460 "contexts": ["blessed_extension"] 461 }, 462 "hotwordPrivate": { 463 "dependencies": ["permission:hotwordPrivate"], 464 "contexts": ["blessed_extension"] 465 }, 466 "i18n": { 467 "channel": "stable", 468 "extension_types": ["extension", "legacy_packaged_app", "platform_app"], 469 "contexts": ["blessed_extension", "unblessed_extension", "content_script"] 470 }, 471 "identity": { 472 "dependencies": ["permission:identity"], 473 "contexts": ["blessed_extension"] 474 }, 475 "identity.getAccounts": { 476 "channel": "dev", 477 "dependencies": ["permission:identity"], 478 "contexts": ["blessed_extension"] 479 }, 480 "identityPrivate": { 481 "dependencies": ["permission:identityPrivate"], 482 "contexts": ["blessed_extension"] 483 }, 484 "idltest": { 485 "dependencies": ["permission:idltest"], 486 "contexts": ["blessed_extension"] 487 }, 488 "idle": { 489 "dependencies": ["permission:idle"], 490 "contexts": ["blessed_extension"] 491 }, 492 "infobars": { 493 "dependencies": ["permission:infobars"], 494 "contexts": ["blessed_extension"] 495 }, 496 "input.ime": { 497 "dependencies": ["permission:input"], 498 "contexts": ["blessed_extension"] 499 }, 500 "inputMethodPrivate": { 501 "dependencies": ["permission:inputMethodPrivate"], 502 "contexts": ["blessed_extension"] 503 }, 504 "location": { 505 "dependencies": ["permission:location"], 506 "contexts": ["blessed_extension"] 507 }, 508 "logPrivate": { 509 "dependencies": ["permission:logPrivate"], 510 "contexts": ["blessed_extension"] 511 }, 512 "webcamPrivate": { 513 "dependencies": ["permission:webcamPrivate"], 514 "contexts": ["blessed_extension"] 515 }, 516 "management": { 517 "dependencies": ["permission:management"], 518 "contexts": ["blessed_extension"] 519 }, 520 "management.getPermissionWarningsByManifest": { 521 "dependencies": [], 522 "channel": "stable", 523 "extension_types": ["extension", "legacy_packaged_app", "platform_app"] 524 }, 525 "management.getSelf": { 526 "dependencies": [], 527 "channel": "stable", 528 "extension_types": ["extension", "legacy_packaged_app", "platform_app"] 529 }, 530 "management.uninstallSelf": { 531 "dependencies": [], 532 "channel": "stable", 533 "extension_types": ["extension", "legacy_packaged_app", "platform_app"] 534 }, 535 // This is not a real API, only here for documentation purposes. 536 // See http://crbug.com/275944 for background. 537 "manifestTypes": { 538 "internal": true, 539 "channel": "stable", 540 "contexts": ["blessed_extension"] 541 }, 542 "mediaGalleries": { 543 "dependencies": ["permission:mediaGalleries"], 544 "contexts": ["blessed_extension"] 545 }, 546 "mediaGalleriesPrivate": { 547 "dependencies": ["permission:mediaGalleriesPrivate"], 548 "contexts": ["blessed_extension"] 549 }, 550 "mediaPlayerPrivate": { 551 "dependencies": ["permission:mediaPlayerPrivate"], 552 "contexts": ["blessed_extension"] 553 }, 554 "metricsPrivate": { 555 "dependencies": ["permission:metricsPrivate"], 556 "contexts": ["blessed_extension"] 557 }, 558 "mdns": { 559 "dependencies": ["permission:mdns"], 560 "contexts": ["blessed_extension"] 561 }, 562 "mimeHandlerViewGuestInternal": { 563 "internal": true, 564 "contexts": "all", 565 "channel": "dev", 566 "matches": ["<all_urls>"] 567 }, 568 "musicManagerPrivate": { 569 "dependencies": ["permission:musicManagerPrivate"], 570 "contexts": ["blessed_extension"] 571 }, 572 "networkingPrivate": { 573 "dependencies": ["permission:networkingPrivate"], 574 "contexts": ["blessed_extension"] 575 }, 576 "notificationProvider": { 577 "dependencies": ["permission:notificationProvider"], 578 "contexts": ["blessed_extension"] 579 }, 580 "notifications": { 581 "dependencies": ["permission:notifications"], 582 "contexts": ["blessed_extension"] 583 }, 584 "omnibox": { 585 "dependencies": ["manifest:omnibox"], 586 "contexts": ["blessed_extension"] 587 }, 588 "pageAction": { 589 "dependencies": ["manifest:page_action"], 590 "contexts": ["blessed_extension"] 591 }, 592 "pageActions": { 593 "dependencies": ["manifest:page_actions"], 594 "contexts": ["blessed_extension"] 595 }, 596 "pageCapture": { 597 "dependencies": ["permission:pageCapture"], 598 "contexts": ["blessed_extension"] 599 }, 600 "permissions": { 601 "channel": "stable", 602 "extension_types": ["extension", "legacy_packaged_app", "platform_app"], 603 "contexts": ["blessed_extension"] 604 }, 605 "preferencesPrivate": { 606 "dependencies": ["permission:preferencesPrivate"], 607 "contexts": ["blessed_extension"] 608 }, 609 "principalsPrivate": { 610 "dependencies": ["permission:principalsPrivate"], 611 "contexts": ["blessed_extension"] 612 }, 613 "privacy": { 614 "dependencies": ["permission:privacy"], 615 "contexts": ["blessed_extension"] 616 }, 617 "processes": { 618 "dependencies": ["permission:processes"], 619 "contexts": ["blessed_extension"] 620 }, 621 "proxy": { 622 "dependencies": ["permission:proxy"], 623 "contexts": ["blessed_extension"] 624 }, 625 "pushMessaging": { 626 "dependencies": ["permission:pushMessaging"], 627 "contexts": ["blessed_extension"] 628 }, 629 "imageWriterPrivate": { 630 "dependencies": ["permission:imageWriterPrivate"], 631 "extension_types": ["platform_app"], 632 "contexts": ["blessed_extension"] 633 }, 634 "readingListPrivate": { 635 "dependencies": ["permission:readingListPrivate"], 636 "contexts": ["blessed_extension"] 637 }, 638 "rtcPrivate": { 639 "dependencies": ["permission:rtcPrivate"], 640 "contexts": ["blessed_extension"] 641 }, 642 "scriptBadge": { 643 "dependencies": ["manifest:script_badge"], 644 "contexts": ["blessed_extension"] 645 }, 646 "sessions": { 647 "dependencies": ["permission:sessions"], 648 "contexts": ["blessed_extension"] 649 }, 650 "signedInDevices": { 651 "dependencies": ["permission:signedInDevices"], 652 "contexts": ["blessed_extension"] 653 }, 654 "streamsPrivate": { 655 "dependencies": ["permission:streamsPrivate"], 656 "contexts": ["blessed_extension"] 657 }, 658 "syncFileSystem": { 659 "dependencies": ["permission:syncFileSystem"], 660 "contexts": ["blessed_extension"] 661 }, 662 "syncedNotificationsPrivate": { 663 "contexts": ["blessed_extension"], 664 "dependencies": ["permission:syncedNotificationsPrivate"] 665 }, 666 "systemIndicator": { 667 "dependencies": ["manifest:system_indicator"], 668 "contexts": ["blessed_extension"] 669 }, 670 "systemPrivate": { 671 "dependencies": ["permission:systemPrivate"], 672 "contexts": ["blessed_extension"] 673 }, 674 "tabCapture": { 675 "dependencies": ["permission:tabCapture"], 676 "contexts": ["blessed_extension"] 677 }, 678 "tabs": { 679 "channel": "stable", 680 "extension_types": ["extension", "legacy_packaged_app"], 681 "contexts": ["blessed_extension"] 682 }, 683 "tabs.setZoom": { 684 "channel": "dev" 685 }, 686 "tabs.getZoom": { 687 "channel": "dev" 688 }, 689 "tabs.setZoomSettings": { 690 "channel": "dev" 691 }, 692 "tabs.getZoomSettings": { 693 "channel": "dev" 694 }, 695 "terminalPrivate": { 696 "dependencies": ["permission:terminalPrivate"], 697 "contexts": ["blessed_extension"] 698 }, 699 "topSites": { 700 "dependencies": ["permission:topSites"], 701 "contexts": ["blessed_extension"] 702 }, 703 "tts": { 704 "dependencies": ["permission:tts"], 705 "contexts": ["blessed_extension"] 706 }, 707 "ttsEngine": { 708 "dependencies": ["permission:ttsEngine"], 709 "contexts": ["blessed_extension"] 710 }, 711 "virtualKeyboardPrivate": { 712 "dependencies": ["permission:virtualKeyboardPrivate"], 713 "contexts": ["blessed_extension"] 714 }, 715 "wallpaper": { 716 "dependencies": ["permission:wallpaper"], 717 "contexts": ["blessed_extension"] 718 }, 719 "wallpaperPrivate": { 720 "dependencies": ["permission:wallpaperPrivate"], 721 "contexts": ["blessed_extension"] 722 }, 723 "webNavigation": { 724 "dependencies": ["permission:webNavigation"], 725 "contexts": ["blessed_extension"] 726 }, 727 "webRequest": { 728 "dependencies": ["permission:webRequest"], 729 "contexts": ["blessed_extension"] 730 }, 731 "webRequestInternal": [{ 732 "internal": true, 733 "channel": "stable", 734 "contexts": ["blessed_extension"] 735 }, { 736 // webview uses webRequestInternal API. 737 "channel": "stable", 738 "internal": true, 739 "contexts": ["webui"], 740 "matches": ["chrome://chrome-signin/*"] 741 }], 742 "webrtcAudioPrivate": { 743 "dependencies": ["permission:webrtcAudioPrivate"], 744 "contexts": ["blessed_extension"] 745 }, 746 "webrtcLoggingPrivate": { 747 "dependencies": ["permission:webrtcLoggingPrivate"], 748 "contexts": ["blessed_extension"] 749 }, 750 "webstore": { 751 // Hosted apps can use the webstore API from within a blessed context. 752 "channel": "stable", 753 // Set extension_types to 'all' to prevent webstore from being filtered. 754 // Technically, webstore is not in apps or extensions, but it is currently 755 // displayed on /extensions/webstore and /apps/webstore. The "contexts" 756 // restriction effectively restricts this to hosted apps and webpages. 757 "extension_types": "all", 758 "contexts": ["blessed_web_page", "web_page"], 759 // Any webpage can use the webstore API. 760 "matches": ["<all_urls>"] 761 }, 762 "webstorePrivate": { 763 "dependencies": ["permission:webstorePrivate"], 764 // NOTE: even though this is only used by the webstore hosted app, which 765 // normally would mean blessed_web_page, component hosted apps are actually 766 // given the blessed_extension denomination. Confusing. 767 "contexts": ["blessed_extension"] 768 }, 769 "webViewRequest": [{ 770 "dependencies": ["permission:webview"], 771 "contexts": ["blessed_extension"] 772 }, { 773 "channel": "stable", 774 "contexts": ["webui"], 775 "matches": ["chrome://chrome-signin/*"] 776 }], 777 "webviewTag": { 778 "internal": true, 779 "channel": "stable", 780 "dependencies": ["permission:webview"], 781 "contexts": ["blessed_extension"] 782 }, 783 "windows": { 784 "dependencies": ["api:tabs"], 785 "contexts": ["blessed_extension"] 786 } 787 } 788