Merge "Revert consider TEMPORARILY_NOT_METERED as unmetered in data usage"
diff --git a/Tethering/tests/integration/src/android/net/EthernetTetheringTest.java b/Tethering/tests/integration/src/android/net/EthernetTetheringTest.java
index c2c9fc4..da69a8d 100644
--- a/Tethering/tests/integration/src/android/net/EthernetTetheringTest.java
+++ b/Tethering/tests/integration/src/android/net/EthernetTetheringTest.java
@@ -67,16 +67,13 @@
import static org.junit.Assume.assumeFalse;
import static org.junit.Assume.assumeTrue;
-import android.app.UiAutomation;
import android.content.Context;
-import android.content.pm.PackageManager;
import android.net.EthernetManager.TetheredInterfaceCallback;
import android.net.EthernetManager.TetheredInterfaceRequest;
import android.net.TetheringManager.StartTetheringCallback;
import android.net.TetheringManager.TetheringEventCallback;
import android.net.TetheringManager.TetheringRequest;
import android.net.TetheringTester.TetheredDevice;
-import android.net.cts.util.CtsNetUtils;
import android.os.Build;
import android.os.Handler;
import android.os.HandlerThread;
@@ -88,7 +85,6 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
-import androidx.test.InstrumentationRegistry;
import androidx.test.filters.MediumTest;
import androidx.test.runner.AndroidJUnit4;
@@ -143,17 +139,12 @@
@RunWith(AndroidJUnit4.class)
@MediumTest
-public class EthernetTetheringTest {
+public class EthernetTetheringTest extends EthernetTetheringTestBase {
@Rule
public final DevSdkIgnoreRule mIgnoreRule = new DevSdkIgnoreRule();
private static final String TAG = EthernetTetheringTest.class.getSimpleName();
- private static final int TIMEOUT_MS = 5000;
- // Used to check if any tethering interface is available. Choose 200ms to be request timeout
- // because the average interface requested time on cuttlefish@acloud is around 10ms.
- // See TetheredInterfaceRequester.getInterface, isInterfaceForTetheringAvailable.
- private static final int AVAILABLE_TETHER_IFACE_REQUEST_TIMEOUT_MS = 200;
- private static final int TETHER_REACHABILITY_ATTEMPTS = 20;
+
private static final int DUMP_POLLING_MAX_RETRY = 100;
private static final int DUMP_POLLING_INTERVAL_MS = 50;
// Kernel treats a confirmed UDP connection which active after two seconds as stream mode.
@@ -168,35 +159,14 @@
// Per TX UDP packet size: ethhdr (14) + iphdr (20) + udphdr (8) + payload (2) = 44 bytes.
private static final int TX_UDP_PACKET_SIZE = 44;
private static final int TX_UDP_PACKET_COUNT = 123;
- private static final long WAIT_RA_TIMEOUT_MS = 2000;
-
- private static final MacAddress TEST_MAC = MacAddress.fromString("1:2:3:4:5:6");
- private static final LinkAddress TEST_IP4_ADDR = new LinkAddress("10.0.0.1/24");
- private static final LinkAddress TEST_IP6_ADDR = new LinkAddress("2001:db8:1::101/64");
- private static final InetAddress TEST_IP4_DNS = parseNumericAddress("8.8.8.8");
- private static final InetAddress TEST_IP6_DNS = parseNumericAddress("2001:db8:1::888");
- private static final IpPrefix TEST_NAT64PREFIX = new IpPrefix("64:ff9b::/96");
- private static final Inet6Address REMOTE_NAT64_ADDR =
- (Inet6Address) parseNumericAddress("64:ff9b::808:808");
- private static final Inet6Address REMOTE_IP6_ADDR =
- (Inet6Address) parseNumericAddress("2002:db8:1::515:ca");
- private static final ByteBuffer TEST_REACHABILITY_PAYLOAD =
- ByteBuffer.wrap(new byte[] { (byte) 0x55, (byte) 0xaa });
- private static final ByteBuffer EMPTY_PAYLOAD = ByteBuffer.wrap(new byte[0]);
private static final short DNS_PORT = 53;
- private static final short WINDOW = (short) 0x2000;
- private static final short URGENT_POINTER = 0;
private static final String DUMPSYS_TETHERING_RAWMAP_ARG = "bpfRawMap";
private static final String DUMPSYS_RAWMAP_ARG_STATS = "--stats";
private static final String DUMPSYS_RAWMAP_ARG_UPSTREAM4 = "--upstream4";
private static final String LINE_DELIMITER = "\\n";
- // version=6, traffic class=0x0, flowlabel=0x0;
- private static final int VERSION_TRAFFICCLASS_FLOWLABEL = 0x60000000;
- private static final short HOP_LIMIT = 0x40;
-
private static final short ICMPECHO_CODE = 0x0;
private static final short ICMPECHO_ID = 0x0;
private static final short ICMPECHO_SEQ = 0x0;
@@ -261,27 +231,9 @@
(byte) 0x01, (byte) 0x02, (byte) 0x03, (byte) 0x04 /* Address: 1.2.3.4 */
};
- private final Context mContext = InstrumentationRegistry.getContext();
- private final EthernetManager mEm = mContext.getSystemService(EthernetManager.class);
- private final TetheringManager mTm = mContext.getSystemService(TetheringManager.class);
- private final PackageManager mPackageManager = mContext.getPackageManager();
- private final CtsNetUtils mCtsNetUtils = new CtsNetUtils(mContext);
-
- private TestNetworkInterface mDownstreamIface;
- private HandlerThread mHandlerThread;
- private Handler mHandler;
- private TapPacketReader mDownstreamReader;
- private TapPacketReader mUpstreamReader;
-
private TetheredInterfaceRequester mTetheredInterfaceRequester;
private MyTetheringEventCallback mTetheringEventCallback;
- private UiAutomation mUiAutomation =
- InstrumentationRegistry.getInstrumentation().getUiAutomation();
- private boolean mRunTests;
-
- private TestNetworkTracker mUpstreamTracker;
-
@Before
public void setUp() throws Exception {
mHandlerThread = new HandlerThread(getClass().getSimpleName());
@@ -295,6 +247,30 @@
mTetheredInterfaceRequester = new TetheredInterfaceRequester(mHandler, mEm);
}
+ private void maybeStopTapPacketReader(final TapPacketReader tapPacketReader)
+ throws Exception {
+ if (tapPacketReader != null) {
+ TapPacketReader reader = tapPacketReader;
+ mHandler.post(() -> reader.stop());
+ }
+ }
+
+ private void maybeCloseTestInterface(final TestNetworkInterface testInterface)
+ throws Exception {
+ if (testInterface != null) {
+ testInterface.getFileDescriptor().close();
+ Log.d(TAG, "Deleted test interface " + testInterface.getInterfaceName());
+ }
+ }
+
+ private void maybeUnregisterTetheringEventCallback(final MyTetheringEventCallback callback)
+ throws Exception {
+ if (callback != null) {
+ callback.awaitInterfaceUntethered();
+ callback.unregister();
+ }
+ }
+
private void cleanUp() throws Exception {
setPreferTestNetworks(false);
@@ -310,24 +286,19 @@
mUpstreamReader = null;
}
- if (mDownstreamReader != null) {
- TapPacketReader reader = mDownstreamReader;
- mHandler.post(() -> reader.stop());
- mDownstreamReader = null;
- }
-
+ maybeStopTapPacketReader(mDownstreamReader);
+ mDownstreamReader = null;
// To avoid flaky which caused by the next test started but the previous interface is not
// untracked from EthernetTracker yet. Just delete the test interface without explicitly
// calling TetheringManager#stopTethering could let EthernetTracker untrack the test
// interface from server mode before tethering stopped. Thus, awaitInterfaceUntethered
// could not only make sure tethering is stopped but also guarantee the test interface is
// untracked from EthernetTracker.
- maybeDeleteTestInterface();
- if (mTetheringEventCallback != null) {
- mTetheringEventCallback.awaitInterfaceUntethered();
- mTetheringEventCallback.unregister();
- mTetheringEventCallback = null;
- }
+ maybeCloseTestInterface(mDownstreamIface);
+ mDownstreamIface = null;
+ maybeUnregisterTetheringEventCallback(mTetheringEventCallback);
+ mTetheringEventCallback = null;
+
runAsShell(NETWORK_SETTINGS, () -> mTetheredInterfaceRequester.release());
setIncludeTestInterfaces(false);
}
@@ -383,26 +354,50 @@
});
}
+ private String getTetheredInterface() throws Exception {
+ return mTetheredInterfaceRequester.getInterface();
+ }
+
+ private CompletableFuture<String> requestTetheredInterface() throws Exception {
+ return mTetheredInterfaceRequester.requestInterface();
+ }
+
@Test
public void testVirtualEthernetAlreadyExists() throws Exception {
// This test requires manipulating packets. Skip if there is a physical Ethernet connected.
assumeFalse(isInterfaceForTetheringAvailable());
- mDownstreamIface = createTestInterface();
- // This must be done now because as soon as setIncludeTestInterfaces(true) is called, the
- // interface will be placed in client mode, which will delete the link-local address.
- // At that point NetworkInterface.getByName() will cease to work on the interface, because
- // starting in R NetworkInterface can no longer see interfaces without IP addresses.
- int mtu = getMTU(mDownstreamIface);
+ TestNetworkInterface downstreamIface = null;
+ MyTetheringEventCallback tetheringEventCallback = null;
+ TapPacketReader downstreamReader = null;
- Log.d(TAG, "Including test interfaces");
- setIncludeTestInterfaces(true);
+ try {
+ downstreamIface = createTestInterface();
+ // This must be done now because as soon as setIncludeTestInterfaces(true) is called,
+ // the interface will be placed in client mode, which will delete the link-local
+ // address. At that point NetworkInterface.getByName() will cease to work on the
+ // interface, because starting in R NetworkInterface can no longer see interfaces
+ // without IP addresses.
+ int mtu = getMTU(downstreamIface);
- final String iface = mTetheredInterfaceRequester.getInterface();
- assertEquals("TetheredInterfaceCallback for unexpected interface",
- mDownstreamIface.getInterfaceName(), iface);
+ Log.d(TAG, "Including test interfaces");
+ setIncludeTestInterfaces(true);
- checkVirtualEthernet(mDownstreamIface, mtu);
+ final String iface = getTetheredInterface();
+ assertEquals("TetheredInterfaceCallback for unexpected interface",
+ downstreamIface.getInterfaceName(), iface);
+
+ // Check virtual ethernet.
+ FileDescriptor fd = downstreamIface.getFileDescriptor().getFileDescriptor();
+ downstreamReader = makePacketReader(fd, mtu);
+ tetheringEventCallback = enableEthernetTethering(downstreamIface.getInterfaceName(),
+ null /* any upstream */);
+ checkTetheredClientCallbacks(downstreamReader, tetheringEventCallback);
+ } finally {
+ maybeStopTapPacketReader(downstreamReader);
+ maybeCloseTestInterface(downstreamIface);
+ maybeUnregisterTetheringEventCallback(tetheringEventCallback);
+ }
}
@Test
@@ -410,17 +405,32 @@
// This test requires manipulating packets. Skip if there is a physical Ethernet connected.
assumeFalse(isInterfaceForTetheringAvailable());
- CompletableFuture<String> futureIface = mTetheredInterfaceRequester.requestInterface();
+ CompletableFuture<String> futureIface = requestTetheredInterface();
setIncludeTestInterfaces(true);
- mDownstreamIface = createTestInterface();
+ TestNetworkInterface downstreamIface = null;
+ MyTetheringEventCallback tetheringEventCallback = null;
+ TapPacketReader downstreamReader = null;
- final String iface = futureIface.get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
- assertEquals("TetheredInterfaceCallback for unexpected interface",
- mDownstreamIface.getInterfaceName(), iface);
+ try {
+ downstreamIface = createTestInterface();
- checkVirtualEthernet(mDownstreamIface, getMTU(mDownstreamIface));
+ final String iface = futureIface.get(TIMEOUT_MS, TimeUnit.MILLISECONDS);
+ assertEquals("TetheredInterfaceCallback for unexpected interface",
+ downstreamIface.getInterfaceName(), iface);
+
+ // Check virtual ethernet.
+ FileDescriptor fd = downstreamIface.getFileDescriptor().getFileDescriptor();
+ downstreamReader = makePacketReader(fd, getMTU(downstreamIface));
+ tetheringEventCallback = enableEthernetTethering(downstreamIface.getInterfaceName(),
+ null /* any upstream */);
+ checkTetheredClientCallbacks(downstreamReader, tetheringEventCallback);
+ } finally {
+ maybeStopTapPacketReader(downstreamReader);
+ maybeCloseTestInterface(downstreamIface);
+ maybeUnregisterTetheringEventCallback(tetheringEventCallback);
+ }
}
@Test
@@ -429,42 +439,51 @@
setIncludeTestInterfaces(true);
- mDownstreamIface = createTestInterface();
-
- final String iface = mTetheredInterfaceRequester.getInterface();
- assertEquals("TetheredInterfaceCallback for unexpected interface",
- mDownstreamIface.getInterfaceName(), iface);
-
- assertInvalidStaticIpv4Request(iface, null, null);
- assertInvalidStaticIpv4Request(iface, "2001:db8::1/64", "2001:db8:2::/64");
- assertInvalidStaticIpv4Request(iface, "192.0.2.2/28", "2001:db8:2::/28");
- assertInvalidStaticIpv4Request(iface, "2001:db8:2::/28", "192.0.2.2/28");
- assertInvalidStaticIpv4Request(iface, "192.0.2.2/28", null);
- assertInvalidStaticIpv4Request(iface, null, "192.0.2.2/28");
- assertInvalidStaticIpv4Request(iface, "192.0.2.3/27", "192.0.2.2/28");
-
- final String localAddr = "192.0.2.3/28";
- final String clientAddr = "192.0.2.2/28";
- mTetheringEventCallback = enableEthernetTethering(iface,
- requestWithStaticIpv4(localAddr, clientAddr), null /* any upstream */);
-
- mTetheringEventCallback.awaitInterfaceTethered();
- assertInterfaceHasIpAddress(iface, localAddr);
-
- byte[] client1 = MacAddress.fromString("1:2:3:4:5:6").toByteArray();
- byte[] client2 = MacAddress.fromString("a:b:c:d:e:f").toByteArray();
-
- FileDescriptor fd = mDownstreamIface.getFileDescriptor().getFileDescriptor();
- mDownstreamReader = makePacketReader(fd, getMTU(mDownstreamIface));
- TetheringTester tester = new TetheringTester(mDownstreamReader);
- DhcpResults dhcpResults = tester.runDhcp(client1);
- assertEquals(new LinkAddress(clientAddr), dhcpResults.ipAddress);
+ TestNetworkInterface downstreamIface = null;
+ MyTetheringEventCallback tetheringEventCallback = null;
+ TapPacketReader downstreamReader = null;
try {
- tester.runDhcp(client2);
- fail("Only one client should get an IP address");
- } catch (TimeoutException expected) { }
+ downstreamIface = createTestInterface();
+ final String iface = getTetheredInterface();
+ assertEquals("TetheredInterfaceCallback for unexpected interface",
+ downstreamIface.getInterfaceName(), iface);
+
+ assertInvalidStaticIpv4Request(iface, null, null);
+ assertInvalidStaticIpv4Request(iface, "2001:db8::1/64", "2001:db8:2::/64");
+ assertInvalidStaticIpv4Request(iface, "192.0.2.2/28", "2001:db8:2::/28");
+ assertInvalidStaticIpv4Request(iface, "2001:db8:2::/28", "192.0.2.2/28");
+ assertInvalidStaticIpv4Request(iface, "192.0.2.2/28", null);
+ assertInvalidStaticIpv4Request(iface, null, "192.0.2.2/28");
+ assertInvalidStaticIpv4Request(iface, "192.0.2.3/27", "192.0.2.2/28");
+
+ final String localAddr = "192.0.2.3/28";
+ final String clientAddr = "192.0.2.2/28";
+ tetheringEventCallback = enableEthernetTethering(iface,
+ requestWithStaticIpv4(localAddr, clientAddr), null /* any upstream */);
+
+ tetheringEventCallback.awaitInterfaceTethered();
+ assertInterfaceHasIpAddress(iface, localAddr);
+
+ byte[] client1 = MacAddress.fromString("1:2:3:4:5:6").toByteArray();
+ byte[] client2 = MacAddress.fromString("a:b:c:d:e:f").toByteArray();
+
+ FileDescriptor fd = downstreamIface.getFileDescriptor().getFileDescriptor();
+ downstreamReader = makePacketReader(fd, getMTU(downstreamIface));
+ TetheringTester tester = new TetheringTester(downstreamReader);
+ DhcpResults dhcpResults = tester.runDhcp(client1);
+ assertEquals(new LinkAddress(clientAddr), dhcpResults.ipAddress);
+
+ try {
+ tester.runDhcp(client2);
+ fail("Only one client should get an IP address");
+ } catch (TimeoutException expected) { }
+ } finally {
+ maybeStopTapPacketReader(downstreamReader);
+ maybeCloseTestInterface(downstreamIface);
+ maybeUnregisterTetheringEventCallback(tetheringEventCallback);
+ }
}
private static void waitForRouterAdvertisement(TapPacketReader reader, String iface,
@@ -510,26 +529,36 @@
setIncludeTestInterfaces(true);
- mDownstreamIface = createTestInterface();
+ TestNetworkInterface downstreamIface = null;
+ MyTetheringEventCallback tetheringEventCallback = null;
+ TapPacketReader downstreamReader = null;
- final String iface = mTetheredInterfaceRequester.getInterface();
- assertEquals("TetheredInterfaceCallback for unexpected interface",
- mDownstreamIface.getInterfaceName(), iface);
+ try {
+ downstreamIface = createTestInterface();
- final TetheringRequest request = new TetheringRequest.Builder(TETHERING_ETHERNET)
- .setConnectivityScope(CONNECTIVITY_SCOPE_LOCAL).build();
- mTetheringEventCallback = enableEthernetTethering(iface, request,
- null /* any upstream */);
- mTetheringEventCallback.awaitInterfaceLocalOnly();
+ final String iface = getTetheredInterface();
+ assertEquals("TetheredInterfaceCallback for unexpected interface",
+ downstreamIface.getInterfaceName(), iface);
- // makePacketReader only works after tethering is started, because until then the interface
- // does not have an IP address, and unprivileged apps cannot see interfaces without IP
- // addresses. This shouldn't be flaky because the TAP interface will buffer all packets even
- // before the reader is started.
- mDownstreamReader = makePacketReader(mDownstreamIface);
+ final TetheringRequest request = new TetheringRequest.Builder(TETHERING_ETHERNET)
+ .setConnectivityScope(CONNECTIVITY_SCOPE_LOCAL).build();
+ tetheringEventCallback = enableEthernetTethering(iface, request,
+ null /* any upstream */);
+ tetheringEventCallback.awaitInterfaceLocalOnly();
- waitForRouterAdvertisement(mDownstreamReader, iface, WAIT_RA_TIMEOUT_MS);
- expectLocalOnlyAddresses(iface);
+ // makePacketReader only works after tethering is started, because until then the
+ // interface does not have an IP address, and unprivileged apps cannot see interfaces
+ // without IP addresses. This shouldn't be flaky because the TAP interface will buffer
+ // all packets even before the reader is started.
+ downstreamReader = makePacketReader(downstreamIface);
+
+ waitForRouterAdvertisement(downstreamReader, iface, WAIT_RA_TIMEOUT_MS);
+ expectLocalOnlyAddresses(iface);
+ } finally {
+ maybeStopTapPacketReader(downstreamReader);
+ maybeCloseTestInterface(downstreamIface);
+ maybeUnregisterTetheringEventCallback(tetheringEventCallback);
+ }
}
private boolean isAdbOverNetwork() {
@@ -546,12 +575,16 @@
// from client mode to server mode. See b/160389275.
assumeFalse(isAdbOverNetwork());
- // Get an interface to use.
- final String iface = mTetheredInterfaceRequester.getInterface();
+ MyTetheringEventCallback tetheringEventCallback = null;
+ try {
+ // Get an interface to use.
+ final String iface = getTetheredInterface();
- // Enable Ethernet tethering and check that it starts.
- mTetheringEventCallback = enableEthernetTethering(iface, null /* any upstream */);
-
+ // Enable Ethernet tethering and check that it starts.
+ tetheringEventCallback = enableEthernetTethering(iface, null /* any upstream */);
+ } finally {
+ maybeUnregisterTetheringEventCallback(tetheringEventCallback);
+ }
// There is nothing more we can do on a physical interface without connecting an actual
// client, which is not possible in this test.
}
@@ -810,15 +843,8 @@
return reader;
}
- private void checkVirtualEthernet(TestNetworkInterface iface, int mtu) throws Exception {
- FileDescriptor fd = iface.getFileDescriptor().getFileDescriptor();
- mDownstreamReader = makePacketReader(fd, mtu);
- mTetheringEventCallback = enableEthernetTethering(iface.getInterfaceName(),
- null /* any upstream */);
- checkTetheredClientCallbacks(mDownstreamReader);
- }
-
- private void checkTetheredClientCallbacks(TapPacketReader packetReader) throws Exception {
+ private void checkTetheredClientCallbacks(final TapPacketReader packetReader,
+ final MyTetheringEventCallback tetheringEventCallback) throws Exception {
// Create a fake client.
byte[] clientMacAddr = new byte[6];
new Random().nextBytes(clientMacAddr);
@@ -826,7 +852,7 @@
TetheringTester tester = new TetheringTester(packetReader);
DhcpResults dhcpResults = tester.runDhcp(clientMacAddr);
- final Collection<TetheredClient> clients = mTetheringEventCallback.awaitClientConnected();
+ final Collection<TetheredClient> clients = tetheringEventCallback.awaitClientConnected();
assertEquals(1, clients.size());
final TetheredClient client = clients.iterator().next();
@@ -945,14 +971,6 @@
return iface;
}
- private void maybeDeleteTestInterface() throws Exception {
- if (mDownstreamIface != null) {
- mDownstreamIface.getFileDescriptor().close();
- Log.d(TAG, "Deleted test interface " + mDownstreamIface.getInterfaceName());
- mDownstreamIface = null;
- }
- }
-
private TestNetworkTracker createTestUpstream(final List<LinkAddress> addresses,
final List<InetAddress> dnses) throws Exception {
setPreferTestNetworks(true);
@@ -1002,22 +1020,6 @@
// remote ip public ip private ip
// 8.8.8.8:443 <Upstream ip>:9876 <TetheredDevice ip>:9876
//
- private static final Inet4Address REMOTE_IP4_ADDR =
- (Inet4Address) parseNumericAddress("8.8.8.8");
- // Used by public port and private port. Assume port 9876 has not been used yet before the
- // testing that public port and private port are the same in the testing. Note that NAT port
- // forwarding could be different between private port and public port.
- // TODO: move to the start of test class.
- private static final short LOCAL_PORT = 9876;
- private static final short REMOTE_PORT = 433;
- private static final byte TYPE_OF_SERVICE = 0;
- private static final short ID = 27149;
- private static final short FLAGS_AND_FRAGMENT_OFFSET = (short) 0x4000; // flags=DF, offset=0
- private static final byte TIME_TO_LIVE = (byte) 0x40;
- private static final ByteBuffer RX_PAYLOAD =
- ByteBuffer.wrap(new byte[] { (byte) 0x12, (byte) 0x34 });
- private static final ByteBuffer TX_PAYLOAD =
- ByteBuffer.wrap(new byte[] { (byte) 0x56, (byte) 0x78 });
private short getEthType(@NonNull final InetAddress srcIp, @NonNull final InetAddress dstIp) {
return isAddressIpv4(srcIp, dstIp) ? (short) ETHER_TYPE_IPV4 : (short) ETHER_TYPE_IPV6;
diff --git a/Tethering/tests/integration/src/android/net/EthernetTetheringTestBase.java b/Tethering/tests/integration/src/android/net/EthernetTetheringTestBase.java
new file mode 100644
index 0000000..d58a60c
--- /dev/null
+++ b/Tethering/tests/integration/src/android/net/EthernetTetheringTestBase.java
@@ -0,0 +1,115 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package android.net;
+
+import static android.net.InetAddresses.parseNumericAddress;
+
+import android.app.UiAutomation;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.net.cts.util.CtsNetUtils;
+import android.os.Handler;
+import android.os.HandlerThread;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+
+import com.android.testutils.TapPacketReader;
+import com.android.testutils.TestNetworkTracker;
+
+import java.net.Inet4Address;
+import java.net.Inet6Address;
+import java.net.InetAddress;
+import java.nio.ByteBuffer;
+
+/**
+ * TODO: Common variables or methods shared between CtsEthernetTetheringTest and
+ * MtsEthernetTetheringTest.
+ */
+public abstract class EthernetTetheringTestBase {
+ private static final String TAG = EthernetTetheringTestBase.class.getSimpleName();
+
+ protected static final int TIMEOUT_MS = 5000;
+ // Used to check if any tethering interface is available. Choose 200ms to be request timeout
+ // because the average interface requested time on cuttlefish@acloud is around 10ms.
+ // See TetheredInterfaceRequester.getInterface, isInterfaceForTetheringAvailable.
+ protected static final int AVAILABLE_TETHER_IFACE_REQUEST_TIMEOUT_MS = 200;
+ protected static final int TETHER_REACHABILITY_ATTEMPTS = 20;
+ protected static final long WAIT_RA_TIMEOUT_MS = 2000;
+
+ // Address and NAT prefix definition.
+ protected static final MacAddress TEST_MAC = MacAddress.fromString("1:2:3:4:5:6");
+ protected static final LinkAddress TEST_IP4_ADDR = new LinkAddress("10.0.0.1/24");
+ protected static final LinkAddress TEST_IP6_ADDR = new LinkAddress("2001:db8:1::101/64");
+ protected static final InetAddress TEST_IP4_DNS = parseNumericAddress("8.8.8.8");
+ protected static final InetAddress TEST_IP6_DNS = parseNumericAddress("2001:db8:1::888");
+
+ protected static final Inet4Address REMOTE_IP4_ADDR =
+ (Inet4Address) parseNumericAddress("8.8.8.8");
+ protected static final Inet6Address REMOTE_IP6_ADDR =
+ (Inet6Address) parseNumericAddress("2002:db8:1::515:ca");
+ protected static final Inet6Address REMOTE_NAT64_ADDR =
+ (Inet6Address) parseNumericAddress("64:ff9b::808:808");
+ protected static final IpPrefix TEST_NAT64PREFIX = new IpPrefix("64:ff9b::/96");
+
+ // IPv4 header definition.
+ protected static final short ID = 27149;
+ protected static final short FLAGS_AND_FRAGMENT_OFFSET = (short) 0x4000; // flags=DF, offset=0
+ protected static final byte TIME_TO_LIVE = (byte) 0x40;
+ protected static final byte TYPE_OF_SERVICE = 0;
+
+ // IPv6 header definition.
+ protected static final short HOP_LIMIT = 0x40;
+ // version=6, traffic class=0x0, flowlabel=0x0;
+ protected static final int VERSION_TRAFFICCLASS_FLOWLABEL = 0x60000000;
+
+ // UDP and TCP header definition.
+ // LOCAL_PORT is used by public port and private port. Assume port 9876 has not been used yet
+ // before the testing that public port and private port are the same in the testing. Note that
+ // NAT port forwarding could be different between private port and public port.
+ protected static final short LOCAL_PORT = 9876;
+ protected static final short REMOTE_PORT = 433;
+ protected static final short WINDOW = (short) 0x2000;
+ protected static final short URGENT_POINTER = 0;
+
+ // Payload definition.
+ protected static final ByteBuffer EMPTY_PAYLOAD = ByteBuffer.wrap(new byte[0]);
+ protected static final ByteBuffer TEST_REACHABILITY_PAYLOAD =
+ ByteBuffer.wrap(new byte[] { (byte) 0x55, (byte) 0xaa });
+ protected static final ByteBuffer RX_PAYLOAD =
+ ByteBuffer.wrap(new byte[] { (byte) 0x12, (byte) 0x34 });
+ protected static final ByteBuffer TX_PAYLOAD =
+ ByteBuffer.wrap(new byte[] { (byte) 0x56, (byte) 0x78 });
+
+ protected final Context mContext = InstrumentationRegistry.getInstrumentation().getContext();
+ protected final EthernetManager mEm = mContext.getSystemService(EthernetManager.class);
+ protected final TetheringManager mTm = mContext.getSystemService(TetheringManager.class);
+ protected final PackageManager mPackageManager = mContext.getPackageManager();
+ protected final CtsNetUtils mCtsNetUtils = new CtsNetUtils(mContext);
+ protected final UiAutomation mUiAutomation =
+ InstrumentationRegistry.getInstrumentation().getUiAutomation();
+
+ // Late initialization in setUp()
+ protected boolean mRunTests;
+ protected HandlerThread mHandlerThread;
+ protected Handler mHandler;
+
+ // Late initialization in initTetheringTester().
+ protected TapPacketReader mUpstreamReader;
+ protected TestNetworkTracker mUpstreamTracker;
+ protected TestNetworkInterface mDownstreamIface;
+ protected TapPacketReader mDownstreamReader;
+}
diff --git a/framework-t/src/android/net/NetworkTemplate.java b/framework-t/src/android/net/NetworkTemplate.java
index 2a5e7be..c0ae822 100644
--- a/framework-t/src/android/net/NetworkTemplate.java
+++ b/framework-t/src/android/net/NetworkTemplate.java
@@ -269,6 +269,7 @@
* Since the merge set is dynamic, it should <em>not</em> be persisted or
* used for determining equality.
*/
+ @NonNull
private final String[] mMatchSubscriberIds;
@NonNull
@@ -334,10 +335,9 @@
String[] matchWifiNetworkKeys, int metered, int roaming,
int defaultNetwork, int ratType, int oemManaged, int subscriberIdMatchRule) {
Objects.requireNonNull(matchWifiNetworkKeys);
+ Objects.requireNonNull(matchSubscriberIds);
mMatchRule = matchRule;
mSubscriberId = subscriberId;
- // TODO: Check whether mMatchSubscriberIds = null or mMatchSubscriberIds = {null} when
- // mSubscriberId is null
mMatchSubscriberIds = matchSubscriberIds;
mMatchWifiNetworkKeys = matchWifiNetworkKeys;
mMetered = metered;
diff --git a/service/mdns/com/android/server/connectivity/mdns/MdnsResponseDecoder.java b/service/mdns/com/android/server/connectivity/mdns/MdnsResponseDecoder.java
index 861acbb..6c2bc19 100644
--- a/service/mdns/com/android/server/connectivity/mdns/MdnsResponseDecoder.java
+++ b/service/mdns/com/android/server/connectivity/mdns/MdnsResponseDecoder.java
@@ -256,6 +256,9 @@
response = new MdnsResponse(now);
responses.add(response);
}
+ // Set interface index earlier because some responses have PTR record only.
+ // Need to know every response is getting from which interface.
+ response.setInterfaceIndex(interfaceIndex);
response.addPointerRecord((MdnsPointerRecord) record);
}
}
@@ -286,13 +289,13 @@
List<MdnsResponse> matchingResponses =
findResponsesWithHostName(responses, inetRecord.getName());
for (MdnsResponse response : matchingResponses) {
- assignInetRecord(response, inetRecord, interfaceIndex);
+ assignInetRecord(response, inetRecord);
}
} else {
MdnsResponse response =
findResponseWithHostName(responses, inetRecord.getName());
if (response != null) {
- assignInetRecord(response, inetRecord, interfaceIndex);
+ assignInetRecord(response, inetRecord);
}
}
}
@@ -301,14 +304,11 @@
return SUCCESS;
}
- private static void assignInetRecord(
- MdnsResponse response, MdnsInetAddressRecord inetRecord, int interfaceIndex) {
+ private static void assignInetRecord(MdnsResponse response, MdnsInetAddressRecord inetRecord) {
if (inetRecord.getInet4Address() != null) {
response.setInet4AddressRecord(inetRecord);
- response.setInterfaceIndex(interfaceIndex);
} else if (inetRecord.getInet6Address() != null) {
response.setInet6AddressRecord(inetRecord);
- response.setInterfaceIndex(interfaceIndex);
}
}
diff --git a/service/mdns/com/android/server/connectivity/mdns/MdnsServiceBrowserListener.java b/service/mdns/com/android/server/connectivity/mdns/MdnsServiceBrowserListener.java
index 53e58d1..7a8fcc0 100644
--- a/service/mdns/com/android/server/connectivity/mdns/MdnsServiceBrowserListener.java
+++ b/service/mdns/com/android/server/connectivity/mdns/MdnsServiceBrowserListener.java
@@ -44,9 +44,9 @@
/**
* Called when an mDNS service instance is no longer valid and removed.
*
- * @param serviceInstanceName The service instance name of the removed mDNS service.
+ * @param serviceInfo The service instance of the removed mDNS service.
*/
- void onServiceRemoved(@NonNull String serviceInstanceName);
+ void onServiceRemoved(@NonNull MdnsServiceInfo serviceInfo);
/**
* Called when searching for mDNS service has stopped because of an error.
diff --git a/service/mdns/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java b/service/mdns/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java
index 8ca71b9..0fd6025 100644
--- a/service/mdns/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java
+++ b/service/mdns/com/android/server/connectivity/mdns/MdnsServiceTypeClient.java
@@ -91,8 +91,12 @@
private static MdnsServiceInfo buildMdnsServiceInfoFromResponse(
@NonNull MdnsResponse response, @NonNull String[] serviceTypeLabels) {
- String[] hostName = response.getServiceRecord().getServiceHost();
- int port = response.getServiceRecord().getServicePort();
+ String[] hostName = null;
+ int port = 0;
+ if (response.hasServiceRecord()) {
+ hostName = response.getServiceRecord().getServiceHost();
+ port = response.getServiceRecord().getServicePort();
+ }
String ipv4Address = null;
String ipv6Address = null;
@@ -104,15 +108,17 @@
Inet6Address inet6Address = response.getInet6AddressRecord().getInet6Address();
ipv6Address = (inet6Address == null) ? null : inet6Address.getHostAddress();
}
- if (ipv4Address == null && ipv6Address == null) {
- throw new IllegalArgumentException(
- "Either ipv4Address or ipv6Address must be non-null");
- }
String serviceInstanceName = response.getServiceInstanceName();
if (serviceInstanceName == null) {
throw new IllegalStateException(
"mDNS response must have non-null service instance name");
}
+ List<String> textStrings = null;
+ List<MdnsServiceInfo.TextEntry> textEntries = null;
+ if (response.hasTextRecord()) {
+ textStrings = response.getTextRecord().getStrings();
+ textEntries = response.getTextRecord().getEntries();
+ }
// TODO: Throw an error message if response doesn't have Inet6 or Inet4 address.
return new MdnsServiceInfo(
serviceInstanceName,
@@ -122,8 +128,8 @@
port,
ipv4Address,
ipv6Address,
- response.getTextRecord().getStrings(),
- response.getTextRecord().getEntries(),
+ textStrings,
+ textEntries,
response.getInterfaceIndex());
}
@@ -246,12 +252,14 @@
}
private void onGoodbyeReceived(@Nullable String serviceInstanceName) {
- if (serviceInstanceName == null) {
+ final MdnsResponse response = instanceNameToResponse.remove(serviceInstanceName);
+ if (response == null) {
return;
}
- instanceNameToResponse.remove(serviceInstanceName);
for (MdnsServiceBrowserListener listener : listeners) {
- listener.onServiceRemoved(serviceInstanceName);
+ final MdnsServiceInfo serviceInfo =
+ buildMdnsServiceInfoFromResponse(response, serviceTypeLabels);
+ listener.onServiceRemoved(serviceInfo);
}
}
@@ -425,7 +433,10 @@
String serviceInstanceName =
existingResponse.getServiceInstanceName();
if (serviceInstanceName != null) {
- listener.onServiceRemoved(serviceInstanceName);
+ final MdnsServiceInfo serviceInfo =
+ buildMdnsServiceInfoFromResponse(
+ existingResponse, serviceTypeLabels);
+ listener.onServiceRemoved(serviceInfo);
}
}
}
diff --git a/tests/common/java/android/net/netstats/NetworkTemplateTest.kt b/tests/common/java/android/net/netstats/NetworkTemplateTest.kt
index 192694b..cdf32a4 100644
--- a/tests/common/java/android/net/netstats/NetworkTemplateTest.kt
+++ b/tests/common/java/android/net/netstats/NetworkTemplateTest.kt
@@ -78,7 +78,7 @@
NetworkTemplate.Builder(matchRule).setSubscriberIds(setOf(TEST_IMSI1))
.setMeteredness(METERED_YES).build().let {
val expectedTemplate = NetworkTemplate(matchRule, TEST_IMSI1,
- arrayOf(TEST_IMSI1), arrayOf<String>(), METERED_YES,
+ arrayOf(TEST_IMSI1), emptyArray<String>(), METERED_YES,
ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT)
assertEquals(expectedTemplate, it)
@@ -91,7 +91,7 @@
NetworkTemplate.Builder(matchRule).setSubscriberIds(setOf(TEST_IMSI1))
.setRoaming(ROAMING_YES).setMeteredness(METERED_YES).build().let {
val expectedTemplate = NetworkTemplate(matchRule, TEST_IMSI1,
- arrayOf(TEST_IMSI1), arrayOf<String>(), METERED_YES,
+ arrayOf(TEST_IMSI1), emptyArray<String>(), METERED_YES,
ROAMING_YES, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT)
assertEquals(expectedTemplate, it)
@@ -107,7 +107,7 @@
// regardless of IMSI. See buildTemplateMobileWildcard.
NetworkTemplate.Builder(MATCH_MOBILE).setMeteredness(METERED_YES).build().let {
val expectedTemplate = NetworkTemplate(MATCH_MOBILE_WILDCARD, null /*subscriberId*/,
- null /*subscriberIds*/, arrayOf<String>(),
+ emptyArray<String>() /*subscriberIds*/, emptyArray<String>(),
METERED_YES, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL)
assertEquals(expectedTemplate, it)
@@ -119,7 +119,7 @@
.setMeteredness(METERED_YES).setRatType(TelephonyManager.NETWORK_TYPE_UMTS)
.build().let {
val expectedTemplate = NetworkTemplate(MATCH_MOBILE, TEST_IMSI1,
- arrayOf(TEST_IMSI1), arrayOf<String>(), METERED_YES,
+ arrayOf(TEST_IMSI1), emptyArray<String>(), METERED_YES,
ROAMING_ALL, DEFAULT_NETWORK_ALL, TelephonyManager.NETWORK_TYPE_UMTS,
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT)
assertEquals(expectedTemplate, it)
@@ -129,7 +129,7 @@
// regardless of Wifi Network Key. See buildTemplateWifiWildcard and buildTemplateWifi.
NetworkTemplate.Builder(MATCH_WIFI).build().let {
val expectedTemplate = NetworkTemplate(MATCH_WIFI_WILDCARD, null /*subscriberId*/,
- null /*subscriberIds*/, arrayOf<String>(),
+ emptyArray<String>() /*subscriberIds*/, emptyArray<String>(),
METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL)
assertEquals(expectedTemplate, it)
@@ -139,7 +139,7 @@
// See buildTemplateWifi(wifiNetworkKey).
NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys(setOf(TEST_WIFI_KEY1)).build().let {
val expectedTemplate = NetworkTemplate(MATCH_WIFI, null /*subscriberId*/,
- null /*subscriberIds*/, arrayOf(TEST_WIFI_KEY1),
+ emptyArray<String>() /*subscriberIds*/, arrayOf(TEST_WIFI_KEY1),
METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL)
assertEquals(expectedTemplate, it)
@@ -161,7 +161,7 @@
listOf(MATCH_ETHERNET, MATCH_BLUETOOTH).forEach { matchRule ->
NetworkTemplate.Builder(matchRule).build().let {
val expectedTemplate = NetworkTemplate(matchRule, null /*subscriberId*/,
- null /*subscriberIds*/, arrayOf<String>(),
+ emptyArray<String>() /*subscriberIds*/, emptyArray<String>(),
METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL)
assertEquals(expectedTemplate, it)
@@ -196,7 +196,7 @@
// Verify template which matches wifi wildcard with the given empty key set.
NetworkTemplate.Builder(MATCH_WIFI).setWifiNetworkKeys(setOf<String>()).build().let {
val expectedTemplate = NetworkTemplate(MATCH_WIFI_WILDCARD, null /*subscriberId*/,
- arrayOf<String>() /*subscriberIds*/, arrayOf<String>(),
+ emptyArray<String>() /*subscriberIds*/, emptyArray<String>(),
METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, NETWORK_TYPE_ALL,
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_ALL)
assertEquals(expectedTemplate, it)
diff --git a/tests/unit/java/android/net/NetworkTemplateTest.kt b/tests/unit/java/android/net/NetworkTemplateTest.kt
index c10ba93..3cf0228 100644
--- a/tests/unit/java/android/net/NetworkTemplateTest.kt
+++ b/tests/unit/java/android/net/NetworkTemplateTest.kt
@@ -448,15 +448,15 @@
@Test
fun testParcelUnparcel() {
- val templateMobile = NetworkTemplate(MATCH_MOBILE, TEST_IMSI1, null,
- arrayOf<String>(), METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL,
+ val templateMobile = NetworkTemplate(MATCH_MOBILE, TEST_IMSI1, emptyArray<String>(),
+ emptyArray<String>(), METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL,
TelephonyManager.NETWORK_TYPE_LTE, OEM_MANAGED_ALL,
SUBSCRIBER_ID_MATCH_RULE_EXACT)
- val templateWifi = NetworkTemplate(MATCH_WIFI, null, null,
+ val templateWifi = NetworkTemplate(MATCH_WIFI, null, emptyArray<String>(),
arrayOf(TEST_WIFI_KEY1), METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, 0,
OEM_MANAGED_ALL, SUBSCRIBER_ID_MATCH_RULE_EXACT)
- val templateOem = NetworkTemplate(MATCH_MOBILE, null, null,
- arrayOf<String>(), METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, 0,
+ val templateOem = NetworkTemplate(MATCH_MOBILE, null, emptyArray<String>(),
+ emptyArray<String>(), METERED_ALL, ROAMING_ALL, DEFAULT_NETWORK_ALL, 0,
OEM_MANAGED_YES, SUBSCRIBER_ID_MATCH_RULE_EXACT)
assertParcelSane(templateMobile, 10)
assertParcelSane(templateWifi, 10)
diff --git a/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java b/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java
index 6b10c71..6f8b85a 100644
--- a/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java
+++ b/tests/unit/java/com/android/server/connectivity/mdns/MdnsServiceTypeClientTests.java
@@ -24,6 +24,7 @@
import static org.junit.Assert.assertTrue;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyLong;
+import static org.mockito.ArgumentMatchers.argThat;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
@@ -35,6 +36,7 @@
import static java.nio.charset.StandardCharsets.UTF_8;
import android.annotation.NonNull;
+import android.text.TextUtils;
import com.android.server.connectivity.mdns.MdnsServiceInfo.TextEntry;
import com.android.server.connectivity.mdns.MdnsServiceTypeClient.QueryTaskConfig;
@@ -57,6 +59,7 @@
import java.net.Inet6Address;
import java.net.SocketAddress;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.Map;
@@ -71,6 +74,7 @@
public class MdnsServiceTypeClientTests {
private static final String SERVICE_TYPE = "_googlecast._tcp.local";
+ private static final String[] SERVICE_TYPE_LABELS = TextUtils.split(SERVICE_TYPE, "\\.");
@Mock
private MdnsServiceBrowserListener mockListenerOne;
@@ -491,17 +495,43 @@
}
@Test
- public void processResponse_goodBye() {
+ public void processResponse_goodBye() throws Exception {
client.startSendAndReceive(mockListenerOne, MdnsSearchOptions.getDefaultOptions());
client.startSendAndReceive(mockListenerTwo, MdnsSearchOptions.getDefaultOptions());
+ final String serviceName = "service-instance-1";
+ final String ipV6Address = "2000:3333::da6c:63ff:fe7c:7483";
+ final int interfaceIndex = 999;
+ // Process the initial response.
+ final MdnsResponse initialResponse =
+ createResponse(
+ serviceName,
+ ipV6Address,
+ 5353 /* port */,
+ Collections.singletonList("ABCDE"),
+ Collections.emptyMap(),
+ interfaceIndex);
+ client.processResponse(initialResponse);
MdnsResponse response = mock(MdnsResponse.class);
- when(response.getServiceInstanceName()).thenReturn("goodbye-service-instance-name");
- when(response.isGoodbye()).thenReturn(true);
+ doReturn("goodbye-service").when(response).getServiceInstanceName();
+ doReturn(interfaceIndex).when(response).getInterfaceIndex();
+ doReturn(true).when(response).isGoodbye();
client.processResponse(response);
+ // Verify onServiceRemoved won't be called if the service is not existed.
+ verify(mockListenerOne, never()).onServiceRemoved(any());
+ verify(mockListenerTwo, never()).onServiceRemoved(any());
- verify(mockListenerOne).onServiceRemoved("goodbye-service-instance-name");
- verify(mockListenerTwo).onServiceRemoved("goodbye-service-instance-name");
+ // Verify onServiceRemoved would be called.
+ doReturn(serviceName).when(response).getServiceInstanceName();
+ client.processResponse(response);
+ verify(mockListenerOne).onServiceRemoved(argThat(
+ info -> serviceName.equals(info.getServiceInstanceName())
+ && Arrays.equals(SERVICE_TYPE_LABELS, info.getServiceType())
+ && info.getInterfaceIndex() == interfaceIndex));
+ verify(mockListenerTwo).onServiceRemoved(argThat(
+ info -> serviceName.equals(info.getServiceInstanceName())
+ && Arrays.equals(SERVICE_TYPE_LABELS, info.getServiceType())
+ && info.getInterfaceIndex() == interfaceIndex));
}
@Test
@@ -563,7 +593,7 @@
firstMdnsTask.run();
// Verify onServiceRemoved was not called.
- verify(mockListenerOne, never()).onServiceRemoved(serviceInstanceName);
+ verify(mockListenerOne, never()).onServiceRemoved(any());
}
@Test
@@ -586,7 +616,7 @@
MdnsResponse initialResponse =
createResponse(
serviceInstanceName, "192.168.1.1", 5353, List.of("ABCDE"),
- Map.of());
+ Map.of(), 999 /* interfaceIndex */);
client.processResponse(initialResponse);
// Clear the scheduled runnable.
@@ -597,14 +627,17 @@
firstMdnsTask.run();
// Verify onServiceRemoved was not called.
- verify(mockListenerOne, never()).onServiceRemoved(serviceInstanceName);
+ verify(mockListenerOne, never()).onServiceRemoved(any());
// Simulate the case where the response is after TTL.
when(initialResponse.getServiceRecord().getRemainingTTL(anyLong())).thenReturn((long) 0);
firstMdnsTask.run();
// Verify onServiceRemoved was called.
- verify(mockListenerOne, times(1)).onServiceRemoved(serviceInstanceName);
+ verify(mockListenerOne, times(1)).onServiceRemoved(argThat(
+ info -> serviceInstanceName.equals(info.getServiceInstanceName())
+ && Arrays.equals(SERVICE_TYPE_LABELS, info.getServiceType())
+ && info.getInterfaceIndex() == 999));
}
@Test
@@ -636,7 +669,7 @@
firstMdnsTask.run();
// Verify onServiceRemoved was not called.
- verify(mockListenerOne, never()).onServiceRemoved(serviceInstanceName);
+ verify(mockListenerOne, never()).onServiceRemoved(any());
}
@Test
@@ -659,7 +692,7 @@
MdnsResponse initialResponse =
createResponse(
serviceInstanceName, "192.168.1.1", 5353, List.of("ABCDE"),
- Map.of());
+ Map.of(), 999 /* interfaceIndex */);
client.processResponse(initialResponse);
// Clear the scheduled runnable.
@@ -669,8 +702,11 @@
when(initialResponse.getServiceRecord().getRemainingTTL(anyLong())).thenReturn((long) 0);
firstMdnsTask.run();
- // Verify onServiceRemoved was not called.
- verify(mockListenerOne, times(1)).onServiceRemoved(serviceInstanceName);
+ // Verify onServiceRemoved was called.
+ verify(mockListenerOne, times(1)).onServiceRemoved(argThat(
+ info -> serviceInstanceName.equals(info.getServiceInstanceName())
+ && Arrays.equals(SERVICE_TYPE_LABELS, info.getServiceType())
+ && info.getInterfaceIndex() == 999));
}
// verifies that the right query was enqueued with the right delay, and send query by executing
diff --git a/tools/gn2bp/Android.bp.swp b/tools/gn2bp/Android.bp.swp
index e02dfbd..990bbbe 100644
--- a/tools/gn2bp/Android.bp.swp
+++ b/tools/gn2bp/Android.bp.swp
@@ -2330,6 +2330,60 @@
},
}
+// GN: //base:base_android_java_enums_srcjar
+java_genrule {
+ name: "cronet_aml_base_base_android_java_enums_srcjar",
+ cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
+ "$(out) " +
+ "$(location base/android/application_status_listener.h) " +
+ "$(location base/android/child_process_binding_types.h) " +
+ "$(location base/android/library_loader/library_loader_hooks.h) " +
+ "$(location base/android/linker/modern_linker_jni.h) " +
+ "$(location base/android/task_scheduler/task_runner_android.h) " +
+ "$(location base/memory/memory_pressure_listener.h) " +
+ "$(location base/metrics/histogram_base.h) " +
+ "$(location base/task/task_traits.h)",
+ out: [
+ "base/base_android_java_enums_srcjar.srcjar",
+ ],
+ tool_files: [
+ "base/android/application_status_listener.h",
+ "base/android/child_process_binding_types.h",
+ "base/android/library_loader/library_loader_hooks.h",
+ "base/android/linker/modern_linker_jni.h",
+ "base/android/task_scheduler/task_runner_android.h",
+ "base/memory/memory_pressure_listener.h",
+ "base/metrics/histogram_base.h",
+ "base/task/task_traits.h",
+ "build/android/gyp/java_cpp_enum.py",
+ ],
+}
+
+// GN: //base:base_java_aidl
+java_genrule {
+ name: "cronet_aml_base_base_java_aidl",
+ cmd: "$(location build/android/gyp/aidl.py) --aidl-path " +
+ "../../third_party/android_sdk/public/build-tools/33.0.0/aidl " +
+ "--imports " +
+ "["../../third_party/android_sdk/public/platforms/android-33/framework.aidl"] " +
+ "--srcjar " +
+ "gen/base/base_java_aidl.srcjar " +
+ "--depfile " +
+ "gen/base/base_java_aidl.d " +
+ "--includes " +
+ "["../../base/android/java/src"] " +
+ "../../base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl " +
+ "../../base/android/java/src/org/chromium/base/process_launcher/IParentProcess.aidl",
+ out: [
+ "base/base_java_aidl.srcjar",
+ ],
+ tool_files: [
+ "base/android/java/src/org/chromium/base/process_launcher/IChildProcessService.aidl",
+ "base/android/java/src/org/chromium/base/process_launcher/IParentProcess.aidl",
+ "build/android/gyp/aidl.py",
+ ],
+}
+
// GN: //base:base_jni_headers__android_arm
cc_genrule {
name: "cronet_aml_base_base_jni_headers__android_arm",
@@ -4168,6 +4222,50 @@
],
}
+// GN: //base:java_features_srcjar
+java_genrule {
+ name: "cronet_aml_base_java_features_srcjar",
+ srcs: [
+ "base/android/base_features.cc",
+ "base/features.cc",
+ "base/task/task_features.cc",
+ ],
+ cmd: "$(location build/android/gyp/java_cpp_features.py) --srcjar " +
+ "gen/base/java_features_srcjar.srcjar " +
+ "--template " +
+ "../../base/android/java/src/org/chromium/base/BaseFeatures.java.tmpl " +
+ "../../base/android/base_features.cc " +
+ "../../base/features.cc " +
+ "../../base/task/task_features.cc",
+ out: [
+ "base/java_features_srcjar.srcjar",
+ ],
+ tool_files: [
+ "base/android/java/src/org/chromium/base/BaseFeatures.java.tmpl",
+ "build/android/gyp/java_cpp_features.py",
+ ],
+}
+
+// GN: //base:java_switches_srcjar
+java_genrule {
+ name: "cronet_aml_base_java_switches_srcjar",
+ srcs: [
+ "base/base_switches.cc",
+ ],
+ cmd: "$(location build/android/gyp/java_cpp_strings.py) --srcjar " +
+ "gen/base/java_switches_srcjar.srcjar " +
+ "--template " +
+ "../../base/android/java/src/org/chromium/base/BaseSwitches.java.tmpl " +
+ "../../base/base_switches.cc",
+ out: [
+ "base/java_switches_srcjar.srcjar",
+ ],
+ tool_files: [
+ "base/android/java/src/org/chromium/base/BaseSwitches.java.tmpl",
+ "build/android/gyp/java_cpp_strings.py",
+ ],
+}
+
// GN: //base:logging_buildflags__android_arm
cc_genrule {
name: "cronet_aml_base_logging_buildflags__android_arm",
@@ -5585,6 +5683,43 @@
],
}
+// GN: //build/android:build_config_gen
+java_genrule {
+ name: "cronet_aml_build_android_build_config_gen",
+ cmd: "$(location build/android/gyp/gcc_preprocess.py) --include-dirs " +
+ "["../../", "gen"] " +
+ "--output " +
+ "gen/build/android/build_config_gen.srcjar " +
+ "--define " +
+ "_ENABLE_ASSERTS " +
+ "../../build/android/java/templates/BuildConfig.template",
+ out: [
+ "build/android/build_config_gen.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/gcc_preprocess.py",
+ "build/android/java/templates/BuildConfig.template",
+ ],
+}
+
+// GN: //build/android:native_libraries_gen
+java_genrule {
+ name: "cronet_aml_build_android_native_libraries_gen",
+ cmd: "$(location build/android/gyp/write_native_libraries_java.py) --output " +
+ "gen/build/android/native_libraries_gen.srcjar " +
+ "--cpu-family " +
+ "CPU_FAMILY_ARM",
+ out: [
+ "build/android/native_libraries_gen.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/util/__init__.py",
+ "build/android/gyp/util/build_utils.py",
+ "build/android/gyp/write_native_libraries_java.py",
+ "build/gn_helpers.py",
+ ],
+}
+
// GN: //build:branding_buildflags__android_arm
cc_genrule {
name: "cronet_aml_build_branding_buildflags__android_arm",
@@ -6557,9 +6692,11 @@
"cronet_aml_url_url",
],
generated_headers: [
+ "cronet_aml_components_cronet_android_cronet_jni_registration",
"cronet_aml_third_party_metrics_proto_metrics_proto_gen_headers",
],
export_generated_headers: [
+ "cronet_aml_components_cronet_android_cronet_jni_registration",
"cronet_aml_third_party_metrics_proto_metrics_proto_gen_headers",
],
defaults: [
@@ -6611,7 +6748,6 @@
"cronet_aml_build_chromeos_buildflags__android_arm",
"cronet_aml_components_cronet_android_buildflags__android_arm",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_arm",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_arm",
"cronet_aml_components_cronet_cronet_buildflags__android_arm",
"cronet_aml_components_cronet_cronet_version_header_action__android_arm",
"cronet_aml_url_buildflags__android_arm",
@@ -6622,7 +6758,6 @@
"cronet_aml_build_chromeos_buildflags__android_arm",
"cronet_aml_components_cronet_android_buildflags__android_arm",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_arm",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_arm",
"cronet_aml_components_cronet_cronet_buildflags__android_arm",
"cronet_aml_components_cronet_cronet_version_header_action__android_arm",
"cronet_aml_url_buildflags__android_arm",
@@ -6635,7 +6770,6 @@
"cronet_aml_build_chromeos_buildflags__android_arm64",
"cronet_aml_components_cronet_android_buildflags__android_arm64",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_arm64",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_arm64",
"cronet_aml_components_cronet_cronet_buildflags__android_arm64",
"cronet_aml_components_cronet_cronet_version_header_action__android_arm64",
"cronet_aml_url_buildflags__android_arm64",
@@ -6646,7 +6780,6 @@
"cronet_aml_build_chromeos_buildflags__android_arm64",
"cronet_aml_components_cronet_android_buildflags__android_arm64",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_arm64",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_arm64",
"cronet_aml_components_cronet_cronet_buildflags__android_arm64",
"cronet_aml_components_cronet_cronet_version_header_action__android_arm64",
"cronet_aml_url_buildflags__android_arm64",
@@ -6662,7 +6795,6 @@
"cronet_aml_build_chromeos_buildflags__android_x86",
"cronet_aml_components_cronet_android_buildflags__android_x86",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_x86",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_x86",
"cronet_aml_components_cronet_cronet_buildflags__android_x86",
"cronet_aml_components_cronet_cronet_version_header_action__android_x86",
"cronet_aml_url_buildflags__android_x86",
@@ -6673,7 +6805,6 @@
"cronet_aml_build_chromeos_buildflags__android_x86",
"cronet_aml_components_cronet_android_buildflags__android_x86",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_x86",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_x86",
"cronet_aml_components_cronet_cronet_buildflags__android_x86",
"cronet_aml_components_cronet_cronet_version_header_action__android_x86",
"cronet_aml_url_buildflags__android_x86",
@@ -6689,7 +6820,6 @@
"cronet_aml_build_chromeos_buildflags__android_x86_64",
"cronet_aml_components_cronet_android_buildflags__android_x86_64",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_x86_64",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_x86_64",
"cronet_aml_components_cronet_cronet_buildflags__android_x86_64",
"cronet_aml_components_cronet_cronet_version_header_action__android_x86_64",
"cronet_aml_url_buildflags__android_x86_64",
@@ -6700,7 +6830,6 @@
"cronet_aml_build_chromeos_buildflags__android_x86_64",
"cronet_aml_components_cronet_android_buildflags__android_x86_64",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_x86_64",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_x86_64",
"cronet_aml_components_cronet_cronet_buildflags__android_x86_64",
"cronet_aml_components_cronet_cronet_version_header_action__android_x86_64",
"cronet_aml_url_buildflags__android_x86_64",
@@ -6933,9 +7062,9 @@
],
}
-// GN: //components/cronet/android:cronet_jni_registration__android_arm
+// GN: //components/cronet/android:cronet_jni_registration
cc_genrule {
- name: "cronet_aml_components_cronet_android_cronet_jni_registration__android_arm",
+ name: "cronet_aml_components_cronet_android_cronet_jni_registration",
srcs: [
"base/android/java/src/org/chromium/base/ActivityState.java",
"base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java",
@@ -7224,8 +7353,6 @@
"--header-path " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h " +
"--manual_jni_registration " +
- " " +
- " " +
";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h",
out: [
@@ -7244,9 +7371,9 @@
],
}
-// GN: //components/cronet/android:cronet_jni_registration__android_arm64
-cc_genrule {
- name: "cronet_aml_components_cronet_android_cronet_jni_registration__android_arm64",
+// GN: //components/cronet/android:cronet_jni_registration
+java_genrule {
+ name: "cronet_aml_components_cronet_android_cronet_jni_registration_java",
srcs: [
"base/android/java/src/org/chromium/base/ActivityState.java",
"base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java",
@@ -7535,634 +7662,9 @@
"--header-path " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h " +
"--manual_jni_registration " +
- " " +
- " " +
";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " +
"$(genDir)/components/cronet/android/cronet_jni_registration.h",
out: [
- "components/cronet/android/cronet_jni_registration.h",
- "components/cronet/android/cronet_jni_registration.srcjar",
- ],
- tool_files: [
- "base/android/jni_generator/jni_generator.py",
- "base/android/jni_generator/jni_registration_generator.py",
- "build/android/gyp/util/__init__.py",
- "build/android/gyp/util/build_utils.py",
- "build/gn_helpers.py",
- ],
- apex_available: [
- "com.android.tethering",
- ],
-}
-
-// GN: //components/cronet/android:cronet_jni_registration__android_x86
-cc_genrule {
- name: "cronet_aml_components_cronet_android_cronet_jni_registration__android_x86",
- srcs: [
- "base/android/java/src/org/chromium/base/ActivityState.java",
- "base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java",
- "base/android/java/src/org/chromium/base/ApkAssets.java",
- "base/android/java/src/org/chromium/base/ApplicationStatus.java",
- "base/android/java/src/org/chromium/base/BaseFeatureList.java",
- "base/android/java/src/org/chromium/base/BuildInfo.java",
- "base/android/java/src/org/chromium/base/BundleUtils.java",
- "base/android/java/src/org/chromium/base/ByteArrayGenerator.java",
- "base/android/java/src/org/chromium/base/Callback.java",
- "base/android/java/src/org/chromium/base/CallbackController.java",
- "base/android/java/src/org/chromium/base/CollectionUtil.java",
- "base/android/java/src/org/chromium/base/CommandLine.java",
- "base/android/java/src/org/chromium/base/CommandLineInitUtil.java",
- "base/android/java/src/org/chromium/base/Consumer.java",
- "base/android/java/src/org/chromium/base/ContentUriUtils.java",
- "base/android/java/src/org/chromium/base/ContextUtils.java",
- "base/android/java/src/org/chromium/base/CpuFeatures.java",
- "base/android/java/src/org/chromium/base/DiscardableReferencePool.java",
- "base/android/java/src/org/chromium/base/EarlyTraceEvent.java",
- "base/android/java/src/org/chromium/base/EventLog.java",
- "base/android/java/src/org/chromium/base/FeatureList.java",
- "base/android/java/src/org/chromium/base/Features.java",
- "base/android/java/src/org/chromium/base/FieldTrialList.java",
- "base/android/java/src/org/chromium/base/FileUtils.java",
- "base/android/java/src/org/chromium/base/Function.java",
- "base/android/java/src/org/chromium/base/ImportantFileWriterAndroid.java",
- "base/android/java/src/org/chromium/base/IntStringCallback.java",
- "base/android/java/src/org/chromium/base/IntentUtils.java",
- "base/android/java/src/org/chromium/base/JNIUtils.java",
- "base/android/java/src/org/chromium/base/JavaExceptionReporter.java",
- "base/android/java/src/org/chromium/base/JavaHandlerThread.java",
- "base/android/java/src/org/chromium/base/JniException.java",
- "base/android/java/src/org/chromium/base/JniStaticTestMocker.java",
- "base/android/java/src/org/chromium/base/LifetimeAssert.java",
- "base/android/java/src/org/chromium/base/LocaleUtils.java",
- "base/android/java/src/org/chromium/base/Log.java",
- "base/android/java/src/org/chromium/base/MathUtils.java",
- "base/android/java/src/org/chromium/base/MemoryPressureListener.java",
- "base/android/java/src/org/chromium/base/NativeLibraryLoadedStatus.java",
- "base/android/java/src/org/chromium/base/ObserverList.java",
- "base/android/java/src/org/chromium/base/PackageManagerUtils.java",
- "base/android/java/src/org/chromium/base/PackageUtils.java",
- "base/android/java/src/org/chromium/base/PathService.java",
- "base/android/java/src/org/chromium/base/PathUtils.java",
- "base/android/java/src/org/chromium/base/PiiElider.java",
- "base/android/java/src/org/chromium/base/PowerMonitor.java",
- "base/android/java/src/org/chromium/base/PowerMonitorForQ.java",
- "base/android/java/src/org/chromium/base/Predicate.java",
- "base/android/java/src/org/chromium/base/Promise.java",
- "base/android/java/src/org/chromium/base/RadioUtils.java",
- "base/android/java/src/org/chromium/base/StreamUtil.java",
- "base/android/java/src/org/chromium/base/StrictModeContext.java",
- "base/android/java/src/org/chromium/base/ThreadUtils.java",
- "base/android/java/src/org/chromium/base/TimeUtils.java",
- "base/android/java/src/org/chromium/base/TimezoneUtils.java",
- "base/android/java/src/org/chromium/base/TraceEvent.java",
- "base/android/java/src/org/chromium/base/UnguessableToken.java",
- "base/android/java/src/org/chromium/base/UnownedUserData.java",
- "base/android/java/src/org/chromium/base/UnownedUserDataHost.java",
- "base/android/java/src/org/chromium/base/UnownedUserDataKey.java",
- "base/android/java/src/org/chromium/base/UserData.java",
- "base/android/java/src/org/chromium/base/UserDataHost.java",
- "base/android/java/src/org/chromium/base/WrappedClassLoader.java",
- "base/android/java/src/org/chromium/base/annotations/AccessedByNative.java",
- "base/android/java/src/org/chromium/base/annotations/CalledByNative.java",
- "base/android/java/src/org/chromium/base/annotations/CalledByNativeForTesting.java",
- "base/android/java/src/org/chromium/base/annotations/CalledByNativeUnchecked.java",
- "base/android/java/src/org/chromium/base/annotations/JNIAdditionalImport.java",
- "base/android/java/src/org/chromium/base/annotations/JNINamespace.java",
- "base/android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java",
- "base/android/java/src/org/chromium/base/annotations/NativeClassQualifiedName.java",
- "base/android/java/src/org/chromium/base/annotations/NativeMethods.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForM.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForN.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForO.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForOMR1.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForP.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForQ.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForR.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForS.java",
- "base/android/java/src/org/chromium/base/jank_tracker/DummyJankTracker.java",
- "base/android/java/src/org/chromium/base/jank_tracker/FrameMetrics.java",
- "base/android/java/src/org/chromium/base/jank_tracker/FrameMetricsListener.java",
- "base/android/java/src/org/chromium/base/jank_tracker/FrameMetricsStore.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankActivityTracker.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankMetricCalculator.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankMetricUMARecorder.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankMetrics.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankReportingRunnable.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankReportingScheduler.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankScenario.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankTracker.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankTrackerImpl.java",
- "base/android/java/src/org/chromium/base/library_loader/LegacyLinker.java",
- "base/android/java/src/org/chromium/base/library_loader/Linker.java",
- "base/android/java/src/org/chromium/base/library_loader/LinkerJni.java",
- "base/android/java/src/org/chromium/base/library_loader/LoaderErrors.java",
- "base/android/java/src/org/chromium/base/library_loader/ModernLinker.java",
- "base/android/java/src/org/chromium/base/library_loader/ModernLinkerJni.java",
- "base/android/java/src/org/chromium/base/library_loader/NativeLibraryPreloader.java",
- "base/android/java/src/org/chromium/base/library_loader/ProcessInitException.java",
- "base/android/java/src/org/chromium/base/lifetime/DestroyChecker.java",
- "base/android/java/src/org/chromium/base/lifetime/Destroyable.java",
- "base/android/java/src/org/chromium/base/memory/JavaHeapDumpGenerator.java",
- "base/android/java/src/org/chromium/base/memory/MemoryPressureCallback.java",
- "base/android/java/src/org/chromium/base/memory/MemoryPressureMonitor.java",
- "base/android/java/src/org/chromium/base/memory/MemoryPressureUma.java",
- "base/android/java/src/org/chromium/base/memory/MemoryPurgeManager.java",
- "base/android/java/src/org/chromium/base/metrics/CachingUmaRecorder.java",
- "base/android/java/src/org/chromium/base/metrics/NativeUmaRecorder.java",
- "base/android/java/src/org/chromium/base/metrics/NoopUmaRecorder.java",
- "base/android/java/src/org/chromium/base/metrics/RecordHistogram.java",
- "base/android/java/src/org/chromium/base/metrics/RecordUserAction.java",
- "base/android/java/src/org/chromium/base/metrics/ScopedSysTraceEvent.java",
- "base/android/java/src/org/chromium/base/metrics/StatisticsRecorderAndroid.java",
- "base/android/java/src/org/chromium/base/metrics/TimingMetric.java",
- "base/android/java/src/org/chromium/base/metrics/UmaRecorder.java",
- "base/android/java/src/org/chromium/base/metrics/UmaRecorderHolder.java",
- "base/android/java/src/org/chromium/base/multidex/ChromiumMultiDexInstaller.java",
- "base/android/java/src/org/chromium/base/process_launcher/BindService.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildConnectionAllocator.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildProcessConstants.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildProcessLauncher.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildProcessServiceDelegate.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildServiceConnection.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionDelegate.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionFactory.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionImpl.java",
- "base/android/java/src/org/chromium/base/process_launcher/FileDescriptorInfo.java",
- "base/android/java/src/org/chromium/base/supplier/BooleanSupplier.java",
- "base/android/java/src/org/chromium/base/supplier/DestroyableObservableSupplier.java",
- "base/android/java/src/org/chromium/base/supplier/ObservableSupplier.java",
- "base/android/java/src/org/chromium/base/supplier/ObservableSupplierImpl.java",
- "base/android/java/src/org/chromium/base/supplier/OneShotCallback.java",
- "base/android/java/src/org/chromium/base/supplier/OneshotSupplier.java",
- "base/android/java/src/org/chromium/base/supplier/OneshotSupplierImpl.java",
- "base/android/java/src/org/chromium/base/supplier/Supplier.java",
- "base/android/java/src/org/chromium/base/supplier/UnownedUserDataSupplier.java",
- "base/android/java/src/org/chromium/base/task/AsyncTask.java",
- "base/android/java/src/org/chromium/base/task/BackgroundOnlyAsyncTask.java",
- "base/android/java/src/org/chromium/base/task/ChainedTasks.java",
- "base/android/java/src/org/chromium/base/task/ChoreographerTaskRunner.java",
- "base/android/java/src/org/chromium/base/task/ChromeThreadPoolExecutor.java",
- "base/android/java/src/org/chromium/base/task/DefaultTaskExecutor.java",
- "base/android/java/src/org/chromium/base/task/PostTask.java",
- "base/android/java/src/org/chromium/base/task/SequencedTaskRunner.java",
- "base/android/java/src/org/chromium/base/task/SequencedTaskRunnerImpl.java",
- "base/android/java/src/org/chromium/base/task/SerialExecutor.java",
- "base/android/java/src/org/chromium/base/task/SingleThreadTaskRunner.java",
- "base/android/java/src/org/chromium/base/task/SingleThreadTaskRunnerImpl.java",
- "base/android/java/src/org/chromium/base/task/TaskExecutor.java",
- "base/android/java/src/org/chromium/base/task/TaskRunner.java",
- "base/android/java/src/org/chromium/base/task/TaskRunnerImpl.java",
- "base/android/java/src/org/chromium/base/task/TaskTraits.java",
- "base/android/java/src/org/chromium/base/task/TaskTraitsExtensionDescriptor.java",
- "build/android/java/src/org/chromium/build/annotations/AlwaysInline.java",
- "build/android/java/src/org/chromium/build/annotations/CheckDiscard.java",
- "build/android/java/src/org/chromium/build/annotations/DoNotClassMerge.java",
- "build/android/java/src/org/chromium/build/annotations/DoNotInline.java",
- "build/android/java/src/org/chromium/build/annotations/IdentifierNameString.java",
- "build/android/java/src/org/chromium/build/annotations/MainDex.java",
- "build/android/java/src/org/chromium/build/annotations/MockedInTests.java",
- "build/android/java/src/org/chromium/build/annotations/UsedByReflection.java",
- "components/cronet/android/api/src/org/chromium/net/BidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/CallbackException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/CronetException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetProvider.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/ICronetEngineBuilder.java",
- "components/cronet/android/api/src/org/chromium/net/InlineExecutionProhibitedException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityRttListener.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityThroughputListener.java",
- "components/cronet/android/api/src/org/chromium/net/QuicException.java",
- "components/cronet/android/api/src/org/chromium/net/RequestFinishedInfo.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProvider.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataSink.java",
- "components/cronet/android/api/src/org/chromium/net/UrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/UrlResponseInfo.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ByteArrayCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ContentTypeParametersParser.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetRequestCompletionListener.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetResponse.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ImplicitFlowControlCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/InMemoryTransformCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/JsonCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandler.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandlers.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/StringCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UrlRequestCallbacks.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeCronetController.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeCronetEngine.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeCronetProvider.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeUrlRequest.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeUrlResponse.java",
- "components/cronet/android/fake/java/org/chromium/net/test/ResponseMatcher.java",
- "components/cronet/android/fake/java/org/chromium/net/test/UrlResponseMatcher.java",
- "components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamNetworkException.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CallbackExceptionImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetEngineBase.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetEngineBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetExceptionImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetLibraryLoader.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetLogger.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetManifest.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetUploadDataStream.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java",
- "components/cronet/android/java/src/org/chromium/net/impl/InputStreamChannel.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngineBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaCronetProvider.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaUploadDataSinkBase.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaUrlRequest.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaUrlRequestUtils.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NativeCronetEngineBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NativeCronetEngineBuilderWithLibraryLoaderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NativeCronetProvider.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NetworkExceptionImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NoOpLogger.java",
- "components/cronet/android/java/src/org/chromium/net/impl/Preconditions.java",
- "components/cronet/android/java/src/org/chromium/net/impl/QuicExceptionImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/RequestFinishedInfoImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBase.java",
- "components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/UrlResponseInfoImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/UserAgent.java",
- "components/cronet/android/java/src/org/chromium/net/impl/VersionSafeCallbacks.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetBufferedOutputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetChunkedOutputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetFixedModeOutputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLStreamHandler.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetInputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetOutputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetURLStreamHandlerFactory.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/MessageLoop.java",
- "net/android/java/src/org/chromium/net/AndroidCertVerifyResult.java",
- "net/android/java/src/org/chromium/net/AndroidKeyStore.java",
- "net/android/java/src/org/chromium/net/AndroidNetworkLibrary.java",
- "net/android/java/src/org/chromium/net/AndroidTrafficStats.java",
- "net/android/java/src/org/chromium/net/ChromiumNetworkAdapter.java",
- "net/android/java/src/org/chromium/net/DnsStatus.java",
- "net/android/java/src/org/chromium/net/GURLUtils.java",
- "net/android/java/src/org/chromium/net/HttpNegotiateAuthenticator.java",
- "net/android/java/src/org/chromium/net/HttpNegotiateConstants.java",
- "net/android/java/src/org/chromium/net/HttpUtil.java",
- "net/android/java/src/org/chromium/net/MimeTypeFilter.java",
- "net/android/java/src/org/chromium/net/NetStringUtil.java",
- "net/android/java/src/org/chromium/net/NetworkActiveNotifier.java",
- "net/android/java/src/org/chromium/net/NetworkChangeNotifier.java",
- "net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java",
- "net/android/java/src/org/chromium/net/NetworkTrafficAnnotationTag.java",
- "net/android/java/src/org/chromium/net/ProxyBroadcastReceiver.java",
- "net/android/java/src/org/chromium/net/ProxyChangeListener.java",
- "net/android/java/src/org/chromium/net/RegistrationPolicyAlwaysRegister.java",
- "net/android/java/src/org/chromium/net/RegistrationPolicyApplicationStatus.java",
- "net/android/java/src/org/chromium/net/ThreadStatsUid.java",
- "net/android/java/src/org/chromium/net/X509Util.java",
- "url/android/java/src/org/chromium/url/IDNStringUtil.java",
- ],
- cmd: "current_dir=`basename \\`pwd\\``; " +
- "for f in $(in); " +
- "do " +
- "echo \"../$$current_dir/$$f\" >> $(genDir)/java.sources; " +
- "done; " +
- "python3 $(location base/android/jni_generator/jni_registration_generator.py) --srcjar-path " +
- "$(genDir)/components/cronet/android/cronet_jni_registration.srcjar " +
- "--depfile " +
- "$(genDir)/components/cronet/android/cronet_jni_registration.d " +
- "--sources-files " +
- "$(genDir)/java.sources " +
- "--include_test_only " +
- "--use_proxy_hash " +
- "--header-path " +
- "$(genDir)/components/cronet/android/cronet_jni_registration.h " +
- "--manual_jni_registration " +
- " " +
- " " +
- ";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " +
- "$(genDir)/components/cronet/android/cronet_jni_registration.h",
- out: [
- "components/cronet/android/cronet_jni_registration.h",
- "components/cronet/android/cronet_jni_registration.srcjar",
- ],
- tool_files: [
- "base/android/jni_generator/jni_generator.py",
- "base/android/jni_generator/jni_registration_generator.py",
- "build/android/gyp/util/__init__.py",
- "build/android/gyp/util/build_utils.py",
- "build/gn_helpers.py",
- ],
- apex_available: [
- "com.android.tethering",
- ],
-}
-
-// GN: //components/cronet/android:cronet_jni_registration__android_x86_64
-cc_genrule {
- name: "cronet_aml_components_cronet_android_cronet_jni_registration__android_x86_64",
- srcs: [
- "base/android/java/src/org/chromium/base/ActivityState.java",
- "base/android/java/src/org/chromium/base/ApiCompatibilityUtils.java",
- "base/android/java/src/org/chromium/base/ApkAssets.java",
- "base/android/java/src/org/chromium/base/ApplicationStatus.java",
- "base/android/java/src/org/chromium/base/BaseFeatureList.java",
- "base/android/java/src/org/chromium/base/BuildInfo.java",
- "base/android/java/src/org/chromium/base/BundleUtils.java",
- "base/android/java/src/org/chromium/base/ByteArrayGenerator.java",
- "base/android/java/src/org/chromium/base/Callback.java",
- "base/android/java/src/org/chromium/base/CallbackController.java",
- "base/android/java/src/org/chromium/base/CollectionUtil.java",
- "base/android/java/src/org/chromium/base/CommandLine.java",
- "base/android/java/src/org/chromium/base/CommandLineInitUtil.java",
- "base/android/java/src/org/chromium/base/Consumer.java",
- "base/android/java/src/org/chromium/base/ContentUriUtils.java",
- "base/android/java/src/org/chromium/base/ContextUtils.java",
- "base/android/java/src/org/chromium/base/CpuFeatures.java",
- "base/android/java/src/org/chromium/base/DiscardableReferencePool.java",
- "base/android/java/src/org/chromium/base/EarlyTraceEvent.java",
- "base/android/java/src/org/chromium/base/EventLog.java",
- "base/android/java/src/org/chromium/base/FeatureList.java",
- "base/android/java/src/org/chromium/base/Features.java",
- "base/android/java/src/org/chromium/base/FieldTrialList.java",
- "base/android/java/src/org/chromium/base/FileUtils.java",
- "base/android/java/src/org/chromium/base/Function.java",
- "base/android/java/src/org/chromium/base/ImportantFileWriterAndroid.java",
- "base/android/java/src/org/chromium/base/IntStringCallback.java",
- "base/android/java/src/org/chromium/base/IntentUtils.java",
- "base/android/java/src/org/chromium/base/JNIUtils.java",
- "base/android/java/src/org/chromium/base/JavaExceptionReporter.java",
- "base/android/java/src/org/chromium/base/JavaHandlerThread.java",
- "base/android/java/src/org/chromium/base/JniException.java",
- "base/android/java/src/org/chromium/base/JniStaticTestMocker.java",
- "base/android/java/src/org/chromium/base/LifetimeAssert.java",
- "base/android/java/src/org/chromium/base/LocaleUtils.java",
- "base/android/java/src/org/chromium/base/Log.java",
- "base/android/java/src/org/chromium/base/MathUtils.java",
- "base/android/java/src/org/chromium/base/MemoryPressureListener.java",
- "base/android/java/src/org/chromium/base/NativeLibraryLoadedStatus.java",
- "base/android/java/src/org/chromium/base/ObserverList.java",
- "base/android/java/src/org/chromium/base/PackageManagerUtils.java",
- "base/android/java/src/org/chromium/base/PackageUtils.java",
- "base/android/java/src/org/chromium/base/PathService.java",
- "base/android/java/src/org/chromium/base/PathUtils.java",
- "base/android/java/src/org/chromium/base/PiiElider.java",
- "base/android/java/src/org/chromium/base/PowerMonitor.java",
- "base/android/java/src/org/chromium/base/PowerMonitorForQ.java",
- "base/android/java/src/org/chromium/base/Predicate.java",
- "base/android/java/src/org/chromium/base/Promise.java",
- "base/android/java/src/org/chromium/base/RadioUtils.java",
- "base/android/java/src/org/chromium/base/StreamUtil.java",
- "base/android/java/src/org/chromium/base/StrictModeContext.java",
- "base/android/java/src/org/chromium/base/ThreadUtils.java",
- "base/android/java/src/org/chromium/base/TimeUtils.java",
- "base/android/java/src/org/chromium/base/TimezoneUtils.java",
- "base/android/java/src/org/chromium/base/TraceEvent.java",
- "base/android/java/src/org/chromium/base/UnguessableToken.java",
- "base/android/java/src/org/chromium/base/UnownedUserData.java",
- "base/android/java/src/org/chromium/base/UnownedUserDataHost.java",
- "base/android/java/src/org/chromium/base/UnownedUserDataKey.java",
- "base/android/java/src/org/chromium/base/UserData.java",
- "base/android/java/src/org/chromium/base/UserDataHost.java",
- "base/android/java/src/org/chromium/base/WrappedClassLoader.java",
- "base/android/java/src/org/chromium/base/annotations/AccessedByNative.java",
- "base/android/java/src/org/chromium/base/annotations/CalledByNative.java",
- "base/android/java/src/org/chromium/base/annotations/CalledByNativeForTesting.java",
- "base/android/java/src/org/chromium/base/annotations/CalledByNativeUnchecked.java",
- "base/android/java/src/org/chromium/base/annotations/JNIAdditionalImport.java",
- "base/android/java/src/org/chromium/base/annotations/JNINamespace.java",
- "base/android/java/src/org/chromium/base/annotations/JniIgnoreNatives.java",
- "base/android/java/src/org/chromium/base/annotations/NativeClassQualifiedName.java",
- "base/android/java/src/org/chromium/base/annotations/NativeMethods.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForM.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForN.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForO.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForOMR1.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForP.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForQ.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForR.java",
- "base/android/java/src/org/chromium/base/compat/ApiHelperForS.java",
- "base/android/java/src/org/chromium/base/jank_tracker/DummyJankTracker.java",
- "base/android/java/src/org/chromium/base/jank_tracker/FrameMetrics.java",
- "base/android/java/src/org/chromium/base/jank_tracker/FrameMetricsListener.java",
- "base/android/java/src/org/chromium/base/jank_tracker/FrameMetricsStore.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankActivityTracker.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankMetricCalculator.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankMetricUMARecorder.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankMetrics.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankReportingRunnable.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankReportingScheduler.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankScenario.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankTracker.java",
- "base/android/java/src/org/chromium/base/jank_tracker/JankTrackerImpl.java",
- "base/android/java/src/org/chromium/base/library_loader/LegacyLinker.java",
- "base/android/java/src/org/chromium/base/library_loader/Linker.java",
- "base/android/java/src/org/chromium/base/library_loader/LinkerJni.java",
- "base/android/java/src/org/chromium/base/library_loader/LoaderErrors.java",
- "base/android/java/src/org/chromium/base/library_loader/ModernLinker.java",
- "base/android/java/src/org/chromium/base/library_loader/ModernLinkerJni.java",
- "base/android/java/src/org/chromium/base/library_loader/NativeLibraryPreloader.java",
- "base/android/java/src/org/chromium/base/library_loader/ProcessInitException.java",
- "base/android/java/src/org/chromium/base/lifetime/DestroyChecker.java",
- "base/android/java/src/org/chromium/base/lifetime/Destroyable.java",
- "base/android/java/src/org/chromium/base/memory/JavaHeapDumpGenerator.java",
- "base/android/java/src/org/chromium/base/memory/MemoryPressureCallback.java",
- "base/android/java/src/org/chromium/base/memory/MemoryPressureMonitor.java",
- "base/android/java/src/org/chromium/base/memory/MemoryPressureUma.java",
- "base/android/java/src/org/chromium/base/memory/MemoryPurgeManager.java",
- "base/android/java/src/org/chromium/base/metrics/CachingUmaRecorder.java",
- "base/android/java/src/org/chromium/base/metrics/NativeUmaRecorder.java",
- "base/android/java/src/org/chromium/base/metrics/NoopUmaRecorder.java",
- "base/android/java/src/org/chromium/base/metrics/RecordHistogram.java",
- "base/android/java/src/org/chromium/base/metrics/RecordUserAction.java",
- "base/android/java/src/org/chromium/base/metrics/ScopedSysTraceEvent.java",
- "base/android/java/src/org/chromium/base/metrics/StatisticsRecorderAndroid.java",
- "base/android/java/src/org/chromium/base/metrics/TimingMetric.java",
- "base/android/java/src/org/chromium/base/metrics/UmaRecorder.java",
- "base/android/java/src/org/chromium/base/metrics/UmaRecorderHolder.java",
- "base/android/java/src/org/chromium/base/multidex/ChromiumMultiDexInstaller.java",
- "base/android/java/src/org/chromium/base/process_launcher/BindService.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildConnectionAllocator.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildProcessConnection.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildProcessConstants.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildProcessLauncher.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildProcessServiceDelegate.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildServiceConnection.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionDelegate.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionFactory.java",
- "base/android/java/src/org/chromium/base/process_launcher/ChildServiceConnectionImpl.java",
- "base/android/java/src/org/chromium/base/process_launcher/FileDescriptorInfo.java",
- "base/android/java/src/org/chromium/base/supplier/BooleanSupplier.java",
- "base/android/java/src/org/chromium/base/supplier/DestroyableObservableSupplier.java",
- "base/android/java/src/org/chromium/base/supplier/ObservableSupplier.java",
- "base/android/java/src/org/chromium/base/supplier/ObservableSupplierImpl.java",
- "base/android/java/src/org/chromium/base/supplier/OneShotCallback.java",
- "base/android/java/src/org/chromium/base/supplier/OneshotSupplier.java",
- "base/android/java/src/org/chromium/base/supplier/OneshotSupplierImpl.java",
- "base/android/java/src/org/chromium/base/supplier/Supplier.java",
- "base/android/java/src/org/chromium/base/supplier/UnownedUserDataSupplier.java",
- "base/android/java/src/org/chromium/base/task/AsyncTask.java",
- "base/android/java/src/org/chromium/base/task/BackgroundOnlyAsyncTask.java",
- "base/android/java/src/org/chromium/base/task/ChainedTasks.java",
- "base/android/java/src/org/chromium/base/task/ChoreographerTaskRunner.java",
- "base/android/java/src/org/chromium/base/task/ChromeThreadPoolExecutor.java",
- "base/android/java/src/org/chromium/base/task/DefaultTaskExecutor.java",
- "base/android/java/src/org/chromium/base/task/PostTask.java",
- "base/android/java/src/org/chromium/base/task/SequencedTaskRunner.java",
- "base/android/java/src/org/chromium/base/task/SequencedTaskRunnerImpl.java",
- "base/android/java/src/org/chromium/base/task/SerialExecutor.java",
- "base/android/java/src/org/chromium/base/task/SingleThreadTaskRunner.java",
- "base/android/java/src/org/chromium/base/task/SingleThreadTaskRunnerImpl.java",
- "base/android/java/src/org/chromium/base/task/TaskExecutor.java",
- "base/android/java/src/org/chromium/base/task/TaskRunner.java",
- "base/android/java/src/org/chromium/base/task/TaskRunnerImpl.java",
- "base/android/java/src/org/chromium/base/task/TaskTraits.java",
- "base/android/java/src/org/chromium/base/task/TaskTraitsExtensionDescriptor.java",
- "build/android/java/src/org/chromium/build/annotations/AlwaysInline.java",
- "build/android/java/src/org/chromium/build/annotations/CheckDiscard.java",
- "build/android/java/src/org/chromium/build/annotations/DoNotClassMerge.java",
- "build/android/java/src/org/chromium/build/annotations/DoNotInline.java",
- "build/android/java/src/org/chromium/build/annotations/IdentifierNameString.java",
- "build/android/java/src/org/chromium/build/annotations/MainDex.java",
- "build/android/java/src/org/chromium/build/annotations/MockedInTests.java",
- "build/android/java/src/org/chromium/build/annotations/UsedByReflection.java",
- "components/cronet/android/api/src/org/chromium/net/BidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/CallbackException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/CronetException.java",
- "components/cronet/android/api/src/org/chromium/net/CronetProvider.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalBidirectionalStream.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalCronetEngine.java",
- "components/cronet/android/api/src/org/chromium/net/ExperimentalUrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/ICronetEngineBuilder.java",
- "components/cronet/android/api/src/org/chromium/net/InlineExecutionProhibitedException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkException.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityRttListener.java",
- "components/cronet/android/api/src/org/chromium/net/NetworkQualityThroughputListener.java",
- "components/cronet/android/api/src/org/chromium/net/QuicException.java",
- "components/cronet/android/api/src/org/chromium/net/RequestFinishedInfo.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProvider.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/UploadDataSink.java",
- "components/cronet/android/api/src/org/chromium/net/UrlRequest.java",
- "components/cronet/android/api/src/org/chromium/net/UrlResponseInfo.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ByteArrayCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ContentTypeParametersParser.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetRequestCompletionListener.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/CronetResponse.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/ImplicitFlowControlCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/InMemoryTransformCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/JsonCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandler.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/RedirectHandlers.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/StringCronetCallback.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UploadDataProviders.java",
- "components/cronet/android/api/src/org/chromium/net/apihelpers/UrlRequestCallbacks.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeCronetController.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeCronetEngine.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeCronetProvider.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeUrlRequest.java",
- "components/cronet/android/fake/java/org/chromium/net/test/FakeUrlResponse.java",
- "components/cronet/android/fake/java/org/chromium/net/test/ResponseMatcher.java",
- "components/cronet/android/fake/java/org/chromium/net/test/UrlResponseMatcher.java",
- "components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/BidirectionalStreamNetworkException.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CallbackExceptionImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetBidirectionalStream.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetEngineBase.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetEngineBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetExceptionImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetLibraryLoader.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetLogger.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetLoggerFactory.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetManifest.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetMetrics.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetUploadDataStream.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequest.java",
- "components/cronet/android/java/src/org/chromium/net/impl/CronetUrlRequestContext.java",
- "components/cronet/android/java/src/org/chromium/net/impl/InputStreamChannel.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngine.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaCronetEngineBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaCronetProvider.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaUploadDataSinkBase.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaUrlRequest.java",
- "components/cronet/android/java/src/org/chromium/net/impl/JavaUrlRequestUtils.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NativeCronetEngineBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NativeCronetEngineBuilderWithLibraryLoaderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NativeCronetProvider.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NetworkExceptionImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/NoOpLogger.java",
- "components/cronet/android/java/src/org/chromium/net/impl/Preconditions.java",
- "components/cronet/android/java/src/org/chromium/net/impl/QuicExceptionImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/RequestFinishedInfoImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBase.java",
- "components/cronet/android/java/src/org/chromium/net/impl/UrlRequestBuilderImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/UrlResponseInfoImpl.java",
- "components/cronet/android/java/src/org/chromium/net/impl/UserAgent.java",
- "components/cronet/android/java/src/org/chromium/net/impl/VersionSafeCallbacks.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetBufferedOutputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetChunkedOutputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetFixedModeOutputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLConnection.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetHttpURLStreamHandler.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetInputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetOutputStream.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/CronetURLStreamHandlerFactory.java",
- "components/cronet/android/java/src/org/chromium/net/urlconnection/MessageLoop.java",
- "net/android/java/src/org/chromium/net/AndroidCertVerifyResult.java",
- "net/android/java/src/org/chromium/net/AndroidKeyStore.java",
- "net/android/java/src/org/chromium/net/AndroidNetworkLibrary.java",
- "net/android/java/src/org/chromium/net/AndroidTrafficStats.java",
- "net/android/java/src/org/chromium/net/ChromiumNetworkAdapter.java",
- "net/android/java/src/org/chromium/net/DnsStatus.java",
- "net/android/java/src/org/chromium/net/GURLUtils.java",
- "net/android/java/src/org/chromium/net/HttpNegotiateAuthenticator.java",
- "net/android/java/src/org/chromium/net/HttpNegotiateConstants.java",
- "net/android/java/src/org/chromium/net/HttpUtil.java",
- "net/android/java/src/org/chromium/net/MimeTypeFilter.java",
- "net/android/java/src/org/chromium/net/NetStringUtil.java",
- "net/android/java/src/org/chromium/net/NetworkActiveNotifier.java",
- "net/android/java/src/org/chromium/net/NetworkChangeNotifier.java",
- "net/android/java/src/org/chromium/net/NetworkChangeNotifierAutoDetect.java",
- "net/android/java/src/org/chromium/net/NetworkTrafficAnnotationTag.java",
- "net/android/java/src/org/chromium/net/ProxyBroadcastReceiver.java",
- "net/android/java/src/org/chromium/net/ProxyChangeListener.java",
- "net/android/java/src/org/chromium/net/RegistrationPolicyAlwaysRegister.java",
- "net/android/java/src/org/chromium/net/RegistrationPolicyApplicationStatus.java",
- "net/android/java/src/org/chromium/net/ThreadStatsUid.java",
- "net/android/java/src/org/chromium/net/X509Util.java",
- "url/android/java/src/org/chromium/url/IDNStringUtil.java",
- ],
- cmd: "current_dir=`basename \\`pwd\\``; " +
- "for f in $(in); " +
- "do " +
- "echo \"../$$current_dir/$$f\" >> $(genDir)/java.sources; " +
- "done; " +
- "python3 $(location base/android/jni_generator/jni_registration_generator.py) --srcjar-path " +
- "$(genDir)/components/cronet/android/cronet_jni_registration.srcjar " +
- "--depfile " +
- "$(genDir)/components/cronet/android/cronet_jni_registration.d " +
- "--sources-files " +
- "$(genDir)/java.sources " +
- "--include_test_only " +
- "--use_proxy_hash " +
- "--header-path " +
- "$(genDir)/components/cronet/android/cronet_jni_registration.h " +
- "--manual_jni_registration " +
- " " +
- " " +
- ";sed -i -e 's/OUT_SOONG_.TEMP_SBOX_.*_OUT/GEN/g' " +
- "$(genDir)/components/cronet/android/cronet_jni_registration.h",
- out: [
- "components/cronet/android/cronet_jni_registration.h",
"components/cronet/android/cronet_jni_registration.srcjar",
],
tool_files: [
@@ -8217,6 +7719,7 @@
"cronet_aml_url_url",
],
generated_headers: [
+ "cronet_aml_components_cronet_android_cronet_jni_registration",
"cronet_aml_third_party_metrics_proto_metrics_proto_gen_headers",
],
defaults: [
@@ -8268,7 +7771,6 @@
"cronet_aml_build_chromeos_buildflags__android_arm",
"cronet_aml_components_cronet_android_buildflags__android_arm",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_arm",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_arm",
"cronet_aml_components_cronet_cronet_buildflags__android_arm",
"cronet_aml_components_cronet_cronet_version_header_action__android_arm",
"cronet_aml_url_buildflags__android_arm",
@@ -8281,7 +7783,6 @@
"cronet_aml_build_chromeos_buildflags__android_arm64",
"cronet_aml_components_cronet_android_buildflags__android_arm64",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_arm64",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_arm64",
"cronet_aml_components_cronet_cronet_buildflags__android_arm64",
"cronet_aml_components_cronet_cronet_version_header_action__android_arm64",
"cronet_aml_url_buildflags__android_arm64",
@@ -8297,7 +7798,6 @@
"cronet_aml_build_chromeos_buildflags__android_x86",
"cronet_aml_components_cronet_android_buildflags__android_x86",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_x86",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_x86",
"cronet_aml_components_cronet_cronet_buildflags__android_x86",
"cronet_aml_components_cronet_cronet_version_header_action__android_x86",
"cronet_aml_url_buildflags__android_x86",
@@ -8313,7 +7813,6 @@
"cronet_aml_build_chromeos_buildflags__android_x86_64",
"cronet_aml_components_cronet_android_buildflags__android_x86_64",
"cronet_aml_components_cronet_android_cronet_jni_headers__android_x86_64",
- "cronet_aml_components_cronet_android_cronet_jni_registration__android_x86_64",
"cronet_aml_components_cronet_cronet_buildflags__android_x86_64",
"cronet_aml_components_cronet_cronet_version_header_action__android_x86_64",
"cronet_aml_url_buildflags__android_x86_64",
@@ -8322,6 +7821,178 @@
},
}
+// GN: //components/cronet/android:http_cache_type_java
+java_genrule {
+ name: "cronet_aml_components_cronet_android_http_cache_type_java",
+ cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
+ "$(out) " +
+ "$(location components/cronet/url_request_context_config.h)",
+ out: [
+ "components/cronet/android/http_cache_type_java.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/java_cpp_enum.py",
+ "components/cronet/url_request_context_config.h",
+ ],
+}
+
+// GN: //components/cronet/android:implementation_api_version
+java_genrule {
+ name: "cronet_aml_components_cronet_android_implementation_api_version",
+ cmd: "$(location build/util/version.py) -f " +
+ "$(location chrome/VERSION) " +
+ "-f " +
+ "$(location build/util/LASTCHANGE) " +
+ "-e " +
+ "API_LEVEL='20' " +
+ "-o " +
+ "$(out) " +
+ "$(location components/cronet/android/java/src/org/chromium/net/impl/ImplVersion.template)",
+ out: [
+ "components/cronet/android/templates/org/chromium/net/impl/ImplVersion.java",
+ ],
+ tool_files: [
+ "build/util/LASTCHANGE",
+ "build/util/android_chrome_version.py",
+ "build/util/version.py",
+ "chrome/VERSION",
+ "components/cronet/android/java/src/org/chromium/net/impl/ImplVersion.template",
+ ],
+}
+
+// GN: //components/cronet/android:integrated_mode_state
+java_genrule {
+ name: "cronet_aml_components_cronet_android_integrated_mode_state",
+ cmd: "$(location build/android/gyp/gcc_preprocess.py) --include-dirs " +
+ "["../../", "gen"] " +
+ "--output " +
+ "gen/components/cronet/android/integrated_mode_state.srcjar " +
+ "../../components/cronet/android/java/src/org/chromium/net/impl/IntegratedModeState.template",
+ out: [
+ "components/cronet/android/integrated_mode_state.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/gcc_preprocess.py",
+ "components/cronet/android/java/src/org/chromium/net/impl/IntegratedModeState.template",
+ ],
+}
+
+// GN: //components/cronet/android:interface_api_version
+java_genrule {
+ name: "cronet_aml_components_cronet_android_interface_api_version",
+ cmd: "$(location build/util/version.py) -f " +
+ "$(location chrome/VERSION) " +
+ "-f " +
+ "$(location build/util/LASTCHANGE) " +
+ "-e " +
+ "API_LEVEL='20' " +
+ "-o " +
+ "$(out) " +
+ "$(location components/cronet/android/api/src/org/chromium/net/ApiVersion.template)",
+ out: [
+ "components/cronet/android/templates/org/chromium/net/ApiVersion.java",
+ ],
+ tool_files: [
+ "build/util/LASTCHANGE",
+ "build/util/android_chrome_version.py",
+ "build/util/version.py",
+ "chrome/VERSION",
+ "components/cronet/android/api/src/org/chromium/net/ApiVersion.template",
+ ],
+}
+
+// GN: //components/cronet/android:load_states_list
+java_genrule {
+ name: "cronet_aml_components_cronet_android_load_states_list",
+ cmd: "$(location build/android/gyp/gcc_preprocess.py) --include-dirs " +
+ "["../../", "gen"] " +
+ "--output " +
+ "gen/components/cronet/android/load_states_list.srcjar " +
+ "../../components/cronet/android/java/src/org/chromium/net/impl/LoadState.template",
+ out: [
+ "components/cronet/android/load_states_list.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/gcc_preprocess.py",
+ "components/cronet/android/java/src/org/chromium/net/impl/LoadState.template",
+ ],
+}
+
+// GN: //components/cronet/android:net_idempotency_java
+java_genrule {
+ name: "cronet_aml_components_cronet_android_net_idempotency_java",
+ cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
+ "$(out) " +
+ "$(location net/base/idempotency.h)",
+ out: [
+ "components/cronet/android/net_idempotency_java.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/java_cpp_enum.py",
+ "net/base/idempotency.h",
+ ],
+}
+
+// GN: //components/cronet/android:net_request_priority_java
+java_genrule {
+ name: "cronet_aml_components_cronet_android_net_request_priority_java",
+ cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
+ "$(out) " +
+ "$(location net/base/request_priority.h)",
+ out: [
+ "components/cronet/android/net_request_priority_java.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/java_cpp_enum.py",
+ "net/base/request_priority.h",
+ ],
+}
+
+// GN: //components/cronet/android:network_quality_observation_source_java
+java_genrule {
+ name: "cronet_aml_components_cronet_android_network_quality_observation_source_java",
+ cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
+ "$(out) " +
+ "$(location net/nqe/network_quality_observation_source.h)",
+ out: [
+ "components/cronet/android/network_quality_observation_source_java.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/java_cpp_enum.py",
+ "net/nqe/network_quality_observation_source.h",
+ ],
+}
+
+// GN: //components/cronet/android:rtt_throughput_values_java
+java_genrule {
+ name: "cronet_aml_components_cronet_android_rtt_throughput_values_java",
+ cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
+ "$(out) " +
+ "$(location net/nqe/network_quality.h)",
+ out: [
+ "components/cronet/android/rtt_throughput_values_java.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/java_cpp_enum.py",
+ "net/nqe/network_quality.h",
+ ],
+}
+
+// GN: //components/cronet/android:url_request_error_java
+java_genrule {
+ name: "cronet_aml_components_cronet_android_url_request_error_java",
+ cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
+ "$(out) " +
+ "$(location components/cronet/android/url_request_error.h)",
+ out: [
+ "components/cronet/android/url_request_error_java.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/java_cpp_enum.py",
+ "components/cronet/android/url_request_error.h",
+ ],
+}
+
// GN: //components/cronet:cronet_buildflags__android_arm
cc_genrule {
name: "cronet_aml_components_cronet_cronet_buildflags__android_arm",
@@ -8594,7 +8265,6 @@
"$(location chrome/VERSION) " +
"-e " +
"VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " +
- " " +
"-o " +
"$(out) " +
"$(location components/cronet/version.h.in)",
@@ -8620,7 +8290,6 @@
"$(location chrome/VERSION) " +
"-e " +
"VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " +
- " " +
"-o " +
"$(out) " +
"$(location components/cronet/version.h.in)",
@@ -8646,7 +8315,6 @@
"$(location chrome/VERSION) " +
"-e " +
"VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " +
- " " +
"-o " +
"$(out) " +
"$(location components/cronet/version.h.in)",
@@ -8672,7 +8340,6 @@
"$(location chrome/VERSION) " +
"-e " +
"VERSION_FULL='\"%s.%s.%s.%s\" % (MAJOR,MINOR,BUILD,PATCH)' " +
- " " +
"-o " +
"$(out) " +
"$(location components/cronet/version.h.in)",
@@ -10080,6 +9747,50 @@
],
}
+// GN: //net/android:net_android_java_enums_srcjar
+java_genrule {
+ name: "cronet_aml_net_android_net_android_java_enums_srcjar",
+ srcs: [
+ "net/android/network_change_notifier_android.cc",
+ "net/android/traffic_stats.cc",
+ "net/socket/socket_tag.cc",
+ ],
+ cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
+ "$(out) " +
+ "$(location net/base/network_change_notifier.h) " +
+ "$(location net/socket/socket_tag.cc) " +
+ "$(location net/android/cert_verify_result_android.h) " +
+ "$(location net/android/keystore.h) " +
+ "$(location net/android/network_change_notifier_android.cc) " +
+ "$(location net/android/traffic_stats.cc)",
+ out: [
+ "net/android/net_android_java_enums_srcjar.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/java_cpp_enum.py",
+ "net/android/cert_verify_result_android.h",
+ "net/android/keystore.h",
+ "net/base/network_change_notifier.h",
+ ],
+}
+
+// GN: //net/android:net_errors_java
+java_genrule {
+ name: "cronet_aml_net_android_net_errors_java",
+ cmd: "$(location build/android/gyp/gcc_preprocess.py) --include-dirs " +
+ "["../../", "gen"] " +
+ "--output " +
+ "gen/net/android/net_errors_java.srcjar " +
+ "../../net/android/java/NetError.template",
+ out: [
+ "net/android/net_errors_java.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/gcc_preprocess.py",
+ "net/android/java/NetError.template",
+ ],
+}
+
// GN: //net/base/registry_controlled_domains:registry_controlled_domains__android_arm
cc_genrule {
name: "cronet_aml_net_base_registry_controlled_domains_registry_controlled_domains__android_arm",
@@ -11371,6 +11082,21 @@
},
}
+// GN: //net:effective_connection_type_java
+java_genrule {
+ name: "cronet_aml_net_effective_connection_type_java",
+ cmd: "$(location build/android/gyp/java_cpp_enum.py) --srcjar " +
+ "$(out) " +
+ "$(location net/nqe/effective_connection_type.h)",
+ out: [
+ "net/effective_connection_type_java.srcjar",
+ ],
+ tool_files: [
+ "build/android/gyp/java_cpp_enum.py",
+ "net/nqe/effective_connection_type.h",
+ ],
+}
+
// GN: //net/http:transport_security_state_generated_files
cc_object {
name: "cronet_aml_net_http_transport_security_state_generated_files",
diff --git a/tools/gn2bp/gen_android_bp b/tools/gn2bp/gen_android_bp
index 10fc1a8..ce71938 100755
--- a/tools/gn2bp/gen_android_bp
+++ b/tools/gn2bp/gen_android_bp
@@ -397,15 +397,12 @@
return write_blueprint_key_value(output, name, value, sort)
def is_compiled(self):
- return self.type not in ('cc_genrule', 'filegroup', 'cc_defaults')
+ return self.type not in ('cc_genrule', 'filegroup', 'java_genrule')
def is_genrule(self):
return self.type == "cc_genrule"
def has_input_files(self):
- for target in self.target.values():
- if len(target.srcs) > 0:
- return True
return len(self.srcs) > 0 or any([len(target.srcs) > 0 for target in self.target.values()])
def merge_attribute(self, key, source_module, allowed_archs, source_key = None):
@@ -630,19 +627,35 @@
# - flags (--flag)
# - value args (--arg value)
# - list args (--arg value1 --arg value2)
+ # Note that the set of list args contains the set of value args.
+ # value args must have exactly one arg value pair but list args could have one arg value pair.
+ # This is because list args with one arg value pair and value args can not be distinguished only
+ # from the desc.json
# Some functions provide special implementations for each type, while others
# work on all of them.
def _has_arg(self, arg):
return arg in self.target.args
- # Whether an arg has multiple occurences (e.g. see argparse action='append')
- def _is_list_arg(self, arg):
- return operator.countOf(arg, self.target.args) > 1
+ def _get_arg_indices(self, target_arg):
+ return [i for i, arg in enumerate(self.target.args) if arg == target_arg]
+ # Whether an arg value pair appears once or more times
+ def _is_list_arg(self, arg):
+ indices = self._get_arg_indices(arg)
+ return len(indices) > 0 and all([not self.target.args[i + 1].startswith('--') for i in indices])
+
+ def _update_list_arg(self, arg, func, throw_if_absent = True):
+ if self._should_fail_silently(arg, throw_if_absent):
+ return
+ assert(self._is_list_arg(arg))
+ indices = self._get_arg_indices(arg)
+ for i in indices:
+ self._set_arg_at(i + 1, func(self.target.args[i + 1]))
+
+ # Whether an arg value pair appears exactly once
def _is_value_arg(self, arg):
- # TODO: we'll probably need a set of helper functions to deal with append
- # args as well.
- assert(not self._is_list_arg(arg))
+ if operator.countOf(self.target.args, arg) != 1:
+ return False
i = self.target.args.index(arg)
return not self.target.args[i + 1].startswith('--')
@@ -683,6 +696,12 @@
self.target.args.append(arg)
self.target.args.append(value)
+ def _sanitize_filepath_with_location_tag(self, arg):
+ if arg.startswith('../../'):
+ arg = self._sanitize_filepath(arg)
+ arg = self._add_location_tag(arg)
+ return arg
+
# wrap filename in location tag.
def _add_location_tag(self, filename):
return '$(location %s)' % filename
@@ -697,6 +716,10 @@
filepath = re.sub('^gen', '$(genDir)', filepath)
return filepath
+ # Iterate through all the args and apply function
+ def _update_all_args(self, func):
+ self.target.args = [func(arg) for arg in self.target.args]
+
def get_args(self):
return self.target.args
@@ -712,6 +735,13 @@
return super().get_args()
class JniGeneratorSanitizer(BaseActionSanitizer):
+ def _add_location_tag_to_filepath(self, arg):
+ if not arg.endswith('.class'):
+ # --input_file supports both .class specifiers or source files as arguments.
+ # Only source files need to be wrapped inside a $(location <label>) tag.
+ arg = self._add_location_tag(arg)
+ return arg
+
def get_args(self):
self._update_value_arg('--jar_file', self._sanitize_filepath, False)
self._update_value_arg('--jar_file', self._add_location_tag, False)
@@ -720,8 +750,45 @@
self._update_value_arg('--output_dir', self._sanitize_filepath)
self._update_value_arg('--includes', self._sanitize_filepath, False)
self._delete_value_arg('--prev_output_dir', False)
+ self._update_list_arg('--input_file', self._sanitize_filepath)
+ self._update_list_arg('--input_file', self._add_location_tag_to_filepath)
return super().get_args()
+class JniRegistrationGeneratorSanitizer(BaseActionSanitizer):
+ def get_args(self):
+ self._update_value_arg('--depfile', self._sanitize_filepath)
+ self._update_value_arg('--srcjar-path', self._sanitize_filepath)
+ self._update_value_arg('--header-path', self._sanitize_filepath)
+ self._set_value_arg('--sources-files', '$(genDir)/java.sources')
+ # update_jni_registration_module removes them from the srcs of the module
+ # It might be better to remove sources by '--sources-exclusions'
+ self._delete_value_arg('--sources-exclusions')
+ return super().get_args()
+
+class VersionSanitizer(BaseActionSanitizer):
+ def _sanitize_eval(self):
+ assert (self._is_value_arg('-e'))
+ # arg for -e EVAL option should be passed in -e PATCH_HI=int(PATCH)//256 format.
+ index = self.target.args.index('-e')
+ value = '%s=\'%s\'' % (self.target.args[index + 1], self.target.args[index + 2])
+ # escape '"' in the value
+ value = value.replace('"', r'\"')
+ self._set_arg_at(index + 1, value)
+ self.target.args.pop(index + 2)
+
+ def get_args(self):
+ self._set_value_arg('-o', '$(out)')
+ # args for the version.py contain file path without leading --arg key. So apply sanitize
+ # function for all the args.
+ self._update_all_args(self._sanitize_filepath_with_location_tag)
+ self._sanitize_eval()
+ return super().get_args()
+
+class JavaCppEnumSanitizer(BaseActionSanitizer):
+ def get_args(self):
+ self._update_all_args(self._sanitize_filepath_with_location_tag)
+ self._set_value_arg('--srcjar', '$(out)')
+ return super().get_args()
def get_action_sanitizer(target):
if target.script == "//build/write_buildflag_header.py":
@@ -730,6 +797,12 @@
return WriteBuildDateHeaderSanitizer(target)
elif target.script == '//base/android/jni_generator/jni_generator.py':
return JniGeneratorSanitizer(target)
+ elif target.script == '//base/android/jni_generator/jni_registration_generator.py':
+ return JniRegistrationGeneratorSanitizer(target)
+ elif target.script == "//build/util/version.py":
+ return VersionSanitizer(target)
+ elif target.script == "//build/android/gyp/java_cpp_enum.py":
+ return JavaCppEnumSanitizer(target)
else:
# TODO: throw exception here once all script hacks have been converted.
return BaseActionSanitizer(target)
@@ -765,29 +838,23 @@
new_args.append(arg)
target.args = new_args
- return create_action_module(blueprint, target)
+ return create_action_module(blueprint, target, 'cc_genrule')
-def create_action_module(blueprint, target):
+def create_action_module(blueprint, target, type):
bp_module_name = label_to_module_name(target.name)
- module = Module('cc_genrule', bp_module_name, target.name)
+ module = Module(type, bp_module_name, target.name)
sanitizer = get_action_sanitizer(target)
target.args = sanitizer.get_args()
if target.script == '//base/android/jni_generator/jni_generator.py':
- for i, val in enumerate(target.args):
- if val == '--input_file':
- # --input_file supports both .class specifiers or source files as arguments.
- # Only source files need to be wrapped inside a $(location <label>) tag.
- if re.match('.*\.class$', target.args[i + 1]):
- continue
- # replace --input_file ../../... with --input_file $(location ...)
- # TODO: put inside function
- filename = re.sub('^\.\./\.\./', '', target.args[i + 1])
- target.args[i + 1] = '$(location %s)' % filename
# fix target.output directory to match #include statements.
target.outputs = [re.sub('^jni_headers/', '', out) for out in target.outputs]
+ # android_jar.classes should be part of the tools as it list implicit classes
+ # for the script to generate JNI headers.
+ module.tool_files.add("base/android/jni_generator/android_jar.classes")
+
elif target.script == '//base/android/jni_generator/jni_registration_generator.py':
# jni_registration_generator.py pulls in some config dependencies that we
# do not handle. Remove them.
@@ -795,16 +862,6 @@
target.deps.clear()
target.inputs = [file for file in target.inputs if not file.startswith('//out/')]
- for i, val in enumerate(target.args):
- if val in ['--depfile', '--srcjar-path', '--header-path']:
- target.args[i + 1] = re.sub('^gen', '$(genDir)', target.args[i + 1])
- if val == '--sources-files':
- target.args[i + 1] = '$(genDir)/java.sources'
- elif val == '--sources-exclusions':
- # update_jni_registration_module removes them from the srcs of the module
- # It might be better to remove sources by '--sources-exclusions'
- target.args[i] = ''
- target.args[i + 1] = ''
elif target.script == "//net/tools/dafsa/make_dafsa.py":
# This script generates .cc files but source (registry_controlled_domain.cc) in the target that
# depends on this target includes .cc file this script generates.
@@ -812,16 +869,6 @@
elif target.script == "//build/util/version.py":
# android_chrome_version.py is not specified in anywhere but version.py imports this file
module.tool_files.add('build/util/android_chrome_version.py')
- for i, val in enumerate(target.args):
- if val.startswith('../../'):
- filename = re.sub('^\.\./\.\./', '', val)
- target.args[i] = '$(location %s)' % filename
- elif val == '-e':
- # arg for -e EVAL option should be passed in -e PATCH_HI=int(PATCH)//256 format.
- target.args[i + 1] = '%s=\'%s\'' % (target.args[i + 1], target.args[i + 2])
- target.args[i + 2] = ''
- elif val == '-o':
- target.args[i + 1] = '$(out)'
script = gn_utils.label_to_path(target.script)
module.tool_files.add(script)
@@ -834,12 +881,6 @@
# Replace {{response_file_contents}} with /dev/stdin
target.args = ['/dev/stdin' if it == response_file else it for it in target.args]
- # escape " and \$ in target.args.
- # once all actions are properly implemented, this may not be necessary anymore.
- # TODO: is this the right place to do this?
- target.args = [arg.replace('"', r'\"') for arg in target.args]
- target.args = [arg.replace(r'\$', r'\\$') for arg in target.args]
-
# put all args on a new line for better diffs.
NEWLINE = ' " +\n "'
arg_string = NEWLINE.join(target.args)
@@ -868,11 +909,7 @@
module.out.update(target.outputs)
- if target.script == "//base/android/jni_generator/jni_generator.py":
- # android_jar.classes should be part of the tools as it list implicit classes
- # for the script to generate JNI headers.
- module.tool_files.add("base/android/jni_generator/android_jar.classes")
- elif target.script == '//base/android/jni_generator/jni_registration_generator.py':
+ if target.script == '//base/android/jni_generator/jni_registration_generator.py':
# jni_registration_generator.py doesn't work with python2
module.cmd = "python3 " + module.cmd
# Path in the original sources file does not work in genrule.
@@ -935,7 +972,6 @@
for d in include_dirs
if not re.match('^//out/.*', d)])
-
def create_modules_from_target(blueprint, gn, gn_target_name):
"""Generate module(s) for a given GN target.
@@ -975,7 +1011,15 @@
if module is None:
return None
elif target.type == 'action':
- module = create_action_module(blueprint, target)
+ if gn_utils.is_java_action(target.script, target.outputs) and \
+ target.name != "//components/cronet/android:cronet_jni_registration":
+ # This is a cc_genrule that generates both a c++ header file and
+ # srcjar for java. Treat it as a cc_genrule for the time being while
+ # making anothe deep copy of the module and append _java to it for
+ # the java_library.
+ module = create_action_module(blueprint, target, 'java_genrule')
+ else:
+ module = create_action_module(blueprint, target, 'cc_genrule')
elif target.type == 'action_foreach':
module = create_action_foreach_modules(blueprint, target)
elif target.type == 'copy':
@@ -1154,6 +1198,14 @@
bp_module_name = module_prefix + 'java'
module = Module('java_library', bp_module_name, '//gn:java')
module.srcs.update([gn_utils.label_to_path(source) for source in gn.java_sources])
+ for dep in gn.java_actions:
+ dep_module = create_modules_from_target(blueprint, gn, dep)
+ if "cronet_jni_registration" in dep_module.name:
+ dep_module = copy.deepcopy(dep_module)
+ dep_module.name += "_java"
+ dep_module.type = 'java_genrule'
+ dep_module.out = [out for out in dep_module.out if out.endswith(".srcjar")]
+ blueprint.add_module(dep_module)
blueprint.add_module(module)
def update_jni_registration_module(module, gn):
diff --git a/tools/gn2bp/gn_utils.py b/tools/gn2bp/gn_utils.py
index 80c90f6..8f33ca2 100644
--- a/tools/gn2bp/gn_utils.py
+++ b/tools/gn2bp/gn_utils.py
@@ -30,7 +30,20 @@
BUILDFLAGS_TARGET = '//gn:gen_buildflags'
GEN_VERSION_TARGET = '//src/base:version_gen_h'
LINKER_UNIT_TYPES = ('executable', 'shared_library', 'static_library', 'source_set')
-
+JAVA_BANNED_SCRIPTS = [
+ "//build/android/gyp/turbine.py",
+ "//build/android/gyp/compile_java.py",
+ "//build/android/gyp/filter_zip.py",
+ "//build/android/gyp/dex.py",
+ "//build/android/gyp/write_build_config.py",
+ "//build/android/gyp/create_r_java.py",
+ "//build/android/gyp/ijar.py",
+ "//build/android/gyp/create_r_java.py",
+ "//build/android/gyp/bytecode_processor.py",
+ "//build/android/gyp/prepare_resources.py",
+ "//build/android/gyp/aar.py",
+ "//build/android/gyp/zip.py",
+]
# TODO(primiano): investigate these, they require further componentization.
ODR_VIOLATION_IGNORE_TARGETS = {
'//test/cts:perfetto_cts_deps',
@@ -72,6 +85,11 @@
def _is_java_source(src):
return os.path.splitext(src)[1] == '.java' and not src.startswith("//out/test/gen/")
+def is_java_action(script, outputs):
+ return (script != "" and script not in JAVA_BANNED_SCRIPTS) and any(
+ [file.endswith(".srcjar") or file.endswith(".java")
+ for file in outputs])
+
class GnParser(object):
"""A parser with some cleverness for GN json desc files
@@ -223,6 +241,7 @@
self.actions = {}
self.proto_libs = {}
self.java_sources = set()
+ self.java_actions = set()
def _get_response_file_contents(self, action_desc):
# response_file_contents are formatted as:
@@ -285,7 +304,9 @@
# genrule's do not allow to overload cmd per target OS / arch. Create a
# separate action for every architecture.
# Cover both action and action_foreach
- if type_.startswith('action'):
+ if type_.startswith('action') and \
+ not is_java_action(desc.get("script", ""), desc.get("outputs", [])):
+ # Don't meddle with the java actions name
target_name += '__' + arch
target = self.all_targets.get(target_name)
@@ -319,6 +340,14 @@
elif target.type in LINKER_UNIT_TYPES:
self.linker_units[gn_target_name] = target
target.arch[arch].sources.update(desc.get('sources', []))
+ elif desc.get("script", "") in JAVA_BANNED_SCRIPTS or self._is_java_target(target):
+ # java_group identifies the group target generated by the android_library
+ # or java_library template. A java_group must not be added as a dependency, but sources are collected
+ log.debug('Found java target %s', target.name)
+ if target.type == "action":
+ # Convert java actions into java_group and keep the inputs for collection.
+ target.inputs.update(desc.get('inputs', []))
+ target.type = 'java_group'
elif target.type in ['action', 'action_foreach']:
self.actions[gn_target_name] = target
target.inputs.update(desc.get('inputs', []))
@@ -331,11 +360,6 @@
elif target.type == 'copy':
# TODO: copy rules are not currently implemented.
self.actions[gn_target_name] = target
- elif self._is_java_target(target):
- # java_group identifies the group target generated by the android_library
- # or java_library template. A java_group must not be added as a dependency, but sources are collected
- log.debug('Found java target %s', target.name)
- target.type = 'java_group'
# Default for 'public' is //* - all headers in 'sources' are public.
# TODO(primiano): if a 'public' section is specified (even if empty), then
@@ -402,6 +426,8 @@
log.debug('Adding java sources for %s', dep.name)
java_srcs = [src for src in dep.inputs if _is_java_source(src)]
self.java_sources.update(java_srcs)
+ if dep.type in ["action"] and target.type == "java_group":
+ self.java_actions.add(dep.name)
return target
def get_proto_exports(self, proto_desc):