// Copyright (c) 2014 The Chromium Embedded Framework Authors. All rights // reserved. Use of this source code is governed by a BSD-style license that // can be found in the LICENSE file. #include "CefRequestContext_N.h" #include "include/cef_request_context.h" #include "jni_util.h" #include "request_context_handler.h" JNIEXPORT jobject JNICALL Java_org_cef_browser_CefRequestContext_1N_N_1GetGlobalContext(JNIEnv* env, jclass cls) { CefRefPtr context = CefRequestContext::GetGlobalContext(); if (!context.get()) return nullptr; ScopedJNIObjectLocal jContext(env, NewJNIObject(env, cls)); if (!jContext) return nullptr; SetCefForJNIObject(env, jContext, context.get(), "CefRequestContext"); return jContext.Release(); } JNIEXPORT jobject JNICALL Java_org_cef_browser_CefRequestContext_1N_N_1CreateContext(JNIEnv* env, jclass cls, jobject jhandler) { CefRefPtr handler = nullptr; if (jhandler != nullptr) { handler = new RequestContextHandler(env, jhandler); } // TODO(JCEF): Expose CefRequestContextSettings. CefRequestContextSettings settings; CefRefPtr context = CefRequestContext::CreateContext(settings, handler); if (!context.get()) return nullptr; ScopedJNIObjectLocal jContext(env, NewJNIObject(env, cls)); if (!jContext) return nullptr; SetCefForJNIObject(env, jContext, context.get(), "CefRequestContext"); return jContext.Release(); } JNIEXPORT jboolean JNICALL Java_org_cef_browser_CefRequestContext_1N_N_1IsGlobal(JNIEnv* env, jobject obj) { CefRefPtr context = GetCefFromJNIObject(env, obj, "CefRequestContext"); if (!context.get()) return JNI_FALSE; return context->IsGlobal() ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jboolean JNICALL Java_org_cef_browser_CefRequestContext_1N_N_1HasPreference(JNIEnv* env, jobject obj, jstring jname) { CefRefPtr context = GetCefFromJNIObject(env, obj, "CefRequestContext"); if (!context.get()) return JNI_FALSE; CefString name = GetJNIString(env, jname); return context->HasPreference(name) ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jobject JNICALL Java_org_cef_browser_CefRequestContext_1N_N_1GetPreference(JNIEnv* env, jobject obj, jstring jname) { CefRefPtr context = GetCefFromJNIObject(env, obj, "CefRequestContext"); if (!context.get()) return nullptr; CefString name = GetJNIString(env, jname); CefRefPtr value = context->GetPreference(name); if (!value) return nullptr; return NewJNIObjectFromCefValue(env, value); } JNIEXPORT jobject JNICALL Java_org_cef_browser_CefRequestContext_1N_N_1GetAllPreferences( JNIEnv* env, jobject obj, jboolean includeDefaults) { CefRefPtr context = GetCefFromJNIObject(env, obj, "CefRequestContext"); if (!context.get()) return nullptr; CefRefPtr value = context->GetAllPreferences(includeDefaults == JNI_TRUE); if (!value) return nullptr; jobject jmap = NewJNIHashMap(env); CefDictionaryValue::KeyList keys; value->GetKeys(keys); for (const CefString& key : keys) { jstring jkey = NewJNIString(env, key); jobject jvalue = NewJNIObjectFromCefValue(env, value->GetValue(key)); JNI_CALL_VOID_METHOD( env, jmap, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;", jkey, jvalue); } return jmap; } JNIEXPORT jboolean JNICALL Java_org_cef_browser_CefRequestContext_1N_N_1CanSetPreference(JNIEnv* env, jobject obj, jstring jname) { CefRefPtr context = GetCefFromJNIObject(env, obj, "CefRequestContext"); if (!context.get()) return JNI_FALSE; CefString name = GetJNIString(env, jname); return context->CanSetPreference(name) ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jstring JNICALL Java_org_cef_browser_CefRequestContext_1N_N_1SetPreference(JNIEnv* env, jobject obj, jstring jname, jobject jvalue) { if (!CefCurrentlyOn(TID_UI)) return NewJNIString(env, "called on invalid thread"); CefRefPtr context = GetCefFromJNIObject(env, obj, "CefRequestContext"); if (!context.get()) return NewJNIString(env, "no request context"); CefString name = GetJNIString(env, jname); CefRefPtr value = GetCefValueFromJNIObject(env, jvalue); if (!value) return NewJNIString(env, "no value to set"); CefString error; bool result = context->SetPreference(name, value, error); if (!result) return NewJNIString(env, error); return nullptr; } JNIEXPORT void JNICALL Java_org_cef_browser_CefRequestContext_1N_N_1CefRequestContext_1DTOR( JNIEnv* env, jobject obj) { SetCefForJNIObject(env, obj, nullptr, "CefRequestContext"); }