# WebView Integration Layer
How the Tauri WebView connects with Proton's WebClients frontend and the Rust backend.
## Components
| Module | Lines | Purpose |
|---|---|---|
| `webview_cookies.rs` | 329 | Cookie bridge between WebKit native store and reqwest HTTP client |
| `webview_storage.rs` | 11 | Creates persistent WebView data directory (`app_data/webview/`) |
| `url_log.rs` | 8 | Strips query params/fragments from URLs for safe log output |
## Cookie Management (`webview_cookies.rs`)
The app maintains cookies in two stores that must stay in sync:
1. **WebKit's native cookie store** — persisted by the WebView across restarts (handles "Keep me signed in")
2. **`reqwest::cookie::Jar`** — the in-process HTTP client jar for proxied API requests
The critical function is `combined_cookie_header` which merges both stores, with the client jar taking precedence (it has the freshest auth state after login/2FA):
sequenceDiagram
participant WEB as WebView
participant WK as WebKit Cookie Store
participant JAR as reqwest Cookie Jar
participant MERGE as combined_cookie_header
participant API as Proton API
WEB->>WK: Read persisted cookies
JAR->>JAR: Auth tokens from login response
MERGE->>WK: Get WebKit cookies
MERGE->>JAR: Get client jar cookies
Note over MERGE: Client jar wins for duplicates
MERGE->>API: Merged Cookie header
### Auth Cookie Handling
- Auth cookies are identified by `AUTH-` or `REFRESH-` prefix
- `store_webview_cookie` persists `Set-Cookie` response headers into WebKit
- Legacy blank-domain cookies (from older builds) are automatically cleaned up
- Default cookie scope is applied per RFC 6265 §5.1.4
### Test Coverage
7 tests covering: cookie header merging, RFC 6265 path defaults, host-only cookie scoping, blank-domain cleanup, explicit domain preservation, and empty/malformed cookie handling.
## Data Directory (`webview_storage.rs`)
Two functions managing the persistent WebView storage path:
```rust
pub fn persistent_webview_data_dir(app_data_dir: PathBuf) -> PathBuf {
app_data_dir.join("webview")
}
pub fn ensure_webview_data_dir(dir: &Path) -> std::io::Result<()> {
std::fs::create_dir_all(dir)
}
```
## URL Logging (`url_log.rs`)
A single function that strips sensitive query parameters and fragments from URLs before logging:
```rust
pub fn sanitize_url_for_log(url: &str) -> String
```
Used throughout the codebase to safely log URLs without leaking auth tokens, session data, or other sensitive parameters.