2026-02-19 21:31:49 +01:00

418 lines
16 KiB
C++

// 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<CefRequest> GetSelf(jlong self) {
return reinterpret_cast<CefRequest*>(self);
}
} // namespace
JNIEXPORT jobject JNICALL
Java_org_cef_network_CefRequest_1N_N_1Create(JNIEnv* env, jclass cls) {
CefRefPtr<CefRequest> 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<CefRequest>(env, obj, nullptr, kCefClassName);
}
JNIEXPORT jlong JNICALL
Java_org_cef_network_CefRequest_1N_N_1GetIdentifier(JNIEnv* env,
jobject obj,
jlong self) {
CefRefPtr<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> request = GetSelf(self);
if (!request)
return nullptr;
CefRefPtr<CefPostData> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> 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<CefRequest> request = GetSelf(self);
if (!request)
return nullptr;
ScopedJNITransitionType type(env, request->GetTransitionType());
return type.Release();
}