Skip to content

Portable mode still writes to the user profile on macOS #227

Description

@tonhowtf

Sequência da #209. O modo portátil está coberto no Windows e no Linux; o macOS continua descoberto, e vale registrar em vez de deixar implícito.

O que está resolvido

O <app>/data recebe tudo que o app controla diretamente em qualquer plataforma. O que faltava era o WebView, e ele foi resolvido assim:

  • Windows: WEBVIEW2_USER_DATA_FOLDER era código morto (o Tauri resolvia o diretório antes de a variável ser lida), então a janela passou a ser construída no setup() com .data_directory() explícito.
  • Linux: o mesmo .data_directory() alimenta base_data_directory, base_cache_directory e os cookies do WebKitGTK.

Ambos verificados pelo job smoke da CI, que reprova se qualquer coisa aparecer no perfil do usuário.

O que falta

O wry não lê data_directory no WKWebView:

$ grep -rn "data_directory" wry-0.54.2/src/wkwebview/*.rs
(nenhum resultado)

Contra wry-0.54.2/src/webkitgtk/web_context.rs, que usa em três lugares. Ou seja: no macOS não existe, hoje, o caminho que a correção usou nas outras duas plataformas. Passar .data_directory() lá seria no-op — pior que não fazer nada, porque daria a impressão de estar coberto.

Por isso o cfg ficou em any(windows, target_os = "linux") explicitamente, em vez de valer para todos.

Impacto real

Menor que nas outras plataformas, mas não nulo: no macOS o WKWebView guarda dados no container do app dentro de ~/Library, então um usuário rodando o OmniGet de um pendrive ainda deixa rastro na máquina. Não é vazamento de credencial — é o modo portátil não cumprindo o que promete.

Caminhos possíveis

  1. WKWebsiteDataStore com diretório customizado exige API não exposta pelo wry — provavelmente issue upstream.
  2. Detectar e avisar: se portable.txt estiver presente no macOS, dizer ao usuário que o webview não é portátil nessa plataforma. Honesto, e barato.

A opção 2 é implementável hoje e não depende de ninguém. Deixo em aberto porque é decisão de produto, não de código.

Como confirmar quando alguém mexer

scripts/smoke-test.mjs --portable já checa ~/Library/Application Support/wtf.tonho.omniget. Basta adicionar macos-latest à matriz do job smoke — o teste que reprovaria já existe.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions