Skip to content

Commit

Permalink
mobile: splitting out java utils from cronet (envoyproxy#25944)
Browse files Browse the repository at this point in the history
moving the network utilities Envoy Mobile depends on out of the cronvoy directories and namespaces.

Risk Level: medium: JNI typos cause failures
Testing: relying on all utilities having existing tests
Docs Changes: n/a
Release Notes: n/a

Signed-off-by: Alyssa Wilk <[email protected]>
Co-authored-by: JP Simard <[email protected]>
  • Loading branch information
alyssawilk and jpsim authored Mar 9, 2023
1 parent ee172d2 commit 34661f1
Show file tree
Hide file tree
Showing 29 changed files with 90 additions and 43 deletions.
6 changes: 4 additions & 2 deletions mobile/library/common/jni/android_jni_utility.cc
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,8 @@ bool is_cleartext_permitted(absl::string_view hostname) {
envoy_data host = Envoy::Data::Utility::copyToBridgeData(hostname);
JNIEnv* env = get_env();
jstring java_host = native_data_to_string(env, host);
jclass jcls_AndroidNetworkLibrary = find_class("org.chromium.net.AndroidNetworkLibrary");
jclass jcls_AndroidNetworkLibrary =
find_class("io.envoyproxy.envoymobile.utilities.AndroidNetworkLibrary");
jmethodID jmid_isCleartextTrafficPermitted = env->GetStaticMethodID(
jcls_AndroidNetworkLibrary, "isCleartextTrafficPermitted", "(Ljava/lang/String;)Z");
jboolean result = env->CallStaticBooleanMethod(jcls_AndroidNetworkLibrary,
Expand All @@ -37,7 +38,8 @@ bool is_cleartext_permitted(absl::string_view hostname) {
void tag_socket(int ifd, int uid, int tag) {
#if defined(__ANDROID_API__)
JNIEnv* env = get_env();
jclass jcls_AndroidNetworkLibrary = find_class("org.chromium.net.AndroidNetworkLibrary");
jclass jcls_AndroidNetworkLibrary =
find_class("io.envoyproxy.envoymobile.utilities.AndroidNetworkLibrary");
jmethodID jmid_tagSocket =
env->GetStaticMethodID(jcls_AndroidNetworkLibrary, "tagSocket", "(III)V");
env->CallStaticVoidMethod(jcls_AndroidNetworkLibrary, jmid_tagSocket, ifd, uid, tag);
Expand Down
18 changes: 11 additions & 7 deletions mobile/library/common/jni/android_network_utility.cc
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,8 @@
// because AndroidNetworkLibray can be called in non-Android platform with mock interfaces.

bool jvm_cert_is_issued_by_known_root(JNIEnv* env, jobject result) {
jclass jcls_AndroidCertVerifyResult = find_class("org.chromium.net.AndroidCertVerifyResult");
jclass jcls_AndroidCertVerifyResult =
find_class("io.envoyproxy.envoymobile.utilities.AndroidCertVerifyResult");
jmethodID jmid_isIssuedByKnownRoot =
env->GetMethodID(jcls_AndroidCertVerifyResult, "isIssuedByKnownRoot", "()Z");
ASSERT(jmid_isIssuedByKnownRoot);
Expand All @@ -21,7 +22,8 @@ bool jvm_cert_is_issued_by_known_root(JNIEnv* env, jobject result) {
}

envoy_cert_verify_status_t jvm_cert_get_status(JNIEnv* env, jobject j_result) {
jclass jcls_AndroidCertVerifyResult = find_class("org.chromium.net.AndroidCertVerifyResult");
jclass jcls_AndroidCertVerifyResult =
find_class("io.envoyproxy.envoymobile.utilities.AndroidCertVerifyResult");
jmethodID jmid_getStatus = env->GetMethodID(jcls_AndroidCertVerifyResult, "getStatus", "()I");
ASSERT(jmid_getStatus);
envoy_cert_verify_status_t result = CERT_VERIFY_STATUS_FAILED;
Expand All @@ -32,7 +34,8 @@ envoy_cert_verify_status_t jvm_cert_get_status(JNIEnv* env, jobject j_result) {
}

jobjectArray jvm_cert_get_certificate_chain_encoded(JNIEnv* env, jobject result) {
jclass jcls_AndroidCertVerifyResult = find_class("org.chromium.net.AndroidCertVerifyResult");
jclass jcls_AndroidCertVerifyResult =
find_class("io.envoyproxy.envoymobile.utilities.AndroidCertVerifyResult");
jmethodID jmid_getCertificateChainEncoded =
env->GetMethodID(jcls_AndroidCertVerifyResult, "getCertificateChainEncoded", "()[[B");
jobjectArray certificate_chain =
Expand All @@ -58,10 +61,11 @@ static void ExtractCertVerifyResult(JNIEnv* env, jobject result, envoy_cert_veri
jobject call_jvm_verify_x509_cert_chain(JNIEnv* env, const std::vector<std::string>& cert_chain,
std::string auth_type, std::string host) {
jni_log("[Envoy]", "jvm_verify_x509_cert_chain");
jclass jcls_AndroidNetworkLibrary = find_class("org.chromium.net.AndroidNetworkLibrary");
jmethodID jmid_verifyServerCertificates =
env->GetStaticMethodID(jcls_AndroidNetworkLibrary, "verifyServerCertificates",
"([[B[B[B)Lorg/chromium/net/AndroidCertVerifyResult;");
jclass jcls_AndroidNetworkLibrary =
find_class("io.envoyproxy.envoymobile.utilities.AndroidNetworkLibrary");
jmethodID jmid_verifyServerCertificates = env->GetStaticMethodID(
jcls_AndroidNetworkLibrary, "verifyServerCertificates",
"([[B[B[B)Lio/envoyproxy/envoymobile/utilities/AndroidCertVerifyResult;");
jobjectArray chain_byte_array = ToJavaArrayOfByteArray(env, cert_chain);
jbyteArray auth_string = ToJavaByteArray(env, auth_type);
jbyteArray host_string = ToJavaByteArray(env, host);
Expand Down
6 changes: 4 additions & 2 deletions mobile/library/common/jni/jni_interface.cc
Original file line number Diff line number Diff line change
Expand Up @@ -1327,7 +1327,8 @@ extern "C" JNIEXPORT jint JNICALL Java_io_envoyproxy_envoymobile_engine_JniLibra
static void jvm_add_test_root_certificate(const uint8_t* cert, size_t len) {
jni_log("[Envoy]", "jvm_add_test_root_certificate");
JNIEnv* env = get_env();
jclass jcls_AndroidNetworkLibrary = find_class("org.chromium.net.AndroidNetworkLibrary");
jclass jcls_AndroidNetworkLibrary =
find_class("io.envoyproxy.envoymobile.utilities.AndroidNetworkLibrary");
jmethodID jmid_addTestRootCertificate =
env->GetStaticMethodID(jcls_AndroidNetworkLibrary, "addTestRootCertificate", "([B)V");

Expand All @@ -1340,7 +1341,8 @@ static void jvm_add_test_root_certificate(const uint8_t* cert, size_t len) {
static void jvm_clear_test_root_certificate() {
jni_log("[Envoy]", "jvm_clear_test_root_certificate");
JNIEnv* env = get_env();
jclass jcls_AndroidNetworkLibrary = find_class("org.chromium.net.AndroidNetworkLibrary");
jclass jcls_AndroidNetworkLibrary =
find_class("io.envoyproxy.envoymobile.utilities.AndroidNetworkLibrary");
jmethodID jmid_clearTestRootCertificates =
env->GetStaticMethodID(jcls_AndroidNetworkLibrary, "clearTestRootCertificates", "()V");

Expand Down
3 changes: 2 additions & 1 deletion mobile/library/common/jni/jni_utility.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,8 @@ void set_class_loader(jobject class_loader);
* The method works on Android targets only as the `set_class_loader` method is not
* called by JVM-only targets.
*
* @param class_name, the name of the class to find (i.e. "org.chromium.net.AndroidNetworkLibrary").
* @param class_name, the name of the class to find (i.e.
* "io.envoyproxy.envoymobile.utilities.AndroidNetworkLibrary").
*
* @return jclass, the class with a provided `class_name` or NULL if
* it couldn't be found.
Expand Down
1 change: 1 addition & 0 deletions mobile/library/java/io/envoyproxy/envoymobile/engine/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ android_library(
deps = [
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine/types:envoy_c_types_lib",
"//library/java/io/envoyproxy/envoymobile/utilities",
"//library/java/org/chromium/net",
"@maven//:androidx_annotation_annotation",
"@maven//:androidx_core_core",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.chromium.net;
package io.envoyproxy.envoymobile.utilities;

import java.security.cert.CertificateEncodingException;
import java.security.cert.X509Certificate;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.chromium.net;
package io.envoyproxy.envoymobile.utilities;

import android.net.TrafficStats;
import android.os.ParcelFileDescriptor;
Expand Down
14 changes: 14 additions & 0 deletions mobile/library/java/io/envoyproxy/envoymobile/utilities/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
load("@build_bazel_rules_android//android:rules.bzl", "android_library")
load("@rules_jvm_external//:defs.bzl", "artifact")

licenses(["notice"]) # Apache 2

android_library(
name = "utilities",
srcs = glob(["*.java"]),
manifest = "UtilitiesManifest.xml",
visibility = ["//visibility:public"],
deps = [
artifact("androidx.annotation:annotation"),
],
)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.chromium.net;
package io.envoyproxy.envoymobile.utilities;

import androidx.annotation.IntDef;

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.chromium.net;
package io.envoyproxy.envoymobile.utilities;

import android.app.Activity;
import android.app.Application;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.chromium.net;
package io.envoyproxy.envoymobile.utilities;

import java.util.ArrayList;
import java.util.Arrays;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.chromium.net;
package io.envoyproxy.envoymobile.utilities;

import android.os.Build;
import android.os.StrictMode;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.chromium.net.impl;
package io.envoyproxy.envoymobile.utilities;

import android.net.TrafficStats;
import java.lang.reflect.InvocationTargetException;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="io.envoyproxy.envoymobile.utilities">
<uses-sdk
android:minSdkVersion="21"
android:targetSdkVersion="29"/>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.chromium.net;
package io.envoyproxy.envoymobile.utilities;

import android.content.BroadcastReceiver;
import android.content.Context;
Expand Down
1 change: 1 addition & 0 deletions mobile/library/java/org/chromium/net/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ android_library(
manifest = "ChromiumNetManifest.xml",
visibility = ["//visibility:public"],
deps = [
"//library/java/io/envoyproxy/envoymobile/utilities",
artifact("androidx.annotation:annotation"),
],
)
Expand Down
2 changes: 1 addition & 1 deletion mobile/library/java/org/chromium/net/impl/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,6 @@ android_library(
"Preconditions.java",
"QuicExceptionImpl.java",
"RequestFinishedInfoImpl.java",
"ThreadStatsUid.java",
"UrlRequestBase.java",
"UrlRequestBuilderImpl.java",
"UrlResponseInfoImpl.java",
Expand All @@ -54,6 +53,7 @@ android_library(
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine:envoy_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine/types:envoy_c_types_lib",
"//library/java/io/envoyproxy/envoymobile/utilities",
"//library/java/org/chromium/net",
"//library/java/org/chromium/net/urlconnection",
artifact("androidx.annotation:annotation"),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@
import org.chromium.net.UrlResponseInfo;
import org.chromium.net.impl.Executors.CheckedRunnable;
import org.chromium.net.impl.Executors.DirectPreventingExecutor;
import io.envoyproxy.envoymobile.utilities.ThreadStatsUid;

/**
* Pure java UrlRequest, backed by {@link HttpURLConnection}.
Expand Down
1 change: 1 addition & 0 deletions mobile/library/java/org/chromium/net/urlconnection/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ android_library(
manifest = "URLConnectionManifest.xml",
visibility = ["//visibility:public"],
deps = [
"//library/java/io/envoyproxy/envoymobile/utilities",
"//library/java/org/chromium/net",
artifact("androidx.annotation:annotation"),
],
Expand Down
1 change: 1 addition & 0 deletions mobile/library/kotlin/io/envoyproxy/envoymobile/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ kt_android_library(
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine:envoy_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine/types:envoy_c_types_lib",
"//library/java/io/envoyproxy/envoymobile/utilities",
],
)

Expand Down
4 changes: 2 additions & 2 deletions mobile/library/proguard.txt
Original file line number Diff line number Diff line change
Expand Up @@ -11,11 +11,11 @@
native <methods>;
}

-keep, includedescriptorclasses class org.chromium.net.AndroidNetworkLibrary {
-keep, includedescriptorclasses class io.envoyproxy.envoymobile.utilities.AndroidNetworkLibrary {
<methods>;
}

-keep, includedescriptorclasses class org.chromium.net.AndroidCertVerifyResult {
-keep, includedescriptorclasses class io.envoyproxy.envoymobile.utilities.AndroidCertVerifyResult {
<methods>;
}

Expand Down
23 changes: 23 additions & 0 deletions mobile/test/java/io/envoyproxy/envoymobile/utilities/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
load("@envoy//bazel:envoy_build_system.bzl", "envoy_package")
load("@envoy_mobile//bazel:kotlin_test.bzl", "envoy_mobile_android_test")

licenses(["notice"]) # Apache 2

envoy_package()

envoy_mobile_android_test(
name = "certificate_verification_tests",
srcs = [
"CertificateVerificationTest.java",
],
native_deps = [
"//test/common/jni:libenvoy_jni_with_test_extensions.so",
"//test/common/jni:libenvoy_jni_with_test_extensions_jnilib",
],
deps = [
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine:envoy_engine_lib",
"//library/java/io/envoyproxy/envoymobile/utilities",
"//library/java/org/chromium/net",
],
)
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.chromium.net;
package io.envoyproxy.envoymobile.utilities;

import static org.junit.Assert.assertEquals;

Expand Down
17 changes: 1 addition & 16 deletions mobile/test/java/org/chromium/net/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ envoy_mobile_android_test(
deps = [
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine:envoy_engine_lib",
"//library/java/io/envoyproxy/envoymobile/utilities",
"//library/java/org/chromium/net",
"//library/java/org/chromium/net/impl:cronvoy",
"//library/kotlin/io/envoyproxy/envoymobile:envoy_interfaces_lib",
Expand All @@ -36,22 +37,6 @@ envoy_mobile_android_test(
],
)

envoy_mobile_android_test(
name = "certificate_verification_tests",
srcs = [
"CertificateVerificationTest.java",
],
native_deps = [
"//test/common/jni:libenvoy_jni_with_test_extensions.so",
"//test/common/jni:libenvoy_jni_with_test_extensions_jnilib",
],
deps = [
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine:envoy_engine_lib",
"//library/java/org/chromium/net",
],
)

envoy_mobile_android_test(
name = "cronet_url_request_context_test",
srcs = [
Expand Down
1 change: 1 addition & 0 deletions mobile/test/java/org/chromium/net/impl/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ envoy_mobile_android_test(
deps = [
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine:envoy_engine_lib",
"//library/java/io/envoyproxy/envoymobile/utilities",
"//library/java/org/chromium/net",
"//library/java/org/chromium/net/impl:cronvoy",
"//library/kotlin/io/envoyproxy/envoymobile:envoy_interfaces_lib",
Expand Down
1 change: 1 addition & 0 deletions mobile/test/java/org/chromium/net/testing/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,7 @@ android_library(
deps = [
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine:envoy_engine_lib",
"//library/java/io/envoyproxy/envoymobile/utilities",
"//library/java/org/chromium/net",
"//library/java/org/chromium/net/impl:cronvoy",
"//library/kotlin/io/envoyproxy/envoymobile:envoy_interfaces_lib",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
import org.junit.rules.TestRule;
import org.junit.runner.Description;
import org.junit.runners.model.Statement;
import org.chromium.net.AndroidNetworkLibrary;
import io.envoyproxy.envoymobile.utilities.AndroidNetworkLibrary;

/**
* Custom TestRule for Cronet instrumentation tests.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import org.chromium.net.AndroidNetworkLibrary;
import io.envoyproxy.envoymobile.utilities.AndroidNetworkLibrary;
import io.envoyproxy.envoymobile.AndroidEngineBuilder;
import io.envoyproxy.envoymobile.Engine;
import io.envoyproxy.envoymobile.EnvoyError;
Expand Down Expand Up @@ -40,7 +40,7 @@
import org.robolectric.RobolectricTestRunner;
import java.nio.charset.StandardCharsets;
import org.chromium.net.testing.CertTestUtil;
import org.chromium.net.FakeX509Util;
import io.envoyproxy.envoymobile.utilities.FakeX509Util;

@RunWith(RobolectricTestRunner.class)
public class Http2TestServerTest {
Expand Down
1 change: 1 addition & 0 deletions mobile/test/java/org/chromium/net/urlconnection/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ envoy_mobile_android_test(
deps = [
"//library/java/io/envoyproxy/envoymobile/engine:envoy_base_engine_lib",
"//library/java/io/envoyproxy/envoymobile/engine:envoy_engine_lib",
"//library/java/io/envoyproxy/envoymobile/utilities",
"//library/java/org/chromium/net",
"//library/java/org/chromium/net/impl:cronvoy",
"//library/java/org/chromium/net/urlconnection",
Expand Down

0 comments on commit 34661f1

Please sign in to comment.