fix(core): run plugin init script in a separate context (#9571)

This commit is contained in:
Lucas Fernandes Nogueira 2024-04-28 11:15:29 -03:00 committed by GitHub
parent 6d5a396ae9
commit eff778b8f0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 13 additions and 12 deletions

View File

@ -0,0 +1,5 @@
---
"tauri": patch:enhance
---
Run each plugin initialization script on its own context so they do not interfere with each other or the Tauri init script.

View File

@ -14,6 +14,4 @@
__RAW_event_initialization_script__ __RAW_event_initialization_script__
__RAW_bundle_script__ __RAW_bundle_script__
__RAW_plugin_initialization_script__
})() })()

View File

@ -133,7 +133,7 @@ impl<R: Runtime> WebviewManager<R> {
let app_manager = manager.manager(); let app_manager = manager.manager();
let is_init_global = app_manager.config.app.with_global_tauri; let is_init_global = app_manager.config.app.with_global_tauri;
let plugin_init = app_manager let plugin_init_scripts = app_manager
.plugins .plugins
.lock() .lock()
.expect("poisoned plugin store") .expect("poisoned plugin store")
@ -199,10 +199,13 @@ impl<R: Runtime> WebviewManager<R> {
app_manager, app_manager,
&ipc_init.into_string(), &ipc_init.into_string(),
&pattern_init.into_string(), &pattern_init.into_string(),
&plugin_init,
is_init_global, is_init_global,
)?); )?);
for plugin_init_script in plugin_init_scripts {
webview_attributes = webview_attributes.initialization_script(&plugin_init_script);
}
#[cfg(feature = "isolation")] #[cfg(feature = "isolation")]
if let crate::Pattern::Isolation { schema, .. } = &*app_manager.pattern { if let crate::Pattern::Isolation { schema, .. } = &*app_manager.pattern {
webview_attributes = webview_attributes.initialization_script( webview_attributes = webview_attributes.initialization_script(
@ -345,7 +348,6 @@ impl<R: Runtime> WebviewManager<R> {
app_manager: &AppManager<R>, app_manager: &AppManager<R>,
ipc_script: &str, ipc_script: &str,
pattern_script: &str, pattern_script: &str,
plugin_initialization_script: &str,
with_global_tauri: bool, with_global_tauri: bool,
) -> crate::Result<String> { ) -> crate::Result<String> {
#[derive(Template)] #[derive(Template)]
@ -362,8 +364,6 @@ impl<R: Runtime> WebviewManager<R> {
#[raw] #[raw]
event_initialization_script: &'a str, event_initialization_script: &'a str,
#[raw] #[raw]
plugin_initialization_script: &'a str,
#[raw]
freeze_prototype: &'a str, freeze_prototype: &'a str,
} }
@ -398,7 +398,6 @@ impl<R: Runtime> WebviewManager<R> {
app_manager.listeners().function_name(), app_manager.listeners().function_name(),
app_manager.listeners().listeners_object_name(), app_manager.listeners().listeners_object_name(),
), ),
plugin_initialization_script,
freeze_prototype, freeze_prototype,
} }
.render_default(&Default::default()) .render_default(&Default::default())

View File

@ -783,14 +783,13 @@ impl<R: Runtime> PluginStore<R> {
} }
/// Generates an initialization script from all plugins in the store. /// Generates an initialization script from all plugins in the store.
pub(crate) fn initialization_script(&self) -> String { pub(crate) fn initialization_script(&self) -> Vec<String> {
self self
.store .store
.iter() .iter()
.filter_map(|p| p.initialization_script()) .filter_map(|p| p.initialization_script())
.fold(String::new(), |acc, script| { .map(|script| format!("(function () {{ {script} }})();"))
format!("{acc}\n(function () {{ {script} }})();") .collect()
})
} }
/// Runs the created hook for all plugins in the store. /// Runs the created hook for all plugins in the store.