JNIEXPORT void JNICALL Java_org_cef_browser_CefBrowser_1N_N_1ExecuteJavaScript (JNIEnv *env, jobject obj, jstring code, jstring url, jint line) { CefRefPtr<CefBrowser> browser = JNI_GET_BROWSER_OR_RETURN(env, obj); browser->GetMainFrame()->ExecuteJavaScript(GetJNIString(env,code), GetJNIString(env,url), line); }
JNIEXPORT void JNICALL Java_org_cef_browser_CefBrowser_1N_N_1RunFileDialog (JNIEnv *env, jobject obj, jobject jmode, jstring jtitle, jstring jdefaultFileName , jobject jacceptTypes, jobject jcallback) { CefRefPtr<CefBrowser> browser = JNI_GET_BROWSER_OR_RETURN(env, obj); std::vector<CefString> accept_types; GetJNIStringVector(env, jacceptTypes, accept_types); CefBrowserHost::FileDialogMode mode; if (IsJNIEnumValue(env, jmode, "org/cef/handler/CefDialogHandler$FileDialogMode", "FILE_DIALOG_OPEN")) { mode = FILE_DIALOG_OPEN; } else if (IsJNIEnumValue(env, jmode, "org/cef/handler/CefDialogHandler$FileDialogMode", "FILE_DIALOG_OPEN_MULTIPLE")) { mode = FILE_DIALOG_OPEN_MULTIPLE; } else if (IsJNIEnumValue(env, jmode, "org/cef/handler/CefDialogHandler$FileDialogMode", "FILE_DIALOG_SAVE")) { mode = FILE_DIALOG_SAVE; } else { mode = FILE_DIALOG_OPEN; } browser->GetHost()->RunFileDialog(mode, GetJNIString(env, jtitle), GetJNIString(env, jdefaultFileName), accept_types, new RunFileDialogCallback(env, jcallback)); }
JNIEXPORT void JNICALL Java_org_cef_callback_CefAuthCallback_1N_N_1Continue (JNIEnv *env, jobject obj, jstring username, jstring password) { CefRefPtr<CefAuthCallback> callback = GetCefFromJNIObject<CefAuthCallback>(env, obj, "CefAuthCallback"); if (!callback.get()) return; callback->Continue(GetJNIString(env, username), GetJNIString(env, password)); // Clear the reference added in RequestHandler::GetAuthCredentials SetCefForJNIObject<CefAuthCallback>(env, obj, NULL, "CefAuthCallback"); }
JNIEXPORT void JNICALL Java_org_cef_network_CefResponse_1N_N_1SetHeaderMap (JNIEnv *env, jobject obj, jobject jheaderMap) { CefRefPtr<CefResponse> response = GetCefFromJNIObject<CefResponse>(env, obj, "CefResponse"); if (!response) return; // public abstract java.util.Set<java.util.Map$Entry<K, V>> entrySet(); jobject entrySet = NULL; JNI_CALL_METHOD(env, jheaderMap, "entrySet", "()Ljava/util/Set;", Object, entrySet); if (!entrySet) return; // public abstract java.lang.Object[] toArray(); jobject entrySetValues = NULL; JNI_CALL_METHOD(env, entrySet, "toArray", "()[Ljava/lang/Object;", Object, entrySetValues); if (!entrySetValues) return; CefResponse::HeaderMap headerMap; jint length = env->GetArrayLength((jobjectArray)entrySetValues); for (jint i=0; i < length; i++) { jobject mapEntry = env->GetObjectArrayElement((jobjectArray)entrySetValues, i); if (!mapEntry) return; jobject key = NULL; jobject value = NULL; JNI_CALL_METHOD(env, mapEntry, "getKey", "()Ljava/lang/Object;", Object, key); JNI_CALL_METHOD(env, mapEntry, "getValue", "()Ljava/lang/Object;", Object, value); headerMap.insert(std::make_pair(GetJNIString(env, (jstring)key), GetJNIString(env, (jstring)value))); } response->SetHeaderMap(headerMap); }
JNIEXPORT jstring JNICALL Java_org_cef_network_CefResponse_1N_N_1GetHeader (JNIEnv *env, jobject obj, jstring jheader) { CefRefPtr<CefResponse> response = GetCefFromJNIObject<CefResponse>(env, obj, "CefResponse"); if (!response) return NULL; return NewJNIString(env, response->GetHeader(GetJNIString(env, jheader))); }
JNIEXPORT void JNICALL Java_org_cef_network_CefResponse_1N_N_1SetMimeType (JNIEnv *env, jobject obj, jstring jmimeType) { CefRefPtr<CefResponse> response = GetCefFromJNIObject<CefResponse>(env, obj, "CefResponse"); if (!response) return; response->SetMimeType(GetJNIString(env, jmimeType)); }
JNIEXPORT void JNICALL Java_org_cef_misc_CefPrintSettings_1N_N_1SetDeviceName (JNIEnv *env, jobject obj, jstring jname) { CefRefPtr<CefPrintSettings> settings = GetCefFromJNIObject<CefPrintSettings>(env, obj, "CefPrintSettings"); if (!settings) return; settings->SetDeviceName(GetJNIString(env, jname)); }
CefString GetJNIStringRef(JNIEnv* env, jobject jstringRef) { jobject jstr = NULL; JNI_CALL_METHOD(env, jstringRef, "get", "()Ljava/lang/String;", Object, jstr); return GetJNIString(env, (jstring)jstr); }
JNIEXPORT void JNICALL Java_org_cef_browser_CefBrowser_1N_N_1Find (JNIEnv *env, jobject obj, jint identifier, jstring searchText, jboolean forward, jboolean matchCase, jboolean findNext) { CefRefPtr<CefBrowser> browser = JNI_GET_BROWSER_OR_RETURN(env, obj); browser->GetHost()->Find((int)identifier, GetJNIString(env, searchText), (forward != JNI_FALSE), (matchCase != JNI_FALSE), (findNext != JNI_FALSE)); }
JNIEXPORT void JNICALL Java_org_cef_callback_CefJSDialogCallback_1N_N_1Continue (JNIEnv *env, jobject obj, jboolean jsuccess, jstring juser_input) { CefRefPtr<CefJSDialogCallback> jsDialogCallback = GetCefFromJNIObject<CefJSDialogCallback>(env, obj, "CefJSDialogCallback"); if (!jsDialogCallback.get()) return; jsDialogCallback->Continue((jsuccess != JNI_FALSE), GetJNIString(env, juser_input)); // Clear the reference added in JSDialogCallback::OnJSDialog and JSDialogCallback::OnBeforeUnloadDialog. SetCefForJNIObject<CefJSDialogCallback>(env, obj, NULL, "CefJSDialogCallback"); }
JNIEXPORT jboolean JNICALL Java_org_cef_network_CefCookieManager_1N_N_1DeleteCookies(JNIEnv* env, jobject obj, jstring jurl, jstring jcookieName) { CefRefPtr<CefCookieManager> manager = GetCefFromJNIObject<CefCookieManager>(env, obj, "CefCookieManager"); if (!manager.get()) return JNI_FALSE; // The method CefCookieManager::DeleteCookies must be called on the IO thread. // We ignore its return value and return the result of the PostTask event to // java instead. // TODO(JCEF): Expose the callback object. bool result = CefPostTask( TID_IO, base::Bind(base::IgnoreResult(&CefCookieManager::DeleteCookies), manager.get(), GetJNIString(env, jurl), GetJNIString(env, jcookieName), CefRefPtr<CefDeleteCookiesCallback>())); return result ? JNI_TRUE : JNI_FALSE; }
void GetJNIStringVector(JNIEnv* env, jobject jvector, std::vector<CefString>& vals) { if (!jvector) return; jint jsize=0; JNI_CALL_METHOD(env, jvector, "size", "()I", Int, jsize); for (jint index=0; index< jsize; index++) { jobject str=NULL; JNI_CALL_METHOD(env, jvector, "get", "(I)Ljava/lang/Object;", Object, str, index); vals.push_back(GetJNIString(env, (jstring)str)); } }
JNIEXPORT jboolean JNICALL Java_org_cef_network_CefCookieManager_1N_N_1SetStoragePath( JNIEnv* env, jobject obj, jstring jpath, jboolean jpersistSessionCookies) { CefRefPtr<CefCookieManager> manager = GetCefFromJNIObject<CefCookieManager>(env, obj, "CefCookieManager"); if (!manager.get()) return JNI_FALSE; // TODO(JCEF): Expose the callback object. bool result = manager->SetStoragePath( GetJNIString(env, jpath), (jpersistSessionCookies != JNI_FALSE), NULL); return result ? JNI_TRUE : JNI_FALSE; }
JNIEXPORT void JNICALL Java_org_cef_callback_CefQueryCallback_1N_N_1Success(JNIEnv* env, jobject obj, jstring response) { CefRefPtr<CefMessageRouterBrowserSide::Callback> callback = GetCefFromJNIObject<CefMessageRouterBrowserSide::Callback>( env, obj, "CefQueryCallback"); if (!callback.get()) return; callback->Success(GetJNIString(env, response)); // Clear the reference added in ClientHandler::OnQuery. SetCefForJNIObject<CefMessageRouterBrowserSide::Callback>(env, obj, NULL, "CefQueryCallback"); }
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; }
JNIEXPORT jboolean JNICALL Java_org_cef_network_CefCookieManager_1N_N_1VisitUrlCookies( JNIEnv* env, jobject obj, jstring jurl, jboolean jincludeHttpOnly, jobject jvisitor) { CefRefPtr<CefCookieManager> manager = GetCefFromJNIObject<CefCookieManager>(env, obj, "CefCookieManager"); if (!manager.get() || !jvisitor) return JNI_FALSE; CefRefPtr<CefCookieVisitor> visitor = new CookieVisitor(env, jvisitor); if (!visitor.get()) return JNI_FALSE; bool result = manager->VisitUrlCookies( GetJNIString(env, jurl), (jincludeHttpOnly != JNI_FALSE), visitor); return result ? JNI_TRUE : JNI_FALSE; }
JNIEXPORT jboolean JNICALL Java_org_cef_callback_CefSchemeRegistrar_1N_N_1AddCustomScheme (JNIEnv *env, jobject obj, jstring jSchemeName, jboolean jIsStandard, jboolean jIsLocal, jboolean jIsDisplayIsolated) { CefRefPtr<CefSchemeRegistrar> registrar = GetCefFromJNIObject<CefSchemeRegistrar>(env, obj, "CefSchemeRegistrar"); if (!registrar.get()) return JNI_FALSE; CefString schemeName = GetJNIString(env, jSchemeName); bool result = registrar->AddCustomScheme(schemeName, jIsStandard != JNI_FALSE, jIsLocal != JNI_FALSE, jIsDisplayIsolated != JNI_FALSE); if (!result) return JNI_FALSE; // The registered scheme has to be forwarded to all other processes which will // be created by the browser process (e.g. the render-process). Otherwise // things like JS "localStorage" get/set will end up in a crashed // render process. std::string tmpName = util::GetTempFileName("scheme", false); std::ofstream fStream(tmpName.c_str(), std::ofstream::out | std::ofstream::app); if (fStream.is_open()) { // 1) Write the scheme name and the params to the file. fStream << schemeName.ToString().c_str() << "," << (jIsStandard != JNI_FALSE) << (jIsLocal != JNI_FALSE) << (jIsDisplayIsolated != JNI_FALSE); fStream.close(); // 2) Register file to be deleted in CefShutdown() ClientApp::registerTempFile(tmpName); } return JNI_TRUE; }
JNIEXPORT void JNICALL Java_org_cef_browser_CefBrowser_1N_N_1LoadString (JNIEnv *env, jobject obj, jstring val, jstring url) { CefRefPtr<CefBrowser> browser = JNI_GET_BROWSER_OR_RETURN(env, obj); browser->GetMainFrame()->LoadString(GetJNIString(env,val), GetJNIString(env,url)); }
JNIEXPORT void JNICALL Java_org_cef_browser_CefBrowser_1N_N_1ReplaceMisspelling (JNIEnv *env, jobject obj, jstring jword) { CefRefPtr<CefBrowser> browser = JNI_GET_BROWSER_OR_RETURN(env, obj); browser->GetHost()->ReplaceMisspelling(GetJNIString(env, jword)); }
JNIEXPORT void JNICALL Java_org_cef_browser_CefBrowser_1N_N_1StartDownload (JNIEnv *env, jobject obj, jstring url) { CefRefPtr<CefBrowser> browser = JNI_GET_BROWSER_OR_RETURN(env, obj); browser->GetHost()->StartDownload(GetJNIString(env, url)); }