bool DragHandler::OnDragEnter(CefRefPtr<CefBrowser> browser, CefRefPtr<CefDragData> dragData, CefDragHandler::DragOperationsMask mask) { JNIEnv* env = GetJNIEnv(); if (!env) return false; jobject jdragdata = NewJNIObject(env, "org/cef/callback/CefDragData_N"); if (!jdragdata) return false; SetCefForJNIObject(env, jdragdata, dragData.get(), "CefDragData"); jboolean result = JNI_FALSE; JNI_CALL_METHOD(env, jhandler_, "onDragEnter", "(Lorg/cef/browser/CefBrowser;Lorg/cef/callback/CefDragData;I)Z", Boolean, result, GetJNIBrowser(browser), jdragdata, (jint)mask); //Remove native reference from java class SetCefForJNIObject<CefDragData>(env, jdragdata, NULL, "CefDragData"); return (result != JNI_FALSE); }
bool JSDialogHandler::OnBeforeUnloadDialog( CefRefPtr<CefBrowser> browser, const CefString& message_text, bool is_reload, CefRefPtr<CefJSDialogCallback> callback) { JNIEnv* env = GetJNIEnv(); if (!env) return false; jobject jcallback = NewJNIObject(env, "org/cef/callback/CefJSDialogCallback_N"); if (!jcallback) return false; SetCefForJNIObject(env, jcallback, callback.get(), "CefJSDialogCallback"); jboolean jresult = JNI_FALSE; JNI_CALL_METHOD(env, jhandler_, "onBeforeUnloadDialog", "(Lorg/cef/browser/CefBrowser;Ljava/lang/String;ZLorg/cef/" "callback/CefJSDialogCallback;)Z", Boolean, jresult, GetJNIBrowser(browser), NewJNIString(env, message_text), (is_reload ? JNI_TRUE : JNI_FALSE), jcallback); if (jresult == JNI_FALSE) { // If the java method returns "false", the callback won't be used and // therefore the reference can be removed. SetCefForJNIObject<CefJSDialogCallback>(env, jcallback, NULL, "CefJSDialogCallback"); } return (jresult != JNI_FALSE); }
jobject NewJNIObject(JNIEnv* env, const char* class_name) { jclass cls = env->FindClass(class_name); if (!cls) return NULL; return NewJNIObject(env, cls); }
jobject NewJNIStringRef(JNIEnv* env, const CefString& initValue) { jobject jstringRef = NewJNIObject(env, "org/cef/misc/StringRef"); if (!jstringRef) return NULL; SetJNIStringRef(env, jstringRef, initValue); return jstringRef; }
jobject NewJNIIntRef(JNIEnv* env, int initValue) { jobject jintRef = NewJNIObject(env, "org/cef/misc/IntRef"); if (!jintRef) return NULL; SetJNIIntRef(env, jintRef, initValue); return jintRef; }
jobject NewJNIBoolRef(JNIEnv* env, bool initValue) { jobject jboolRef = NewJNIObject(env, "org/cef/misc/BoolRef"); if (!jboolRef) return NULL; SetJNIBoolRef(env, jboolRef, initValue); return jboolRef; }
jobject NewJNIDate(JNIEnv* env, const CefTime& time) { jobject jdate = NewJNIObject(env, "java/util/Date"); if (!jdate) return NULL; double timestamp = time.GetDoubleT() * 1000; JNI_CALL_VOID_METHOD(env, jdate, "setTime", "(J)V",(jlong)timestamp); return jdate; }
bool JSDialogHandler::OnJSDialog(CefRefPtr<CefBrowser> browser, const CefString& origin_url, CefJSDialogHandler::JSDialogType dialog_type, const CefString& message_text, const CefString& default_prompt_text, CefRefPtr<CefJSDialogCallback> callback, bool& suppress_message) { JNIEnv* env = GetJNIEnv(); if (!env) return false; jobject jdialogType = NULL; switch (dialog_type) { default: JNI_CASE(env, "org/cef/handler/CefJSDialogHandler$JSDialogType", JSDIALOGTYPE_ALERT, jdialogType); JNI_CASE(env, "org/cef/handler/CefJSDialogHandler$JSDialogType", JSDIALOGTYPE_CONFIRM, jdialogType); JNI_CASE(env, "org/cef/handler/CefJSDialogHandler$JSDialogType", JSDIALOGTYPE_PROMPT, jdialogType); } jobject jboolRef = NewJNIBoolRef(env, suppress_message); if (!jboolRef) return false; jobject jcallback = NewJNIObject(env, "org/cef/callback/CefJSDialogCallback_N"); if (!jcallback) return false; SetCefForJNIObject(env, jcallback, callback.get(), "CefJSDialogCallback"); jboolean jresult = JNI_FALSE; JNI_CALL_METHOD( env, jhandler_, "onJSDialog", "(Lorg/cef/browser/CefBrowser;Ljava/lang/String;" "Lorg/cef/handler/CefJSDialogHandler$JSDialogType;Ljava/lang/String;" "Ljava/lang/String;Lorg/cef/callback/CefJSDialogCallback;Lorg/cef/misc/" "BoolRef;)Z", Boolean, jresult, GetJNIBrowser(browser), NewJNIString(env, origin_url), jdialogType, NewJNIString(env, message_text), NewJNIString(env, default_prompt_text), jcallback, jboolRef); suppress_message = GetJNIBoolRef(env, jboolRef); if (jresult == JNI_FALSE) { // If the java method returns "false", the callback won't be used and // therefore the reference can be removed. SetCefForJNIObject<CefJSDialogCallback>(env, jcallback, NULL, "CefJSDialogCallback"); } return (jresult != JNI_FALSE); }
jobject NewJNIStringVector(JNIEnv* env, const std::vector<CefString>& vals) { jobject jvector = NewJNIObject(env, "java/util/Vector"); if (!jvector) return NULL; std::vector<CefString>::const_iterator iter; for (iter = vals.begin(); iter != vals.end(); ++iter) { AddJNIStringToVector(env, jvector, *iter); } return jvector; }
JNIEXPORT jobject JNICALL Java_org_cef_network_CefCookieManager_1N_N_1GetGlobalManager(JNIEnv* env, jclass cls) { // TODO(JCEF): Expose the callback object. CefRefPtr<CefCookieManager> manager = CefCookieManager::GetGlobalManager(NULL); if (!manager.get()) return NULL; jobject jManager = NewJNIObject(env, cls); if (!jManager) return NULL; SetCefForJNIObject(env, jManager, manager.get(), "CefCookieManager"); return jManager; }
// Create a new java.awt.Point. jobject NewJNIPoint(JNIEnv* env, int x, int y) { jclass cls = env->FindClass("java/awt/Point"); if (!cls) return NULL; jobject obj = NewJNIObject(env, cls); if (!obj) return NULL; if (SetJNIFieldInt(env, cls, obj, "x", x) && SetJNIFieldInt(env, cls, obj, "y", y)) { return obj; } env->DeleteLocalRef(obj); return NULL; }
jobject NewJNIPageRange(JNIEnv* env, const CefPageRange& range) { jclass cls = env->FindClass("org/cef/misc/CefPageRange"); if (!cls) return NULL; jobject obj = NewJNIObject(env, cls); if (!obj) return NULL; if (SetJNIFieldInt(env, cls, obj, "from", range.from) && SetJNIFieldInt(env, cls, obj, "to", range.to)) { return obj; } env->DeleteLocalRef(obj); return NULL; }
JNIEXPORT jobject JNICALL Java_org_cef_misc_CefPrintSettings_1N_N_1Copy (JNIEnv *env, jobject obj) { CefRefPtr<CefPrintSettings> settings = GetCefFromJNIObject<CefPrintSettings>(env, obj, "CefPrintSettings"); if (!settings) return NULL; jobject jresult = NewJNIObject(env, "org/cef/misc/CefPrintSettings_N"); if (!jresult) return NULL; CefRefPtr<CefPrintSettings> copy_of_settings = settings->Copy(); if (!copy_of_settings) return NULL; SetCefForJNIObject(env, jresult, copy_of_settings.get(), "CefPrintSettings"); return jresult; }
jobject NewJNIRect(JNIEnv* env, const CefRect& rect) { jclass cls = env->FindClass("java/awt/Rectangle"); if (!cls) return NULL; jobject obj = NewJNIObject(env, cls); if (!obj) return NULL; if (SetJNIFieldInt(env, cls, obj, "x", rect.x) && SetJNIFieldInt(env, cls, obj, "y", rect.y) && SetJNIFieldInt(env, cls, obj, "width", rect.width) && SetJNIFieldInt(env, cls, obj, "height", rect.height)) { return obj; } env->DeleteLocalRef(obj); return NULL; }
JNIEXPORT jobject JNICALL Java_org_cef_network_CefCookieManager_1N_N_1CreateManager( JNIEnv* env, jclass cls, jstring jpath, jboolean jpersistSessionCookies) { // TODO(JCEF): Expose the callback object. CefRefPtr<CefCookieManager> manager = CefCookieManager::CreateManager( GetJNIString(env, jpath), (jpersistSessionCookies != JNI_FALSE), NULL); if (!manager.get()) return NULL; jobject jManager = NewJNIObject(env, cls); if (!jManager) return NULL; SetCefForJNIObject(env, jManager, manager.get(), "CefCookieManager"); return jManager; }
jobject NewJNICookie(JNIEnv* env, const CefCookie& cookie) { bool hasExpires = (cookie.has_expires != 0); jobject jExpiresDate = hasExpires ? NewJNIDate(env, cookie.expires) : NULL; jobject jcookie = NewJNIObject(env, "org/cef/network/CefCookie", "(Ljava/lang/String;Ljava/lang/String;" "Ljava/lang/String;Ljava/lang/String;" "ZZLjava/util/Date;Ljava/util/Date;" "ZLjava/util/Date;)V", NewJNIString(env, CefString(&cookie.name)), NewJNIString(env, CefString(&cookie.value)), NewJNIString(env, CefString(&cookie.domain)), NewJNIString(env, CefString(&cookie.path)), (cookie.secure != 0 ? JNI_TRUE : JNI_FALSE), (cookie.httponly != 0 ? JNI_TRUE : JNI_FALSE), NewJNIDate(env, cookie.creation), NewJNIDate(env, cookie.last_access), (hasExpires ? JNI_TRUE : JNI_FALSE), jExpiresDate); return jcookie; }
jobject getjEvent(JNIEnv* env, const CefKeyEvent& event) { jobject jkeyEventType = NULL; switch (event.type) { default: JNI_CASE(env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType", KEYEVENT_RAWKEYDOWN, jkeyEventType); JNI_CASE(env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType", KEYEVENT_KEYDOWN, jkeyEventType); JNI_CASE(env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType", KEYEVENT_KEYUP, jkeyEventType); JNI_CASE(env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType", KEYEVENT_CHAR, jkeyEventType); } jobject jevent = NewJNIObject(env, "org/cef/handler/CefKeyboardHandler$CefKeyEvent", "(Lorg/cef/handler/CefKeyboardHandler$CefKeyEvent$EventType;IIIZCCZ)V", jkeyEventType, event.modifiers, event.windows_key_code, event.native_key_code, (event.is_system_key != 0 ? JNI_TRUE : JNI_FALSE), event.character, event.unmodified_character, (event.focus_on_editable_field != 0 ? JNI_TRUE : JNI_FALSE)); return jevent; }