diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CustomClientBuilder.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CustomClientBuilder.java new file mode 100644 index 00000000000000..db81d653baeada --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CustomClientBuilder.java @@ -0,0 +1,14 @@ +/* + * Copyright (c) Facebook, Inc. and its affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +package com.facebook.react.modules.network; + +import okhttp3.OkHttpClient; + +public interface CustomClientBuilder { + public void apply(OkHttpClient.Builder builder); +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java index 020f8b82e277fb..344c452836fc23 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/NetworkingModule.java @@ -94,7 +94,8 @@ public interface ResponseHandler { 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 static @Nullable com.facebook.react.modules.network.CustomClientBuilder + customClientBuilder = null; private final OkHttpClient mClient; private final ForwardingCookieHandler mCookieHandler; @@ -163,13 +164,18 @@ public NetworkingModule(ReactApplicationContext context, String defaultUserAgent this(context, defaultUserAgent, OkHttpClientProvider.createClient(context), null); } - public static void setCustomClientBuilder(CustomClientBuilder ccb) { + public static void setCustomClientBuilder( + com.facebook.react.modules.network.CustomClientBuilder ccb) { customClientBuilder = ccb; } - public static interface CustomClientBuilder { - public void apply(OkHttpClient.Builder builder); - } + /** + * @deprecated To be removed in a future release. See + * https://github.com/facebook/react-native/pull/37798#pullrequestreview-1518338914 + */ + @Deprecated + public static interface CustomClientBuilder + extends com.facebook.react.modules.network.CustomClientBuilder {} private static void applyCustomBuilder(OkHttpClient.Builder builder) { if (customClientBuilder != null) { diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.java index ee1b2c85dc261f..d13db1fb2a90a8 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/websocket/WebSocketModule.java @@ -19,6 +19,7 @@ import com.facebook.react.bridge.WritableMap; import com.facebook.react.common.ReactConstants; import com.facebook.react.module.annotations.ReactModule; +import com.facebook.react.modules.network.CustomClientBuilder; import com.facebook.react.modules.network.ForwardingCookieHandler; import java.io.IOException; import java.net.URI; @@ -48,11 +49,23 @@ public interface ContentHandler { private ForwardingCookieHandler mCookieHandler; + private static @Nullable CustomClientBuilder customClientBuilder = null; + public WebSocketModule(ReactApplicationContext context) { super(context); mCookieHandler = new ForwardingCookieHandler(context); } + public static void setCustomClientBuilder(CustomClientBuilder ccb) { + customClientBuilder = ccb; + } + + private static void applyCustomBuilder(OkHttpClient.Builder builder) { + if (customClientBuilder != null) { + customClientBuilder.apply(builder); + } + } + @Override public void invalidate() { for (WebSocket socket : mWebSocketConnections.values()) { @@ -84,12 +97,15 @@ public void connect( @Nullable final ReadableMap options, final double socketID) { final int id = (int) socketID; - OkHttpClient client = + OkHttpClient.Builder okHttpBuilder = new OkHttpClient.Builder() .connectTimeout(10, TimeUnit.SECONDS) .writeTimeout(10, TimeUnit.SECONDS) - .readTimeout(0, TimeUnit.MINUTES) // Disable timeouts for read - .build(); + .readTimeout(0, TimeUnit.MINUTES); // Disable timeouts for read + + applyCustomBuilder(okHttpBuilder); + + OkHttpClient client = okHttpBuilder.build(); Request.Builder builder = new Request.Builder().tag(id).url(url);