Files
sovereign_browser_rust/src/web_context.rs
T

58 lines
2.4 KiB
Rust

//! WebKitWebContext management
//!
//! Port of `web_context.c` / `web_context.h` from the C project.
use webkit2gtk::*;
/// Create and configure a WebKitWebContext.
pub fn web_context_create() -> WebContext {
let ctx = WebContext::new();
// Register custom URI schemes
crate::nostr_scheme::nostr_scheme_register(&ctx);
crate::tor_scheme::tor_scheme_register(&ctx);
crate::local_scheme::local_scheme_register(&ctx);
// Security strip: register sovereign://, tor://, file://, ws:// as secure
// (no CORS enforcement / mixed-content blocking). Without this, WebKit
// blocks sovereign://nostr/* requests from HTTPS pages as "insecure
// content". Mirrors the C version (web_context.c:209).
if let Some(sec_mgr) = ctx.security_manager() {
sec_mgr.register_uri_scheme_as_secure("sovereign");
sec_mgr.register_uri_scheme_as_secure("tor");
sec_mgr.register_uri_scheme_as_secure("file");
sec_mgr.register_uri_scheme_as_secure("ws");
sec_mgr.register_uri_scheme_as_local("file");
// Register nostr:// as secure too so NIP-19 URIs work from HTTPS pages.
sec_mgr.register_uri_scheme_as_secure("nostr");
}
ctx
}
/// Configure WebKitSettings for a web view.
pub fn web_context_configure_settings(settings: &webkit2gtk::Settings) {
settings.set_enable_javascript(true);
settings.set_enable_webgl(true);
settings.set_enable_webrtc(true);
// set_enable_plugins is deprecated since WebKitGTK 2.32 but there is no
// replacement; plugins are effectively dead in modern WebKit. Keep the
// call to explicitly disable them.
#[allow(deprecated)]
settings.set_enable_plugins(false);
settings.set_allow_modal_dialogs(true);
settings.set_enable_developer_extras(false);
// set_enable_private_browsing is deprecated in WebKitGTK 2.40+;
// use WebContext::set_is_ephemeral() instead. We don't need it here.
settings.set_enable_fullscreen(true);
settings.set_enable_media_stream(true);
settings.set_enable_smooth_scrolling(true);
// Deprecated since 2.32 with no replacement; keep for explicitness.
#[allow(deprecated)]
settings.set_enable_accelerated_2d_canvas(true);
// Enable console messages to stdout so we can debug window.nostr injection
// and page-level issues. The C version connects to console-message signal;
// this is simpler for now.
settings.set_enable_write_console_messages_to_stdout(true);
}