Skip Cronet tests that call GetTaggedBytes() on P+ devices.

In Android P, /proc/net/xt_qtaguid/stats is no longer guaranteed to be
present, and has been replaced with eBPF Traffic Monitoring in netd. See:
https://source.android.com/devices/tech/datausage/ebpf-traffic-monitor

To read traffic statistics from netd, apps should use the API
NetworkStatsManager.queryDetailsForUidTag(). But this API does not provide
statistics for local traffic, only mobile and WiFi traffic, so it would not
work in tests that spin up a local server. So for now, GetTaggedBytes is
only supported on Android releases older than P.

Change-Id: Ida2b47624e1ac379799d00a21b8b41915579aece
Reviewed-on: https://chromium-review.googlesource.com/c/1470522
Commit-Queue: Paul Jensen <pauljensen@chromium.org>
Auto-Submit: Paul Jensen <pauljensen@chromium.org>
Reviewed-by: Peter Collingbourne <pcc@chromium.org>
Cr-Commit-Position: refs/heads/master@{#631850}
diff --git a/components/cronet/android/test/cronet_test_util.cc b/components/cronet/android/test/cronet_test_util.cc
index 00e06997..68563c1 100644
--- a/components/cronet/android/test/cronet_test_util.cc
+++ b/components/cronet/android/test/cronet_test_util.cc
@@ -111,6 +111,10 @@
       jcontext_adapter, base::Bind(&CleanupNetworkThreadOnNetworkThread));
 }
 
+jboolean JNI_CronetTestUtil_CanGetTaggedBytes(JNIEnv* env) {
+  return net::CanGetTaggedBytes();
+}
+
 jlong JNI_CronetTestUtil_GetTaggedBytes(JNIEnv* env,
                                         jint jexpected_tag) {
   return net::GetTaggedBytes(jexpected_tag);
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java
index 98654e5..33abd12 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/BidirectionalStreamTest.java
@@ -27,6 +27,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import org.chromium.base.Log;
 import org.chromium.base.test.BaseJUnit4ClassRunner;
 import org.chromium.base.test.util.DisabledTest;
 import org.chromium.base.test.util.Feature;
@@ -55,6 +56,8 @@
  */
 @RunWith(BaseJUnit4ClassRunner.class)
 public class BidirectionalStreamTest {
+    private static final String TAG = BidirectionalStreamTest.class.getSimpleName();
+
     @Rule
     public final CronetTestRule mTestRule = new CronetTestRule();
 
@@ -1586,6 +1589,10 @@
     @OnlyRunNativeCronet
     @RequiresMinApi(10) // Tagging support added in API level 10: crrev.com/c/chromium/src/+/937583
     public void testTagging() throws Exception {
+        if (!CronetTestUtil.nativeCanGetTaggedBytes()) {
+            Log.i(TAG, "Skipping test - GetTaggedBytes unsupported.");
+            return;
+        }
         String url = Http2TestServer.getEchoStreamUrl();
 
         // Test untagged requests are given tag 0.
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
index 77339a1..92a79f0 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/CronetUrlRequestTest.java
@@ -61,6 +61,8 @@
  */
 @RunWith(BaseJUnit4ClassRunner.class)
 public class CronetUrlRequestTest {
+    private static final String TAG = CronetUrlRequestTest.class.getSimpleName();
+
     // URL used for base tests.
     private static final String TEST_URL = "http://127.0.0.1:8000";
 
@@ -2327,6 +2329,10 @@
     @Feature({"Cronet"})
     @RequiresMinApi(9) // Tagging support added in API level 9: crrev.com/c/chromium/src/+/930086
     public void testTagging() throws Exception {
+        if (!CronetTestUtil.nativeCanGetTaggedBytes()) {
+            Log.i(TAG, "Skipping test - GetTaggedBytes unsupported.");
+            return;
+        }
         String url = NativeTestServer.getEchoMethodURL();
 
         // Test untagged requests are given tag 0.
diff --git a/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java
index 95350d0..5931625 100644
--- a/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java
+++ b/components/cronet/android/test/javatests/src/org/chromium/net/urlconnection/CronetHttpURLConnectionTest.java
@@ -22,6 +22,7 @@
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
+import org.chromium.base.Log;
 import org.chromium.base.test.BaseJUnit4ClassRunner;
 import org.chromium.base.test.util.Feature;
 import org.chromium.net.CronetEngine;
@@ -67,6 +68,8 @@
  */
 @RunWith(BaseJUnit4ClassRunner.class)
 public class CronetHttpURLConnectionTest {
+    private static final String TAG = CronetHttpURLConnectionTest.class.getSimpleName();
+
     @Rule
     public final CronetTestRule mTestRule = new CronetTestRule();
 
@@ -1359,6 +1362,10 @@
     @Feature({"Cronet"})
     @RequiresMinApi(9) // Tagging support added in API level 9: crrev.com/c/chromium/src/+/930086
     public void testTagging() throws Exception {
+        if (!CronetTestUtil.nativeCanGetTaggedBytes()) {
+            Log.i(TAG, "Skipping test - GetTaggedBytes unsupported.");
+            return;
+        }
         URL url = new URL(NativeTestServer.getEchoMethodURL());
 
         // Test untagged requests are given tag 0.
diff --git a/components/cronet/android/test/src/org/chromium/net/CronetTestUtil.java b/components/cronet/android/test/src/org/chromium/net/CronetTestUtil.java
index 0b6ea26..5bb884b 100644
--- a/components/cronet/android/test/src/org/chromium/net/CronetTestUtil.java
+++ b/components/cronet/android/test/src/org/chromium/net/CronetTestUtil.java
@@ -87,6 +87,11 @@
     }
 
     /**
+     * Returns whether the device supports calling nativeGetTaggedBytes().
+     */
+    public static native boolean nativeCanGetTaggedBytes();
+
+    /**
      * Query the system to find out how many bytes were received with tag
      * {@code expectedTag} for our UID.
      * @param expectedTag the tag to query for.