Browse Source

fix(core): unique WebContext for each window when TAURI_AUTOMATION unset (#2396)

Lucas Fernandes Nogueira 4 years ago
parent
commit
957e863e59
1 changed files with 24 additions and 17 deletions
  1. 24 17
      core/tauri-runtime-wry/src/lib.rs

+ 24 - 17
core/tauri-runtime-wry/src/lib.rs

@@ -2388,25 +2388,32 @@ fn create_webview(
     webview_builder = webview_builder.with_initialization_script(&script);
   }
 
-  let mut web_context = web_context.lock().expect("poisoned WebContext store");
-  let is_first_context = web_context.is_empty();
-  let web_context = match web_context.entry(webview_attributes.data_directory) {
-    Occupied(occupied) => occupied.into_mut(),
-    Vacant(vacant) => {
-      let mut web_context = WebContext::new(vacant.key().clone());
-      web_context.set_allows_automation(match std::env::var("TAURI_AUTOMATION").as_deref() {
-        Ok("true") => is_first_context,
-        _ => false,
-      });
-      vacant.insert(web_context)
-    }
+  let webview = if let Ok("true") = std::env::var("TAURI_AUTOMATION").as_deref() {
+    let mut web_context = web_context.lock().expect("poisoned WebContext store");
+    let is_first_context = web_context.is_empty();
+    let web_context = match web_context.entry(webview_attributes.data_directory) {
+      Occupied(occupied) => occupied.into_mut(),
+      Vacant(vacant) => {
+        let mut web_context = WebContext::new(vacant.key().clone());
+        web_context.set_allows_automation(match std::env::var("TAURI_AUTOMATION").as_deref() {
+          Ok("true") => is_first_context,
+          _ => false,
+        });
+        vacant.insert(web_context)
+      }
+    };
+    webview_builder
+      .with_web_context(web_context)
+      .build()
+      .map_err(|e| Error::CreateWebview(Box::new(e)))?
+  } else {
+    let mut context = WebContext::new(webview_attributes.data_directory.clone());
+    webview_builder
+      .with_web_context(&mut context)
+      .build()
+      .map_err(|e| Error::CreateWebview(Box::new(e)))?
   };
 
-  let webview = webview_builder
-    .with_web_context(web_context)
-    .build()
-    .map_err(|e| Error::CreateWebview(Box::new(e)))?;
-
   Ok(WindowWrapper {
     label,
     inner: WindowHandle::Webview(webview),