Skip to content

Commit 3c04c2b

Browse files
WIP
1 parent e0d3c21 commit 3c04c2b

7 files changed

Lines changed: 61 additions & 78 deletions

File tree

.nix/deps/rust-gpu.nix

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
{ pkgs, ... }:
22

33
let
4-
extensions = [
5-
"rust-src"
6-
"rust-analyzer"
7-
"clippy"
8-
"cargo"
9-
"rustc-dev"
10-
"llvm-tools"
11-
];
124
toolchain = pkgs.rust-bin.nightly."2026-04-11".default.override {
13-
inherit extensions;
5+
extensions = [
6+
"rust-src"
7+
"rust-analyzer"
8+
"clippy"
9+
"cargo"
10+
"rustc-dev"
11+
"llvm-tools"
12+
];
1413
};
1514
cargo = pkgs.writeShellScriptBin "cargo" ''
1615
#!${pkgs.lib.getExe pkgs.bash}

desktop/src/cef/context/builder.rs

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -45,8 +45,7 @@ impl<H: CefEventHandler> CefContextBuilder<H> {
4545

4646
let args = Args::new();
4747
let cmd = args.as_cmd_line().unwrap();
48-
let switch = CefString::from("type");
49-
let is_sub_process = cmd.has_switch(Some(&switch)) == 1;
48+
let is_sub_process = cmd.has_switch(Some(&"type".into())) == 1;
5049

5150
Self {
5251
args,
@@ -61,8 +60,7 @@ impl<H: CefEventHandler> CefContextBuilder<H> {
6160

6261
pub(crate) fn execute_sub_process(&self) -> SetupError {
6362
let cmd = self.args.as_cmd_line().unwrap();
64-
let switch = CefString::from("type");
65-
let process_type = CefString::from(&cmd.switch_value(Some(&switch)));
63+
let process_type = CefString::from(&cmd.switch_value(Some(&"type".into())));
6664
let mut app = RenderProcessAppImpl::<H>::app();
6765
let ret = execute_process(Some(self.args.as_main_args()), Some(&mut app), std::ptr::null_mut());
6866
if ret >= 0 {
@@ -88,7 +86,7 @@ impl<H: CefEventHandler> CefContextBuilder<H> {
8886
Settings {
8987
windowless_rendering_enabled: 1,
9088
root_cache_path: instance_dir.to_str().map(CefString::from).unwrap(),
91-
cache_path: CefString::from(""),
89+
cache_path: "".into(),
9290
disable_signal_handlers: 1,
9391
log_severity,
9492
..Default::default()
@@ -103,7 +101,7 @@ impl<H: CefEventHandler> CefContextBuilder<H> {
103101
let app_root = exe.parent().and_then(|p| p.parent()).expect("bad path structure").parent().expect("bad path structure");
104102

105103
let settings = Settings {
106-
main_bundle_path: CefString::from(app_root.to_str().unwrap()),
104+
main_bundle_path: app_root.to_str().map(CefString::from).unwrap(),
107105
multi_threaded_message_loop: 0,
108106
external_message_pump: 1,
109107
no_sandbox: 1, // GPU helper crashes when running with sandbox
@@ -181,7 +179,7 @@ fn create_browser<H: CefEventHandler>(event_handler: H, instance_dir: TempDir, d
181179
let Some(mut incognito_request_context) = cef::request_context_create_context(
182180
Some(&RequestContextSettings {
183181
persist_session_cookies: 0,
184-
cache_path: CefString::from(""),
182+
cache_path: "".into(),
185183
..Default::default()
186184
}),
187185
Option::<&mut cef::RequestContextHandler>::None,
@@ -191,14 +189,14 @@ fn create_browser<H: CefEventHandler>(event_handler: H, instance_dir: TempDir, d
191189

192190
let mut scheme_handler_factory = SchemeHandlerFactory::new(SchemeHandlerFactoryImpl::new(event_handler.duplicate()));
193191
incognito_request_context.clear_scheme_handler_factories();
194-
incognito_request_context.register_scheme_handler_factory(Some(&CefString::from(RESOURCE_SCHEME)), Some(&CefString::from(RESOURCE_DOMAIN)), Some(&mut scheme_handler_factory));
192+
incognito_request_context.register_scheme_handler_factory(Some(&RESOURCE_SCHEME.into()), Some(&RESOURCE_DOMAIN.into()), Some(&mut scheme_handler_factory));
195193

196-
let url = CefString::from(format!("{RESOURCE_SCHEME}://{RESOURCE_DOMAIN}/").as_str());
194+
let url = format!("{RESOURCE_SCHEME}://{RESOURCE_DOMAIN}/");
197195

198196
let browser = browser_host_create_browser_sync(
199197
Some(&window_info),
200198
Some(&mut client),
201-
Some(&url),
199+
Some(&url.as_str().into()),
202200
Some(&settings),
203201
Option::<&mut DictionaryValue>::None,
204202
Some(&mut incognito_request_context),

desktop/src/cef/internal/browser_process_app.rs

Lines changed: 34 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,3 @@
1-
#[cfg(target_os = "linux")]
2-
use std::env;
3-
41
use cef::rc::{Rc, RcImpl};
52
use cef::sys::{_cef_app_t, cef_base_ref_counted_t};
63
use cef::{BrowserProcessHandler, CefString, ImplApp, ImplCommandLine, SchemeRegistrar, WrapApp};
@@ -33,81 +30,71 @@ impl<H: CefEventHandler> ImplApp for BrowserProcessAppImpl<H> {
3330

3431
fn on_before_command_line_processing(&self, _process_type: Option<&cef::CefString>, command_line: Option<&mut cef::CommandLine>) {
3532
if let Some(cmd) = command_line {
36-
cmd.append_switch_with_value(Some(&CefString::from("renderer-process-limit")), Some(&CefString::from("1")));
37-
cmd.append_switch_with_value(Some(&CefString::from("password-store")), Some(&CefString::from("basic")));
38-
cmd.append_switch_with_value(Some(&CefString::from("disk-cache-size")), Some(&CefString::from("0")));
39-
cmd.append_switch(Some(&CefString::from("incognito")));
40-
cmd.append_switch(Some(&CefString::from("no-first-run")));
41-
cmd.append_switch(Some(&CefString::from("no-default-browser-check")));
42-
cmd.append_switch(Some(&CefString::from("disable-component-update")));
43-
cmd.append_switch(Some(&CefString::from("disable-geolocation")));
44-
cmd.append_switch(Some(&CefString::from("disable-notifications")));
45-
cmd.append_switch(Some(&CefString::from("disable-audio-input")));
46-
cmd.append_switch(Some(&CefString::from("disable-audio-output")));
47-
cmd.append_switch(Some(&CefString::from("disable-sync")));
48-
cmd.append_switch(Some(&CefString::from("disable-file-system")));
49-
cmd.append_switch(Some(&CefString::from("disable-local-storage")));
50-
cmd.append_switch(Some(&CefString::from("disable-background-networking")));
51-
cmd.append_switch(Some(&CefString::from("disable-default-apps")));
52-
cmd.append_switch(Some(&CefString::from("disable-breakpad")));
53-
cmd.append_switch_with_value(Some(&CefString::from("disable-blink-features")), Some(&CefString::from("WebBluetooth,WebUSB,Serial")));
33+
cmd.append_switch_with_value(Some(&"renderer-process-limit".into()), Some(&"1".into()));
34+
cmd.append_switch_with_value(Some(&"password-store".into()), Some(&"basic".into()));
35+
cmd.append_switch_with_value(Some(&"disk-cache-size".into()), Some(&"0".into()));
36+
cmd.append_switch(Some(&"no-sandbox".into()));
37+
cmd.append_switch(Some(&"no-first-run".into()));
38+
cmd.append_switch(Some(&"noerrdialogs".into()));
39+
cmd.append_switch(Some(&"no-default-browser-check".into()));
40+
cmd.append_switch(Some(&"mute-audio".into()));
41+
cmd.append_switch(Some(&"use-fake-device-for-media-stream".into()));
42+
cmd.append_switch(Some(&"incognito".into()));
43+
cmd.append_switch(Some(&"disable-sync".into()));
44+
cmd.append_switch(Some(&"disable-file-system".into()));
45+
cmd.append_switch(Some(&"disable-component-update".into()));
46+
cmd.append_switch(Some(&"disable-geolocation".into()));
47+
cmd.append_switch(Some(&"disable-notifications".into()));
48+
cmd.append_switch(Some(&"disable-background-networking".into()));
49+
cmd.append_switch(Some(&"disable-default-apps".into()));
50+
cmd.append_switch(Some(&"disable-breakpad".into()));
51+
cmd.append_switch_with_value(Some(&"disable-blink-features".into()), Some(&"WebBluetooth,WebUSB,Serial".into()));
5452

5553
let extra_disabled_features = ["OptimizationHints", "OnDeviceModelService", "TranslateUI"];
56-
let disabled_features_switch = Some(&CefString::from("disable-features"));
54+
let disabled_features_switch = Some(&"disable-features".into());
5755
let disabled_features: String = CefString::from(&cmd.switch_value(disabled_features_switch))
5856
.to_string()
5957
.split(',')
6058
.chain(extra_disabled_features)
6159
.collect::<Vec<_>>()
6260
.join(",");
63-
cmd.append_switch_with_value(disabled_features_switch, Some(&CefString::from(disabled_features.as_str())));
61+
cmd.append_switch_with_value(disabled_features_switch, Some(&disabled_features.as_str().into()));
6462

6563
#[cfg(not(feature = "accelerated_paint"))]
6664
{
6765
// Disable GPU acceleration when accelerated_paint feature is not enabled
68-
cmd.append_switch(Some(&CefString::from("disable-gpu")));
69-
cmd.append_switch(Some(&CefString::from("disable-gpu-compositing")));
66+
cmd.append_switch(Some(&"disable-gpu".into()));
67+
cmd.append_switch(Some(&"disable-gpu-compositing".into()));
7068
}
7169

7270
#[cfg(feature = "accelerated_paint")]
7371
{
74-
// Enable GPU acceleration switches for better performance
75-
cmd.append_switch(Some(&CefString::from("enable-gpu-rasterization")));
76-
cmd.append_switch(Some(&CefString::from("enable-accelerated-2d-canvas")));
72+
// cmd.append_switch(Some(&"transparent-painting-enabled".into()));
73+
cmd.append_switch(Some(&"enable-zero-copy".into()));
74+
// cmd.append_switch(Some(&"off-screen-rendering-enabled".into()));
75+
// cmd.append_switch(Some(&"use-views".into()));
76+
cmd.append_switch(Some(&"enable-gpu-rasterization".into()));
77+
cmd.append_switch(Some(&"enable-accelerated-2d-canvas".into()));
7778
}
7879

7980
#[cfg(all(feature = "accelerated_paint", target_os = "linux"))]
8081
{
81-
// Use Vulkan for accelerated painting
82-
cmd.append_switch_with_value(Some(&CefString::from("use-angle")), Some(&CefString::from("vulkan")));
83-
}
84-
85-
// Tell CEF to use Wayland if available
86-
#[cfg(target_os = "linux")]
87-
{
88-
let use_wayland = env::var("WAYLAND_DISPLAY")
89-
.ok()
90-
.filter(|var| !var.is_empty())
91-
.or_else(|| env::var("WAYLAND_SOCKET").ok())
92-
.filter(|var| !var.is_empty())
93-
.is_some();
94-
if use_wayland {
95-
cmd.append_switch_with_value(Some(&CefString::from("ozone-platform")), Some(&CefString::from("wayland")));
96-
}
82+
cmd.append_switch_with_value(Some(&"use-angle".into()), Some(&"gl-egl".into()));
83+
cmd.append_switch_with_value(Some(&"ozone-platform".into()), Some(&"headless".into()));
9784
}
9885

9986
#[cfg(target_os = "macos")]
10087
{
10188
// Hide user prompt asking for keychain access
102-
cmd.append_switch(Some(&CefString::from("use-mock-keychain")));
89+
cmd.append_switch(Some(&"use-mock-keychain".into()));
10390
}
10491

10592
// Enable browser debugging via environment variable
10693
if let Some(env) = std::env::var("GRAPHITE_BROWSER_DEBUG_PORT").ok()
10794
&& let Some(port) = env.parse::<u16>().ok()
10895
{
109-
cmd.append_switch_with_value(Some(&CefString::from("remote-debugging-port")), Some(&CefString::from(port.to_string().as_str())));
110-
cmd.append_switch_with_value(Some(&CefString::from("remote-allow-origins")), Some(&CefString::from("*")));
96+
cmd.append_switch_with_value(Some(&"remote-debugging-port".into()), Some(&port.to_string().as_str().into()));
97+
cmd.append_switch_with_value(Some(&"remote-allow-origins".into()), Some(&"*".into()));
11198
}
11299
}
113100
}

desktop/src/cef/internal/render_process_handler.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use cef::rc::{ConvertReturnValue, Rc, RcImpl};
22
use cef::sys::{_cef_render_process_handler_t, cef_base_ref_counted_t, cef_render_process_handler_t, cef_v8_propertyattribute_t, cef_v8_value_create_array_buffer_with_copy};
3-
use cef::{CefString, ImplFrame, ImplRenderProcessHandler, ImplV8Context, ImplV8Value, V8Handler, V8Propertyattribute, V8Value, WrapRenderProcessHandler, v8_value_create_function};
3+
use cef::{ImplFrame, ImplRenderProcessHandler, ImplV8Context, ImplV8Value, V8Handler, V8Propertyattribute, V8Value, WrapRenderProcessHandler, v8_value_create_function};
44

55
use crate::cef::ipc::{MessageType, UnpackMessage, UnpackedMessage};
66

@@ -53,13 +53,13 @@ impl ImplRenderProcessHandler for RenderProcessHandlerImpl {
5353
let function_call = format!("window.{function_name}(window.{property_name})");
5454

5555
global.set_value_bykey(
56-
Some(&CefString::from(property_name)),
56+
Some(&property_name.into()),
5757
Some(&mut value),
5858
cef_v8_propertyattribute_t::V8_PROPERTY_ATTRIBUTE_READONLY.wrap_result(),
5959
);
6060

61-
if global.value_bykey(Some(&CefString::from(function_name))).is_some() {
62-
frame.execute_java_script(Some(&CefString::from(function_call.as_str())), None, 0);
61+
if global.value_bykey(Some(&function_name.into())).is_some() {
62+
frame.execute_java_script(Some(&function_call.as_str().into()), None, 0);
6363
}
6464

6565
if context.exit() == 0 {
@@ -78,7 +78,7 @@ impl ImplRenderProcessHandler for RenderProcessHandlerImpl {
7878
fn on_context_created(&self, _browser: Option<&mut cef::Browser>, _frame: Option<&mut cef::Frame>, context: Option<&mut cef::V8Context>) {
7979
let register_js_function = |context: &mut cef::V8Context, name: &'static str| {
8080
let mut v8_handler = V8Handler::new(RenderProcessV8HandlerImpl::new());
81-
let Some(mut function) = v8_value_create_function(Some(&CefString::from(name)), Some(&mut v8_handler)) else {
81+
let Some(mut function) = v8_value_create_function(Some(&name.into()), Some(&mut v8_handler)) else {
8282
tracing::error!("Failed to create V8 function {name}");
8383
return;
8484
};
@@ -87,7 +87,7 @@ impl ImplRenderProcessHandler for RenderProcessHandlerImpl {
8787
tracing::error!("Global object is not available in V8 context");
8888
return;
8989
};
90-
global.set_value_bykey(Some(&CefString::from(name)), Some(&mut function), V8Propertyattribute::default());
90+
global.set_value_bykey(Some(&name.into()), Some(&mut function), V8Propertyattribute::default());
9191
};
9292

9393
let Some(context) = context else {

desktop/src/cef/internal/resource_handler.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -46,15 +46,14 @@ impl ImplResourceHandler for ResourceHandlerImpl {
4646
if let Some(response) = response {
4747
if self.reader.is_some() {
4848
if let Some(mimetype) = &self.mimetype {
49-
let cef_mime = CefString::from(mimetype.as_str());
50-
response.set_mime_type(Some(&cef_mime));
49+
response.set_mime_type(Some(&mimetype.as_str().into()));
5150
} else {
5251
response.set_mime_type(None);
5352
}
5453
response.set_status(200);
5554
} else {
5655
response.set_status(404);
57-
response.set_mime_type(Some(&CefString::from("text/plain")));
56+
response.set_mime_type(Some(&"text/plain".into()));
5857
}
5958
}
6059
}

desktop/src/cef/internal/scheme_handler_factory.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ impl<H: CefEventHandler> SchemeHandlerFactoryImpl<H> {
2525
scheme_options |= cef_scheme_options_t::CEF_SCHEME_OPTION_FETCH_ENABLED as i32;
2626
scheme_options |= cef_scheme_options_t::CEF_SCHEME_OPTION_SECURE as i32;
2727
scheme_options |= cef_scheme_options_t::CEF_SCHEME_OPTION_CORS_ENABLED as i32;
28-
registrar.add_custom_scheme(Some(&CefString::from(RESOURCE_SCHEME)), scheme_options);
28+
registrar.add_custom_scheme(Some(&RESOURCE_SCHEME.into()), scheme_options);
2929
}
3030
}
3131
}

desktop/src/cef/ipc.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
use cef::{CefString, Frame, ImplBinaryValue, ImplFrame, ImplListValue, ImplProcessMessage, ImplV8Context, ProcessId, V8Context, sys::cef_process_id_t};
1+
use cef::{Frame, ImplBinaryValue, ImplFrame, ImplListValue, ImplProcessMessage, ImplV8Context, ProcessId, V8Context, sys::cef_process_id_t};
22

33
pub(crate) enum MessageType {
44
Initialized,
@@ -67,7 +67,7 @@ impl SendMessage for Frame {
6767
fn send_message(&self, message_type: MessageType, message: &[u8]) {
6868
let MessageInfo { name, target } = message_type.into();
6969

70-
let Some(mut process_message) = cef::process_message_create(Some(&CefString::from(name.as_str()))) else {
70+
let Some(mut process_message) = cef::process_message_create(Some(&name.as_str().into())) else {
7171
tracing::error!("Failed to create process message: {}", name);
7272
return;
7373
};

0 commit comments

Comments
 (0)