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
This commit is contained in:
Pieter De Baets
2024-12-05 16:29:37 -08:00
committed by Facebook GitHub Bot
parent e750059d98
commit 18ebea533d
6 changed files with 71 additions and 84 deletions
@@ -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 <init> ()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 <init> ()V
public static fun onDataReceived (Lcom/facebook/react/bridge/ReactApplicationContext;ILcom/facebook/react/bridge/WritableMap;)V
@@ -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();
}
@@ -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()
}
@@ -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<Cookie> cookies) {
if (cookieJar != null) {
cookieJar.saveFromResponse(url, cookies);
}
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
if (cookieJar != null) {
List<Cookie> cookies = cookieJar.loadForRequest(url);
ArrayList<Cookie> 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();
}
}
@@ -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<Cookie>) {
cookieJar?.saveFromResponse(url, cookies)
}
override fun loadForRequest(url: HttpUrl): List<Cookie> {
val cookieJar = cookieJar ?: return emptyList()
val cookies = cookieJar.loadForRequest(url)
val validatedCookies = ArrayList<Cookie>()
for (cookie in cookies) {
try {
val cookieChecker = Headers.Builder()
cookieChecker.add(cookie.name(), cookie.value())
validatedCookies.add(cookie)
} catch (ignored: IllegalArgumentException) {}
}
return validatedCookies
}
}
@@ -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 <T> nonNullAny(type: Class<T>): 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<Cookie> = 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)
}