Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
72 changes: 70 additions & 2 deletions native/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion native/chromium/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ crate-type = ["rlib"]
[dependencies]
chromium_jni_utils = { path = "../chromium_jni_utils/" }
chromium_jni_macro = { path = "../chromium_jni_macro/" }
jni = "0.19.0"
jni = "0.21.1"
winapi = { version = "0.3.9", features = ["winuser", "libloaderapi"] }

[features]
Expand Down
1 change: 1 addition & 0 deletions native/chromium/build.rs
Original file line number Diff line number Diff line change
Expand Up @@ -193,4 +193,5 @@ fn generator(cef_path: std::path::Display) -> bindgen::Builder {
.raw_line("use jni::objects::GlobalRef;")
.raw_line("use jni::objects::JObject;")
.raw_line("use chromium_jni_utils::jni_unwrap;")
.raw_line("use std::ops::DerefMut;")
}
1 change: 1 addition & 0 deletions native/chromium/src/cef/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use crate::ToJava;
use jni::objects::GlobalRef;
use jni::objects::JObject;
use chromium_jni_utils::jni_unwrap;
use std::ops::DerefMut;
pub mod win;
pub use self::win::_cef_window_info_t;
pub use self::win::_cef_main_args_t;
Expand Down
1 change: 1 addition & 0 deletions native/chromium/src/cef/win.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ use crate::ToJava;
use jni::objects::GlobalRef;
use jni::objects::JObject;
use chromium_jni_utils::jni_unwrap;
use std::ops::DerefMut;
use crate::cef::cef_string_t;

pub type DWORD = ::std::os::raw::c_ulong;
Expand Down
46 changes: 25 additions & 21 deletions native/chromium/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,11 @@ use jni::objects::JValue;
use jni::JNIEnv;

impl FromJavaMember for cef::cef_base_ref_counted_t {
fn from_java_member(env: JNIEnv, object: JObject, name: &str) -> cef::cef_base_ref_counted_t {
fn from_java_member(
env: &mut JNIEnv,
object: &JObject,
name: &str,
) -> cef::cef_base_ref_counted_t {
let obj = env
.get_field(
object,
Expand All @@ -26,114 +30,114 @@ impl FromJavaMember for cef::cef_base_ref_counted_t {
.unwrap()
.l()
.unwrap();
FromJava::from_java(env, obj)
FromJava::from_java(env, &obj)
}
}

/// Allows constructing an object from a Java object
pub trait ToJava<'a> {
/// Constructs `Self` from the JNI object `object`
fn to_java(_env: JNIEnv<'a>, value: Self) -> JValue<'a>;
fn to_java(_env: &JNIEnv<'a>, value: Self) -> JValue<'a, 'a>;
}

impl<'a, T> ToJava<'a> for *mut T {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Long(value as i64)
}
}
impl<'a, T> ToJava<'a> for *const T {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Long(value as i64)
}
}

impl<'a> ToJava<'a> for i32 {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(value)
}
}

impl<'a> ToJava<'a> for usize {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Long(value.try_into().unwrap())
}
}
impl<'a> ToJava<'a> for i64 {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Long(value)
}
}
impl<'a> ToJava<'a> for f64 {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Double(value)
}
}

impl<'a> ToJava<'a> for cef::cef_process_id_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}
impl<'a> ToJava<'a> for cef::cef_cursor_type_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}
impl<'a> ToJava<'a> for cef::cef_errorcode_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}
impl<'a> ToJava<'a> for cef::cef_transition_type_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}

impl<'a> ToJava<'a> for cef::cef_window_open_disposition_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}

impl<'a> ToJava<'a> for cef::cef_log_severity_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}

impl<'a> ToJava<'a> for cef::cef_event_flags_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}

impl<'a> ToJava<'a> for cef::cef_termination_status_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}

impl<'a> ToJava<'a> for cef::cef_focus_source_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}

impl<'a> ToJava<'a> for cef::cef_jsdialog_type_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}

impl<'a> ToJava<'a> for cef::cef_quick_menu_edit_state_flags_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}

impl<'a> ToJava<'a> for cef::cef_preferences_type_t {
fn to_java(_env: JNIEnv, value: Self) -> JValue<'a> {
fn to_java(mut _env: &JNIEnv, value: Self) -> JValue<'a, 'a> {
JValue::Int(unsafe { std::mem::transmute(value) })
}
}
2 changes: 1 addition & 1 deletion native/chromium_jni/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ version = "1.0.0"
edition = "2021"

[dependencies]
jni = "0.19.0"
jni = "0.21.1"
chromium = { path = "../chromium/" }
chromium_swt = { path = "../chromium_swt/" }
chromium_jni_macro = { path = "../chromium_jni_macro/" }
Expand Down
8 changes: 4 additions & 4 deletions native/chromium_jni/src/allocate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,9 +19,9 @@ use jni::JNIEnv;
macro_rules! jni_allocate {
($name:tt, $type:ty) => {
#[jni_name($name, $type)]
pub extern "C" fn allocate(env: JNIEnv, _class: JClass, object: JObject) -> jlong {
let object: JNIWrapperType<$type> =
JNICEFCallback::jni_allocate(env, env.new_global_ref(object).unwrap());
pub extern "C" fn allocate(env: JNIEnv, _class: JClass, object: &JObject) -> jlong {
let global_ref = env.new_global_ref(object).unwrap();
let object: JNIWrapperType<$type> = JNICEFCallback::jni_allocate(env, global_ref);
return Box::into_raw(Box::new(object)) as jlong;
}
};
Expand All @@ -32,7 +32,7 @@ macro_rules! jni_deallocate {
($name:tt, $type:ty) => {
#[jni_name($name, $type)]
pub extern "C" fn deallocate(
_env: JNIEnv,
mut _env: JNIEnv,
_class: JClass,
object: *mut chromium::cef::_cef_display_handler_t,
) {
Expand Down
8 changes: 4 additions & 4 deletions native/chromium_jni/src/swt_wrapper.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,9 @@ use jni::JNIEnv;

#[no_mangle]
pub extern "C" fn Java_org_eclipse_set_browser_lib_ChromiumLib_memmove__Lorg_eclipse_set_browser_lib_cef_1popup_1features_1t_2J(
env: JNIEnv,
mut env: JNIEnv,
_class: JClass,
destination: JObject,
destination: &JObject,
source: *mut chromium::cef::_cef_popup_features_t,
) {
let source_object = unsafe { *source };
Expand Down Expand Up @@ -53,10 +53,10 @@ pub extern "C" fn Java_org_eclipse_set_browser_lib_ChromiumLib_memmove__Lorg_ecl

#[no_mangle]
pub extern "C" fn Java_org_eclipse_set_browser_lib_ChromiumLib_cefswt_1function_1id(
_env: JNIEnv,
mut _env: JNIEnv,
_class: JClass,
arg0: jlong,
arg1: JObject,
arg1: &JObject,
) {
// IMPROVE: Avoid creating this object here
let mut func_st = chromium_swt::FunctionSt {
Expand Down
2 changes: 1 addition & 1 deletion native/chromium_jni_macro/src/derive_from_java_impl.rs
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ pub fn derive_from_java_impl(tokens: TokenStream) -> TokenStream {

let modified = quote! {
impl FromJava for #name {
fn from_java(env: JNIEnv, object: JObject) -> #name {
fn from_java(env: &mut JNIEnv, object: &JObject) -> #name {
return #name {
#(#query_parts, )*
};
Expand Down
13 changes: 6 additions & 7 deletions native/chromium_jni_macro/src/jni_allocate.rs
Original file line number Diff line number Diff line change
Expand Up @@ -51,8 +51,8 @@ pub fn jni_allocate(tokens: TokenStream) -> TokenStream {

let modified = quote! {
impl JNICEFCallback for #name {
fn jni_allocate(env: JNIEnv, object: GlobalRef) -> chromium_jni_utils::JNIWrapperType<#name> {
let class = env.get_object_class(object.as_obj()).unwrap();
fn jni_allocate(mut env: JNIEnv, object: GlobalRef) -> chromium_jni_utils::JNIWrapperType<#name> {
let class = &env.get_object_class(object.as_obj()).unwrap();

#(#jni_callbacks)*

Expand Down Expand Up @@ -92,7 +92,7 @@ fn build_initialization(
let signature = jni_signature(field);

quote! { #field_ident: match env.get_method_id(class, stringify!(#field_ident), #signature) {
Err(e) => {
Err(_e) => {
// Attempting to get the method id of a method that does not exists results
// in a NoSuchMethodException. As we do not want to throw this, clear the exception
env.exception_clear().unwrap();
Expand Down Expand Up @@ -140,18 +140,17 @@ fn build_jni_callback(

let retline = match result {
None => quote! {},
Some(_) => quote! { return chromium_jni_utils::FromJavaValue::from_java_value(env, result); }
Some(_) => quote! { return chromium_jni_utils::FromJavaValue::from_java_value(&env, result); }
};

let func_ident = syn::Ident::new(&format!("jni_{}", field_ident), Span::call_site());

let signature = jni_signature(field);
quote! {
/// C-Callback which calls the Java function via JNI
unsafe extern "C" fn #func_ident(#args) #result_tag {
let wrapper = jni_unwrap(self_);
let guard = (*wrapper).jvm.attach_current_thread().unwrap();
let env: JNIEnv = *guard;
let mut guard = (*wrapper).jvm.attach_current_thread().unwrap();
let env: &mut JNIEnv = guard.deref_mut();
let result = env.call_method((*wrapper).this.as_obj(), stringify!(#field_ident), #signature, &[#(#argnames, )*]).expect(stringify!(#func_ident));
#retline
};
Expand Down
Loading
Loading