11<script setup lang="ts">
2- import { onMounted , ref } from " vue" ;
2+ import { getCurrentWebviewWindow } from " @tauri-apps/api/webviewWindow" ;
3+ import { inject , onMounted , ref } from " vue" ;
34
45import PermissionsHandler from " @/components/general/extensions/PermissionsHandler.vue" ;
56import PageTeleports from " @/components/general/layout/PageTeleports.vue" ;
7+ import { GlobalStatesContextKey } from " @/constants/application.ts" ;
68import ExtensionsManager from " @/lib/extensions-manager" ;
79import { log } from " @/lib/logging/scopes/log.ts" ;
10+ import type { ContextGlobalStatesType } from " @/types/application/global-states.type.ts" ;
811import type { ExtensionInfoType } from " @/types/extensions/extension-info.type.ts" ;
912import type { ExtensionMetadataType } from " @/types/extensions/extension-metadata.type.ts" ;
1013
14+ const globalStates = inject <ContextGlobalStatesType >(GlobalStatesContextKey );
15+
1116const knownExtensions = ref <Array <ExtensionMetadataType >>([]);
1217const unknownExtensions = ref <Array <ExtensionInfoType >>([]);
1318
@@ -24,13 +29,19 @@ onMounted(async () => {
2429 knownExtensions .value = metadataList ;
2530
2631 log .debug (" Mapping valid and known extensions metadata" );
27- const metadataMap = new Map < string , boolean | undefined>;
32+ const metadataMap = new Map < string , {
33+ " type" : ExtensionMetadataType[" type" ];
34+ " enabled" : ExtensionMetadataType[" enabled" ];
35+ } | undefined>;
2836
29- for (const { id, enabled } of metadataList ) {
30- metadataMap .set (id , enabled );
37+ for (const { id, type, enabled } of metadataList ) {
38+ metadataMap .set (id , { type , enabled } );
3139 }
3240
33- const toExecute: Array <ExtensionInfoType > = [];
41+ const toExecute: Record <
42+ ExtensionMetadataType [" type" ],
43+ Array <ExtensionInfoType >
44+ > = { " sandbox" : [], " unrestricted" : [] };
3445
3546 log .debug (" Validating stored extensions against known extensions map" );
3647 for (const extension of extensions ) {
@@ -42,29 +53,53 @@ onMounted(async () => {
4253 continue ;
4354 }
4455
45- if (mappedMetadata === true ) {
46- toExecute .push (extension );
56+ if (mappedMetadata . enabled === true ) {
57+ toExecute [ mappedMetadata . type ] .push (extension );
4758 }
4859 }
4960
50- log .debug (" Initializing all enabled extensions" );
51- for (const { id, code } of toExecute ) {
61+ log .debug (" Initializing all enabled unrestricted extensions" );
62+ for (const { id, code } of toExecute . unrestricted ) {
5263 ExtensionsManager .runInUnrestricted (id , code );
5364 }
5465
55- const hasSandboxedPlugins = metadataList .find (({ type , enabled }) => (
56- type === " sandbox" && enabled === true
57- ));
66+ const hasSandboxedPlugins = toExecute .sandbox .length > 0 ;
5867
5968 if (! hasSandboxedPlugins ) {
6069 log .debug (" User does not have sandboxed plugins. Environment lockdown is not needed" );
6170
71+ if (globalStates ?.misc ?.showAfterExtensionsInitialization ) {
72+ log .debug (
73+ " User has enabled 'show-after-extensions-initialization';" ,
74+ " Showing the webview now" ,
75+ );
76+ await getCurrentWebviewWindow ().show ();
77+ }
78+
6279 return ;
6380 }
6481
6582 log .debug (" Locking down the JavaScript environment" );
6683 ExtensionsManager .lockdownEnvironment ();
6784 log .info (" The JavaScript environment was locked down" );
85+
86+ log .debug (" Initializing all enabled sandboxed extensions" );
87+ for (const { id, code } of toExecute .sandbox ) {
88+ ExtensionsManager .runInSandbox ({
89+ id ,
90+ code ,
91+ // TODO handle permissions
92+ " globals" : {},
93+ });
94+ }
95+
96+ if (globalStates ?.misc ?.showAfterExtensionsInitialization ) {
97+ log .debug (
98+ " User has enabled 'show-after-extensions-initialization';" ,
99+ " Showing the webview now" ,
100+ );
101+ await getCurrentWebviewWindow ().show ();
102+ }
68103});
69104
70105/*
0 commit comments