Merge pull request #26 from wravery/fix-224

Fix 224
This commit is contained in:
Bill Avery
2025-10-03 11:28:56 -07:00
committed by GitHub
5 changed files with 388 additions and 86 deletions

View File

@@ -20727,28 +20727,30 @@ mod impl_cef_life_span_handler_t {
Some(WrapParamRef::<WindowInfo, _>::from(arg_window_info))
};
let arg_window_info = arg_window_info.as_mut().map(|arg| arg.as_mut());
let mut arg_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
let out_client = arg_client;
let mut wrap_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(Client(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_client = Some(&mut arg_client);
let arg_client = Some(&mut wrap_client);
let mut arg_settings = if arg_settings.is_null() {
None
} else {
Some(WrapParamRef::<BrowserSettings, _>::from(arg_settings))
};
let arg_settings = arg_settings.as_mut().map(|arg| arg.as_mut());
let mut arg_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
let out_extra_info = arg_extra_info;
let mut wrap_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(DictionaryValue(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_extra_info = Some(&mut arg_extra_info);
let arg_extra_info = Some(&mut wrap_extra_info);
let mut arg_no_javascript_access = if arg_no_javascript_access.is_null() {
None
} else {
@@ -20757,7 +20759,7 @@ mod impl_cef_life_span_handler_t {
))
};
let arg_no_javascript_access = arg_no_javascript_access.as_mut().map(|arg| arg.as_mut());
ImplLifeSpanHandler::on_before_popup(
let result = ImplLifeSpanHandler::on_before_popup(
&arg_self_.interface,
arg_browser,
arg_frame,
@@ -20772,7 +20774,17 @@ mod impl_cef_life_span_handler_t {
arg_settings,
arg_extra_info,
arg_no_javascript_access,
)
);
if let (Some(out_client), Some(wrap_client)) = (unsafe { out_client.as_mut() }, wrap_client)
{
*out_client = wrap_client.wrap_result();
}
if let (Some(out_extra_info), Some(wrap_extra_info)) =
(unsafe { out_extra_info.as_mut() }, wrap_extra_info)
{
*out_extra_info = wrap_extra_info.wrap_result();
}
result
}
extern "C" fn on_before_popup_aborted<I: ImplLifeSpanHandler>(
self_: *mut _cef_life_span_handler_t,
@@ -20827,28 +20839,30 @@ mod impl_cef_life_span_handler_t {
Some(WrapParamRef::<WindowInfo, _>::from(arg_window_info))
};
let arg_window_info = arg_window_info.as_mut().map(|arg| arg.as_mut());
let mut arg_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
let out_client = arg_client;
let mut wrap_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(Client(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_client = Some(&mut arg_client);
let arg_client = Some(&mut wrap_client);
let mut arg_settings = if arg_settings.is_null() {
None
} else {
Some(WrapParamRef::<BrowserSettings, _>::from(arg_settings))
};
let arg_settings = arg_settings.as_mut().map(|arg| arg.as_mut());
let mut arg_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
let out_extra_info = arg_extra_info;
let mut wrap_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(DictionaryValue(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_extra_info = Some(&mut arg_extra_info);
let arg_extra_info = Some(&mut wrap_extra_info);
let mut arg_use_default_window = if arg_use_default_window.is_null() {
None
} else {
@@ -20857,7 +20871,7 @@ mod impl_cef_life_span_handler_t {
))
};
let arg_use_default_window = arg_use_default_window.as_mut().map(|arg| arg.as_mut());
ImplLifeSpanHandler::on_before_dev_tools_popup(
let result = ImplLifeSpanHandler::on_before_dev_tools_popup(
&arg_self_.interface,
arg_browser,
arg_window_info,
@@ -20865,7 +20879,16 @@ mod impl_cef_life_span_handler_t {
arg_settings,
arg_extra_info,
arg_use_default_window,
)
);
if let (Some(out_client), Some(wrap_client)) = (unsafe { out_client.as_mut() }, wrap_client)
{
*out_client = wrap_client.wrap_result();
}
if let (Some(out_extra_info), Some(wrap_extra_info)) =
(unsafe { out_extra_info.as_mut() }, wrap_extra_info)
{
*out_extra_info = wrap_extra_info.wrap_result();
}
}
extern "C" fn on_after_created<I: ImplLifeSpanHandler>(
self_: *mut _cef_life_span_handler_t,
@@ -30082,28 +30105,34 @@ mod impl_cef_v8_handler_t {
.collect::<Vec<_>>()
});
let arg_arguments = vec_arguments.as_deref();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Handler::execute(
let result = ImplV8Handler::execute(
&arg_self_.interface,
arg_name,
arg_object,
arg_arguments,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
}
impl ImplV8Handler for V8Handler {
@@ -30303,27 +30332,33 @@ mod impl_cef_v8_accessor_t {
let mut arg_object =
unsafe { arg_object.as_mut() }.map(|arg| V8Value(unsafe { RefGuard::from_raw(arg) }));
let arg_object = arg_object.as_mut();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Accessor::get(
let result = ImplV8Accessor::get(
&arg_self_.interface,
arg_name,
arg_object,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
extern "C" fn set<I: ImplV8Accessor>(
self_: *mut _cef_v8_accessor_t,
@@ -30586,27 +30621,33 @@ mod impl_cef_v8_interceptor_t {
let mut arg_object =
unsafe { arg_object.as_mut() }.map(|arg| V8Value(unsafe { RefGuard::from_raw(arg) }));
let arg_object = arg_object.as_mut();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Interceptor::byname(
let result = ImplV8Interceptor::byname(
&arg_self_.interface,
arg_name,
arg_object,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
extern "C" fn get_byindex<I: ImplV8Interceptor>(
self_: *mut _cef_v8_interceptor_t,
@@ -30622,27 +30663,33 @@ mod impl_cef_v8_interceptor_t {
let mut arg_object =
unsafe { arg_object.as_mut() }.map(|arg| V8Value(unsafe { RefGuard::from_raw(arg) }));
let arg_object = arg_object.as_mut();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Interceptor::byindex(
let result = ImplV8Interceptor::byindex(
&arg_self_.interface,
arg_index,
arg_object,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
extern "C" fn set_byname<I: ImplV8Interceptor>(
self_: *mut _cef_v8_interceptor_t,

View File

@@ -37,3 +37,141 @@ pub use x86_64_apple_darwin::*;
mod aarch64_apple_darwin;
#[cfg(all(target_os = "macos", target_arch = "aarch64"))]
pub use aarch64_apple_darwin::*;
#[cfg(test)]
mod test {
use super::*;
use crate::{rc::*, sys};
use std::{cell::RefCell, ptr};
#[derive(Default)]
struct CallInfo {
extra_info: RefCell<Option<DictionaryValue>>,
}
struct TestLifeSpanHandler {
object: *mut RcImpl<sys::_cef_life_span_handler_t, Self>,
call_info: std::rc::Rc<CallInfo>,
}
impl ImplLifeSpanHandler for TestLifeSpanHandler {
fn get_raw(&self) -> *mut sys::_cef_life_span_handler_t {
self.object.cast()
}
fn on_before_popup(
&self,
_browser: Option<&mut Browser>,
_frame: Option<&mut Frame>,
_popup_id: ::std::os::raw::c_int,
_target_url: Option<&CefString>,
_target_frame_name: Option<&CefString>,
_target_disposition: WindowOpenDisposition,
_user_gesture: ::std::os::raw::c_int,
_popup_features: Option<&PopupFeatures>,
_window_info: Option<&mut WindowInfo>,
_client: Option<&mut Option<Client>>,
_settings: Option<&mut BrowserSettings>,
extra_info: Option<&mut Option<DictionaryValue>>,
_no_javascript_access: Option<&mut ::std::os::raw::c_int>,
) -> ::std::os::raw::c_int {
let extra_info = extra_info.expect("extra_info is required");
*extra_info = self.call_info.extra_info.take();
1
}
}
impl WrapLifeSpanHandler for TestLifeSpanHandler {
fn wrap_rc(&mut self, object: *mut RcImpl<sys::_cef_life_span_handler_t, Self>) {
self.object = object;
}
}
impl TestLifeSpanHandler {
fn new(call_info: std::rc::Rc<CallInfo>) -> LifeSpanHandler {
LifeSpanHandler::new(Self {
object: std::ptr::null_mut(),
call_info,
})
}
}
impl Clone for TestLifeSpanHandler {
fn clone(&self) -> Self {
let object = unsafe {
let rc_impl = &mut *self.object;
rc_impl.interface.add_ref();
self.object
};
Self {
object,
call_info: self.call_info.clone(),
}
}
}
impl Rc for TestLifeSpanHandler {
fn as_base(&self) -> &sys::cef_base_ref_counted_t {
unsafe {
let base = &*self.object;
std::mem::transmute(&base.cef_object)
}
}
}
#[test]
fn dictionary_value_out_param() {
#[cfg(target_os = "macos")]
unsafe {
use std::{ffi::CString, os::unix::ffi::OsStrExt};
let cef_dir = sys::get_cef_dir().expect("CEF not found");
let framework_dir = cef_dir
.join(sys::FRAMEWORK_PATH)
.canonicalize()
.expect("failed to get framework path");
let framework_dir =
CString::new(framework_dir.as_os_str().as_bytes()).expect("invalid path");
assert_eq!(sys::cef_load_library(framework_dir.as_ptr().cast()), 1);
}
assert_eq!(initialize(None, None, None, ptr::null_mut()), 0);
let _ = api_hash(sys::CEF_API_VERSION_LAST, 0);
let call_info = std::rc::Rc::new(CallInfo::default());
let extra_info = dictionary_value_create().expect("failed to create dictionary");
let test_key = CefString::from("testKey");
let test_value = CefString::from("testValue");
extra_info.set_string(Some(&test_key), Some(&test_value));
*call_info.extra_info.borrow_mut() = Some(extra_info);
let mut extra_info = None;
let handler = TestLifeSpanHandler::new(call_info);
assert_eq!(
1,
handler.on_before_popup(
None,
None,
1,
None,
None,
sys::cef_window_open_disposition_t::CEF_WOD_CURRENT_TAB.into(),
0,
None,
None,
None,
None,
Some(&mut extra_info),
None,
)
);
let extra_info = extra_info.as_ref().unwrap();
assert_eq!(
"testValue",
CefString::from(&extra_info.string(Some(&test_key))).to_string()
);
}
}

View File

@@ -20755,28 +20755,30 @@ mod impl_cef_life_span_handler_t {
Some(WrapParamRef::<WindowInfo, _>::from(arg_window_info))
};
let arg_window_info = arg_window_info.as_mut().map(|arg| arg.as_mut());
let mut arg_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
let out_client = arg_client;
let mut wrap_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(Client(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_client = Some(&mut arg_client);
let arg_client = Some(&mut wrap_client);
let mut arg_settings = if arg_settings.is_null() {
None
} else {
Some(WrapParamRef::<BrowserSettings, _>::from(arg_settings))
};
let arg_settings = arg_settings.as_mut().map(|arg| arg.as_mut());
let mut arg_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
let out_extra_info = arg_extra_info;
let mut wrap_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(DictionaryValue(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_extra_info = Some(&mut arg_extra_info);
let arg_extra_info = Some(&mut wrap_extra_info);
let mut arg_no_javascript_access = if arg_no_javascript_access.is_null() {
None
} else {
@@ -20785,7 +20787,7 @@ mod impl_cef_life_span_handler_t {
))
};
let arg_no_javascript_access = arg_no_javascript_access.as_mut().map(|arg| arg.as_mut());
ImplLifeSpanHandler::on_before_popup(
let result = ImplLifeSpanHandler::on_before_popup(
&arg_self_.interface,
arg_browser,
arg_frame,
@@ -20800,7 +20802,17 @@ mod impl_cef_life_span_handler_t {
arg_settings,
arg_extra_info,
arg_no_javascript_access,
)
);
if let (Some(out_client), Some(wrap_client)) = (unsafe { out_client.as_mut() }, wrap_client)
{
*out_client = wrap_client.wrap_result();
}
if let (Some(out_extra_info), Some(wrap_extra_info)) =
(unsafe { out_extra_info.as_mut() }, wrap_extra_info)
{
*out_extra_info = wrap_extra_info.wrap_result();
}
result
}
extern "C" fn on_before_popup_aborted<I: ImplLifeSpanHandler>(
self_: *mut _cef_life_span_handler_t,
@@ -20855,28 +20867,30 @@ mod impl_cef_life_span_handler_t {
Some(WrapParamRef::<WindowInfo, _>::from(arg_window_info))
};
let arg_window_info = arg_window_info.as_mut().map(|arg| arg.as_mut());
let mut arg_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
let out_client = arg_client;
let mut wrap_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(Client(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_client = Some(&mut arg_client);
let arg_client = Some(&mut wrap_client);
let mut arg_settings = if arg_settings.is_null() {
None
} else {
Some(WrapParamRef::<BrowserSettings, _>::from(arg_settings))
};
let arg_settings = arg_settings.as_mut().map(|arg| arg.as_mut());
let mut arg_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
let out_extra_info = arg_extra_info;
let mut wrap_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(DictionaryValue(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_extra_info = Some(&mut arg_extra_info);
let arg_extra_info = Some(&mut wrap_extra_info);
let mut arg_use_default_window = if arg_use_default_window.is_null() {
None
} else {
@@ -20885,7 +20899,7 @@ mod impl_cef_life_span_handler_t {
))
};
let arg_use_default_window = arg_use_default_window.as_mut().map(|arg| arg.as_mut());
ImplLifeSpanHandler::on_before_dev_tools_popup(
let result = ImplLifeSpanHandler::on_before_dev_tools_popup(
&arg_self_.interface,
arg_browser,
arg_window_info,
@@ -20893,7 +20907,16 @@ mod impl_cef_life_span_handler_t {
arg_settings,
arg_extra_info,
arg_use_default_window,
)
);
if let (Some(out_client), Some(wrap_client)) = (unsafe { out_client.as_mut() }, wrap_client)
{
*out_client = wrap_client.wrap_result();
}
if let (Some(out_extra_info), Some(wrap_extra_info)) =
(unsafe { out_extra_info.as_mut() }, wrap_extra_info)
{
*out_extra_info = wrap_extra_info.wrap_result();
}
}
extern "C" fn on_after_created<I: ImplLifeSpanHandler>(
self_: *mut _cef_life_span_handler_t,
@@ -30110,28 +30133,34 @@ mod impl_cef_v8_handler_t {
.collect::<Vec<_>>()
});
let arg_arguments = vec_arguments.as_deref();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Handler::execute(
let result = ImplV8Handler::execute(
&arg_self_.interface,
arg_name,
arg_object,
arg_arguments,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
}
impl ImplV8Handler for V8Handler {
@@ -30331,27 +30360,33 @@ mod impl_cef_v8_accessor_t {
let mut arg_object =
unsafe { arg_object.as_mut() }.map(|arg| V8Value(unsafe { RefGuard::from_raw(arg) }));
let arg_object = arg_object.as_mut();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Accessor::get(
let result = ImplV8Accessor::get(
&arg_self_.interface,
arg_name,
arg_object,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
extern "C" fn set<I: ImplV8Accessor>(
self_: *mut _cef_v8_accessor_t,
@@ -30614,27 +30649,33 @@ mod impl_cef_v8_interceptor_t {
let mut arg_object =
unsafe { arg_object.as_mut() }.map(|arg| V8Value(unsafe { RefGuard::from_raw(arg) }));
let arg_object = arg_object.as_mut();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Interceptor::byname(
let result = ImplV8Interceptor::byname(
&arg_self_.interface,
arg_name,
arg_object,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
extern "C" fn get_byindex<I: ImplV8Interceptor>(
self_: *mut _cef_v8_interceptor_t,
@@ -30650,27 +30691,33 @@ mod impl_cef_v8_interceptor_t {
let mut arg_object =
unsafe { arg_object.as_mut() }.map(|arg| V8Value(unsafe { RefGuard::from_raw(arg) }));
let arg_object = arg_object.as_mut();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Interceptor::byindex(
let result = ImplV8Interceptor::byindex(
&arg_self_.interface,
arg_index,
arg_object,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
extern "C" fn set_byname<I: ImplV8Interceptor>(
self_: *mut _cef_v8_interceptor_t,

View File

@@ -20793,28 +20793,30 @@ mod impl_cef_life_span_handler_t {
Some(WrapParamRef::<WindowInfo, _>::from(arg_window_info))
};
let arg_window_info = arg_window_info.as_mut().map(|arg| arg.as_mut());
let mut arg_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
let out_client = arg_client;
let mut wrap_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(Client(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_client = Some(&mut arg_client);
let arg_client = Some(&mut wrap_client);
let mut arg_settings = if arg_settings.is_null() {
None
} else {
Some(WrapParamRef::<BrowserSettings, _>::from(arg_settings))
};
let arg_settings = arg_settings.as_mut().map(|arg| arg.as_mut());
let mut arg_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
let out_extra_info = arg_extra_info;
let mut wrap_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(DictionaryValue(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_extra_info = Some(&mut arg_extra_info);
let arg_extra_info = Some(&mut wrap_extra_info);
let mut arg_no_javascript_access = if arg_no_javascript_access.is_null() {
None
} else {
@@ -20823,7 +20825,7 @@ mod impl_cef_life_span_handler_t {
))
};
let arg_no_javascript_access = arg_no_javascript_access.as_mut().map(|arg| arg.as_mut());
ImplLifeSpanHandler::on_before_popup(
let result = ImplLifeSpanHandler::on_before_popup(
&arg_self_.interface,
arg_browser,
arg_frame,
@@ -20838,7 +20840,17 @@ mod impl_cef_life_span_handler_t {
arg_settings,
arg_extra_info,
arg_no_javascript_access,
)
);
if let (Some(out_client), Some(wrap_client)) = (unsafe { out_client.as_mut() }, wrap_client)
{
*out_client = wrap_client.wrap_result();
}
if let (Some(out_extra_info), Some(wrap_extra_info)) =
(unsafe { out_extra_info.as_mut() }, wrap_extra_info)
{
*out_extra_info = wrap_extra_info.wrap_result();
}
result
}
extern "C" fn on_before_popup_aborted<I: ImplLifeSpanHandler>(
self_: *mut _cef_life_span_handler_t,
@@ -20893,28 +20905,30 @@ mod impl_cef_life_span_handler_t {
Some(WrapParamRef::<WindowInfo, _>::from(arg_window_info))
};
let arg_window_info = arg_window_info.as_mut().map(|arg| arg.as_mut());
let mut arg_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
let out_client = arg_client;
let mut wrap_client = unsafe { arg_client.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(Client(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_client = Some(&mut arg_client);
let arg_client = Some(&mut wrap_client);
let mut arg_settings = if arg_settings.is_null() {
None
} else {
Some(WrapParamRef::<BrowserSettings, _>::from(arg_settings))
};
let arg_settings = arg_settings.as_mut().map(|arg| arg.as_mut());
let mut arg_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
let out_extra_info = arg_extra_info;
let mut wrap_extra_info = unsafe { arg_extra_info.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(DictionaryValue(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_extra_info = Some(&mut arg_extra_info);
let arg_extra_info = Some(&mut wrap_extra_info);
let mut arg_use_default_window = if arg_use_default_window.is_null() {
None
} else {
@@ -20923,7 +20937,7 @@ mod impl_cef_life_span_handler_t {
))
};
let arg_use_default_window = arg_use_default_window.as_mut().map(|arg| arg.as_mut());
ImplLifeSpanHandler::on_before_dev_tools_popup(
let result = ImplLifeSpanHandler::on_before_dev_tools_popup(
&arg_self_.interface,
arg_browser,
arg_window_info,
@@ -20931,7 +20945,16 @@ mod impl_cef_life_span_handler_t {
arg_settings,
arg_extra_info,
arg_use_default_window,
)
);
if let (Some(out_client), Some(wrap_client)) = (unsafe { out_client.as_mut() }, wrap_client)
{
*out_client = wrap_client.wrap_result();
}
if let (Some(out_extra_info), Some(wrap_extra_info)) =
(unsafe { out_extra_info.as_mut() }, wrap_extra_info)
{
*out_extra_info = wrap_extra_info.wrap_result();
}
}
extern "C" fn on_after_created<I: ImplLifeSpanHandler>(
self_: *mut _cef_life_span_handler_t,
@@ -30148,28 +30171,34 @@ mod impl_cef_v8_handler_t {
.collect::<Vec<_>>()
});
let arg_arguments = vec_arguments.as_deref();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Handler::execute(
let result = ImplV8Handler::execute(
&arg_self_.interface,
arg_name,
arg_object,
arg_arguments,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
}
impl ImplV8Handler for V8Handler {
@@ -30369,27 +30398,33 @@ mod impl_cef_v8_accessor_t {
let mut arg_object =
unsafe { arg_object.as_mut() }.map(|arg| V8Value(unsafe { RefGuard::from_raw(arg) }));
let arg_object = arg_object.as_mut();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Accessor::get(
let result = ImplV8Accessor::get(
&arg_self_.interface,
arg_name,
arg_object,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
extern "C" fn set<I: ImplV8Accessor>(
self_: *mut _cef_v8_accessor_t,
@@ -30652,27 +30687,33 @@ mod impl_cef_v8_interceptor_t {
let mut arg_object =
unsafe { arg_object.as_mut() }.map(|arg| V8Value(unsafe { RefGuard::from_raw(arg) }));
let arg_object = arg_object.as_mut();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Interceptor::byname(
let result = ImplV8Interceptor::byname(
&arg_self_.interface,
arg_name,
arg_object,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
extern "C" fn get_byindex<I: ImplV8Interceptor>(
self_: *mut _cef_v8_interceptor_t,
@@ -30688,27 +30729,33 @@ mod impl_cef_v8_interceptor_t {
let mut arg_object =
unsafe { arg_object.as_mut() }.map(|arg| V8Value(unsafe { RefGuard::from_raw(arg) }));
let arg_object = arg_object.as_mut();
let mut arg_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
let out_retval = arg_retval;
let mut wrap_retval = unsafe { arg_retval.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(V8Value(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let arg_retval = Some(&mut arg_retval);
let arg_retval = Some(&mut wrap_retval);
let mut arg_exception = if arg_exception.is_null() {
None
} else {
Some(arg_exception.into())
};
let arg_exception = arg_exception.as_mut();
ImplV8Interceptor::byindex(
let result = ImplV8Interceptor::byindex(
&arg_self_.interface,
arg_index,
arg_object,
arg_retval,
arg_exception,
)
);
if let (Some(out_retval), Some(wrap_retval)) = (unsafe { out_retval.as_mut() }, wrap_retval)
{
*out_retval = wrap_retval.wrap_result();
}
result
}
extern "C" fn set_byname<I: ImplV8Interceptor>(
self_: *mut _cef_v8_interceptor_t,

View File

@@ -821,6 +821,8 @@ impl SignatureRef<'_> {
ty: Some(arg_ty),
} => {
let arg_name = format_ident!("arg_{name}");
let out_name = format_ident!("out_{name}");
let wrap_name = format_ident!("wrap_{name}");
let (modifiers, arg_ty) = (arg_ty.modifiers.as_slice(), &arg_ty.ty);
let ty_tokens = arg_ty.to_token_stream();
let ty_string = ty_tokens.to_string();
@@ -850,14 +852,15 @@ impl SignatureRef<'_> {
let #arg_name = #arg_name.as_mut();
}),
[TypeModifier::MutPtr, TypeModifier::MutPtr] => Some(quote! {
let mut #arg_name = unsafe { #arg_name.as_mut() }.and_then(|ptr| {
let #out_name = #arg_name;
let mut #wrap_name = unsafe { #arg_name.as_mut() }.and_then(|ptr| {
if ptr.is_null() {
None
} else {
Some(#name(unsafe { RefGuard::from_raw(*ptr) }))
}
});
let #arg_name = Some(&mut #arg_name);
let #arg_name = Some(&mut #wrap_name);
}),
_ => None,
}
@@ -1091,6 +1094,26 @@ impl SignatureRef<'_> {
fn unwrap_cef_args(&self, tree: &ParseTree) -> proc_macro2::TokenStream {
let args = self.merge_params(tree).filter_map(|arg| match arg {
MergedParam::Single {
name,
ty: Some(arg_ty),
} => {
let (modifiers, arg_ty) = (arg_ty.modifiers.as_slice(), &arg_ty.ty);
let ty_tokens = arg_ty.to_token_stream();
let ty_string = ty_tokens.to_string();
match modifiers {
[TypeModifier::MutPtr, TypeModifier::MutPtr] if tree.root(&ty_string) == BASE_REF_COUNTED => {
let out_name = format_ident!("out_{name}");
let wrap_name = format_ident!("wrap_{name}");
Some(quote! {
if let (Some(#out_name), Some(#wrap_name)) = (unsafe { #out_name.as_mut() }, #wrap_name) {
*#out_name = #wrap_name.wrap_result();
}
})
}
_ => None,
}
}
MergedParam::Bounded {
count_name,
count_ty: