Merge changes from topic "libpac_C_api"

* changes:
  Replace C++ API by the C API provided by libpac
  Use std::u16string instead of android::String16 due to API change in libpac
This commit is contained in:
vichang
2019-01-10 12:54:14 +00:00
committed by Gerrit Code Review

View File

@@ -16,6 +16,9 @@
#define LOG_TAG "PacProcessor"
#include <stdlib.h>
#include <string>
#include <utils/Log.h>
#include <utils/Mutex.h>
#include "android_runtime/AndroidRuntime.h"
@@ -23,24 +26,24 @@
#include "jni.h"
#include <nativehelper/JNIHelp.h>
#include "proxy_resolver_v8.h"
#include "proxy_resolver_v8_wrapper.h"
namespace android {
net::ProxyResolverV8* proxyResolver = NULL;
ProxyResolverV8Handle* proxyResolver = NULL;
bool pacSet = false;
String16 jstringToString16(JNIEnv* env, jstring jstr) {
std::u16string jstringToString16(JNIEnv* env, jstring jstr) {
const jchar* str = env->GetStringCritical(jstr, 0);
String16 str16(reinterpret_cast<const char16_t*>(str),
std::u16string str16(reinterpret_cast<const char16_t*>(str),
env->GetStringLength(jstr));
env->ReleaseStringCritical(jstr, str);
return str16;
}
jstring string16ToJstring(JNIEnv* env, String16 string) {
const char16_t* str = string.string();
size_t len = string.size();
jstring string16ToJstring(JNIEnv* env, std::u16string string) {
const char16_t* str = string.data();
size_t len = string.length();
return env->NewString(reinterpret_cast<const jchar*>(str), len);
}
@@ -48,7 +51,7 @@ jstring string16ToJstring(JNIEnv* env, String16 string) {
static jboolean com_android_pacprocessor_PacNative_createV8ParserNativeLocked(JNIEnv* /* env */,
jobject) {
if (proxyResolver == NULL) {
proxyResolver = new net::ProxyResolverV8(net::ProxyResolverJSBindings::CreateDefault());
proxyResolver = ProxyResolverV8Handle_new();
pacSet = false;
return JNI_FALSE;
}
@@ -58,7 +61,7 @@ static jboolean com_android_pacprocessor_PacNative_createV8ParserNativeLocked(JN
static jboolean com_android_pacprocessor_PacNative_destroyV8ParserNativeLocked(JNIEnv* /* env */,
jobject) {
if (proxyResolver != NULL) {
delete proxyResolver;
ProxyResolverV8Handle_delete(proxyResolver);
proxyResolver = NULL;
return JNI_FALSE;
}
@@ -67,14 +70,14 @@ static jboolean com_android_pacprocessor_PacNative_destroyV8ParserNativeLocked(J
static jboolean com_android_pacprocessor_PacNative_setProxyScriptNativeLocked(JNIEnv* env, jobject,
jstring script) {
String16 script16 = jstringToString16(env, script);
std::u16string script16 = jstringToString16(env, script);
if (proxyResolver == NULL) {
ALOGE("V8 Parser not started when setting PAC script");
return JNI_TRUE;
}
if (proxyResolver->SetPacScript(script16) != OK) {
if (ProxyResolverV8Handle_SetPacScript(proxyResolver, script16.data()) != OK) {
ALOGE("Unable to set PAC script");
return JNI_TRUE;
}
@@ -85,9 +88,8 @@ static jboolean com_android_pacprocessor_PacNative_setProxyScriptNativeLocked(JN
static jstring com_android_pacprocessor_PacNative_makeProxyRequestNativeLocked(JNIEnv* env, jobject,
jstring url, jstring host) {
String16 url16 = jstringToString16(env, url);
String16 host16 = jstringToString16(env, host);
String16 ret;
std::u16string url16 = jstringToString16(env, url);
std::u16string host16 = jstringToString16(env, host);
if (proxyResolver == NULL) {
ALOGE("V8 Parser not initialized when running PAC script");
@@ -99,12 +101,14 @@ static jstring com_android_pacprocessor_PacNative_makeProxyRequestNativeLocked(J
return NULL;
}
if (proxyResolver->GetProxyForURL(url16, host16, &ret) != OK) {
String8 ret8(ret);
ALOGE("Error Running PAC: %s", ret8.string());
std::unique_ptr<char16_t, decltype(&free)> result = std::unique_ptr<char16_t, decltype(&free)>(
ProxyResolverV8Handle_GetProxyForURL(proxyResolver, url16.data(), host16.data()), &free);
if (result.get() == NULL) {
ALOGE("Error Running PAC");
return NULL;
}
std::u16string ret(result.get());
jstring jret = string16ToJstring(env, ret);
return jret;