From 81fcaa151df4f81e1751719173376bebedb42f36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?G=C3=A1bor=20Siffel?= Date: Wed, 27 Mar 2019 21:46:36 -0700 Subject: [PATCH] Add the ability to customize the http client in networking native module Summary: Add the ability to build on top of the OkHttpClient.Builder by defining a lambda that gets called on network requests [Android][Added] - Public method `setCustomClientBuilder` to the native `com.facebook.react.modules.network.NetworkingModule`, that allows customizing the OkHttpClient per-request for greater control over HTTP requests. Reviewed By: hramos Differential Revision: D14288613 fbshipit-source-id: 34df0ff3e18eeea1d565ccfcf97408379900120b --- .../modules/network/NetworkingModule.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java index cbae1f0fbb0..888fcc25f03 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java @@ -116,6 +116,8 @@ public final class NetworkingModule extends ReactContextBaseJavaModule { private static final int CHUNK_TIMEOUT_NS = 100 * 1000000; // 100ms private static final int MAX_CHUNK_SIZE_BETWEEN_FLUSHES = 8 * 1024; // 8K + private static @Nullable CustomClientBuilder customClientBuilder = null; + private final OkHttpClient mClient; private final ForwardingCookieHandler mCookieHandler; private final @Nullable String mDefaultUserAgent; @@ -188,6 +190,20 @@ public final class NetworkingModule extends ReactContextBaseJavaModule { this(context, defaultUserAgent, OkHttpClientProvider.createClient(context), null); } + public static void setCustomClientBuilder(CustomClientBuilder ccb) { + customClientBuilder = ccb; + } + + public static interface CustomClientBuilder { + public void apply(OkHttpClient.Builder builder); + } + + private static void applyCustomBuilder(OkHttpClient.Builder builder) { + if (customClientBuilder != null) { + customClientBuilder.apply(builder); + } + } + @Override public void initialize() { mCookieJarContainer.setCookieJar(new JavaNetCookieJar(mCookieHandler)); @@ -301,6 +317,8 @@ public final class NetworkingModule extends ReactContextBaseJavaModule { OkHttpClient.Builder clientBuilder = mClient.newBuilder(); + applyCustomBuilder(clientBuilder); + if (!withCredentials) { clientBuilder.cookieJar(CookieJar.NO_COOKIES); }