diff options
10 files changed, 15 insertions, 409 deletions
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 5f2e4f905b1c..3161408fcc1d 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -271,11 +271,6 @@ when there's no network connection. If the scan doesn't timeout, use zero --> <integer name="config_radioScanningTimeout">0</integer> - <!-- When true, Android uses the PAC implementation included in WebView to handle - networks with PAC scripts. - When false, Android's own implementation of libpac is used.--> - <bool name ="config_useWebViewPacProcessor">true</bool> - <!-- XXXXX NOTE THE FOLLOWING RESOURCES USE THE WRONG NAMING CONVENTION. Please don't copy them, copy anything else. --> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 35ce780d3408..f5107d508e55 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -287,7 +287,6 @@ <java-symbol type="bool" name="config_duplicate_port_omadm_wappush" /> <java-symbol type="bool" name="config_disableTransitionAnimation" /> <java-symbol type="bool" name="config_enableAutoPowerModes" /> - <java-symbol type="bool" name="config_useWebViewPacProcessor" /> <java-symbol type="integer" name="config_autoPowerModeThresholdAngle" /> <java-symbol type="integer" name="config_autoPowerModeAnyMotionSensor" /> <java-symbol type="bool" name="config_autoPowerModePreferWristTilt" /> diff --git a/packages/services/PacProcessor/Android.bp b/packages/services/PacProcessor/Android.bp index 494a8187886d..1fd972ce4b3d 100644 --- a/packages/services/PacProcessor/Android.bp +++ b/packages/services/PacProcessor/Android.bp @@ -19,7 +19,6 @@ android_app { srcs: ["src/**/*.java"], platform_apis: true, certificate: "platform", - jni_libs: ["libjni_pacprocessor"], } filegroup { diff --git a/packages/services/PacProcessor/jni/Android.bp b/packages/services/PacProcessor/jni/Android.bp deleted file mode 100644 index 0e7e10152f81..000000000000 --- a/packages/services/PacProcessor/jni/Android.bp +++ /dev/null @@ -1,43 +0,0 @@ -// -// Copyright (C) 2013 The Android Open Source Project -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -cc_library_shared { - name: "libjni_pacprocessor", - - srcs: [ - "jni_init.cpp", - "com_android_pacprocessor_PacNative.cpp", - ], - - shared_libs: [ - "libandroidfw", - "libandroid_runtime", - "liblog", - "libutils", - "libnativehelper", - "libpac", - ], - - cflags: [ - "-Wall", - "-Werror", - "-Wunused", - "-Wunreachable-code", - ], - sanitize: { - cfi: true, - }, -} diff --git a/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp b/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp deleted file mode 100644 index d969c69cfaf1..000000000000 --- a/packages/services/PacProcessor/jni/com_android_pacprocessor_PacNative.cpp +++ /dev/null @@ -1,133 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "PacProcessor" - -#include <stdlib.h> -#include <string> - -#include <utils/Log.h> -#include <utils/Mutex.h> -#include "android_runtime/AndroidRuntime.h" - -#include "jni.h" -#include <nativehelper/JNIHelp.h> - -#include "proxy_resolver_v8_wrapper.h" - -namespace android { - -ProxyResolverV8Handle* proxyResolver = NULL; -bool pacSet = false; - -std::u16string jstringToString16(JNIEnv* env, jstring jstr) { - const jchar* str = env->GetStringCritical(jstr, 0); - std::u16string str16(reinterpret_cast<const char16_t*>(str), - env->GetStringLength(jstr)); - env->ReleaseStringCritical(jstr, str); - return str16; -} - -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); -} - -static jboolean com_android_pacprocessor_PacNative_createV8ParserNativeLocked(JNIEnv* /* env */, - jobject) { - if (proxyResolver == NULL) { - proxyResolver = ProxyResolverV8Handle_new(); - pacSet = false; - return JNI_FALSE; - } - return JNI_TRUE; -} - -static jboolean com_android_pacprocessor_PacNative_destroyV8ParserNativeLocked(JNIEnv* /* env */, - jobject) { - if (proxyResolver != NULL) { - ProxyResolverV8Handle_delete(proxyResolver); - proxyResolver = NULL; - return JNI_FALSE; - } - return JNI_TRUE; -} - -static jboolean com_android_pacprocessor_PacNative_setProxyScriptNativeLocked(JNIEnv* env, jobject, - jstring script) { - std::u16string script16 = jstringToString16(env, script); - - if (proxyResolver == NULL) { - ALOGE("V8 Parser not started when setting PAC script"); - return JNI_TRUE; - } - - if (ProxyResolverV8Handle_SetPacScript(proxyResolver, script16.data()) != OK) { - ALOGE("Unable to set PAC script"); - return JNI_TRUE; - } - pacSet = true; - - return JNI_FALSE; -} - -static jstring com_android_pacprocessor_PacNative_makeProxyRequestNativeLocked(JNIEnv* env, jobject, - jstring url, jstring host) { - std::u16string url16 = jstringToString16(env, url); - std::u16string host16 = jstringToString16(env, host); - - if (proxyResolver == NULL) { - ALOGE("V8 Parser not initialized when running PAC script"); - return NULL; - } - - if (!pacSet) { - ALOGW("Attempting to run PAC with no script set"); - return NULL; - } - - 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; -} - -static const JNINativeMethod gMethods[] = { - { "createV8ParserNativeLocked", "()Z", - (void*)com_android_pacprocessor_PacNative_createV8ParserNativeLocked}, - { "destroyV8ParserNativeLocked", "()Z", - (void*)com_android_pacprocessor_PacNative_destroyV8ParserNativeLocked}, - { "setProxyScriptNativeLocked", "(Ljava/lang/String;)Z", - (void*)com_android_pacprocessor_PacNative_setProxyScriptNativeLocked}, - { "makeProxyRequestNativeLocked", "(Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;", - (void*)com_android_pacprocessor_PacNative_makeProxyRequestNativeLocked}, -}; - -int register_com_android_pacprocessor_PacNative(JNIEnv* env) { - return jniRegisterNativeMethods(env, "com/android/pacprocessor/PacNative", - gMethods, NELEM(gMethods)); -} - -} /* namespace android */ diff --git a/packages/services/PacProcessor/jni/jni_init.cpp b/packages/services/PacProcessor/jni/jni_init.cpp deleted file mode 100644 index de844c87ec0b..000000000000 --- a/packages/services/PacProcessor/jni/jni_init.cpp +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (C) 2013 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "PacProcessor" - -#include <utils/Log.h> -#include "jni.h" - -namespace android { - extern int register_com_android_pacprocessor_PacNative(JNIEnv *env); -} - -using namespace android; - -extern "C" jint JNI_OnLoad(JavaVM* vm, void* /* reserved */) { - JNIEnv *env; - if (vm->GetEnv(reinterpret_cast<void**>(&env), JNI_VERSION_1_6) != JNI_OK) { - ALOGE("ERROR: GetEnv failed"); - return -1; - } - - register_com_android_pacprocessor_PacNative(env); - - return JNI_VERSION_1_6; -} diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/LibpacInterface.java b/packages/services/PacProcessor/src/com/android/pacprocessor/LibpacInterface.java deleted file mode 100644 index 103ef7811ff0..000000000000 --- a/packages/services/PacProcessor/src/com/android/pacprocessor/LibpacInterface.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * Copyright 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.pacprocessor; - -/** - * Common interface for both Android's and WebView's implementation of PAC processor. - * - * @hide - */ -interface LibpacInterface { - default boolean startPacSupport() { - return true; - } - - default boolean stopPacSupport() { - return true; - } - - boolean setCurrentProxyScript(String script); - String makeProxyRequest(String url, String host); -} diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/PacNative.java b/packages/services/PacProcessor/src/com/android/pacprocessor/PacNative.java deleted file mode 100644 index 9c0cfc27bd14..000000000000 --- a/packages/services/PacProcessor/src/com/android/pacprocessor/PacNative.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * Copyright (c) 2013, The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.android.pacprocessor; - -import android.util.Log; - -/** - * @hide - */ -public class PacNative implements LibpacInterface { - private static final String TAG = "PacProxy"; - - private static final PacNative sInstance = new PacNative(); - - private String mCurrentPac; - - private boolean mIsActive; - - // Only make native calls from inside synchronized blocks. - private native boolean createV8ParserNativeLocked(); - private native boolean destroyV8ParserNativeLocked(); - - private native boolean setProxyScriptNativeLocked(String script); - - private native String makeProxyRequestNativeLocked(String url, String host); - - static { - System.loadLibrary("jni_pacprocessor"); - } - - private PacNative() { - - } - - public static PacNative getInstance() { - return sInstance; - } - - @Override - public synchronized boolean startPacSupport() { - if (createV8ParserNativeLocked()) { - Log.e(TAG, "Unable to Create v8 Proxy Parser."); - return false; - } - mIsActive = true; - return true; - } - - @Override - public synchronized boolean stopPacSupport() { - if (mIsActive) { - if (destroyV8ParserNativeLocked()) { - Log.e(TAG, "Unable to Destroy v8 Proxy Parser."); - return false; - } - mIsActive = false; - } - return true; - } - - @Override - public synchronized boolean setCurrentProxyScript(String script) { - if (setProxyScriptNativeLocked(script)) { - Log.e(TAG, "Unable to parse proxy script."); - return false; - } - return true; - } - - @Override - public synchronized String makeProxyRequest(String url, String host) { - String ret = makeProxyRequestNativeLocked(url, host); - if ((ret == null) || (ret.length() == 0)) { - Log.e(TAG, "v8 Proxy request failed."); - ret = null; - } - return ret; - } - - public synchronized boolean isActive() { - return mIsActive; - } -} diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java index 5a7de9f70b49..46bda06d0e04 100644 --- a/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java +++ b/packages/services/PacProcessor/src/com/android/pacprocessor/PacService.java @@ -17,13 +17,14 @@ package com.android.pacprocessor; import android.app.Service; import android.content.Intent; -import android.content.res.Resources; import android.os.Binder; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; import android.util.Log; +import android.webkit.PacProcessor; +import com.android.internal.annotations.GuardedBy; import com.android.net.IProxyService; import java.net.MalformedURLException; @@ -31,24 +32,21 @@ import java.net.URL; public class PacService extends Service { private static final String TAG = "PacService"; - private static final boolean sUseWebViewPacProcessor = Resources.getSystem().getBoolean( - com.android.internal.R.bool.config_useWebViewPacProcessor); - private final LibpacInterface mLibpac = sUseWebViewPacProcessor - ? PacWebView.getInstance() - : PacNative.getInstance(); + private Object mLock = new Object(); + + @GuardedBy("mLock") + private final PacProcessor mPacProcessor = PacProcessor.getInstance(); private ProxyServiceStub mStub = new ProxyServiceStub(); @Override public void onCreate() { super.onCreate(); - mLibpac.startPacSupport(); } @Override public void onDestroy() { - mLibpac.stopPacSupport(); super.onDestroy(); } @@ -74,7 +72,10 @@ public class PacService extends Service { throw new IllegalArgumentException("Invalid host was passed"); } } - return mLibpac.makeProxyRequest(url, host); + + synchronized (mLock) { + return mPacProcessor.findProxyForUrl(url); + } } catch (MalformedURLException e) { throw new IllegalArgumentException("Invalid URL was passed"); } @@ -86,7 +87,11 @@ public class PacService extends Service { Log.e(TAG, "Only system user is allowed to call setPacFile"); throw new SecurityException(); } - mLibpac.setCurrentProxyScript(script); + synchronized (mLock) { + if (!mPacProcessor.setProxyScript(script)) { + Log.e(TAG, "Unable to parse proxy script."); + } + } } } } diff --git a/packages/services/PacProcessor/src/com/android/pacprocessor/PacWebView.java b/packages/services/PacProcessor/src/com/android/pacprocessor/PacWebView.java deleted file mode 100644 index 4dd00f1ff01b..000000000000 --- a/packages/services/PacProcessor/src/com/android/pacprocessor/PacWebView.java +++ /dev/null @@ -1,48 +0,0 @@ -/* - * Copyright (C) 2020 The Android Open Source Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.android.pacprocessor; - -import android.util.Log; -import android.webkit.PacProcessor; - -/** - * @hide - */ -public class PacWebView implements LibpacInterface { - private static final String TAG = "PacWebView"; - - private static final PacWebView sInstance = new PacWebView(); - private PacProcessor mProcessor = PacProcessor.getInstance(); - - public static PacWebView getInstance() { - return sInstance; - } - - @Override - public synchronized boolean setCurrentProxyScript(String script) { - if (!mProcessor.setProxyScript(script)) { - Log.e(TAG, "Unable to parse proxy script."); - return false; - } - return true; - } - - @Override - public synchronized String makeProxyRequest(String url, String host) { - return mProcessor.findProxyForUrl(url); - } -} |