58 lines
2.4 KiB
Rust
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);
|
|
}
|