< Summary

Information
Class: /home/runner/work/TauriQt/TauriQt/tauriqt/src/main.rs
Assembly: Default
File(s): /home/runner/work/TauriQt/TauriQt/tauriqt/src/main.rs
Line coverage
94%
Covered lines: 231
Uncovered lines: 14
Coverable lines: 245
Total lines: 444
Line coverage: 94.2%
Branch coverage
N/A
Covered branches: 0
Total branches: 0
Branch coverage: N/A
Method coverage

Feature is only available for sponsors

Upgrade to PRO version

File(s)

/home/runner/work/TauriQt/TauriQt/tauriqt/src/main.rs

#LineLine coverage
 1// SPDX-FileCopyrightText: 2026 Alper Çelik
 2// SPDX-License-Identifier: MIT OR Apache-2.0
 3
 4//! TauriQt — a Tauri 2 app that runs on the Qt runtime (Qt windowing +
 5//! QtWebEngine) on Linux and falls back to the stock wry runtime elsewhere
 6//! (or on Linux when built with `--features wry`).
 7
 8/// Runtime selection: Qt on Linux, wry everywhere else (and with `--features wry`).
 9#[cfg(all(target_os = "linux", not(feature = "wry")))]
 10pub type AppRuntime = tauri_runtime_qt::QtRuntime;
 11#[cfg(any(not(target_os = "linux"), feature = "wry"))]
 12pub type AppRuntime = tauri::Wry;
 13
 14#[tauri::command]
 2015fn greet(name: &str) -> String {
 2016    format!("Hello, {name}! — from {}", std::env::consts::OS)
 2017}
 18
 19/// Renders one probed window method as `label=value`, or `label=ERR(message)`
 20/// when the runtime cannot answer truthfully on this platform. Never panics and
 21/// never substitutes a fabricated value — a failing probe is reported as such.
 72022fn probe<T>(label: &str, result: tauri::Result<T>, render: impl FnOnce(T) -> String) -> String {
 72023    match result {
 72024        Ok(value) => format!("{label}={}", render(value)),
 025        Err(err) => format!("{label}=ERR({err})"),
 26    }
 72027}
 28
 29/// Exercises the `WindowDispatch` read path: geometry, scale factor, title and
 30/// every `is_*` flag. Each method is probed independently so one unsupported
 31/// call does not hide the others.
 32#[tauri::command]
 2033fn platform() -> String {
 2034    runtime_platform_name()
 2035}
 36
 37/// The Qt runtime knows its platform plugin; the wry fallback does not need to.
 38#[cfg(all(target_os = "linux", not(feature = "wry")))]
 2039fn runtime_platform_name() -> String {
 2040    tauri_runtime_qt::platform_name()
 2041}
 42
 43#[cfg(any(not(target_os = "linux"), feature = "wry"))]
 44fn runtime_platform_name() -> String {
 45    "wry".to_owned()
 46}
 47
 48#[tauri::command]
 4049fn win_info(window: tauri::WebviewWindow<AppRuntime>) -> String {
 4050    let fields = [
 4051        probe("inner_size", window.inner_size(), |s| {
 4052            format!("{}x{}", s.width, s.height)
 4053        }),
 4054        probe("outer_size", window.outer_size(), |s| {
 4055            format!("{}x{}", s.width, s.height)
 4056        }),
 4057        probe("inner_position", window.inner_position(), |p| {
 4058            format!("{},{}", p.x, p.y)
 4059        }),
 4060        probe("outer_position", window.outer_position(), |p| {
 4061            format!("{},{}", p.x, p.y)
 4062        }),
 4063        probe("scale_factor", window.scale_factor(), |s| format!("{s:.4}")),
 4064        probe("title", window.title(), |t| t),
 4065        probe("is_fullscreen", window.is_fullscreen(), |v| v.to_string()),
 4066        probe("is_minimized", window.is_minimized(), |v| v.to_string()),
 4067        probe("is_maximized", window.is_maximized(), |v| v.to_string()),
 4068        probe("is_focused", window.is_focused(), |v| v.to_string()),
 4069        probe("is_decorated", window.is_decorated(), |v| v.to_string()),
 4070        probe("is_resizable", window.is_resizable(), |v| v.to_string()),
 4071        probe("is_visible", window.is_visible(), |v| v.to_string()),
 4072        probe("is_always_on_top", window.is_always_on_top(), |v| {
 4073            v.to_string()
 4074        }),
 4075        probe("is_maximizable", window.is_maximizable(), |v| v.to_string()),
 4076        probe("is_minimizable", window.is_minimizable(), |v| v.to_string()),
 4077        probe("is_closable", window.is_closable(), |v| v.to_string()),
 78    ];
 4079    fields.join("; ")
 4080}
 81
 82/// Renders a monitor as `name pos size work scale`.
 6083fn fmt_monitor(index: usize, monitor: &tauri::Monitor) -> String {
 6084    format!(
 85        "#{index} name={:?} pos={},{} size={}x{} work={}x{} scale={:.4}",
 6086        monitor.name(),
 6087        monitor.position().x,
 6088        monitor.position().y,
 6089        monitor.size().width,
 6090        monitor.size().height,
 6091        monitor.work_area().size.width,
 6092        monitor.work_area().size.height,
 6093        monitor.scale_factor(),
 94    )
 6095}
 96
 97/// Exercises the monitor path: available monitors, primary monitor and the
 98/// monitor the window currently sits on.
 99#[tauri::command]
 20100fn monitors(window: tauri::WebviewWindow<AppRuntime>) -> String {
 20101    let available = match window.available_monitors() {
 20102        Ok(list) => {
 20103            let mut rendered = format!("available_monitors={}", list.len());
 20104            for (index, monitor) in list.iter().enumerate() {
 20105                rendered.push_str(" | ");
 20106                rendered.push_str(&fmt_monitor(index, monitor));
 20107            }
 20108            rendered
 109        }
 0110        Err(err) => format!("available_monitors=ERR({err})"),
 111    };
 20112    let primary = probe("primary_monitor", window.primary_monitor(), |m| {
 20113        m.map(|monitor| fmt_monitor(0, &monitor))
 20114            .unwrap_or_else(|| "none".to_string())
 20115    });
 20116    let current = probe("current_monitor", window.current_monitor(), |m| {
 20117        m.map(|monitor| fmt_monitor(0, &monitor))
 20118            .unwrap_or_else(|| "none".to_string())
 20119    });
 20120    format!("{available}; {primary}; {current}")
 20121}
 122
 123/// Sets the window fullscreen state. Surfaces the runtime error as an invoke
 124/// rejection instead of pretending it succeeded.
 125#[tauri::command]
 40126fn set_fullscreen(
 40127    window: tauri::WebviewWindow<AppRuntime>,
 40128    fullscreen: bool,
 40129) -> Result<String, String> {
 40130    window
 40131        .set_fullscreen(fullscreen)
 40132        .map(|()| format!("set_fullscreen({fullscreen})=OK"))
 40133        .map_err(|err| format!("set_fullscreen({fullscreen}) failed: {err}"))
 40134}
 135
 136/// Sets the window title. Surfaces the runtime error as an invoke rejection.
 137#[tauri::command]
 20138fn set_title(window: tauri::WebviewWindow<AppRuntime>, title: String) -> Result<String, String> {
 20139    window
 20140        .set_title(&title)
 20141        .map(|()| format!("set_title({title:?})=OK"))
 20142        .map_err(|err| format!("set_title({title:?}) failed: {err}"))
 20143}
 144
 145/// Logs a line from the frontend to the terminal so demo results are visible
 146/// outside the web view.
 147#[tauri::command]
 760148fn report(text: String) -> String {
 760149    println!("[tauriqt-demo] {text}");
 760150    "reported".to_string()
 760151}
 152
 153// ---------------------------------------------------------------------------
 154// Cookie demo (the runtime mirrors the profile's cookie store)
 155// ---------------------------------------------------------------------------
 156//
 157// `tauri://` is a custom scheme and Chromium only lets a document read or write
 158// cookies on a *cookieable* scheme (`http`, `https`, `ws`, `wss`) — the same
 159// reason tauri's own `Webview::cookies()` documentation excludes `tauri://`
 160// URLs. `document.cookie` is therefore inert on this page. To exercise real
 161// JS-side cookie access (and to prove that a JS-set cookie reaches the
 162// runtime's mirror) the page embeds a sandbox document served from
 163// `http://127.0.0.1` on an ephemeral port: a different origin, but the same
 164// webview, the same profile and therefore the same cookie store that
 165// `cookies()`, `cookies_for_url()`, `set_cookie()` and `delete_cookie()` see.
 166
 167/// The sandbox document: a plain http page whose only job is to run
 168/// `document.cookie` operations on request and report the result — the cookie
 169/// it read back — to the parent page.
 170const COOKIE_SANDBOX_HTML: &str = r#"<!doctype html>
 171<html lang="en">
 172  <head>
 173    <meta charset="utf-8" />
 174    <title>cookie sandbox</title>
 175    <style>
 176      body { font-family: ui-monospace, monospace; font-size: 0.8rem; margin: 0.5rem; }
 177      code { word-break: break-all; }
 178    </style>
 179  </head>
 180  <body>
 181    <div>cookie sandbox on <code id="origin"></code></div>
 182    <div>document.cookie: <code id="value"></code></div>
 183    <script>
 184      // Runs on http://127.0.0.1:<port>, an origin Chromium allows cookies on
 185      // (the parent page's tauri:// scheme does not). Only the parent's
 186      // postMessage protocol reaches this document.
 187      const origin = document.getElementById("origin");
 188      const value = document.getElementById("value");
 189      origin.textContent = location.origin;
 190
 191      function read() {
 192        try {
 193          return document.cookie;
 194        } catch (err) {
 195          return "ERR(" + err + ")";
 196        }
 197      }
 198
 199      function show() {
 200        value.textContent = JSON.stringify(read());
 201        return read();
 202      }
 203
 204      window.addEventListener("message", (event) => {
 205        const { id, op, cookie } = event.data || {};
 206        let result;
 207        switch (op) {
 208          case "set": // a document.cookie write, e.g. "name=value; path=/"
 209            document.cookie = cookie;
 210            result = show();
 211            break;
 212          case "read":
 213            result = show();
 214            break;
 215          default:
 216            result = "ERR(unknown op " + op + ")";
 217        }
 218        parent.postMessage({ id, op, result }, "*");
 219      });
 220
 221      parent.postMessage({ op: "ready", result: show() }, "*");
 222    </script>
 223  </body>
 224</html>
 225"#;
 226
 227/// Port of the sandbox's loopback server. The server starts with the first use
 228/// of [`cookie_sandbox_url`] and lives as long as the process.
 229static COOKIE_SANDBOX_PORT: std::sync::LazyLock<Option<u16>> =
 230    std::sync::LazyLock::new(start_cookie_sandbox);
 231
 232/// Serves [`COOKIE_SANDBOX_HTML`] on an ephemeral 127.0.0.1 port and returns it.
 233/// Minimal on purpose: one request per connection, loopback only, so it never
 234/// outlives the demo process.
 20235fn start_cookie_sandbox() -> Option<u16> {
 236    use std::io::{Read, Write};
 237
 20238    let listener = std::net::TcpListener::bind(("127.0.0.1", 0)).ok()?;
 20239    let port = listener.local_addr().ok()?.port();
 20240    std::thread::Builder::new()
 20241        .name("tauriqt-cookie-sandbox".to_string())
 20242        .spawn(move || {
 20243            for stream in listener.incoming() {
 20244                let Ok(mut stream) = stream else { continue };
 20245                let mut request = [0u8; 1024];
 20246                let read = stream.read(&mut request).unwrap_or(0);
 20247                let head = String::from_utf8_lossy(&request[..read]);
 20248                let wants_page =
 20249                    head.starts_with("GET / ") || head.starts_with("GET /index.html ");
 20250                let (status, body) = if wants_page {
 20251                    ("200 OK", COOKIE_SANDBOX_HTML)
 252                } else {
 0253                    ("404 Not Found", "")
 254                };
 20255                let response = format!(
 256                    "HTTP/1.1 {status}\r\nContent-Type: text/html; charset=utf-8\r\nContent-Length: {}\r\nConnection: cl
 20257                    body.len()
 258                );
 20259                let _ = stream.write_all(response.as_bytes());
 20260                let _ = stream.flush();
 261            }
 20262        })
 20263        .ok()?;
 20264    Some(port)
 20265}
 266
 267/// URL of the cookie sandbox document (starts its server on first call).
 268#[tauri::command]
 20269fn cookie_sandbox_url() -> Option<String> {
 20270    (*COOKIE_SANDBOX_PORT).map(|port| format!("http://127.0.0.1:{port}/"))
 20271}
 272
 273/// Renders one cookie for the terminal report.
 260274fn fmt_cookie(cookie: &tauri::webview::Cookie<'_>) -> String {
 260275    let mut out = format!("{}={}", cookie.name(), cookie.value());
 260276    if let Some(domain) = cookie.domain() {
 260277        out.push_str(&format!(" domain={domain}"));
 260278    }
 260279    if let Some(path) = cookie.path() {
 260280        out.push_str(&format!(" path={path}"));
 260281    }
 260282    if cookie.secure() == Some(true) {
 260283        out.push_str(" secure");
 260284    }
 260285    if cookie.http_only() == Some(true) {
 0286        out.push_str(" http_only");
 260287    }
 260288    if let Some(same_site) = cookie.same_site() {
 0289        out.push_str(&format!(" same_site={same_site:?}"));
 260290    }
 260291    match cookie.expires_datetime() {
 0292        Some(expires) => out.push_str(&format!(
 0293            " expires_ms={}",
 0294            expires.unix_timestamp() * 1000 + i64::from(expires.millisecond())
 0295        )),
 260296        None => out.push_str(" session"),
 297    }
 260298    out
 260299}
 300
 301/// Dumps the runtime's cookie mirror (`WebviewDispatch::cookies`), or — when
 302/// `url` is given — the cookies a request to that URL would carry
 303/// (`WebviewDispatch::cookies_for_url`).
 304#[tauri::command]
 220305fn cookies_dump(
 220306    window: tauri::WebviewWindow<AppRuntime>,
 220307    url: Option<String>,
 220308) -> Result<String, String> {
 220309    let cookies = match url {
 80310        Some(url) => {
 80311            let parsed =
 80312                tauri::Url::parse(&url).map_err(|err| format!("invalid url {url:?}: {err}"))?;
 80313            window.cookies_for_url(parsed)
 314        }
 140315        None => window.cookies(),
 316    }
 220317    .map_err(|err| format!("cookies_dump failed: {err}"))?;
 318
 220319    if cookies.is_empty() {
 60320        return Ok("(no cookies)".to_string());
 160321    }
 160322    Ok(cookies
 160323        .iter()
 160324        .map(fmt_cookie)
 160325        .collect::<Vec<_>>()
 160326        .join(" | "))
 220327}
 328
 329/// Builds a cookie for the runtime's `set_cookie` from `Set-Cookie`-style
 330/// attributes. `same_site` must be `none`, `lax` or `strict` when given — the
 331/// cookie crate's parser silently ignores unknown SameSite values, so they are
 332/// rejected here instead of turning into an attribute-less cookie.
 40333fn build_cookie(
 40334    name: &str,
 40335    value: &str,
 40336    domain: Option<&str>,
 40337    path: Option<&str>,
 40338    secure: bool,
 40339    same_site: Option<&str>,
 40340) -> Result<tauri::webview::Cookie<'static>, String> {
 40341    let mut text = format!("{name}={value}; path={}", path.unwrap_or("/"));
 40342    if let Some(domain) = domain {
 40343        text.push_str(&format!("; domain={domain}"));
 40344    }
 40345    if secure {
 40346        text.push_str("; Secure");
 40347    }
 40348    if let Some(same_site) = same_site {
 40349        match same_site.to_ascii_lowercase().as_str() {
 40350            "none" | "lax" | "strict" => text.push_str(&format!("; SameSite={same_site}")),
 0351            other => {
 0352                return Err(format!("same_site {other:?} must be none, lax or strict"));
 353            }
 354        }
 0355    }
 40356    match tauri::webview::Cookie::parse(text.clone()) {
 40357        Ok(cookie) => Ok(cookie),
 0358        Err(err) => Err(format!("invalid cookie attributes {text:?}: {err}")),
 359    }
 40360}
 361
 362/// Sets a cookie through the runtime (`WebviewDispatch::set_cookie`). Without a
 363/// `domain` the cookie becomes host-only for the webview's current page host.
 364#[tauri::command]
 40365fn cookie_set(
 40366    window: tauri::WebviewWindow<AppRuntime>,
 40367    name: String,
 40368    value: String,
 40369    domain: Option<String>,
 40370    path: Option<String>,
 40371    secure: Option<bool>,
 40372    same_site: Option<String>,
 40373) -> Result<String, String> {
 40374    let cookie = build_cookie(
 40375        &name,
 40376        &value,
 40377        domain.as_deref(),
 40378        path.as_deref(),
 40379        secure.unwrap_or(false),
 40380        same_site.as_deref(),
 0381    )?;
 40382    window
 40383        .set_cookie(cookie)
 40384        .map_err(|err| format!("cookie_set({name}) failed: {err}"))?;
 40385    Ok(format!("cookie_set({name}) OK"))
 40386}
 387
 388/// Deletes cookies through the runtime (`WebviewDispatch::delete_cookie`).
 389#[tauri::command]
 20390fn cookie_delete(
 20391    window: tauri::WebviewWindow<AppRuntime>,
 20392    name: String,
 20393    domain: Option<String>,
 20394    path: Option<String>,
 20395) -> Result<String, String> {
 20396    let mut builder = tauri::webview::Cookie::build((name.clone(), ""))
 20397        .path(path.unwrap_or_else(|| "/".to_string()));
 20398    if let Some(domain) = domain {
 20399        builder = builder.domain(domain);
 20400    }
 20401    window
 20402        .delete_cookie(builder.build())
 20403        .map_err(|err| format!("cookie_delete({name}) failed: {err}"))?;
 20404    Ok(format!("cookie_delete({name}) OK"))
 20405}
 406
 407/// `WebviewDispatch::clear_all_browsing_data`: every cookie of the profile plus
 408/// the HTTP cache (see the runtime's `ops::cookies::clear_all_browsing_data`
 409/// for what Qt cannot clear).
 410#[tauri::command]
 20411fn cookies_clear(window: tauri::WebviewWindow<AppRuntime>) -> Result<String, String> {
 20412    window
 20413        .clear_all_browsing_data()
 20414        .map_err(|err| format!("clear_all_browsing_data failed: {err}"))?;
 20415    Ok("clear_all_browsing_data OK".to_string())
 20416}
 417
 20418fn main() {
 20419    let mut builder = tauri::Builder::<AppRuntime>::new().invoke_handler(tauri::generate_handler![
 420        greet,
 421        win_info,
 422        monitors,
 423        set_fullscreen,
 424        set_title,
 425        report,
 426        cookie_sandbox_url,
 427        cookies_dump,
 428        cookie_set,
 429        cookie_delete,
 430        cookies_clear,
 431        platform
 432    ]);
 433
 434    // The Qt runtime carries invoke payloads in a header (QtWebEngine never
 435    // exposes custom-protocol request bodies), so it ships its own invoke system.
 436    #[cfg(all(target_os = "linux", not(feature = "wry")))]
 20437    {
 20438        builder = builder.invoke_system(tauri_runtime_qt::INVOKE_SYSTEM_SCRIPT);
 20439    }
 440
 20441    builder
 40442        .run(tauri::generate_context!())
 20443        .expect("error while running the tauri application");
 20444}

Methods/Properties

_RNvCsl9yYLK4ftHb_7tauriqt5greet
_RINvCsl9yYLK4ftHb_7tauriqt5probeINtCsb5tLBgpt5ow_3dpi12PhysicalSizemENCNvB2_8win_info0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probeINtCsb5tLBgpt5ow_3dpi12PhysicalSizemENCNvB2_8win_infos_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probeINtCsb5tLBgpt5ow_3dpi16PhysicalPositionlENCNvB2_8win_infos0_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probeINtCsb5tLBgpt5ow_3dpi16PhysicalPositionlENCNvB2_8win_infos1_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probeINtNtCs6Xa2QwhY5JM_4core6option6OptionNtNtCsayqiEzhWKCy_5tauri6window7MonitorENCNvB2_8monitors0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probeINtNtCs6Xa2QwhY5JM_4core6option6OptionNtNtCsayqiEzhWKCy_5tauri6window7MonitorENCNvB2_8monitorss_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probeNtNtCsfVYBsOggKhj_5alloc6string6StringNCNvB2_8win_infos3_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infos4_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infos5_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infos6_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infos7_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infos8_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infos9_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infosa_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infosb_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infosc_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infosd_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probebNCNvB2_8win_infose_0EB2_
_RINvCsl9yYLK4ftHb_7tauriqt5probedNCNvB2_8win_infos2_0EB2_
_RNvCsl9yYLK4ftHb_7tauriqt8platform
_RNvCsl9yYLK4ftHb_7tauriqt21runtime_platform_name
_RNvCsl9yYLK4ftHb_7tauriqt8win_info
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_info0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos0_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos1_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos2_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos4_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos5_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos6_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos7_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos8_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infos9_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infosa_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infosb_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infosc_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infosd_0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt8win_infose_0B3_
_RNvCsl9yYLK4ftHb_7tauriqt11fmt_monitor
_RNvCsl9yYLK4ftHb_7tauriqt8monitors
_RNCNvCsl9yYLK4ftHb_7tauriqt8monitors0B3_
_RNCNCNvCsl9yYLK4ftHb_7tauriqt8monitors00B5_
_RNCNCNvCsl9yYLK4ftHb_7tauriqt8monitors0s_0B5_
_RNCNvCsl9yYLK4ftHb_7tauriqt8monitorss_0B3_
_RNCNCNvCsl9yYLK4ftHb_7tauriqt8monitorss_00B5_
_RNCNCNvCsl9yYLK4ftHb_7tauriqt8monitorss_0s_0B5_
_RNvCsl9yYLK4ftHb_7tauriqt14set_fullscreen
_RNCNvCsl9yYLK4ftHb_7tauriqt14set_fullscreen0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt14set_fullscreens_0B3_
_RNvCsl9yYLK4ftHb_7tauriqt9set_title
_RNCNvCsl9yYLK4ftHb_7tauriqt9set_title0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt9set_titles_0B3_
_RNvCsl9yYLK4ftHb_7tauriqt6report
_RNvCsl9yYLK4ftHb_7tauriqt20start_cookie_sandbox
_RNCNvCsl9yYLK4ftHb_7tauriqt20start_cookie_sandbox0B3_
_RNvCsl9yYLK4ftHb_7tauriqt18cookie_sandbox_url
_RNCNvCsl9yYLK4ftHb_7tauriqt18cookie_sandbox_url0B3_
_RNvCsl9yYLK4ftHb_7tauriqt10fmt_cookie
_RNvCsl9yYLK4ftHb_7tauriqt12cookies_dump
_RNCNvCsl9yYLK4ftHb_7tauriqt12cookies_dump0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt12cookies_dumps_0B3_
_RNvCsl9yYLK4ftHb_7tauriqt12build_cookie
_RNvCsl9yYLK4ftHb_7tauriqt10cookie_set
_RNCNvCsl9yYLK4ftHb_7tauriqt10cookie_set0B3_
_RNvCsl9yYLK4ftHb_7tauriqt13cookie_delete
_RNCNvCsl9yYLK4ftHb_7tauriqt13cookie_delete0B3_
_RNCNvCsl9yYLK4ftHb_7tauriqt13cookie_deletes_0B3_
_RNvCsl9yYLK4ftHb_7tauriqt13cookies_clear
_RNCNvCsl9yYLK4ftHb_7tauriqt13cookies_clear0B3_
_RNvCsl9yYLK4ftHb_7tauriqt4main
_RNCINvNvCsl9yYLK4ftHb_7tauriqt4main5innerNtCsdgr7Em4UC3i_16tauri_runtime_qt9QtRuntimeNtNtCsDJpgXA7L0W_11tauri_utils6assets14EmbeddedAssetsE0B6_