feat: Add configurable CEF command line flags (#16)
## Summary
- Add CommandLineConfig struct for CEF command line switches
- Use direct struct initialization with optional helper methods
- Change default to secure: only use-mock-keychain enabled on macOS debug builds
- Add comprehensive documentation with usage examples
## Usage
```rust
use bevy_cef::prelude::*;
// Default (secure, includes use-mock-keychain on macOS debug)
app.add_plugins((DefaultPlugins, CefPlugin::default()));
// Add switches while preserving defaults (recommended)
app.add_plugins((
DefaultPlugins,
CefPlugin {
command_line_config: CommandLineConfig::default()
.with_switch("disable-gpu")
.with_switch_value("remote-debugging-port", "9222"),
},
));
// Full customization with direct initialization
app.add_plugins((
DefaultPlugins,
CefPlugin {
command_line_config: CommandLineConfig {
switches: vec!["disable-gpu"],
switch_values: vec![("remote-debugging-port", "9222")],
},
},
));
```
This commit is contained in:
@@ -8,7 +8,9 @@ use cef::{Settings, api_hash, execute_process, initialize, shutdown, sys};
|
||||
///
|
||||
/// - Windows and Linux: Support [`multi_threaded_message_loop`](https://cef-builds.spotifycdn.com/docs/106.1/structcef__settings__t.html#a518ac90db93ca5133a888faa876c08e0), so it is used.
|
||||
/// - macOS: Calls [`CefDoMessageLoopWork`](https://cef-builds.spotifycdn.com/docs/106.1/cef__app_8h.html#a830ae43dcdffcf4e719540204cefdb61) every frame.
|
||||
pub struct MessageLoopPlugin;
|
||||
pub struct MessageLoopPlugin {
|
||||
pub config: CommandLineConfig,
|
||||
}
|
||||
|
||||
impl Plugin for MessageLoopPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
@@ -19,7 +21,7 @@ impl Plugin for MessageLoopPlugin {
|
||||
let args = Args::new();
|
||||
let (tx, rx) = std::sync::mpsc::channel();
|
||||
|
||||
let mut cef_app = BrowserProcessAppBuilder::build(tx);
|
||||
let mut cef_app = BrowserProcessAppBuilder::build(tx, self.config.clone());
|
||||
let ret = execute_process(
|
||||
Some(args.as_main_args()),
|
||||
Some(&mut cef_app),
|
||||
|
||||
11
src/lib.rs
11
src/lib.rs
@@ -16,21 +16,28 @@ use crate::mute::AudioMutePlugin;
|
||||
use crate::prelude::{IpcPlugin, NavigationPlugin, WebviewPlugin};
|
||||
use crate::zoom::ZoomPlugin;
|
||||
use bevy::prelude::*;
|
||||
use bevy_cef_core::prelude::CommandLineConfig;
|
||||
use bevy_remote::RemotePlugin;
|
||||
|
||||
pub mod prelude {
|
||||
pub use crate::{CefPlugin, RunOnMainThread, common::*, navigation::*, webview::prelude::*};
|
||||
pub use bevy_cef_core::prelude::CommandLineConfig;
|
||||
}
|
||||
|
||||
pub struct RunOnMainThread;
|
||||
|
||||
pub struct CefPlugin;
|
||||
#[derive(Debug, Default)]
|
||||
pub struct CefPlugin {
|
||||
pub command_line_config: CommandLineConfig,
|
||||
}
|
||||
|
||||
impl Plugin for CefPlugin {
|
||||
fn build(&self, app: &mut App) {
|
||||
app.add_plugins((
|
||||
LocalHostPlugin,
|
||||
MessageLoopPlugin,
|
||||
MessageLoopPlugin {
|
||||
config: self.command_line_config.clone(),
|
||||
},
|
||||
WebviewCoreComponentsPlugin,
|
||||
WebviewPlugin,
|
||||
IpcPlugin,
|
||||
|
||||
Reference in New Issue
Block a user