Skip to content
This repository was archived by the owner on Feb 25, 2025. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,6 @@
import android.content.pm.PackageManager;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.security.NetworkSecurityPolicy;
import androidx.annotation.NonNull;
import java.io.IOException;
import org.json.JSONArray;
Expand Down Expand Up @@ -146,20 +145,13 @@ private static void parseDomain(
@NonNull
public static FlutterApplicationInfo load(@NonNull Context applicationContext) {
ApplicationInfo appInfo = getApplicationInfo(applicationContext);
// Prior to API 23, cleartext traffic is allowed.
boolean clearTextPermitted = true;
if (android.os.Build.VERSION.SDK_INT >= 23) {
clearTextPermitted = NetworkSecurityPolicy.getInstance().isCleartextTrafficPermitted();
}

return new FlutterApplicationInfo(
getString(appInfo.metaData, PUBLIC_AOT_SHARED_LIBRARY_NAME),
getString(appInfo.metaData, PUBLIC_VM_SNAPSHOT_DATA_KEY),
getString(appInfo.metaData, PUBLIC_ISOLATE_SNAPSHOT_DATA_KEY),
getString(appInfo.metaData, PUBLIC_FLUTTER_ASSETS_DIR_KEY),
getNetworkPolicy(appInfo, applicationContext),
appInfo.nativeLibraryDir,
clearTextPermitted,
getBoolean(appInfo.metaData, PUBLIC_AUTOMATICALLY_REGISTER_PLUGINS_METADATA_KEY, true));
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@ public final class FlutterApplicationInfo {
public final String flutterAssetsDir;
public final String domainNetworkPolicy;
public final String nativeLibraryDir;
public final boolean clearTextPermitted;
final boolean automaticallyRegisterPlugins;

public FlutterApplicationInfo(
Expand All @@ -27,7 +26,6 @@ public FlutterApplicationInfo(
String flutterAssetsDir,
String domainNetworkPolicy,
String nativeLibraryDir,
boolean clearTextPermitted,
boolean automaticallyRegisterPlugins) {
this.aotSharedLibraryName =
aotSharedLibraryName == null ? DEFAULT_AOT_SHARED_LIBRARY_NAME : aotSharedLibraryName;
Expand All @@ -38,7 +36,6 @@ public FlutterApplicationInfo(
flutterAssetsDir == null ? DEFAULT_FLUTTER_ASSETS_DIR : flutterAssetsDir;
this.nativeLibraryDir = nativeLibraryDir;
this.domainNetworkPolicy = domainNetworkPolicy == null ? "" : domainNetworkPolicy;
this.clearTextPermitted = clearTextPermitted;
this.automaticallyRegisterPlugins = automaticallyRegisterPlugins;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,16 +19,13 @@
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.os.Bundle;
import android.security.NetworkSecurityPolicy;
import java.io.StringReader;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.stubbing.Answer;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;
import org.robolectric.annotation.Implementation;
import org.robolectric.annotation.Implements;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserFactory;

Expand All @@ -46,23 +43,6 @@ public void itGeneratesCorrectApplicationInfoWithDefaultManifest() {
assertEquals("flutter_assets", info.flutterAssetsDir);
assertEquals("", info.domainNetworkPolicy);
assertNull(info.nativeLibraryDir);
assertEquals(true, info.clearTextPermitted);
}

@Config(shadows = {ApplicationInfoLoaderTest.ShadowNetworkSecurityPolicy.class})
@Test
public void itVotesAgainstClearTextIfSecurityPolicySaysSo() {
FlutterApplicationInfo info = ApplicationInfoLoader.load(RuntimeEnvironment.application);
assertNotNull(info);
assertEquals(false, info.clearTextPermitted);
}

@Implements(NetworkSecurityPolicy.class)
public static class ShadowNetworkSecurityPolicy {
@Implementation
public boolean isCleartextTrafficPermitted() {
return false;
}
}

private Context generateMockContext(Bundle metadata, String networkPolicyXml) throws Exception {
Expand Down