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.
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.
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.
12 // To add a new whitelisted ID, SHA-1 it and force it to uppercase. In Bash:
14 // $ echo -n "aaaabbbbccccddddeeeeffffgggghhhh" | \
15 // sha1sum | tr '[:lower:]' '[:upper:]'
16 // 9A0417016F345C934A1A88F55CA17C05014EEEBA -
18 // Google employees: please update http://go/chrome-api-whitelist to map
19 // hashes back to ids.
22 "accessibilityFeatures": [{
23 "dependencies": ["permission:accessibilityFeatures.modify"],
24 "contexts": ["blessed_extension"]
26 "dependencies": ["permission:accessibilityFeatures.read"],
27 "contexts": ["blessed_extension"]
29 "accessibilityPrivate": {
30 "dependencies": ["permission:accessibilityPrivate"],
31 "contexts": ["blessed_extension"]
33 "activityLogPrivate": {
34 "dependencies": ["permission:activityLogPrivate"],
35 "contexts": ["blessed_extension"]
39 "2FC374607C2DF285634B67C64A2E356C607091C3", // Quickoffice
40 "3727DD3E564B6055387425027AD74C58784ACC15", // Quickoffice internal
41 "12E618C3C6E97495AAECF2AC12DEB082353241C6", // QO component extension
42 "06BE211D5F014BAB34BC22D9DDA09C63A81D828E", // Official xkb extension
43 "F94EE6AB36D6C6588670B2B01EB65212D9C64E33", // Open source xkb extension
44 "B9EF10DDFEA11EF77873CC5009809E5037FC4C7A" // Google input tools
47 "extension_types": ["hosted_app", "extension", "legacy_packaged_app"],
50 "unblessed_extension",
55 // Any webpage can use the app API.
56 "matches": ["<all_urls>"]
59 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
62 "app.getIsInstalled": {
63 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
67 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
71 "contexts": ["blessed_extension", "unblessed_extension", "content_script"],
76 "dependencies": ["permission:appview"],
77 "contexts": ["blessed_extension"]
80 "dependencies": ["permission:audioModem"],
81 "contexts": ["blessed_extension"]
84 "dependencies": ["permission:autofillPrivate"],
85 "contexts": ["blessed_extension"]
88 "contexts": ["webui"],
90 "chrome://md-settings/*",
91 "chrome://settings/*",
92 "chrome://settings-frame/*"
95 "automationInternal": {
97 "dependencies": ["manifest:automation"],
98 "contexts": ["blessed_extension"]
101 "dependencies": ["manifest:automation"],
102 "contexts": ["blessed_extension"]
105 "dependencies": ["permission:autotestPrivate"],
106 "contexts": ["blessed_extension"]
108 "bookmarkManagerPrivate": {
109 "dependencies": ["permission:bookmarkManagerPrivate"],
110 "contexts": ["blessed_extension"]
113 "dependencies": ["permission:bookmarks"],
114 "contexts": ["blessed_extension"]
116 "bookmarks.export": {
118 "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
119 "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
120 "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9" // http://crbug.com/371562
123 "bookmarks.import": {
125 "D5736E4B5CF695CB93A2FB57E4FDC6E5AFAB6FE2", // http://crbug.com/312900
126 "D57DE394F36DC1C3220E7604C575D29C51A6C495", // http://crbug.com/319444
127 "3F65507A3B39259B38C8173C6FFA3D12DF64CCE9" // http://crbug.com/371562
130 "brailleDisplayPrivate": {
131 "dependencies": ["permission:brailleDisplayPrivate"],
132 "contexts": ["blessed_extension"]
135 "dependencies": ["permission:browser"],
136 "contexts": ["blessed_extension"]
139 "dependencies": ["manifest:browser_action"],
140 "contexts": ["blessed_extension"]
142 // This API is whitelisted on stable and should not be enabled for a wider
143 // audience without resolving security issues raised in API proposal and
144 // review (https://codereview.chromium.org/25305002).
145 "browserAction.openPopup": [{
147 "dependencies": ["manifest:browser_action"],
148 "contexts": ["blessed_extension"]
151 "dependencies": ["manifest:browser_action"],
153 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
154 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
155 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
156 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
157 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264", // Google Cast Stable
158 // The extensions below here only use openPopup on a user action,
159 // so are safe, and can be removed when the whitelist on that
160 // capability is lifted. See crbug.com/436489 for context.
161 "A4577D8C2AF4CF26F40CBCA83FFA4251D6F6C8F8", // http://crbug.com/497301
162 "A8208CCC87F8261AFAEB6B85D5E8D47372DDEA6B", // http://crbug.com/497301
163 "EFCF5358672FEE04789FD2EC3638A67ADEDB6C8C" // http://crbug.com/514696
165 "contexts": ["blessed_extension"]
168 "dependencies": ["permission:browsingData"],
169 "contexts": ["blessed_extension"]
172 "dependencies": ["permission:cast"],
173 "contexts": ["blessed_extension"]
175 "cast.devicesPrivate": {
176 "dependencies": ["permission:cast"],
177 "contexts": ["blessed_extension"],
178 "platforms": ["chromeos"]
180 "cast.streaming.rtpStream": {
181 "dependencies": ["permission:cast.streaming"],
182 "contexts": ["blessed_extension"]
184 "cast.streaming.receiverSession": {
185 "dependencies": ["permission:cast.streaming"],
186 "contexts": ["blessed_extension"]
188 "cast.streaming.session": {
189 "dependencies": ["permission:cast.streaming"],
190 "contexts": ["blessed_extension"]
192 "cast.streaming.udpTransport": {
193 "dependencies": ["permission:cast.streaming"],
194 "contexts": ["blessed_extension"]
196 "certificateProvider": {
197 "dependencies": ["permission:certificateProvider"],
198 "contexts": ["blessed_extension"]
200 "certificateProviderInternal": {
202 "dependencies": ["permission:certificateProvider"],
203 "contexts": ["blessed_extension"]
205 "chromeosInfoPrivate": {
206 "dependencies": ["permission:chromeosInfoPrivate"],
207 "contexts": ["blessed_extension"]
209 "chromeWebViewInternal": [{
211 "dependencies": ["permission:webview"],
212 "contexts": ["blessed_extension"]
216 "contexts": ["webui"],
218 "chrome://chrome-signin/*",
219 "chrome://media-router/*",
223 "cloudPrintPrivate": {
224 "dependencies": ["permission:cloudPrintPrivate"],
225 "contexts": ["blessed_extension"]
227 "commandLinePrivate": {
228 "dependencies": ["permission:commandLinePrivate"],
229 "contexts": ["blessed_extension"]
232 "dependencies": ["manifest:commands"],
233 "contexts": ["blessed_extension"]
236 "dependencies": ["permission:contentSettings"],
237 "contexts": ["blessed_extension"]
240 "dependencies": ["permission:contextMenus"],
241 "contexts": ["blessed_extension"]
243 "contextMenusInternal": {
246 "contexts": ["blessed_extension"]
249 "dependencies": ["permission:cookies"],
250 "contexts": ["blessed_extension"]
253 "dependencies": ["permission:copresence"],
254 "contexts": ["blessed_extension"]
256 "copresencePrivate": {
257 "dependencies": ["permission:copresencePrivate"],
258 "contexts": ["blessed_extension"]
260 "cryptotokenPrivate": {
261 "dependencies": ["permission:cryptotokenPrivate"],
262 "contexts": ["blessed_extension"]
264 "dashboardPrivate": [{
266 "contexts": ["blessed_web_page", "web_page"],
267 "matches": ["https://chrome.google.com/*"]
270 "contexts": ["blessed_extension"],
272 "B44D08FD98F1523ED5837D78D0A606EA9D6206E5" // Web Store
275 "dataReductionProxy": {
276 "dependencies": ["permission:dataReductionProxy"],
277 "contexts": ["blessed_extension"]
280 "dependencies": ["permission:debugger"],
281 "contexts": ["blessed_extension"]
283 "declarativeContent": {
284 "dependencies": ["permission:declarativeContent"],
285 "contexts": ["blessed_extension"]
288 "dependencies": ["permission:desktopCapture"],
289 "contexts": ["blessed_extension"]
291 "dependencies": ["permission:desktopCapturePrivate"],
293 "63ED55E43214C211F82122ED56407FF1A807F2A3", // Dev
294 "FA01E0B81978950F2BC5A50512FD769725F57510", // Beta
295 "B11A93E7E5B541F8010245EBDE2C74647D6C14B9", // Canary
296 "F155646B5D1CA545F7E1E4E20D573DFDD44C2540", // Google Cast Beta
297 "16CA7A47AAE4BE49B1E75A6B960C3875E945B264", // Google Cast Stable
298 "C17CD9E6868D7B9C67926E0EC612EA25C768418F", // http://crbug.com/457908
299 "EF2AB692559EA97C3BBDEA018A8C45F92457BD4E" // http://crbug.com/457908
301 "contexts": ["blessed_extension"]
303 "developerPrivate": [{
304 "dependencies": ["permission:developerPrivate", "permission:management"],
305 "contexts": ["blessed_extension"]
308 "contexts": ["webui"],
310 "chrome://extensions/*",
311 "chrome://extensions-frame/*",
312 "chrome://chrome/extensions/*"
315 // All devtools APIs are implemented by hand, so don't compile them.
316 "devtools.inspectedWindow": {
318 "dependencies": ["manifest:devtools_page"],
319 "contexts": ["blessed_extension"]
321 "devtools.network": {
323 "dependencies": ["manifest:devtools_page"],
324 "contexts": ["blessed_extension"]
328 "dependencies": ["manifest:devtools_page"],
329 "contexts": ["blessed_extension"]
332 "dependencies": ["permission:dial"],
333 "contexts": ["blessed_extension"]
336 "dependencies": ["permission:downloads"],
337 "contexts": ["blessed_extension"]
339 "downloadsInternal": {
342 "contexts": ["blessed_extension"]
344 "easyUnlockPrivate": {
345 "dependencies": ["permission:easyUnlockPrivate"],
346 "contexts": ["blessed_extension"]
349 "dependencies": ["permission:echoPrivate"],
350 "contexts": ["blessed_extension"]
352 "enterprise.deviceAttributes": {
353 "dependencies": ["permission:enterprise.deviceAttributes"],
354 "contexts": ["blessed_extension"]
356 "enterprise.platformKeys": {
357 "dependencies": ["permission:enterprise.platformKeys"],
358 "contexts": ["blessed_extension"]
360 "enterprise.platformKeysInternal": {
361 "dependencies": ["permission:enterprise.platformKeys"],
363 "contexts": ["blessed_extension"]
365 "enterprise.platformKeysPrivate": {
366 "dependencies": ["permission:enterprise.platformKeysPrivate"],
367 "contexts": ["blessed_extension"]
369 "experienceSamplingPrivate": {
370 "dependencies": ["permission:experienceSamplingPrivate"],
371 "contexts": ["blessed_extension"]
373 "experimental.devtools.audits": {
374 "dependencies": ["permission:experimental", "manifest:devtools_page"],
375 "contexts": ["blessed_extension"]
377 "experimental.devtools.console": {
378 "dependencies": ["permission:experimental", "manifest:devtools_page"],
379 "contexts": ["blessed_extension"]
383 "extension_types": ["extension", "legacy_packaged_app"],
384 "contexts": ["blessed_extension"]
386 "extension.getURL": {
387 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
389 "extension.getViews": [
392 "contexts": ["blessed_extension"],
393 "extension_types": ["extension", "legacy_packaged_app"]
396 // TODO(yoz): Eliminate this usage.
398 "contexts": ["blessed_extension"],
399 "extension_types": ["platform_app"],
401 "A948368FC53BE437A55FEB414106E207925482F5" // File manager
405 "extension.inIncognitoContext": {
406 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
408 "extension.lastError": {
409 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
411 "extension.onRequest": {
412 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
414 "extension.sendRequest": {
415 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
417 "extensionOptionsInternal": [{
419 "contexts": ["blessed_extension"],
420 "dependencies": ["permission:embeddedExtensionOptions"]
424 "contexts": ["webui"],
425 "matches": ["chrome://extensions-frame/*", "chrome://extensions/*"]
427 // This is not a real API, only here for documentation purposes.
428 // See http://crbug.com/275944 for background.
429 "extensionsManifestTypes": {
432 "contexts": ["blessed_extension"]
435 "dependencies": ["permission:feedbackPrivate"],
436 "contexts": ["blessed_extension"]
438 "fileBrowserHandler": {
439 "dependencies": ["permission:fileBrowserHandler"],
440 "contexts": ["blessed_extension"]
442 "fileBrowserHandlerInternal": {
444 "dependencies": ["permission:fileBrowserHandler"],
445 "contexts": ["blessed_extension"]
447 "screenlockPrivate": {
448 "dependencies": ["permission:screenlockPrivate"],
449 "extension_types": ["platform_app"],
450 "contexts": ["blessed_extension", "unblessed_extension"]
452 "fileManagerPrivate": {
453 "dependencies": ["permission:fileManagerPrivate"],
454 "contexts": ["blessed_extension"]
456 "fileManagerPrivateInternal": {
458 "dependencies": ["permission:fileManagerPrivate"],
459 "contexts": ["blessed_extension"]
462 "dependencies": ["permission:fileSystem"],
463 "contexts": ["blessed_extension"]
465 "fileSystemProvider": {
466 "dependencies": ["permission:fileSystemProvider"],
467 "contexts": ["blessed_extension"]
469 "fileSystemProviderInternal": {
471 "dependencies": ["permission:fileSystemProvider"],
472 "contexts": ["blessed_extension"]
475 "dependencies": ["permission:firstRunPrivate"],
476 "contexts": ["blessed_extension"]
479 "dependencies": ["permission:fontSettings"],
480 "contexts": ["blessed_extension"]
483 "dependencies": ["permission:gcdPrivate"],
484 "contexts": ["blessed_extension"]
487 "dependencies": ["permission:gcm"],
488 "contexts": ["blessed_extension"]
492 "contexts": ["blessed_extension"],
494 // http://crbug.com/309737.
495 // Keep this list in sync with extensions_misc::kHangoutsExtensionIds.
496 "nckgahadagoaajjgafhacjanaoiihapd", // Hangouts Production.
497 "ljclpkphhpbpinifbeabbhlfddcpfdde", // Hangouts Debug.
498 "ppleadejekpmccmnpjdimmlfljlkdfej", // Hangouts Alpha.
499 "eggnbpckecmjlblplehfpjjdhhidfdoj", // Hangouts Beta.
500 "jfjjdfefebklmdbmenmlehlopoocnoeh", // Hangouts Packaged App Debug.
501 "knipolnnllmklapflnccelgolnpehhpl" // Hangouts Packaged App Prod.
505 "dependencies": ["permission:history"],
506 "contexts": ["blessed_extension"]
509 "dependencies": ["permission:hotwordPrivate"],
510 "contexts": ["blessed_extension"]
514 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
515 "contexts": ["blessed_extension", "unblessed_extension", "content_script"]
518 "dependencies": ["permission:identity"],
519 "contexts": ["blessed_extension"]
521 "identity.getAccounts": {
523 "dependencies": ["permission:identity"],
524 "contexts": ["blessed_extension"]
527 "dependencies": ["permission:identityPrivate"],
528 "contexts": ["blessed_extension"]
531 "dependencies": ["permission:idltest"],
532 "contexts": ["blessed_extension"]
534 "inlineInstallPrivate": {
535 "dependencies": ["permission:inlineInstallPrivate"],
536 "contexts": ["blessed_extension"]
539 "dependencies": ["permission:input"],
540 "contexts": ["blessed_extension"]
542 "inputMethodPrivate": {
543 "dependencies": ["permission:inputMethodPrivate"],
544 "contexts": ["blessed_extension"]
547 "dependencies": ["permission:gcm"],
548 "contexts": ["blessed_extension"]
550 "languageSettingsPrivate": [{
551 "dependencies": ["permission:languageSettingsPrivate"],
552 "contexts": ["blessed_extension"]
555 "contexts": ["webui"],
557 "chrome://md-settings/*",
558 "chrome://settings/*",
559 "chrome://settings-frame/*"
563 "dependencies": ["manifest:launcher_page"],
564 "contexts": ["blessed_extension"]
566 "launcherSearchProvider": {
567 "dependencies": ["permission:launcherSearchProvider"],
568 "contexts": ["blessed_extension"]
571 "dependencies": ["permission:location"],
572 "contexts": ["blessed_extension"]
575 "dependencies": ["permission:logPrivate"],
576 "contexts": ["blessed_extension"]
579 "dependencies": ["permission:webcamPrivate"],
580 "contexts": ["blessed_extension"]
582 // This is not a real API, only here for documentation purposes.
583 // See http://crbug.com/275944 for background.
587 "contexts": ["blessed_extension"]
590 "dependencies": ["permission:mediaGalleries"],
591 "contexts": ["blessed_extension"]
593 "mediaPlayerPrivate": {
594 "dependencies": ["permission:mediaPlayerPrivate"],
595 "contexts": ["blessed_extension"]
598 "dependencies": ["permission:metricsPrivate"],
599 "contexts": ["blessed_extension"]
602 "dependencies": ["permission:mdns"],
603 "contexts": ["blessed_extension"]
605 "mimeHandlerViewGuestInternal": {
609 "matches": ["<all_urls>"]
611 "musicManagerPrivate": {
612 "dependencies": ["permission:musicManagerPrivate"],
613 "contexts": ["blessed_extension"]
615 "notificationProvider": {
616 "dependencies": ["permission:notificationProvider"],
617 "contexts": ["blessed_extension"]
620 "dependencies": ["permission:notifications"],
621 "contexts": ["blessed_extension"]
624 "dependencies": ["manifest:omnibox"],
625 "contexts": ["blessed_extension"]
628 "dependencies": ["manifest:page_action"],
629 "contexts": ["blessed_extension"]
632 "dependencies": ["permission:pageCapture"],
633 "contexts": ["blessed_extension"]
635 "passwordsPrivate": [{
636 "dependencies": ["permission:passwordsPrivate"],
637 "contexts": ["blessed_extension"]
640 "contexts": ["webui"],
642 "chrome://md-settings/*",
643 "chrome://settings/*",
644 "chrome://settings-frame/*"
649 "extension_types": ["extension", "legacy_packaged_app", "platform_app"],
650 "contexts": ["blessed_extension"]
653 "dependencies": ["permission:platformKeys"],
654 "contexts": ["blessed_extension"]
656 "platformKeysInternal": [{
657 "dependencies": ["permission:platformKeys"],
659 "contexts": ["blessed_extension"]
661 "dependencies": ["permission:enterprise.platformKeys"],
663 "contexts": ["blessed_extension"]
665 "preferencesPrivate": {
666 "dependencies": ["permission:preferencesPrivate"],
667 "contexts": ["blessed_extension"]
669 "principalsPrivate": {
670 "dependencies": ["permission:principalsPrivate"],
671 "contexts": ["blessed_extension"]
674 "dependencies": ["permission:privacy"],
675 "contexts": ["blessed_extension"]
678 "dependencies": ["permission:processes"],
679 "contexts": ["blessed_extension"]
682 "dependencies": ["permission:proxy"],
683 "contexts": ["blessed_extension"]
685 "imageWriterPrivate": {
686 "dependencies": ["permission:imageWriterPrivate"],
687 "extension_types": ["platform_app"],
688 "contexts": ["blessed_extension"]
690 "readingListPrivate": {
691 "dependencies": ["permission:readingListPrivate"],
692 "contexts": ["blessed_extension"]
694 "resourcesPrivate": [{
695 "dependencies": ["permission:resourcesPrivate"],
696 "contexts": ["blessed_extension"]
699 "contexts": ["webui"],
705 "dependencies": ["permission:rtcPrivate"],
706 "contexts": ["blessed_extension"]
708 "searchEnginesPrivate": [{
709 "dependencies": ["permission:searchEnginesPrivate"],
710 "contexts": ["blessed_extension"]
713 "contexts": ["webui"],
715 "chrome://md-settings/*",
716 "chrome://settings/*",
717 "chrome://settings-frame/*"
721 "dependencies": ["permission:sessions"],
722 "contexts": ["blessed_extension"]
724 "settingsPrivate": [{
725 "dependencies": ["permission:settingsPrivate"],
726 "contexts": ["blessed_extension"]
729 "contexts": ["webui"],
731 "chrome://md-settings/*",
732 "chrome://settings/*",
733 "chrome://settings-frame/*"
737 "dependencies": ["permission:signedInDevices"],
738 "contexts": ["blessed_extension"]
741 "dependencies": ["permission:streamsPrivate"],
742 "contexts": ["blessed_extension"]
745 "dependencies": ["permission:syncFileSystem"],
746 "contexts": ["blessed_extension"]
749 "dependencies": ["manifest:system_indicator"],
750 "contexts": ["blessed_extension"]
753 "dependencies": ["permission:systemPrivate"],
754 "contexts": ["blessed_extension"]
757 "dependencies": ["permission:tabCapture"],
758 "contexts": ["blessed_extension"]
762 "extension_types": ["extension", "legacy_packaged_app"],
763 "contexts": ["blessed_extension"]
766 "dependencies": ["permission:terminalPrivate"],
767 "contexts": ["blessed_extension"]
770 "dependencies": ["permission:topSites"],
771 "contexts": ["blessed_extension"]
774 "dependencies": ["permission:tts"],
775 "contexts": ["blessed_extension"]
778 "dependencies": ["permission:ttsEngine"],
779 "contexts": ["blessed_extension"]
782 "dependencies": ["permission:usersPrivate"],
783 "contexts": ["blessed_extension"]
786 "contexts": ["webui"],
788 "chrome://md-settings/*",
789 "chrome://settings/*",
790 "chrome://settings-frame/*"
793 "virtualKeyboardPrivate": {
794 "dependencies": ["permission:virtualKeyboardPrivate"],
795 "contexts": ["blessed_extension"]
798 "dependencies": ["permission:wallpaper"],
799 "contexts": ["blessed_extension"]
801 "wallpaperPrivate": {
802 "dependencies": ["permission:wallpaperPrivate"],
803 "contexts": ["blessed_extension"]
806 "dependencies": ["permission:webNavigation"],
807 "contexts": ["blessed_extension"]
809 "webrtcAudioPrivate": {
810 "dependencies": ["permission:webrtcAudioPrivate"],
811 "contexts": ["blessed_extension"]
813 "webrtcDesktopCapturePrivate": {
814 "dependencies": ["permission:webrtcDesktopCapturePrivate"],
815 "contexts": ["blessed_extension"]
817 "webrtcLoggingPrivate": {
818 "dependencies": ["permission:webrtcLoggingPrivate"],
819 "contexts": ["blessed_extension"]
822 // Hosted apps can use the webstore API from within a blessed context.
824 // Set extension_types to 'all' to prevent webstore from being filtered.
825 // Technically, webstore is not in apps or extensions, but it is currently
826 // displayed on /extensions/webstore and /apps/webstore. The "contexts"
827 // restriction effectively restricts this to hosted apps and webpages.
828 "extension_types": "all",
829 "contexts": ["blessed_web_page", "web_page"],
830 // Any webpage can use the webstore API.
831 "matches": ["<all_urls>"]
834 "dependencies": ["permission:webstorePrivate"],
835 // NOTE: even though this is only used by the webstore hosted app, which
836 // normally would mean blessed_web_page, component hosted apps are actually
837 // given the blessed_extension denomination. Confusing.
838 "contexts": ["blessed_extension"]
840 "webstoreWidgetPrivate": {
841 "dependencies": ["permission:webstoreWidgetPrivate"],
842 "contexts": ["blessed_extension"]
847 "dependencies": ["permission:webview"],
848 "contexts": ["blessed_extension"]
851 "dependencies": ["api:tabs"],
852 "contexts": ["blessed_extension"]