diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index bb44989..71ac40c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -28,7 +28,7 @@ jobs: if: runner.os == 'linux' - name: Build & run tests run: | - cargo test --workspace --no-default-features --tests --exclude demo + cargo test --workspace --no-default-features --tests all-doc-tests: runs-on: ubuntu-latest steps: diff --git a/Cargo.lock b/Cargo.lock index 1e44e0f..131b1a7 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -47,7 +47,7 @@ dependencies = [ "accesskit", "accesskit_consumer", "hashbrown 0.15.5", - "objc2", + "objc2 0.5.2", "objc2-app-kit", "objc2-foundation", ] @@ -260,7 +260,7 @@ version = "0.38.0+1.3.281" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0bb44936d800fea8f016d7f2311c6a4f97aebd5dc86f09906139ec848cf3a46f" dependencies = [ - "libloading", + "libloading 0.8.9", ] [[package]] @@ -1788,7 +1788,7 @@ version = "0.5.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "2c132eebf10f5cad5289222520a4a058514204aed6d791f1cf4fe8088b82d15f" dependencies = [ - "objc2", + "objc2 0.5.2", ] [[package]] @@ -1883,6 +1883,39 @@ dependencies = [ "wayland-client", ] +[[package]] +name = "camino" +version = "1.2.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e629a66d692cb9ff1a1c664e41771b3dcaf961985a9774c0eb0bd1b51cf60a48" +dependencies = [ + "serde_core", +] + +[[package]] +name = "cargo-platform" +version = "0.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "87a0c0e6148f11f01f32650a2ea02d532b2ad4e81d8bd41e6e565b5adc5e6082" +dependencies = [ + "serde", + "serde_core", +] + +[[package]] +name = "cargo_metadata" +version = "0.23.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ef987d17b0a113becdd19d3d0022d04d7ef41f9efe4f3fb63ac44ba61df3ade9" +dependencies = [ + "camino", + "cargo-platform", + "semver", + "serde", + "serde_json", + "thiserror 2.0.17", +] + [[package]] name = "cc" version = "1.2.43" @@ -1897,20 +1930,29 @@ dependencies = [ [[package]] name = "cef" -version = "139.8.0+139.0.40" +version = "144.2.0+144.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c04e0abf502cba8e3642d0d38551c49a3bfa9eba8a74f83f8dca39e249ccf657" +checksum = "8743b7a17569f5a0b27a1ef72a2275dc096ae32263bf35fc5541f46e73084ec5" dependencies = [ + "anyhow", + "cargo_metadata", "cef-dll-sys", - "libloading", + "clap", + "libloading 0.9.0", + "objc2 0.6.3", + "plist", + "semver", + "serde", + "serde_json", + "thiserror 2.0.17", "windows-sys 0.61.2", ] [[package]] name = "cef-dll-sys" -version = "139.8.0+139.0.40" +version = "144.2.0+144.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0478a63d0a32b000a34d7905367fbcb805cc75e6b5c14b8e3bfdb4184ff4e417" +checksum = "cf6882e1e10fe7ff0c9b1815e8a2943c0975be5bb48f15ca3b4cbb9dc4329d0e" dependencies = [ "anyhow", "cmake", @@ -1953,7 +1995,7 @@ checksum = "0b023947811758c97c59bf9d1c188fd619ad4718dcaa767947df1cadb14f39f4" dependencies = [ "glob", "libc", - "libloading", + "libloading 0.8.9", ] [[package]] @@ -2400,7 +2442,7 @@ version = "0.5.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "330c60081dcc4c72131f8eb70510f1ac07223e5d4163db481a04a0befcffa412" dependencies = [ - "libloading", + "libloading 0.8.9", ] [[package]] @@ -2426,9 +2468,9 @@ checksum = "117240f60069e65410b3ae1bb213295bd828f707b5bec6596a1afc8793ce0cbc" [[package]] name = "download-cef" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d98178d9254efef0f69c1f584713d69c790ec00668cd98f783a5085fbefdbddc" +checksum = "6002a6b95f9f3bbe5693ac02a03221a8e3af6c9f5f4539f5734a8d6cde1a3616" dependencies = [ "bzip2", "clap", @@ -3430,7 +3472,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6aae1df220ece3c0ada96b8153459b67eebe9ae9212258bb0134ae60416fdf76" dependencies = [ "libc", - "libloading", + "libloading 0.8.9", "pkg-config", ] @@ -3508,6 +3550,16 @@ dependencies = [ "windows-link 0.2.1", ] +[[package]] +name = "libloading" +version = "0.9.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "754ca22de805bb5744484a5b151a9e1a8e837d5dc232c2d7d8c2e3492edc8b60" +dependencies = [ + "cfg-if", + "windows-link 0.2.1", +] + [[package]] name = "libm" version = "0.2.15" @@ -3929,6 +3981,15 @@ dependencies = [ "objc2-encode", ] +[[package]] +name = "objc2" +version = "0.6.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b7c2599ce0ec54857b29ce62166b0ed9b4f6f1a70ccc9a71165b6154caca8c05" +dependencies = [ + "objc2-encode", +] + [[package]] name = "objc2-app-kit" version = "0.2.2" @@ -3938,7 +3999,7 @@ dependencies = [ "bitflags 2.10.0", "block2", "libc", - "objc2", + "objc2 0.5.2", "objc2-core-data", "objc2-core-image", "objc2-foundation", @@ -3953,7 +4014,7 @@ checksum = "74dd3b56391c7a0596a295029734d3c1c5e7e510a4cb30245f8221ccea96b009" dependencies = [ "bitflags 2.10.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", "objc2-foundation", ] @@ -3965,7 +4026,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a5ff520e9c33812fd374d8deecef01d4a840e7b41862d849513de77e44aa4889" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-foundation", ] @@ -3977,7 +4038,7 @@ checksum = "617fbf49e071c178c0b24c080767db52958f716d9eabdf0890523aeae54773ef" dependencies = [ "bitflags 2.10.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-foundation", ] @@ -3997,7 +4058,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "55260963a527c99f1819c4f8e3b47fe04f9650694ef348ffd2227e8196d34c80" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-foundation", "objc2-metal", ] @@ -4009,7 +4070,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "000cfee34e683244f284252ee206a27953279d370e309649dc3ee317b37e5781" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-contacts", "objc2-foundation", ] @@ -4030,7 +4091,7 @@ dependencies = [ "block2", "dispatch", "libc", - "objc2", + "objc2 0.5.2", ] [[package]] @@ -4050,7 +4111,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a1a1ae721c5e35be65f01a03b6d2ac13a54cb4fa70d8a5da293d7b0020261398" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-app-kit", "objc2-foundation", ] @@ -4063,7 +4124,7 @@ checksum = "dd0cba1276f6023976a406a14ffa85e1fdd19df6b0f737b063b95f6c8c7aadd6" dependencies = [ "bitflags 2.10.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-foundation", ] @@ -4075,7 +4136,7 @@ checksum = "e42bee7bff906b14b167da2bac5efe6b6a07e6f7c0a21a7308d40c960242dc7a" dependencies = [ "bitflags 2.10.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-foundation", "objc2-metal", ] @@ -4086,7 +4147,7 @@ version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0a684efe3dec1b305badae1a28f6555f6ddd3bb2c2267896782858d5a78404dc" dependencies = [ - "objc2", + "objc2 0.5.2", "objc2-foundation", ] @@ -4098,7 +4159,7 @@ checksum = "b8bb46798b20cd6b91cbd113524c490f1686f4c4e8f49502431415f3512e2b6f" dependencies = [ "bitflags 2.10.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-cloud-kit", "objc2-core-data", "objc2-core-image", @@ -4118,7 +4179,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "44fa5f9748dbfe1ca6c0b79ad20725a11eca7c2218bceb4b005cb1be26273bfe" dependencies = [ "block2", - "objc2", + "objc2 0.5.2", "objc2-foundation", ] @@ -4130,7 +4191,7 @@ checksum = "76cfcbf642358e8689af64cee815d139339f3ed8ad05103ed5eaf73db8d84cb3" dependencies = [ "bitflags 2.10.0", "block2", - "objc2", + "objc2 0.5.2", "objc2-core-location", "objc2-foundation", ] @@ -4319,6 +4380,19 @@ version = "0.3.32" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c" +[[package]] +name = "plist" +version = "1.8.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "740ebea15c5d1428f910cd1a5f52cebf8d25006245ed8ade92702f4943d91e07" +dependencies = [ + "base64", + "indexmap", + "quick-xml 0.38.4", + "serde", + "time", +] + [[package]] name = "png" version = "0.18.0" @@ -4442,6 +4516,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "quick-xml" +version = "0.38.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b66c2058c55a409d601666cffe35f04333cf1013010882cec174a7467cd4e21c" +dependencies = [ + "memchr", +] + [[package]] name = "quote" version = "1.0.41" @@ -4792,6 +4875,10 @@ name = "semver" version = "1.0.27" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2" +dependencies = [ + "serde", + "serde_core", +] [[package]] name = "send_wrapper" @@ -5735,7 +5822,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "54cb1e9dc49da91950bdfd8b848c49330536d9d1fb03d4bfec8cae50caa50ae3" dependencies = [ "proc-macro2", - "quick-xml", + "quick-xml 0.37.5", "quote", ] @@ -5890,7 +5977,7 @@ dependencies = [ "js-sys", "khronos-egl", "libc", - "libloading", + "libloading 0.8.9", "log", "metal", "naga", @@ -6506,7 +6593,7 @@ dependencies = [ "libc", "memmap2", "ndk 0.9.0", - "objc2", + "objc2 0.5.2", "objc2-app-kit", "objc2-foundation", "objc2-ui-kit", @@ -6576,7 +6663,7 @@ dependencies = [ "as-raw-xcb-connection", "gethostname", "libc", - "libloading", + "libloading 0.8.9", "once_cell", "rustix 1.1.2", "x11rb-protocol", diff --git a/Cargo.toml b/Cargo.toml index 2e53e4f..89d43ae 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -38,8 +38,8 @@ bevy = { version = "0.18", default-features = false, features = [ "picking", ] } bevy_remote = "0.18" -cef = { version = "139" } -cef-dll-sys = { version = "139.0", features = ["sandbox"] } +cef = { version = "144.2.0+144.0.11" } +cef-dll-sys = { version = "144.2.0+144.0.11", features = ["sandbox"] } bevy_cef = { path = "." , version = "0.2.0-dev" } bevy_cef_core = { path = "crates/bevy_cef_core", version = "0.2.0-dev" } async-channel = { version = "2.5" } diff --git a/Makefile b/Makefile index ffe5343..ea037ee 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,13 @@ .PHONY: fix install BIN := bevy_cef_debug_render_process -CEF_LIB := $(HOME)/.local/share/cef/Chromium Embedded Framework.framework/Libraries +CEF_LIB := $(HOME)/.local/share/Chromium Embedded Framework.framework/Libraries .PHONY: fix install BIN := bevy_cef_debug_render_process -CEF_LIB := $(HOME)/.local/share/cef/Chromium Embedded Framework.framework/Libraries +CEF_LIB := $(HOME)/.local/share/Chromium Embedded Framework.framework/Libraries CARGO_BIN := $(HOME)/.cargo/bin fix: diff --git a/crates/bevy_cef_core/src/browser_process/app.rs b/crates/bevy_cef_core/src/browser_process/app.rs index a0bf34a..33690f4 100644 --- a/crates/bevy_cef_core/src/browser_process/app.rs +++ b/crates/bevy_cef_core/src/browser_process/app.rs @@ -53,6 +53,9 @@ impl ImplApp for BrowserProcessAppBuilder { return; }; command_line.append_switch(Some(&"use-mock-keychain".into())); + // command_line.append_switch(Some(&"disable-gpu".into())); + // command_line.append_switch(Some(&"disable-gpu-compositing".into())); + // command_line.append_switch(Some(&" disable-gpu-shader-disk-cache".into())); } fn browser_process_handler(&self) -> Option { diff --git a/crates/bevy_cef_core/src/browser_process/browsers.rs b/crates/bevy_cef_core/src/browser_process/browsers.rs index f186a56..178b181 100644 --- a/crates/bevy_cef_core/src/browser_process/browsers.rs +++ b/crates/bevy_cef_core/src/browser_process/browsers.rs @@ -148,9 +148,9 @@ impl Browsers { x: position.x as i32, y: position.y as i32, modifiers: match button { - PointerButton::Primary => cef_event_flags_t::EVENTFLAG_LEFT_MOUSE_BUTTON, - PointerButton::Secondary => cef_event_flags_t::EVENTFLAG_RIGHT_MOUSE_BUTTON, - PointerButton::Middle => cef_event_flags_t::EVENTFLAG_MIDDLE_MOUSE_BUTTON, + PointerButton::Primary => cef_event_flags_t::EVENTFLAG_LEFT_MOUSE_BUTTON.0, + PointerButton::Secondary => cef_event_flags_t::EVENTFLAG_RIGHT_MOUSE_BUTTON.0, + PointerButton::Middle => cef_event_flags_t::EVENTFLAG_MIDDLE_MOUSE_BUTTON.0, } as _, // No modifiers for simplicity }; let mouse_button = match button { @@ -335,8 +335,7 @@ impl Browsers { let replacement_range = Self::ime_caret_range_for(browser); browser.host.ime_set_composition( Some(&text.into()), - underlines.len(), - Some(&underlines[0]), + Some(&underlines), Some(&replacement_range), Some(&selection_range), ); @@ -434,16 +433,19 @@ impl Browsers { } } +#[allow(clippy::unnecessary_cast)] pub fn modifiers_from_mouse_buttons<'a>(buttons: impl IntoIterator) -> u32 { - let mut modifiers = cef_event_flags_t::EVENTFLAG_NONE as u32; + let mut modifiers = cef_event_flags_t::EVENTFLAG_NONE.0 as u32; for button in buttons { match button { - MouseButton::Left => modifiers |= cef_event_flags_t::EVENTFLAG_LEFT_MOUSE_BUTTON as u32, + MouseButton::Left => { + modifiers |= cef_event_flags_t::EVENTFLAG_LEFT_MOUSE_BUTTON.0 as u32 + } MouseButton::Right => { - modifiers |= cef_event_flags_t::EVENTFLAG_RIGHT_MOUSE_BUTTON as u32 + modifiers |= cef_event_flags_t::EVENTFLAG_RIGHT_MOUSE_BUTTON.0 as u32 } MouseButton::Middle => { - modifiers |= cef_event_flags_t::EVENTFLAG_MIDDLE_MOUSE_BUTTON as u32 + modifiers |= cef_event_flags_t::EVENTFLAG_MIDDLE_MOUSE_BUTTON.0 as u32 } _ => {} } @@ -498,13 +500,14 @@ mod tests { use bevy::prelude::*; #[test] + #[allow(clippy::unnecessary_cast)] fn test_modifiers_from_mouse_buttons() { let buttons = vec![&MouseButton::Left, &MouseButton::Right]; let modifiers = modifiers_from_mouse_buttons(buttons); assert_eq!( modifiers, - cef_dll_sys::cef_event_flags_t::EVENTFLAG_LEFT_MOUSE_BUTTON as u32 - | cef_dll_sys::cef_event_flags_t::EVENTFLAG_RIGHT_MOUSE_BUTTON as u32 + cef_dll_sys::cef_event_flags_t::EVENTFLAG_LEFT_MOUSE_BUTTON.0 as u32 + | cef_dll_sys::cef_event_flags_t::EVENTFLAG_RIGHT_MOUSE_BUTTON.0 as u32 ); } } diff --git a/crates/bevy_cef_core/src/browser_process/browsers/keyboard.rs b/crates/bevy_cef_core/src/browser_process/browsers/keyboard.rs index 90c1fe1..fdafafb 100644 --- a/crates/bevy_cef_core/src/browser_process/browsers/keyboard.rs +++ b/crates/bevy_cef_core/src/browser_process/browsers/keyboard.rs @@ -8,26 +8,27 @@ use bevy::input::keyboard::KeyboardInput; use bevy::prelude::{ButtonInput, KeyCode}; use cef_dll_sys::{cef_event_flags_t, cef_key_event_t, cef_key_event_type_t}; +#[allow(clippy::unnecessary_cast)] pub fn keyboard_modifiers(input: &ButtonInput) -> u32 { let mut flags = 0u32; if input.pressed(KeyCode::ControlLeft) || input.pressed(KeyCode::ControlRight) { - flags |= cef_event_flags_t::EVENTFLAG_CONTROL_DOWN as u32; + flags |= cef_event_flags_t::EVENTFLAG_CONTROL_DOWN.0 as u32; } if input.pressed(KeyCode::AltLeft) || input.pressed(KeyCode::AltRight) { - flags |= cef_event_flags_t::EVENTFLAG_ALT_DOWN as u32; + flags |= cef_event_flags_t::EVENTFLAG_ALT_DOWN.0 as u32; } if input.pressed(KeyCode::ShiftLeft) || input.pressed(KeyCode::ShiftRight) { - flags |= cef_event_flags_t::EVENTFLAG_SHIFT_DOWN as u32; + flags |= cef_event_flags_t::EVENTFLAG_SHIFT_DOWN.0 as u32; } if input.pressed(KeyCode::SuperLeft) || input.pressed(KeyCode::SuperRight) { - flags |= cef_event_flags_t::EVENTFLAG_COMMAND_DOWN as u32; + flags |= cef_event_flags_t::EVENTFLAG_COMMAND_DOWN.0 as u32; } if input.pressed(KeyCode::CapsLock) { - flags |= cef_event_flags_t::EVENTFLAG_CAPS_LOCK_ON as u32; + flags |= cef_event_flags_t::EVENTFLAG_CAPS_LOCK_ON.0 as u32; } if input.pressed(KeyCode::NumLock) { - flags |= cef_event_flags_t::EVENTFLAG_NUM_LOCK_ON as u32; + flags |= cef_event_flags_t::EVENTFLAG_NUM_LOCK_ON.0 as u32; } flags diff --git a/crates/bevy_cef_core/src/browser_process/renderer_handler.rs b/crates/bevy_cef_core/src/browser_process/renderer_handler.rs index 198ec3d..871abb3 100644 --- a/crates/bevy_cef_core/src/browser_process/renderer_handler.rs +++ b/crates/bevy_cef_core/src/browser_process/renderer_handler.rs @@ -110,8 +110,7 @@ impl ImplRenderHandler for RenderHandlerBuilder { &self, _browser: Option<&mut Browser>, type_: PaintElementType, - _dirty_rects_count: usize, - _dirty_rects: Option<&cef::Rect>, + _dirty_rects: Option<&[cef::Rect]>, buffer: *const u8, width: c_int, height: c_int, diff --git a/crates/bevy_cef_core/src/debug.rs b/crates/bevy_cef_core/src/debug.rs index 1e97dbd..87722cf 100644 --- a/crates/bevy_cef_core/src/debug.rs +++ b/crates/bevy_cef_core/src/debug.rs @@ -21,7 +21,6 @@ impl DebugLibraryLoader { .unwrap() .join(".local") .join("share") - .join("cef") .join(Self::FRAMEWORK_PATH) .canonicalize() .unwrap(); diff --git a/crates/bevy_cef_core/src/util.rs b/crates/bevy_cef_core/src/util.rs index cc7e709..2b8298d 100644 --- a/crates/bevy_cef_core/src/util.rs +++ b/crates/bevy_cef_core/src/util.rs @@ -35,11 +35,11 @@ pub fn debug_chromium_libraries_path() -> PathBuf { } pub fn debug_chromium_embedded_framework_dir_path() -> PathBuf { - debug_cef_path().join("Chromium Embedded Framework.framework") -} - -pub fn debug_cef_path() -> PathBuf { - home_dir().unwrap().join(".local").join("share").join("cef") + home_dir() + .unwrap() + .join(".local") + .join("share") + .join("Chromium Embedded Framework.framework") } pub fn debug_render_process_path() -> PathBuf { diff --git a/crates/bevy_cef_debug_render_process/Cargo.toml b/crates/bevy_cef_debug_render_process/Cargo.toml index 8a6826e..ecfeb1a 100644 --- a/crates/bevy_cef_debug_render_process/Cargo.toml +++ b/crates/bevy_cef_debug_render_process/Cargo.toml @@ -12,5 +12,5 @@ categories.workspace = true [dependencies] cef = { workspace = true } -bevy_cef_core = { workspace = true } +bevy_cef_core = { workspace = true, features = ["debug"] } cef-dll-sys = { workspace = true } diff --git a/crates/bevy_cef_debug_render_process/src/main.rs b/crates/bevy_cef_debug_render_process/src/main.rs index 7876d5e..9e6e8c0 100644 --- a/crates/bevy_cef_debug_render_process/src/main.rs +++ b/crates/bevy_cef_debug_render_process/src/main.rs @@ -3,10 +3,10 @@ use cef::{args::Args, *}; fn main() { let args = Args::new(); + #[cfg(target_os = "macos")] let _loader = { - let loader = - cef::library_loader::LibraryLoader::new(&std::env::current_exe().unwrap(), true); + let loader = DebugLibraryLoader::new(); assert!(loader.load()); loader };