// 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 "CefRequest_N.h" #include "include/cef_request.h" #include "jni_scoped_helpers.h" #include "jni_util.h" namespace { const char kCefClassName[] = "CefRequest"; CefRefPtr GetSelf(jlong self) { return reinterpret_cast(self); } } // namespace JNIEXPORT jobject JNICALL Java_org_cef_network_CefRequest_1N_N_1Create(JNIEnv* env, jclass cls) { CefRefPtr request = CefRequest::Create(); ScopedJNIRequest jrequest(env, request); return jrequest.Release(); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1Dispose(JNIEnv* env, jobject obj, jlong self) { SetCefForJNIObject(env, obj, nullptr, kCefClassName); } JNIEXPORT jlong JNICALL Java_org_cef_network_CefRequest_1N_N_1GetIdentifier(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return 0; return (jlong)request->GetIdentifier(); } JNIEXPORT jboolean JNICALL Java_org_cef_network_CefRequest_1N_N_1IsReadOnly(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return JNI_FALSE; return request->IsReadOnly() ? JNI_TRUE : JNI_FALSE; } JNIEXPORT jstring JNICALL Java_org_cef_network_CefRequest_1N_N_1GetURL(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return nullptr; return NewJNIString(env, request->GetURL()); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1SetURL(JNIEnv* env, jobject obj, jlong self, jstring jurl) { CefRefPtr request = GetSelf(self); if (!request) return; request->SetURL(GetJNIString(env, jurl)); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1SetReferrer(JNIEnv* env, jobject obj, jlong self, jstring jurl, jobject jpolicy) { CefRefPtr request = GetSelf(self); if (!request) return; cef_referrer_policy_t policy = REFERRER_POLICY_DEFAULT; if (jpolicy != nullptr) { if (IsJNIEnumValue(env, jpolicy, "org/cef/network/CefRequest$ReferrerPolicy", "REFERRER_POLICY_CLEAR_REFERRER_ON_TRANSITION_FROM_" "SECURE_TO_INSECURE")) { policy = REFERRER_POLICY_CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE; } else if (IsJNIEnumValue(env, jpolicy, "org/cef/network/CefRequest$ReferrerPolicy", "REFERRER_POLICY_REDUCE_REFERRER_GRANULARITY_ON_" "TRANSITION_CROSS_ORIGIN")) { policy = REFERRER_POLICY_REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN; } else if (IsJNIEnumValue( env, jpolicy, "org/cef/network/CefRequest$ReferrerPolicy", "REFERRER_POLICY_ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN")) { policy = REFERRER_POLICY_ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN; } else if (IsJNIEnumValue(env, jpolicy, "org/cef/network/CefRequest$ReferrerPolicy", "REFERRER_POLICY_NEVER_CLEAR_REFERRER")) { policy = REFERRER_POLICY_NEVER_CLEAR_REFERRER; } else if (IsJNIEnumValue(env, jpolicy, "org/cef/network/CefRequest$ReferrerPolicy", "REFERRER_POLICY_ORIGIN")) { policy = REFERRER_POLICY_ORIGIN; } else if (IsJNIEnumValue(env, jpolicy, "org/cef/network/CefRequest$ReferrerPolicy", "REFERRER_POLICY_CLEAR_REFERRER_ON_TRANSITION_" "CROSS_ORIGIN")) { policy = REFERRER_POLICY_CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN; } else if (IsJNIEnumValue(env, jpolicy, "org/cef/network/CefRequest$ReferrerPolicy", "REFERRER_POLICY_ORIGIN_CLEAR_ON_TRANSITION_FROM_" "SECURE_TO_INSECURE")) { policy = REFERRER_POLICY_ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE; } else if (IsJNIEnumValue(env, jpolicy, "org/cef/network/CefRequest$ReferrerPolicy", "REFERRER_POLICY_NO_REFERRER")) { policy = REFERRER_POLICY_NO_REFERRER; } else if (IsJNIEnumValue(env, jpolicy, "org/cef/network/CefRequest$ReferrerPolicy", "REFERRER_POLICY_NUM_VALUES")) { policy = REFERRER_POLICY_NUM_VALUES; } } request->SetReferrer(GetJNIString(env, jurl), policy); } JNIEXPORT jstring JNICALL Java_org_cef_network_CefRequest_1N_N_1GetReferrerURL(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return nullptr; return NewJNIString(env, request->GetReferrerURL()); } JNIEXPORT jobject JNICALL Java_org_cef_network_CefRequest_1N_N_1GetReferrerPolicy(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return nullptr; jobject result = nullptr; CefRequest::ReferrerPolicy rp = request->GetReferrerPolicy(); switch (rp) { default: // same as // REFERRER_POLICY_CLEAR_REFERRER_ON_TRANSITION_FROM_SECURE_TO_INSECURE JNI_CASE(env, "org/cef/network/CefRequest$ReferrerPolicy", REFERRER_POLICY_DEFAULT, result); JNI_CASE( env, "org/cef/network/CefRequest$ReferrerPolicy", REFERRER_POLICY_REDUCE_REFERRER_GRANULARITY_ON_TRANSITION_CROSS_ORIGIN, result); JNI_CASE(env, "org/cef/network/CefRequest$ReferrerPolicy", REFERRER_POLICY_ORIGIN_ONLY_ON_TRANSITION_CROSS_ORIGIN, result); JNI_CASE(env, "org/cef/network/CefRequest$ReferrerPolicy", REFERRER_POLICY_NEVER_CLEAR_REFERRER, result); JNI_CASE(env, "org/cef/network/CefRequest$ReferrerPolicy", REFERRER_POLICY_ORIGIN, result); JNI_CASE(env, "org/cef/network/CefRequest$ReferrerPolicy", REFERRER_POLICY_CLEAR_REFERRER_ON_TRANSITION_CROSS_ORIGIN, result); JNI_CASE( env, "org/cef/network/CefRequest$ReferrerPolicy", REFERRER_POLICY_ORIGIN_CLEAR_ON_TRANSITION_FROM_SECURE_TO_INSECURE, result); JNI_CASE(env, "org/cef/network/CefRequest$ReferrerPolicy", REFERRER_POLICY_NO_REFERRER, result); // REFERRER_POLICY_LAST_VALUE equals REFERRER_POLICY_NO_REFERRER as of CEF // 3683 } return result; } JNIEXPORT jstring JNICALL Java_org_cef_network_CefRequest_1N_N_1GetMethod(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return nullptr; return NewJNIString(env, request->GetMethod()); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1SetMethod(JNIEnv* env, jobject obj, jlong self, jstring jmethod) { CefRefPtr request = GetSelf(self); if (!request) return; request->SetMethod(GetJNIString(env, jmethod)); } JNIEXPORT jobject JNICALL Java_org_cef_network_CefRequest_1N_N_1GetPostData(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return nullptr; CefRefPtr postData = request->GetPostData(); if (!postData.get()) return nullptr; ScopedJNIPostData jpostData(env, postData); return jpostData.Release(); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1SetPostData(JNIEnv* env, jobject obj, jlong self, jobject jpostData) { CefRefPtr request = GetSelf(self); if (!request) return; ScopedJNIPostData postDataObj(env); if (jpostData) { postDataObj.SetHandle(jpostData, false /* should_delete */); } request->SetPostData(postDataObj.GetCefObject()); } JNIEXPORT jstring JNICALL Java_org_cef_network_CefRequest_1N_N_1GetHeaderByName(JNIEnv* env, jobject obj, jlong self, jstring jname) { CefRefPtr request = GetSelf(self); if (!request) return nullptr; return NewJNIString(env, request->GetHeaderByName(GetJNIString(env, jname))); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1SetHeaderByName(JNIEnv* env, jobject obj, jlong self, jstring jname, jstring jvalue, jboolean joverride) { CefRefPtr request = GetSelf(self); if (!request) return; return request->SetHeaderByName(GetJNIString(env, jname), GetJNIString(env, jvalue), joverride != JNI_FALSE); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1GetHeaderMap(JNIEnv* env, jobject obj, jlong self, jobject jheaderMap) { CefRefPtr request = GetSelf(self); if (!request) return; CefRequest::HeaderMap headerMap; request->GetHeaderMap(headerMap); SetJNIStringMultiMap(env, jheaderMap, headerMap); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1SetHeaderMap(JNIEnv* env, jobject obj, jlong self, jobject jheaderMap) { CefRefPtr request = GetSelf(self); if (!request) return; CefRequest::HeaderMap headerMap; GetJNIStringMultiMap(env, jheaderMap, headerMap); request->SetHeaderMap(headerMap); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1Set(JNIEnv* env, jobject obj, jlong self, jstring jurl, jstring jmethod, jobject jpostData, jobject jheaderMap) { CefRefPtr request = GetSelf(self); if (!request) return; CefRequest::HeaderMap headerMap; GetJNIStringMultiMap(env, jheaderMap, headerMap); request->SetHeaderMap(headerMap); ScopedJNIPostData postDataObj(env); if (jpostData) { postDataObj.SetHandle(jpostData, false /* should_delete */); } request->Set(GetJNIString(env, jurl), GetJNIString(env, jmethod), postDataObj.GetCefObject(), headerMap); } JNIEXPORT jint JNICALL Java_org_cef_network_CefRequest_1N_N_1GetFlags(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return 0; return request->GetFlags(); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1SetFlags(JNIEnv* env, jobject obj, jlong self, jint jflags) { CefRefPtr request = GetSelf(self); if (!request) return; request->SetFlags((int)jflags); } JNIEXPORT jstring JNICALL Java_org_cef_network_CefRequest_1N_N_1GetFirstPartyForCookies(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return nullptr; return NewJNIString(env, request->GetFirstPartyForCookies()); } JNIEXPORT void JNICALL Java_org_cef_network_CefRequest_1N_N_1SetFirstPartyForCookies(JNIEnv* env, jobject obj, jlong self, jstring jcookie) { CefRefPtr request = GetSelf(self); if (!request) return; request->SetFirstPartyForCookies(GetJNIString(env, jcookie)); } JNIEXPORT jobject JNICALL Java_org_cef_network_CefRequest_1N_N_1GetResourceType(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return nullptr; jobject result = nullptr; CefRequest::ResourceType rt = request->GetResourceType(); switch (rt) { JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_MAIN_FRAME, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_SUB_FRAME, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_STYLESHEET, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_SCRIPT, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_IMAGE, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_FONT_RESOURCE, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_SUB_RESOURCE, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_OBJECT, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_MEDIA, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_WORKER, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_SHARED_WORKER, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_PREFETCH, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_FAVICON, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_XHR, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_PING, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_SERVICE_WORKER, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_CSP_REPORT, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_PLUGIN_RESOURCE, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_NAVIGATION_PRELOAD_MAIN_FRAME, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_NAVIGATION_PRELOAD_SUB_FRAME, result); JNI_CASE(env, "org/cef/network/CefRequest$ResourceType", RT_NUM_VALUES, result); } return result; } JNIEXPORT jobject JNICALL Java_org_cef_network_CefRequest_1N_N_1GetTransitionType(JNIEnv* env, jobject obj, jlong self) { CefRefPtr request = GetSelf(self); if (!request) return nullptr; ScopedJNITransitionType type(env, request->GetTransitionType()); return type.Release(); }