Merge "Add Cronet to the Tethering apex."
diff --git a/Cronet/tests/cts/src/android/net/http/cts/CronetUrlRequestTest.java b/Cronet/tests/cts/src/android/net/http/cts/CronetUrlRequestTest.java
index 2898f54..09f880b 100644
--- a/Cronet/tests/cts/src/android/net/http/cts/CronetUrlRequestTest.java
+++ b/Cronet/tests/cts/src/android/net/http/cts/CronetUrlRequestTest.java
@@ -23,6 +23,7 @@
 import android.content.Context;
 import android.net.ConnectivityManager;
 import android.net.http.cts.util.CronetCtsTestServer;
+import android.net.http.cts.util.TestStatusListener;
 import android.net.http.cts.util.TestUrlRequestCallback;
 import android.net.http.cts.util.TestUrlRequestCallback.ResponseStep;
 
@@ -32,6 +33,7 @@
 
 import org.chromium.net.CronetEngine;
 import org.chromium.net.UrlRequest;
+import org.chromium.net.UrlRequest.Status;
 import org.chromium.net.UrlResponseInfo;
 import org.junit.After;
 import org.junit.Before;
@@ -43,6 +45,7 @@
     private static final String TAG = CronetUrlRequestTest.class.getSimpleName();
 
     @NonNull private CronetEngine mCronetEngine;
+    @NonNull private TestUrlRequestCallback mCallback;
     @NonNull private ConnectivityManager mCm;
     @NonNull private CronetCtsTestServer mTestServer;
 
@@ -56,6 +59,7 @@
                 // .enableBrotli(true)
                 .enableQuic(true);
         mCronetEngine = builder.build();
+        mCallback = new TestUrlRequestCallback();
         mTestServer = new CronetCtsTestServer(context);
     }
 
@@ -73,21 +77,33 @@
         assertNotNull("This test requires a working Internet connection", mCm.getActiveNetwork());
     }
 
+    private UrlRequest buildUrlRequest(String url) {
+        return mCronetEngine.newUrlRequestBuilder(url, mCallback, mCallback.getExecutor()).build();
+    }
+
     @Test
     public void testUrlRequestGet_CompletesSuccessfully() throws Exception {
         assertHasTestableNetworks();
         String url = mTestServer.getSuccessUrl();
-        TestUrlRequestCallback callback = new TestUrlRequestCallback();
-        UrlRequest.Builder builder =
-                mCronetEngine.newUrlRequestBuilder(url, callback, callback.getExecutor());
-        builder.build().start();
+        UrlRequest request = buildUrlRequest(url);
+        request.start();
 
-        callback.expectCallback(ResponseStep.ON_SUCCEEDED);
+        mCallback.expectCallback(ResponseStep.ON_SUCCEEDED);
 
-        UrlResponseInfo info = callback.mResponseInfo;
+        UrlResponseInfo info = mCallback.mResponseInfo;
         assertEquals(
                 "Unexpected http status code from " + url + ".", 200, info.getHttpStatusCode());
         assertGreaterThan(
                 "Received byte from " + url + " is 0.", (int) info.getReceivedByteCount(), 0);
     }
+
+    @Test
+    public void testUrlRequestStatus_InvalidBeforeRequestStarts() throws Exception {
+        UrlRequest request = buildUrlRequest(mTestServer.getSuccessUrl());
+        // Calling before request is started should give Status.INVALID,
+        // since the native adapter is not created.
+        TestStatusListener statusListener = new TestStatusListener();
+        request.getStatus(statusListener);
+        statusListener.expectStatus(Status.INVALID);
+    }
 }
diff --git a/Cronet/tests/cts/src/android/net/http/cts/util/TestStatusListener.kt b/Cronet/tests/cts/src/android/net/http/cts/util/TestStatusListener.kt
index bcd9dd0..4d26ec0 100644
--- a/Cronet/tests/cts/src/android/net/http/cts/util/TestStatusListener.kt
+++ b/Cronet/tests/cts/src/android/net/http/cts/util/TestStatusListener.kt
@@ -18,7 +18,6 @@
 
 import java.util.concurrent.CompletableFuture
 import java.util.concurrent.TimeUnit
-import org.chromium.net.UrlRequest.Status
 import org.chromium.net.UrlRequest.StatusListener
 import org.junit.Assert.assertSame
 
@@ -33,7 +32,7 @@
     }
 
     /** Fails if the expected status is not the returned status */
-    fun expectStatus(expected: Status) {
+    fun expectStatus(expected: Int) {
         assertSame(expected, statusFuture.get(TIMEOUT_MS, TimeUnit.MILLISECONDS))
     }
 }