From 18ebea533d348329926bd7782bb55469aa228a4a Mon Sep 17 00:00:00 2001 From: Pieter De Baets Date: Thu, 5 Dec 2024 16:29:37 -0800 Subject: [PATCH] Convert com.facebook.react.modules.network.ReactCookieJarContainer to Kotlin (#48089) Summary: Pull Request resolved: https://github.com/facebook/react-native/pull/48089 Planning to make some changes here for perf, but converting to Kotlin first Changelog: [Android][Removed] Made ReactCookieJarContainer internal. Reviewed By: tdn120 Differential Revision: D66724567 fbshipit-source-id: bf96f8df8a5c901b47c371c7ed16b7a81de22ee7 --- .../ReactAndroid/api/ReactAndroid.api | 8 --- .../modules/network/CookieJarContainer.java | 17 ------ .../modules/network/CookieJarContainer.kt | 16 +++++ .../network/ReactCookieJarContainer.java | 58 ------------------- .../network/ReactCookieJarContainer.kt | 48 +++++++++++++++ .../network/ReactCookieJarContainerTest.kt | 8 ++- 6 files changed, 71 insertions(+), 84 deletions(-) delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CookieJarContainer.java create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CookieJarContainer.kt delete mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.java create mode 100644 packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.kt diff --git a/packages/react-native/ReactAndroid/api/ReactAndroid.api b/packages/react-native/ReactAndroid/api/ReactAndroid.api index 1cacf5c79d5..b0e8f232081 100644 --- a/packages/react-native/ReactAndroid/api/ReactAndroid.api +++ b/packages/react-native/ReactAndroid/api/ReactAndroid.api @@ -3511,14 +3511,6 @@ public class com/facebook/react/modules/network/ProgressResponseBody : okhttp3/R public fun totalBytesRead ()J } -public class com/facebook/react/modules/network/ReactCookieJarContainer : com/facebook/react/modules/network/CookieJarContainer { - public fun ()V - public fun loadForRequest (Lokhttp3/HttpUrl;)Ljava/util/List; - public fun removeCookieJar ()V - public fun saveFromResponse (Lokhttp3/HttpUrl;Ljava/util/List;)V - public fun setCookieJar (Lokhttp3/CookieJar;)V -} - public class com/facebook/react/modules/network/ResponseUtil { public fun ()V public static fun onDataReceived (Lcom/facebook/react/bridge/ReactApplicationContext;ILcom/facebook/react/bridge/WritableMap;)V diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CookieJarContainer.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CookieJarContainer.java deleted file mode 100644 index 339bee4e659..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CookieJarContainer.java +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and 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.CookieJar; - -public interface CookieJarContainer extends CookieJar { - - void setCookieJar(CookieJar cookieJar); - - void removeCookieJar(); -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CookieJarContainer.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CookieJarContainer.kt new file mode 100644 index 00000000000..314c30f1a1d --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/CookieJarContainer.kt @@ -0,0 +1,16 @@ +/* + * Copyright (c) Meta Platforms, Inc. and 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.CookieJar + +public interface CookieJarContainer : CookieJar { + public fun setCookieJar(cookieJar: CookieJar) + + public fun removeCookieJar() +} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.java deleted file mode 100644 index e5d36a8d30e..00000000000 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) Meta Platforms, Inc. and 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 androidx.annotation.Nullable; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import okhttp3.Cookie; -import okhttp3.CookieJar; -import okhttp3.Headers; -import okhttp3.HttpUrl; - -/** Basic okhttp3 CookieJar container */ -public class ReactCookieJarContainer implements CookieJarContainer { - - @Nullable private CookieJar cookieJar = null; - - @Override - public void setCookieJar(CookieJar cookieJar) { - this.cookieJar = cookieJar; - } - - @Override - public void removeCookieJar() { - cookieJar = null; - } - - @Override - public void saveFromResponse(HttpUrl url, List cookies) { - if (cookieJar != null) { - cookieJar.saveFromResponse(url, cookies); - } - } - - @Override - public List loadForRequest(HttpUrl url) { - if (cookieJar != null) { - List cookies = cookieJar.loadForRequest(url); - ArrayList validatedCookies = new ArrayList<>(); - for (Cookie cookie : cookies) { - try { - Headers.Builder cookieChecker = new Headers.Builder(); - cookieChecker.add(cookie.name(), cookie.value()); - validatedCookies.add(cookie); - } catch (IllegalArgumentException ignored) { - } - } - return validatedCookies; - } - return Collections.emptyList(); - } -} diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.kt new file mode 100644 index 00000000000..85266bc8904 --- /dev/null +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/network/ReactCookieJarContainer.kt @@ -0,0 +1,48 @@ +/* + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + * This source code is licensed under the MIT license found in the + * LICENSE file in the root directory of this source tree. + */ + +@file:Suppress("DEPRECATION_ERROR") // Conflicting okhttp versions + +package com.facebook.react.modules.network + +import java.util.ArrayList +import okhttp3.Cookie +import okhttp3.CookieJar +import okhttp3.Headers +import okhttp3.HttpUrl + +/** Basic okhttp3 CookieJar container */ +internal class ReactCookieJarContainer : CookieJarContainer { + + private var cookieJar: CookieJar? = null + + override fun setCookieJar(cookieJar: CookieJar) { + this.cookieJar = cookieJar + } + + override fun removeCookieJar() { + cookieJar = null + } + + override fun saveFromResponse(url: HttpUrl, cookies: List) { + cookieJar?.saveFromResponse(url, cookies) + } + + override fun loadForRequest(url: HttpUrl): List { + val cookieJar = cookieJar ?: return emptyList() + val cookies = cookieJar.loadForRequest(url) + val validatedCookies = ArrayList() + for (cookie in cookies) { + try { + val cookieChecker = Headers.Builder() + cookieChecker.add(cookie.name(), cookie.value()) + validatedCookies.add(cookie) + } catch (ignored: IllegalArgumentException) {} + } + return validatedCookies + } +} diff --git a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/network/ReactCookieJarContainerTest.kt b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/network/ReactCookieJarContainerTest.kt index 198c1305c8b..a84304166cc 100644 --- a/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/network/ReactCookieJarContainerTest.kt +++ b/packages/react-native/ReactAndroid/src/test/java/com/facebook/react/modules/network/ReactCookieJarContainerTest.kt @@ -18,6 +18,12 @@ import org.mockito.Mockito.mock import org.mockito.Mockito.`when` as whenever import org.robolectric.RobolectricTestRunner +/** + * Returns Mockito.any() as nullable type to avoid java.lang.IllegalStateException when null is + * returned. + */ +private fun nonNullAny(type: Class): T = any(type) + /** Tests for {@link NetworkingModule}. */ @RunWith(RobolectricTestRunner::class) class ReactCookieJarContainerTest { @@ -33,7 +39,7 @@ class ReactCookieJarContainerTest { fun testEmptyCookies() { val jarContainer: ReactCookieJarContainer = mock(ReactCookieJarContainer::class.java) val cookies: List = emptyList() - whenever(jarContainer.loadForRequest(any(HttpUrl::class.java))).thenReturn(cookies) + whenever(jarContainer.loadForRequest(nonNullAny(HttpUrl::class.java))).thenReturn(cookies) assertThat(jarContainer.loadForRequest(httpUrl).size).isEqualTo(0) }